added some markdown explain, and code structure