EPIX KIERAN FISHER FIGURED THE TRUE THE DEFINTION OF LIFE (In Desc.)

This is a satirical website. Don't take it Seriously. It's a joke.

2059 87285 Shares

Sunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunksunk

This is a satirical website. Don't take it Seriously. It's a joke.

loading Biewty

Most Popular

  1. 1

    a monkey escapes from the miami zoo and throws bananas from a tree Mario a monkey from the Miami Zoo has escaped last Friday from his cage when he escaped, he threw bananas at people from all over Los Angeles. This has led to a video called "banana rain going viral" right now this little criminal monkey is found in prison.

  2. 2

    octopus teaches math at harvard They hire octopus to teach math at harvard, the octopus is called arnold and it is said that he is paid 3000 dollars per class. here are some images