Re: [personal kdb+] triangular matrix

Content-ID: <9C2FEECA36BB1B48A14B410769663B41@aquaq.co.uk>Content-Transfer-Encoding: base64PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjwvaGVhZD4NCjxib2R5Pg0KPGRpdiBkaXI9ImF1dG8iPg0KPHAgc3R5bGU9ImZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjY5NnB4OyI+SGkgSmFjayw8L3A+DQo8cCBzdHlsZT0iZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuNjk2cHg7Ij5UaGlzIGlzIHByb2JhYmx5IHdoYXQgeW91IHdhbnQgYmFzZWQgb24geW91ciBleGFtcGxlLCBnZW5lcmF0aW5nIG9mZnNldHMsIGFkZGluZyBhbmQgdGhlbiBtdWx0aXBseWluZyB3aXRoIHRoYXQgcHJldmlvdXMgYm9vbGVhbiB0cmlhbmdsZSB0byBnZXQgdGhlIG51bWJlcnMgaW4gdGhlIHJpZ2h0IHBsYWNlcy48L3A+DQo8cCBzdHlsZT0iZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuNjk2cHg7Ij5xKXsoeCZsdDtcOngpKngmIzQzOy86c3Vtc1swLHJldmVyc2UgMV94LTFdfXRpbCA1PC9wPg0KPHAgc3R5bGU9ImZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjY5NnB4OyI+MCAxIDIgMyA0PC9wPg0KPHAgc3R5bGU9ImZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjY5NnB4OyI+MCAwIDUgNiA3PC9wPg0KPHAgc3R5bGU9ImZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjY5NnB4OyI+MCAwIDAgOCA5PC9wPg0KPHAgc3R5bGU9ImZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjY5NnB4OyI+MCAwIDAgMCAxMDwvcD4NCjxwIHN0eWxlPSJmb250LWZhbWlseTogc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy42OTZweDsiPjAgMCAwIDAgMDwvcD4NCjxwIHN0eWxlPSJmb250LWZhbWlseTogc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy42OTZweDsiPkNoZWVycyw8L3A+DQo8cCBzdHlsZT0iZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuNjk2cHg7Ij5SeWFuPC9wPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPg0KPGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPk9uIDYgSnVsIDIwMTcgMDU6NDYsIEphY2sgQW5kcmV3cyAmbHQ7ZWZmYmlhZUBnbWFpbC5jb20mZ3Q7IHdyb3RlOjxiciB0eXBlPSJhdHRyaWJ1dGlvbiI+DQo8YmxvY2txdW90ZSBjbGFzcz0icXVvdGUiIHN0eWxlPSJtYXJnaW46MCAwIDAgLjhleDtib3JkZXItbGVmdDoxcHggI2NjYyBzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij4NCjxkaXY+DQo8ZGl2IGRpcj0ibHRyIj4NCjxkaXY+YSB0cmlhbmd1bGFyIG1hdHJpeDo8L2Rpdj4NCjxkaXY+cSlzaG93IHgmbHQ7LzpcOng6dGlsIDU8L2Rpdj4NCjxkaXY+MDExMTFiPC9kaXY+DQo8ZGl2PjAwMTExYjwvZGl2Pg0KPGRpdj4wMDAxMWI8L2Rpdj4NCjxkaXY+MDAwMDFiPC9kaXY+DQo8ZGl2PjAwMDAwYjwvZGl2Pg0KPGRpdj48YnI+DQo8L2Rpdj4NCjxkaXY+aW5zdGVhZCBvZiBzZXR0aW5nIHRoZSB0cmlhbmdsZSB0byAxcywgd2hhdCBmb3JtdWxhIHNldHMgdGhlIHRyaWFuZ2xlIHRvIDAgMSAyIC4uID88L2Rpdj4NCjxkaXY+PGJyPg0KPC9kaXY+DQo8ZGl2PmVnPC9kaXY+DQo8ZGl2PjAgMCAxIDIgMzxicj4NCjwvZGl2Pg0KPGRpdj4wIDAgNCA1IDY8L2Rpdj4NCjxkaXY+MCAwIDAgNyA4PC9kaXY+DQo8ZGl2PjAgMCAwIDAgOTwvZGl2Pg0KPGRpdj4wIDAgMCAwIDA8L2Rpdj4NCjxkaXY+PGJyPg0KPC9kaXY+DQo8L2Rpdj4NCjxwPjwvcD4NCi0tIDxicj4NCllvdSByZWNlaXZlZCB0aGlzIG1lc3NhZ2UgYmVjYXVzZSB5b3UgYXJlIHN1YnNjcmliZWQgdG8gdGhlIEdvb2dsZSBHcm91cHMgJnF1b3Q7S2RiJiM0MzsgUGVyc29uYWwgRGV2ZWxvcGVycyZxdW90OyBncm91cC48YnI+DQpUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgZ3JvdXAgYW5kIHN0b3AgcmVjZWl2aW5nIGVtYWlscyBmcm9tIGl0LCBzZW5kIGFuIGVtYWlsIHRvDQo8YSBocmVmPSJtYWlsdG86cGVyc29uYWwta2RicGx1cyYjNDM7dW5zdWJzY3JpYmVAZ29vZ2xlZ3JvdXBzLmNvbSI+cGVyc29uYWwta2RicGx1cyYjNDM7dW5zdWJzY3JpYmVAZ29vZ2xlZ3JvdXBzLmNvbTwvYT4uPGJyPg0KVG8gcG9zdCB0byB0aGlzIGdyb3VwLCBzZW5kIGVtYWlsIHRvIDxhIGhyZWY9Im1haWx0bzpwZXJzb25hbC1rZGJwbHVzQGdvb2dsZWdyb3Vwcy5jb20iPg0KcGVyc29uYWwta2RicGx1c0Bnb29nbGVncm91cHMuY29tPC9hPi48YnI+DQpWaXNpdCB0aGlzIGdyb3VwIGF0IDxhIGhyZWY9Imh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvcGVyc29uYWwta2RicGx1cyI+aHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9wZXJzb25hbC1rZGJwbHVzPC9hPi48YnI+DQpGb3IgbW9yZSBvcHRpb25zLCB2aXNpdCA8YSBocmVmPSJodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2Qvb3B0b3V0Ij5odHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2Qvb3B0b3V0PC9hPi48YnI+DQo8L2Rpdj4NCjwvYmxvY2txdW90ZT4NCjwvZGl2Pg0KPGJyPg0KPC9kaXY+DQo8YnI+DQpUaGlzIGUtbWFpbCBtZXNzYWdlIGlzIGludGVuZGVkIHRvIGJlIHJlY2VpdmVkIG9ubHkgYnkgcGVyc29ucyBlbnRpdGxlZCB0byByZWNlaXZlIHRoZSBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gaXQgbWF5IGNvbnRhaW4uIEUtbWFpbCBtZXNzYWdlcyB0byBjbGllbnRzIG9mIEFxdWFRIEFuYWx5dGljcyBtYXkgY29udGFpbiBpbmZvcm1hdGlvbiB0aGF0IGlzIGNvbmZpZGVudGlhbCBhbmQgbGVnYWxseSBwcml2aWxlZ2VkLiBQbGVhc2UgZG8gbm90DQogcmVhZCwgY29weSwgZm9yd2FyZCwgb3Igc3RvcmUgdGhpcyBtZXNzYWdlIHVubGVzcyB5b3UgYXJlIGFuIGludGVuZGVkIHJlY2lwaWVudCBvZiBpdC4gSWYgeW91IGhhdmUgcmVjZWl2ZWQgdGhpcyBtZXNzYWdlIGluIGVycm9yLCBwbGVhc2UgZm9yd2FyZCBpdCB0byB0aGUgc2VuZGVyIGFuZCBkZWxldGUgaXQgY29tcGxldGVseSBmcm9tIHlvdXIgY29tcHV0ZXIgc3lzdGVtLg0KPC9ib2R5Pg0KPC9odG1sPg0K