- #define furrovineexport  
-   
- template<class T> 
- class TVector2; 
- template<class T> 
- class TVector3; 
- template<class T> 
- class TVector4; 
-   
- template<class T, unsigned one, unsigned two> 
- struct furrovineexport swizzler_two { 
-     T v[4];  
-     swizzler_two & operator= (const TVector2<T>& right) { 
-         v[one] = right.x; 
-         v[two] = right.y; 
-         return *this; 
-     } 
-     operator TVector3<T> () const { return TVector4<T>(v[one], v[two]); } 
- }; 
- template<class T, unsigned one, unsigned two, unsigned three> 
- struct furrovineexport swizzler_three { 
-     T v[4];  
-     swizzler_three& operator= (const TVector3<T>& right) { 
-         v[one] = right.x; 
-         v[two] = right.y; 
-         v[three] = right.z; 
-         return *this; 
-     } 
-     operator TVector3<T> () const { return TVector4<T>(v[one], v[two], v[three]); } 
- }; 
- template<class T, unsigned one, unsigned two, unsigned three, unsigned four> 
- struct furrovineexport swizzler_four { 
-     T v[4];  
-     operator TVector4<T> () const { return TVector4<T>(v[one], v[two], v[three], v[four]); } 
- }; 
-   
- int main() {} 
-   
				I2RlZmluZSBmdXJyb3ZpbmVleHBvcnQgCgp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBUVmVjdG9yMjsKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgVFZlY3RvcjM7CnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIFRWZWN0b3I0OwoKdGVtcGxhdGU8Y2xhc3MgVCwgdW5zaWduZWQgb25lLCB1bnNpZ25lZCB0d28+CnN0cnVjdCBmdXJyb3ZpbmVleHBvcnQgc3dpenpsZXJfdHdvIHsKICAgIFQgdls0XTsgCiAgICBzd2l6emxlcl90d28gJiBvcGVyYXRvcj0gKGNvbnN0IFRWZWN0b3IyPFQ+JiByaWdodCkgewogICAgICAgIHZbb25lXSA9IHJpZ2h0Lng7CiAgICAgICAgdlt0d29dID0gcmlnaHQueTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICBvcGVyYXRvciBUVmVjdG9yMzxUPiAoKSBjb25zdCB7IHJldHVybiBUVmVjdG9yNDxUPih2W29uZV0sIHZbdHdvXSk7IH0KfTsKdGVtcGxhdGU8Y2xhc3MgVCwgdW5zaWduZWQgb25lLCB1bnNpZ25lZCB0d28sIHVuc2lnbmVkIHRocmVlPgpzdHJ1Y3QgZnVycm92aW5lZXhwb3J0IHN3aXp6bGVyX3RocmVlIHsKICAgIFQgdls0XTsgCiAgICBzd2l6emxlcl90aHJlZSYgb3BlcmF0b3I9IChjb25zdCBUVmVjdG9yMzxUPiYgcmlnaHQpIHsKICAgICAgICB2W29uZV0gPSByaWdodC54OwogICAgICAgIHZbdHdvXSA9IHJpZ2h0Lnk7CiAgICAgICAgdlt0aHJlZV0gPSByaWdodC56OwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIG9wZXJhdG9yIFRWZWN0b3IzPFQ+ICgpIGNvbnN0IHsgcmV0dXJuIFRWZWN0b3I0PFQ+KHZbb25lXSwgdlt0d29dLCB2W3RocmVlXSk7IH0KfTsKdGVtcGxhdGU8Y2xhc3MgVCwgdW5zaWduZWQgb25lLCB1bnNpZ25lZCB0d28sIHVuc2lnbmVkIHRocmVlLCB1bnNpZ25lZCBmb3VyPgpzdHJ1Y3QgZnVycm92aW5lZXhwb3J0IHN3aXp6bGVyX2ZvdXIgewogICAgVCB2WzRdOyAKICAgIG9wZXJhdG9yIFRWZWN0b3I0PFQ+ICgpIGNvbnN0IHsgcmV0dXJuIFRWZWN0b3I0PFQ+KHZbb25lXSwgdlt0d29dLCB2W3RocmVlXSwgdltmb3VyXSk7IH0KfTsKCmludCBtYWluKCkge30KICAgIA==