split into many testable pieces. this may cause some more function call cost, but do not slow down rendering.
split into many testable pieces. this may cause some more function call cost, but do not slow down rendering.

cgvarela/lightncandy,cgvarela/lightncandy,vein1992/lightncandy,Southparkfan/lightncandy,zordius/lightncandy,jmgq/lightncandy,Corollarium/lightncandy,zordius/lightncandy,Corollarium/lightncandy,vein1992/lightncandy,jmgq/lightncandy,fadimko/lightncandy,Southparkfan/lightncandy,fadimko/lightncandy