# Name: smd_query v0.1 # Type: Client side plugin # Generic database access via SQL # Author: Stef Dawson # URL: http://stefdawson.com/ # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6OToic21kX3F1ZXJ5IjtzOjY6ImF1dGhvciI7czoxMToiU3Rl ZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3c29uLmNv bS8iO3M6NzoidmVyc2lvbiI7czozOiIwLjEiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjMxOiJH ZW5lcmljIGRhdGFiYXNlIGFjY2VzcyB2aWEgU1FMIjtzOjQ6ImNvZGUiO3M6MjU2ODoiZnVu Y3Rpb24gc21kX3F1ZXJ5KCRhdHRzLCAkdGhpbmcpIHsNCglleHRyYWN0KGxBdHRzKGFycmF5 KA0KCQknY29sdW1uJyA9PiAnJywNCgkJJ3RhYmxlJyA9PiAnJywNCgkJJ3doZXJlJyA9PiAn JywNCgkJJ3F1ZXJ5JyA9PiAnJywNCgkJJ2Zvcm0nID0+ICcnLA0KCQknY29sc2Zvcm0nID0+ ICcnLA0KCQknYnJlYWsnCT0+ICcnLA0KCQknd3JhcHRhZycgID0+ICcnLA0KCQknbGFiZWwn CT0+ICcnLA0KCQknbGFiZWx0YWcnID0+ICcnLA0KCQknY2xhc3MnCSAgID0+ICcnLA0KCQkn ZGVidWcnID0+ICcwJywNCgkpLCRhdHRzKSk7DQoNCgkvLyBHcmFiIHRoZSBmb3JtIG9yIGVt YmVkZGVkICR0aGluZw0KCSR0aGluZyA9IChlbXB0eSgkZm9ybSkpID8gJHRoaW5nIDogZmV0 Y2hfZm9ybSgkZm9ybSk7DQoJJGNvbHNmb3JtID0gKGVtcHR5KCRjb2xzZm9ybSkpID8gJycg OiBmZXRjaF9mb3JtKCRjb2xzZm9ybSk7DQoNCgkkcnMgPSBhcnJheSgpOw0KCSRvdXQgPSBh cnJheSgpOw0KCSRjb2xvdXQgPSBhcnJheSgpOw0KDQoJLy8gcXVlcnkgb3ZlcnJpZGVzIGNv bHVtbi90YWJsZS93aGVyZSwgc2hvdyBvdmVycmlkZXMgZXZlcnl0aGluZw0KCWlmICgkcXVl cnkpIHsNCgkJJHF1ZXJ5ID0gc21kX3F1ZXJ5X3BhcnNlKCRxdWVyeSk7DQoJCSRycyA9IGdl dFJvd3MoJHF1ZXJ5LCAkZGVidWcpOw0KCX0gZWxzZSB7DQoJCWlmICgkY29sdW1uICYmICR0 YWJsZSkgew0KCQkJJGNvbHVtbiA9IHNtZF9xdWVyeV9wYXJzZSgkY29sdW1uKTsNCgkJCSR0 YWJsZSA9IHNtZF9xdWVyeV9wYXJzZSgkdGFibGUpOw0KCQkJJHdoZXJlID0gc21kX3F1ZXJ5 X3BhcnNlKCR3aGVyZSk7DQoJCQkkcnMgPSBzYWZlX3Jvd3MoJGNvbHVtbiwgJHRhYmxlLCAk d2hlcmUsICRkZWJ1Zyk7DQoJCX0gZWxzZSB7DQoJCQl0cmlnZ2VyX2Vycm9yKCJZb3UgbXVz dCBzcGVjaWZ5IGF0IGxlYXN0IDEgJ2NvbHVtbicgYW5kIGEgJ3RhYmxlJy4iKTsNCgkJfQ0K CX0NCg0KCWlmICgkcnMpIHsNCgkJaWYgKCRkZWJ1ZyA+IDEpIHsNCgkJCWVjaG8gIisrIFFV RVJZIFJFU1VMVCBTRVQgKysiOw0KCQkJZG1wKGNvdW50KCRycykuICIgUk9XUyIpOw0KCQkJ ZG1wKCRycyk7DQoJCX0NCgkJJHJlcGxhY2VtZW50cyA9IGFycmF5KCk7DQoJCSRjb2xyZXBs YWNlbWVudHMgPSBhcnJheSgpOw0KCQkkcXJ5X3Jvd2NudCA9IDA7DQoJCWZvcmVhY2ggKCRy cyBhcyAkcm93KSB7DQoJCQlmb3JlYWNoICgkcm93IGFzICRjb2xpZCA9PiAkdmFsKSB7DQoJ CQkJaWYgKCRxcnlfcm93Y250ID09IDAgJiYgJGNvbHNmb3JtKSB7DQoJCQkJCSRjb2xyZXBs YWNlbWVudHNbJ3snLiRjb2xpZC4nfSddID0gJGNvbGlkOw0KCQkJCX0NCgkJCQkvLyBDb25z dHJ1Y3QgdGhlIHJlcGxhY2VtZW50IGFycmF5DQoJCQkJJHJlcGxhY2VtZW50c1sneycuJGNv bGlkLid9J10gPSAkdmFsOw0KCQkJfQ0KCQkJaWYgKCRkZWJ1ZyA+IDEpIHsNCgkJCQllY2hv ICIrKyBSRVBMQUNFTUVOVFMgKysiOw0KCQkJCWRtcCgkcmVwbGFjZW1lbnRzKTsNCgkJCX0N CgkJCSRvdXRbXSA9IHBhcnNlKHN0cnRyKCR0aGluZywgJHJlcGxhY2VtZW50cykpOw0KCQkJ JHFyeV9yb3djbnQrKzsNCgkJfQ0KCX0NCg0KCWlmICgkb3V0KSB7DQoJCWlmICgkY29scmVw bGFjZW1lbnRzKSB7DQoJCQkkY29sb3V0W10gPSBwYXJzZShzdHJ0cigkY29sc2Zvcm0sICRj b2xyZXBsYWNlbWVudHMpKTsNCgkJfQ0KCQlyZXR1cm4gZG9MYWJlbCgkbGFiZWwsICRsYWJl bHRhZykuZG9XcmFwKGFycmF5X21lcmdlKCRjb2xvdXQsJG91dCksICR3cmFwdGFnLCAkYnJl YWssICRjbGFzcyk7DQoJfQ0KfQ0KDQovLyBSZXR1cm5zIGEgc3RyaW5nIHdpdGggYW55ID8g dmFyaWFibGVzIHJlcGxhY2VkIHdpdGggdGhlaXIgZ2xvYmFscyBmcm9tICRwcmV0ZXh0IG9y ICR0aGlzYXJ0aWNsZQ0KZnVuY3Rpb24gc21kX3F1ZXJ5X3BhcnNlKCRpdGVtKSB7DQoJZ2xv YmFsICRwcmV0ZXh0LCAkdGhpc2FydGljbGU7DQoJJG1vZFJFID0gJy8oXD8pKFtBLVphLXow LTlfXC0gXSspLyc7DQoJJG51bU1vZHMgPSBwcmVnX21hdGNoX2FsbCgkbW9kUkUsICRpdGVt LCAkbW9kcyk7DQoNCglmb3IgKCRtb2RDdHIgPSAwOyAkbW9kQ3RyIDwgJG51bU1vZHM7ICRt b2RDdHIrKykgew0KCQkkbW9kQ2hhciA9ICRtb2RzWzFdWyRtb2RDdHJdOw0KCQkkbW9kSXRl bSA9IHRyaW0oJG1vZHNbMl1bJG1vZEN0cl0pOw0KCQkkbG93aXRlbSA9IHN0cnRvbG93ZXIo JG1vZEl0ZW0pOw0KCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkbG93aXRlbSwgJHByZXRleHQp KSB7DQoJCQkkaXRlbSA9IHN0cl9yZXBsYWNlKCRtb2RDaGFyLiRtb2RJdGVtLCAkcHJldGV4 dFskbG93aXRlbV0sICRpdGVtKTsNCgkJfSBlbHNlIGlmIChpc3NldCgkdGhpc2FydGljbGVb JGxvd2l0ZW1dKSkgew0KCQkJJGl0ZW0gPSBzdHJfcmVwbGFjZSgkbW9kQ2hhci4kbW9kSXRl bSwgJHRoaXNhcnRpY2xlWyRsb3dpdGVtXSwgJGl0ZW0pOw0KCQl9IGVsc2Ugew0KCQkJJGl0 ZW0gPSBzdHJfcmVwbGFjZSgkbW9kQ2hhci4kbW9kSXRlbSwgJG1vZEl0ZW0sICRpdGVtKTsN CgkJfQ0KCX0NCglyZXR1cm4gJGl0ZW07DQp9IjtzOjQ6InR5cGUiO3M6MToiMCI7czo0OiJo ZWxwIjtzOjg1ODU6Igk8cD48ZGl2IGlkPSJzbWRfaGVscCI+PC9wPgoKCTxoMT5zbWRfcXVl cnk8L2gxPgoKCTxwPlRoZSBsYXppZXN0IHRhZyBldmVyISBBbGxvd3MgeW91IHRvIG1ha2Ug YWQtaG9jIHF1ZXJpZXMgdG8gdGhlIGRhdGFiYXNlIGFuZCBwcm9jZXNzIHRoZSByZXN1bHRz LCByb3cgYnkgcm93LCBpbiBhIGZvcm0uPC9wPgoKCTxoMj5GZWF0dXJlczwvaDI+CgoJPHVs PgoJCTxsaT5TdXBwb3J0cyBzaW1wbGUgcXVlcmllcyB3aXRoIGEgcmVkdWNlZCBzeW50YXgg KDxzcGFuIGNsYXNzPSJjYXBzIj5TRUxFQ1Q8L3NwYW4+IGNvbHMgPHNwYW4gY2xhc3M9ImNh cHMiPkZST008L3NwYW4+IHRhYmxlIDxzcGFuIGNsYXNzPSJjYXBzIj5XSEVSRTwvc3Bhbj4g Y2xhdXNlKSBvciB5b3VyIG93biBjdXN0b20gcXVlcmllczwvbGk+CgkJPGxpPkVhY2ggcm93 IGlzIHBhc3NlZCB0byBhIGZvcm0gd2hlcmUgeW91IGNhbiBkaXNwbGF5IHRoZSByZXN1bHRz PC9saT4KCQk8bGk+Q29sdW1uIGhlYWRpbmdzIG1heSBiZSBvdXRwdXQgdXNpbmcgYSBzZWNv bmQgZm9ybTwvbGk+CgkJPGxpPk1heSBkZXN0cm95IHlvdXIgZGF0YWJhc2UgaWYgdXNlZCB3 cm9uZ2x5LiBCYWNrdXAsIGJhY2t1cCBiYWNrdXAmIzgyMzA7PC9saT4KCTwvdWw+CgoJPGgy PkF1dGhvcjwvaDI+CgoJPHA+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbW1l bnRGb3JtIj5TdGVmIERhd3NvbjwvYT48L3A+CgoJPGgyPkluc3RhbGxhdGlvbiAvIFVuaW5z dGFsbGF0aW9uPC9oMj4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxh IGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy85NzYvc21kX3F1ZXJ5Ij50 ZXh0cGF0dGVybi5vcmc8L2E+LCBvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24u Y29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPiwgcGFzdGUgdGhlIGNvZGUgaW50byB0aGUgPHNw YW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gQWRtaW4gLSZndDsgUGx1Z2lucyBwYW5lLCBp bnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi48L3A+CgoJPHA+VW5pbnN0YWxsIGJ5IHNp bXBseSBkZWxldGluZyB0aGUgcGx1Z2luIGZyb20gdGhlIEFkbWluLSZndDtQbHVnaW5zIHBh bmUuPC9wPgoKCTxoMj5Vc2FnZTwvaDI+CgoJPHA+VXNlIHRoZSB0YWcgaW4gYW55IHBhZ2Us IGZvcm0gb3IgYXJ0aWNsZSBjb250ZXh0IHRvIGdyYWIgc3R1ZmYgZnJvbSB0aGUgZGF0YWJh c2UuPC9wPgoKCTxoMyBjbGFzcz0idGFnIj5zbWRfcXVlcnk8L2gzPgoKCTxwIGNsYXNzPSJ0 YWctc3VtbWFyeSI+T3BlcmF0ZXMgaW4gdHdvIG1vZGVzOiBzaW1wbGUgbW9kZSBqdXN0IGFs bG93cyA8Y29kZT5TRUxFQ1Qgc3R1ZmYgRlJPTSB0YWJsZSBXSEVSRSBjbGF1c2U8L2NvZGU+ LiBCeSB1c2luZyB0aGUgPGNvZGU+cXVlcnk8L2NvZGU+IGF0dHJpYnV0ZSB5b3Ugc3dpdGNo IHRoZSBwbHVnaW4gdG8gY29tcGxleCBtb2RlIGFuZCB5b3UgY2FuIGRlc2lnbiB5b3VyIG93 biBxdWVyeS4gSXQgY2FuIGluY2x1ZGUgPGFjcm9ueW0gdGl0bGU9IioiPjxzcGFuIGNsYXNz PSJjYXBzIj5DT1VOVDwvc3Bhbj48L2Fjcm9ueW0+LCBqb2lucywgYW55dGhpbmc7IHBlcmhh cHMgZXZlbiA8c3BhbiBjbGFzcz0iY2FwcyI+SU5TRVJUPC9zcGFuPiBhbmQgPHNwYW4gY2xh c3M9ImNhcHMiPlVQREFURTwvc3Bhbj4gKD8pIGFsdGhvdWdoIGl0JiM4MjE3O3MgdW50ZXN0 ZWQgYW5kIGxpYWJsZSB0byBmbG9vZGluZy48L3A+CgoJPGg0IGNsYXNzPSJhdHRzICIgaWQ9 ImF0dHJpYnV0ZXMiPkF0dHJpYnV0ZXM8L2g0PgoKCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+Y29sdW1uPC9zcGFuPiA6IChzaW1wbGUgbW9kZSkg Y29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY29sdW1ucyB0byByZXRyaWV2ZSBmcm9tIHRoZSBk YXRhYmFzZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+dGFibGU8L3NwYW4+ IDogKHNpbXBsZSBtb2RlKSBuYW1lIG9mIHRoZSB0YWJsZSB0byByZXRyaWV2ZSB0aGUgY29s dW1ucyBmcm9tICh5ZXMsIG5vbi08c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiB0YWJs ZXMgYXJlIGFsc28gc3VwcG9ydGVkIDotKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQt bmFtZSI+d2hlcmU8L3NwYW4+IDogKHNpbXBsZSBtb2RlKSBhbnkgZXh0cmEgY2xhdXNlIHlv dSB3aXNoIHRvIHNwZWNpZnk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPnF1 ZXJ5PC9zcGFuPiA6IChjb21wbGV4IG1vZGUpIGFueSBxdWVyeSB5b3UgbGlrZSBjYW4gYmUg dXNlZCBoZXJlLiBPdmVycmlkZXMgPGNvZGU+Y29sdW1uPC9jb2RlPiwgPGNvZGU+dGFibGU8 L2NvZGU+IGFuZCA8Y29kZT53aGVyZTwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXR0LW5hbWUiPmZvcm08L3NwYW4+IDogdGhlIGZvcm0gdG8gdXNlIHRvIHBhcnNlIGVhY2gg cmV0dXJuZWQgcm93LiBTZWUgPGEgaHJlZj0iI3JlcGxhY2VtZW50cyI+cmVwbGFjZW1lbnRz PC9hPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+Y29sc2Zvcm08L3NwYW4+ IDogc2Vjb25kIGZvcm0gdG8gcGFyc2UgYW55IGhlYWRlciByb3cgY29udGFpbmluZyBjb2x1 bW4gbmFtZXMgKG9mIGxpbWl0ZWQgdXNlKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQt bmFtZSI+bGFiZWw8L3NwYW4+IDogbGFiZWwgdG8gZGlzcGxheSBhYm92ZSB0aGUgZW50aXJl IG91dHB1dDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+bGFiZWx0YWc8L3Nw YW4+IDogdGhlIChYKUhUTUwgdGFnIHRvIHN1cnJvdW5kIHRoZSBsYWJlbCB3aXRoLiBTcGVj aWZ5IGl0IHdpdGhvdXQgYW5nbGUgYnJhY2tldHMgKGUuZy4gPGNvZGU+bGFiZWx0YWc9JnF1 b3Q7aDMmcXVvdDs8L2NvZGU+KTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+ d3JhcHRhZzwvc3Bhbj4gOiB0aGUgKFgpSFRNTCB0YWcgdG8gc3Vycm91bmQgdGhlIGVudGly ZSBvdXRwdXQgKGUuZy4gPGNvZGU+d3JhcHRhZz0mcXVvdDt0YWJsZSZxdW90OzwvY29kZT4p PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5icmVhazwvc3Bhbj4gOiBlYWNo IHJvdyB3aWxsIGhhdmUgYmUgd3JhcHBlZCBpbiB0aGlzIHRhZyAoZS5nLiA8Y29kZT5icmVh az0mcXVvdDt0ZCZxdW90OzwvY29kZT4pPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1u YW1lIj5jbGFzczwvc3Bhbj4gOiA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFz cyBuYW1lIHRvIGFwcGx5IHRvIGVhY2ggcm93PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 dC1uYW1lIj5kZWJ1Zzwvc3Bhbj4gOiBzZXQgdG8gMSB0byBzaG93IHNvbWUgZGVidWcgb3V0 cHV0OyB1c2UgMiB0byBzaG93IGEgYml0IG1vcmUgZGV0YWlsPC9saT4KCTwvdWw+CgoJPHA+ VGhlIGF0dHJpYnV0ZXMgPGNvZGU+cXVlcnk8L2NvZGU+LCA8Y29kZT5jb2x1bW48L2NvZGU+ LCA8Y29kZT50YWJsZTwvY29kZT4gYW5kIDxjb2RlPndoZXJlPC9jb2RlPiBjYW4gY29udGFp biByZXBsYWNlbWVudHMgdGhlbXNlbHZlcyB0byByZWFkIHZhbHVlcyBmcm9tIHRoZSBjdXJy ZW50IGFydGljbGUuIFNwZWNpZnkgdGhlIHZhcmlhYmxlIG5hbWUgd2l0aCBhIDxjb2RlPj88 L2NvZGU+IGluIGZyb250IG9mIGl0IChlLmcuIDxjb2RlPnF1ZXJ5PSZxdW90O1NFTEVDVCAq IEZST00gdHhwX2ltYWdlIFdIRVJFIGNhdGVnb3J5PSYjMzk7P2NhdGVnb3J5MSYjMzk7IE9S IGNhdGVnb3J5PSYjMzk7P2NhdGVnb3J5MiYjMzk7PC9jb2RlPikgd291bGQgc2hvdyBpbWFn ZXMgdGhhdCBoYWQgdGhlaXIgY2F0ZWdvcnkgc2V0IHRvIG9uZSBvZiB0aGUgYXJ0aWNsZSYj ODIxNztzIGNhdGVnb3JpZXMuIFJlbGF0ZWQgaW1hZ2VzLCBhbnlvbmUmIzgyMzA7PzwvcD4K Cgk8aDQgY2xhc3M9ImF0dHMgIiBpZD0icmVwbGFjZW1lbnRzIj5SZXBsYWNlbWVudCB0YWdz PC9oND4KCgk8cD5JbiB5b3VyIG91dHB1dCBmb3JtIHlvdSBtYXkgc3BlY2lmeSBhbnkgY29s dW1uIG5hbWUgc3Vycm91bmRlZCB3aXRoIDxjb2RlPnt9PC9jb2RlPiBjaGFyYWN0ZXJzIHRv IGRpc3BsYXkgdGhhdCBmaWVsZC4gU28gaWYgeW91ciBxdWVyeSB3YXMgPGNvZGU+U0VMRUNU IGlkLCBuYW1lLCBjYXRlZ29yeSBGUk9NIHR4cF9pbWFnZSBXSEVSRSBleHQ9JnF1b3Q7Lmpw ZyZxdW90OzwvY29kZT4geW91IHdvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyByZXBsYWNlbWVu dCB2YXJpYWJsZXMgYXZhaWxhYmxlOjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dHQtbmFtZSI+e2lkfTwvc3Bhbj4gOiB0aGUgaW1hZ2UgSUQ8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXR0LW5hbWUiPntuYW1lfTwvc3Bhbj4gOiB0aGUgaW1hZ2UgZmlsZW5hbWU8L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPntjYXRlZ29yeX08L3NwYW4+IDogdGhl IGltYWdlIGNhdGVnb3J5PC9saT4KCTwvdWw+CgoJPHA+SnVzdCBwdXQgdGhvc2UgdmFyaWFi bGUgbmFtZXMgaW50byB5b3VyIDxjb2RlPmZvcm08L2NvZGU+IGFtb25nIG90aGVyIG5vcm1h bCA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gb3IgPHNwYW4gY2xhc3M9ImNhcHMi PlRYUDwvc3Bhbj4gdGFncywgYW5kIHRoZSByZWxldmFudCB2YWx1ZSBmcm9tIHRoYXQgcm93 IHdpbGwgYmUgZGlzcGxheWVkLiBUaGUgcmVwbGFjZW1lbnQgdmFyaWFibGVzIGhvbm91ciBh bnkgPGNvZGU+QVM8L2NvZGU+IGVsZW1lbnQgeW91IG1heSBlbXBsb3kuPC9wPgoKCTxoMiBp ZD0iZXhhbXBsZXMiPkV4YW1wbGVzPC9oMj4KCgk8aDMgaWQ9ImVnMSI+RXhhbXBsZSAxPC9o Mz4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21k X3F1ZXJ5IGNvbHVtbj0mcXVvdDsqJnF1b3Q7CiAgICAgdGFibGU9JnF1b3Q7dHhwX2ltYWdl JnF1b3Q7CiAgICAgd2hlcmU9JnF1b3Q7Y2F0ZWdvcnk9JiMzOTttYW1tYWwmIzM5OyBPUiBj YXRlZ29yeT0mIzM5O2JpcmQmIzM5OyZxdW90OwogICAgIGZvcm09JnF1b3Q7ZGJvdXQmcXVv dDsgd3JhcHRhZz0mcXVvdDt1bCZxdW90OyBicmVhaz0mcXVvdDtsaSZxdW90OyAvJmd0Owo8 L2NvZGU+PC9wcmU+CgoJPHA+V2l0aCBmb3JtIDxjb2RlPmRib3V0PC9jb2RlPiBjb250YWlu aW5nOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDth IGhyZWY9JnF1b3Q7L2ltYWdlcy97aWR9e2V4dH0mcXVvdDsgLyZndDsmbHQ7dHhwOnRodW1i bmFpbCBuYW1lPSZxdW90O3tuYW1lfSZxdW90OyAvJmd0OyZsdDsvYSZndDsKPC9jb2RlPjwv cHJlPgoKCTxwPldpbGwgcmVuZGVyIGFuIHVub3JkZXJlZCBsaXN0IG9mIHRodW1ibmFpbHMg d2l0aCBsaW5rcyB0byB0aGUgZnVsbHNpemUgaW1hZ2UgaWYgdGhlIGNhdGVnb3J5IGlzIGVp dGhlciA8Y29kZT5tYW1tYWw8L2NvZGU+IG9yIDxjb2RlPmJpcmQ8L2NvZGU+LjwvcD4KCgk8 aDMgaWQ9ImVnMiI+RXhhbXBsZSAyPC9oMz4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBj bGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX3F1ZXJ5IHF1ZXJ5PSZxdW90O1NFTEVDVCBESVNU SU5DVAogICAgIHR4Yy5uYW1lIEZST00gdHhwX2NhdGVnb3J5IEFTIHR4YywgdGV4dHBhdHRl cm4gQVMgdHhwCiAgICAgV0hFUkUgdHlwZT0mIzM5O2FydGljbGUmIzM5OyBBTkQgcGFyZW50 PSYjMzk7YW5pbWFscyYjMzk7CiAgICAgQU5EICh0eGMubmFtZSA9IHR4cC5jYXRlZ29yeTEg T1IgdHhjLm5hbWUgPSB0eHAuY2F0ZWdvcnkyKQogICAgIGZvcm09JnF1b3Q7ZGJvdXQmcXVv dDsgd3JhcHRhZz0mcXVvdDt1bCZxdW90OyBicmVhaz0mcXVvdDtsaSZxdW90OyAvJmd0Owo8 L2NvZGU+PC9wcmU+CgoJPHA+V2l0aCBmb3JtIDxjb2RlPmRib3V0PC9jb2RlPiBjb250YWlu aW5nOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0 eHA6Y2F0ZWdvcnkgbmFtZT0mcXVvdDt7bmFtZX0mcXVvdDsgbGluaz0mcXVvdDsxJnF1b3Q7 IHRpdGxlPSZxdW90OzEmcXVvdDsgLyZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPldpbGwgcmVu ZGVyIGEgbGlzdCBvZiBsaW5rYWJsZSBjYXRlZ29yeSBuYW1lcyB0aGF0IGNvbnRhaW4gYXJ0 aWNsZXMgd2l0aCBjYXRlZ29yaWVzIHRoYXQgaGF2ZSB0aGUgZ2l2ZW4gcGFyZW50LiBJZiBh IGNhdGVnb3J5IGlzIHVudXNlZCBpdCB3aWxsIG5vdCBiZSBsaXN0ZWQuPC9wPgoKCTxoMyBp ZD0iZWcyIj5FeGFtcGxlIDM8L2gzPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNz PSJibG9jayI+Jmx0O3R4cDpzbWRfcXVlcnkgcXVlcnk9JnF1b3Q7U0VMRUNUIERJU1RJTkNU CiAgICAgdHhjLm5hbWUsIENPVU5UKCopIEFTIGNvdW50IEZST00gdHhwX2NhdGVnb3J5IEFT IHR4YywKICAgICB0ZXh0cGF0dGVybiBBUyB0eHAKICAgICBXSEVSRSB0eXBlPSYjMzk7YXJ0 aWNsZSYjMzk7IEFORCBwYXJlbnQ9JiMzOTs/Y3VzdG9tMyYjMzk7CiAgICAgQU5EICh0eGMu bmFtZSA9IHR4cC5jYXRlZ29yeTEgT1IgdHhjLm5hbWUgPSB0eHAuY2F0ZWdvcnkyKQogICAg IEdST1VQIEJZIHR4Yy5uYW1lJnF1b3Q7CiAgICAgZm9ybT0mcXVvdDtkYm91dCZxdW90OyB3 cmFwdGFnPSZxdW90O3VsJnF1b3Q7IGJyZWFrPSZxdW90O2xpJnF1b3Q7IC8mZ3Q7CjwvY29k ZT48L3ByZT4KCgk8cD5XaXRoIGZvcm0gPGNvZGU+ZGJvdXQ8L2NvZGU+IGNvbnRhaW5pbmc6 PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpj YXRlZ29yeSBuYW1lPSZxdW90O3tuYW1lfSZxdW90OyBsaW5rPSZxdW90OzEmcXVvdDsgdGl0 bGU9JnF1b3Q7MSZxdW90OyAvJmd0OyAoe2NvdW50fSkKPC9jb2RlPjwvcHJlPgoKCTxwPldp bGwgcmVhZCB0aGUgcGFyZW50IGl0ZW0gZnJvbSB0aGUgPGNvZGU+Y3VzdG9tMzwvY29kZT4g ZmllbGQgYW5kIHJlbmRlciBhIHNpbWlsYXIgbGlzdCB0byBFeGFtcGxlIDIgYnV0IHdpdGgg dGhlIGFydGljbGUgY291bnRzIGFkZGVkIGluIHBhcmVudGhlc2VzIGFmdGVyd2FyZHMuPC9w PgoKCTxwPlF1ZXJ5LXRhc3RpYyA6LSk8L3A+CgoJPHA+PC9kaXY+PC9wPgo8IS0tIC0tLSBC RUdJTiBQTFVHSU4gQ1NTIC0tLSAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9o ZWxwIHsgbGluZS1oZWlnaHQ6MS40NSA7fQojc21kX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0 OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3Bh Y2U7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7fQojc21kX2hlbHAgY29kZS5ibG9jayB7 IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3Vu ZC1jb2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4 OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGE6bGluaywgI3NtZF9oZWxwIGE6dmlzaXRl ZCB7IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206 IDFweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7fQojc21kX2hlbHAgYTpob3Zl ciwgI3NtZF9oZWxwIGE6YWN0aXZlIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjog bm9uZTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFw eDt9CiNzbWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdlb3JnaWEsIHNh bnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBo MiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsg Y29sb3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojc21kX2hl bHAgaDMgeyBjb2xvcjogIzY5MzsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlm OyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwO3RleHQtdHJhbnNmb3Jt OiB1cHBlcmNhc2U7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQojc21kX2hlbHAgaDQg eyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAx cHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KI3Nt ZF9oZWxwIC5hdHQtbmFtZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KI3NtZF9oZWxwIC5tYW5k IHsgYmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyB9CiNzbWRfaGVs cCB0YWJsZSB7d2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1ib3R0b206 MWVtO30KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGgge2JvcmRlcjoxcHggc29saWQgIzk5 OTsgcGFkZGluZzouNWVtIDA7fQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1 YXJlOyB9CiNzbWRfaGVscCBsaSB7IG1hcmdpbi1sZWZ0OjM1cHg7IH0KI3NtZF9oZWxwIC5i cmVhayB7IG1hcmdpbi10b3A6NXB4OyB9Cjwvc3R5bGU+CjwhLS0gLS0tIEVORCBQTFVHSU4g Q1NTIC0tLSAtLT4KIjtzOjM6Im1kNSI7czozMjoiYWI4OWE1NTcyNGU2MGNmNTdjODA2ODUw OTMzYmVkYTQiO30=