Contact Me

I welcome any comments and questions. Please also use this form to contact me with any contract or work requests. Thank you.

Your Name (required)

Your Email (required)

Your Message

Please enter the following:
captcha

Categories

RSSTwitter Feed:



PHVsPjxsaT48c3Ryb25nPndvb19hZGRibG9nPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2Fkc19yb3RhdGU8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2ltYWdlXzE8L3N0cm9uZz4gLSBodHRwOi8vd3d3LnRzc21pdGgubmV0L2ltYWdlcy9ib3JkZXJsaW5lYS1hZC5qcGc8L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV8yPC9zdHJvbmc+IC0gaHR0cDovL3d3dy50c3NtaXRoLm5ldC9pbWFnZXMva2didHgtYWQuanBnPC9saT48bGk+PHN0cm9uZz53b29fYWRfaW1hZ2VfMzwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2ltYWdlXzQ8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19hZF91cmxfMTwvc3Ryb25nPiAtIGh0dHA6Ly93d3cuYm9yZGVybGluZWEuY29tPC9saT48bGk+PHN0cm9uZz53b29fYWRfdXJsXzI8L3N0cm9uZz4gLSBodHRwOi8vd3d3LmtnYnRleGFzLmNvbTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF8zPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fYWRfdXJsXzQ8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19hbHRfc3R5bGVzaGVldDwvc3Ryb25nPiAtIGRhcmtncmVlbi5jc3M8L2xpPjxsaT48c3Ryb25nPndvb19hdXRvX2ltZzwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fYmxvZ2NhdDwvc3Ryb25nPiAtIC9jYXRlZ29yeS9hcnRpY2xlcy88L2xpPjxsaT48c3Ryb25nPndvb19ibG9nX2NhdF9pZDwvc3Ryb25nPiAtIDM8L2xpPjxsaT48c3Ryb25nPndvb19jYXRtZW51PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jdXN0b21fY3NzPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fY3VzdG9tX2Zhdmljb248L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19leF9mZWF0cGFnZXM8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2ZlYXRoZWlnaHQ8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19mZWF0cGFnZXM8L3N0cm9uZz4gLSAxMSwgMTY4LCAxNjAsIDE0OCwgMjcsIDI5LCAzMywgNDE8L2xpPjxsaT48c3Ryb25nPndvb19mZWVkYnVybmVyX3VybDwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2dvb2dsZV9hbmFseXRpY3M8L3N0cm9uZz4gLSA8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj4NCg0KICB2YXIgX2dhcSA9IF9nYXEgfHwgW107DQogIF9nYXEucHVzaChbXCdfc2V0QWNjb3VudFwnLCBcJ1VBLTExNjcyNDE3LTFcJ10pOw0KICBfZ2FxLnB1c2goW1wnX3RyYWNrUGFnZXZpZXdcJ10pOw0KDQogIChmdW5jdGlvbigpIHsNCiAgICB2YXIgZ2EgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwnc2NyaXB0XCcpOyBnYS50eXBlID0gXCd0ZXh0L2phdmFzY3JpcHRcJzsgZ2EuYXN5bmMgPSB0cnVlOw0KICAgIGdhLnNyYyA9IChcJ2h0dHBzOlwnID09IGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sID8gXCdodHRwczovL3NzbFwnIDogXCdodHRwOi8vd3d3XCcpICsgXCcuZ29vZ2xlLWFuYWx5dGljcy5jb20vZ2EuanNcJzsNCiAgICB2YXIgcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwnc2NyaXB0XCcpWzBdOyBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGdhLCBzKTsNCiAgfSkoKTsNCg0KPC9zY3JpcHQ+PC9saT48bGk+PHN0cm9uZz53b29faW1hZ2VfaGVpZ2h0PC9zdHJvbmc+IC0gMjUwPC9saT48bGk+PHN0cm9uZz53b29faW1hZ2Vfd2lkdGg8L3N0cm9uZz4gLSAzOTA8L2xpPjxsaT48c3Ryb25nPndvb19pbnRybzwvc3Ryb25nPiAtIEkgYW0gYSBwYXNzaW9uYXRlIGZyb250LWVuZCBkZXZlbG9wZXIuIEkgbG92ZSB3ZWIgZGVzaWduLCBqUXVlcnksIFdvcmRwcmVzcyBhbmQgc21vb3RoIGxvb2tpbmcgd2Vic2l0ZXMuPC9saT48bGk+PHN0cm9uZz53b29fbG9nbzwvc3Ryb25nPiAtIGh0dHA6Ly90c3NtaXRoLm5ldC93cC93cC1jb250ZW50L3dvb191cGxvYWRzLzEwLXRpbV9zbWl0aF9sb2dvLnBuZzwvbGk+PGxpPjxzdHJvbmc+d29vX21hbnVhbDwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS90aGVtZS1kb2N1bWVudGF0aW9uL292ZXItZWFzeS88L2xpPjxsaT48c3Ryb25nPndvb19tZW51cGFnZXM8L3N0cm9uZz4gLSAxMTwvbGk+PGxpPjxzdHJvbmc+d29vX3Jlc2l6ZTwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fc2hvcnRuYW1lPC9zdHJvbmc+IC0gd29vPC9saT48bGk+PHN0cm9uZz53b29fdGhlbWVuYW1lPC9zdHJvbmc+IC0gT3ZlciBFYXN5PC9saT48bGk+PHN0cm9uZz53b29fdGhlX2NvbnRlbnQ8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX3VwbG9hZHM8L3N0cm9uZz4gLSBhOjg6e2k6MDtzOjY2OiJodHRwOi8vdHNzbWl0aC5uZXQvd3Avd3AtY29udGVudC93b29fdXBsb2Fkcy8xMC10aW1fc21pdGhfbG9nby5wbmciO2k6MTtzOjY1OiJodHRwOi8vdHNzbWl0aC5uZXQvd3Avd3AtY29udGVudC93b29fdXBsb2Fkcy85LXRpbV9zbWl0aF9sb2dvLnBuZyI7aToyO3M6NjU6Imh0dHA6Ly90c3NtaXRoLm5ldC93cC93cC1jb250ZW50L3dvb191cGxvYWRzLzgtdGltX3NtaXRoX2xvZ28ucG5nIjtpOjM7czo1NToiaHR0cDovL3Rzc21pdGgubmV0L3dwL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvNy1sb2dvLmpwZyI7aTo0O3M6NTU6Imh0dHA6Ly90c3NtaXRoLm5ldC93cC93cC1jb250ZW50L3dvb191cGxvYWRzLzYtbG9nby5qcGciO2k6NTtzOjU1OiJodHRwOi8vdHNzbWl0aC5uZXQvd3Avd3AtY29udGVudC93b29fdXBsb2Fkcy81LWxvZ28uanBnIjtpOjY7czo1NToiaHR0cDovL3Rzc21pdGgubmV0L3dwL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvNC1sb2dvLmpwZyI7aTo3O3M6NTU6Imh0dHA6Ly90c3NtaXRoLm5ldC93cC93cC1jb250ZW50L3dvb191cGxvYWRzLzMtbG9nby5qcGciO308L2xpPjwvdWw+