<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE module [
  <!ELEMENT module (dtdversion,name,version,description*,help*,about*,requires*,file+)>
  <!ELEMENT dtdversion (#PCDATA)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT version (#PCDATA)>
  <!ELEMENT mincmsversion (#PCDATA)>
  <!ELEMENT description (#PCDATA)>
  <!ELEMENT help (#PCDATA)>
  <!ELEMENT about (#PCDATA)>
  <!ELEMENT requires (requiredname,requiredversion)>
  <!ELEMENT requiredname (#PCDATA)>
  <!ELEMENT requiredversion (#PCDATA)>
  <!ELEMENT file (filename,isdir,data)>
  <!ELEMENT filename (#PCDATA)>
  <!ELEMENT isdir (#PCDATA)>
  <!ELEMENT data (#PCDATA)>
]>
<module>
	<dtdversion>1.3</dtdversion>
	<name>TweetMgr</name>
	<version>1.0</version>
    <mincmsversion>1.12.2</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgZG9lcyB0aGlzIG1vZHVsZSBkbz88L2gzPgo8cD4KCVRoZSBnb2FsIG9mIHRoZSBUd2VldE1nciBtb2R1bGUgaXMgdG8gbWFrZSBzaG93aW5nIHR3ZWV0cyBmcm9tIGRpZmZlcmVudCBzb3VyY2VzIGFzIGVhc3kgYXMgcG9zc2libGUuPGJyIC8+CglNdWx0aXBsZSBzb3VyY2VzIGNhbiBiZSBjcmVhdGVkICh1c2VyIHByb2ZpbGVzLCBoYXNodGFncywgc2VhcmNoIHRlcm1zKSBhbmQgZ3JvdXBlZC48YnIgLz4KCVNvdXJjZXMgY2FuIGFsc28gYmUgY2FsbGVkIGluZGl2aWR1YWxseS4JCjwvcD4KCjxoMz5Ib3cgZG8gSSB1c2UgaXQ/PC9oMz4KPHA+CglUd2VldE1nciBtb2R1bGUgY2FuIGJlIHVzZWQgd2l0aCB0aGUgPHN0cm9uZz57VHdlZXRNZ3J9PC9zdHJvbmc+IHRhZyBpbiBldmVyeSBwYWdlIG9yIHRlbXBsYXRlLiBZb3UgY2FuIGVpdGhlciBzaG93IGEgZ3JvdXAgb2Ygc291cmNlcyBvciBjYWxsIHNvdXJjZXMgaW5kaXZpZHVhbGx5LiAoU2VlIHBhcmFtZXRlcnMpCjwvcD4KCjxoMz5Ib3cgZG9lcyBpdCB3b3JrPzwvaDM+CjxwPgoJQnkgZGVmYXVsdCB0aGUgZGF0YWJhc2Ugd2l0aCB0d2VldHMgaXMgcmVmcmVzaGVkIHdoZW4gdGhlIHtUd2VldE1ncn0gdGFnIGlzIGNhbGxlZCBvbiBhIHBhZ2UuPGJyIC8+CglJZiBhIHNwZWNpZmljIGdyb3VwIG9yIHNvdXJjZSBpcyBnaXZlbiBhcyBhIHBhcmFtZXRlciwgb25seSB0aG9zZSBzb3VyY2VzIHdpbGwgYmUgcmVmcmVzaGVkIHRvIGtlZXAgbG9hZGluZyB0aW1lIGFzIGxvdyBhcyBwb3NzaWJsZS48YnIgLz4KCVlvdSBjYW4gbGV0IHRoZSBkYXRhYmFzZSBiZSByZWZyZXNoZWQsIGV2ZW4gd2hlbiB0aGUgdGFnIGlzIG5vdCBjYWxsZWQgb24gYSBwYWdlLCBvbiB0aGUgc2V0dGluZ3MgdGFiLgoJWW91IGNhbiBhbHNvIHNldCB0aGUgdGltZSB0aGF0IHNob3VsZCBoYXZlIHBhc3NlZCBiZWZvcmUgYSBzb3VyY2UgaXMgcmVmcmVzaGVkLiBXZSByZWNvbW1lbmQgc2V0dGluZ3MgdGhpcyBhdCA1IG1pbnV0ZXMgKDMwMCBzZWNvbmRzKSB0byBrZWVwIGxvYWRpbmcgdGltZSBhcyBsb3cgYXMgcG9zc2libGUgYW5kIHRvIG5vdCBleGNlZWQgdGhlIG1heGl1bSBhbW91bnQgb2YgcmVxdWVzdHMgdG8gVHdpdHRlci4KPC9wPgoKPGgzPlVzZXJzPC9oMz4KPHA+CglJZiB5b3UgZG9uJ3Qgd2FudCB0byBzaG93IHR3ZWV0cyBmcm9tIGEgc3BlY2lmaWMgdXNlciB5b3UgY2FuIHNlYXJjaCBmb3IgdGhlIHVzZXIgaW4gdGhlIHVzZXJzIHRhYiBhbmQgZGVhY3RpdmF0ZSB0aGUgdXNlci48YnIgLz4KCVR3ZWV0cyBmcm9tIHRoaXMgdXNlciB3b24ndCBiZSBzYXZlZCBpbiB0aGUgZGF0YWJhc2UgYW5kIHdvbid0IGJlIHNob3duIGlmIGRlYWN0aXZhdGVkLgkKPC9wPgoKPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBjb250YWluIGFueSBjb21tZXJjaWFsIHN1cHBvcnQuIElmIHlvdSBoYXZlIHByb2JsZW1zLCBhc2sgZm9yIGhlbHAgaW4gdGhlOjwvcD4KPHVsPgoJPGxpPjxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZy8iIHRhcmdldD0iX2JsYW5rIj5DTVMgTWFkZSBTaW1wbGUgZm9ydW1zPC9hPiw8L2xpPgoJPGxpPjxhIGhyZWY9ImlyYzovL2lyYy5mcmVlbm9kZS5uZXQvY21zIiB0YXJnZXQ9Il9ibGFuayI+PGFiYnIgdGl0bGU9IkludGVybmV0IFJlbGF5IENoYXQiPklSQzwvYWJicj4gY2hhdDwvYT4sPC9saT4KCTxsaT5vciB3cml0ZSBhbiBlbWFpbCB0byB0aGUgYXV0aG9yPC9saT4KPC91bD4KCjxoMz5Db3B5cmlnaHQ8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMTYsIFJvbGYgVGphc3NlbnMgW2luZm8gYXQgY21zY2FuYmVzaW1wbGUgZG90IG9yZ10uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPGJyIC8+CjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiIHRhcmdldD0iX2JsYW5rIj5HTlUgUHVibGljIExpY2Vuc2UgdjM8L2E+LjxiciAvPgpIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZSZ0cmFkZTsuPGJyIC8+CllvdSBtYXkgb25seSB1c2UgdGhpcyBzb2Z0d2FyZSB3aGVuIHRoZXJlIGlzIGEgY2xlYXIgYW5kIG9idmlvdXMgaW5kaWNhdGlvbiBpbiB0aGUgYWRtaW4gc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIDxiPkNNUyBNYWRlIFNpbXBsZSZ0cmFkZTs8L2I+LjwvcD4KCjxiciAvPjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gZ3JvdXA9IiIgLSBJRCBvZiB0aGUgZ3JvdXAgdG8gc2hvdyB0d2VldHMgb2YuPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBzb3VyY2U9IiIgLSBJRCBvZiB0aGUgc291cmNlL3NvdXJjZXMgdG8gc2hvdyB0d2VldHMgb2YsIHNlcGFyYXRlZCBieSBjb21tYXMuIEZvciBleGFtcGxlIHtUd2VldE1nciBzb3VyY2U9IjEsMyJ9PC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsaW1pdD0iNSIgLSBEZWZhdWx0OiA1IC0gTnVtYmVyIG9mIHR3ZWV0cyB0byBzaG93LjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gdGVtcGxhdGU9IkRlZmF1bHQiIC0gVGVtcGxhdGUgdG8gYmUgdXNlZCB0byBzaG93IHRoZSB0d2VldHMuPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBSb2xmIFRqYXNzZW5zICZsdDtpbmZvIFthdF0gY21zY2FuYmVzaW1wbGUgW2RvdF0gb3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMDxiciAvPjxiciAvPkNoYW5nZSBIaXN0b3J5OjxiciAvPjx1bD4KCTxsaT48Yj5WZXJzaW9uIDEuMDwvYj4gKDIwMTYtMTAtMTMpPGJyIC8+CgkJLSBDb21wYXRpYmlsaXR5IGZpeGVzIGZvciBDTVNNUyAyLng8YnIgLz4KCQktIE1vZHVsZSBpcyBidWlsZCBmb3IgdGhlIENNU01TIDIueCBzZXJpZXMsIGJ1dCBpdCBhbHNvIHN1cHBvcnRzIDEuMTIuMiB0byBoZWxwIHVwZ3JhZGluZyBvbGRlciB3ZWJzaXRlczxiciAvPgoJCS0gQnVnIGZpeGVzPGJyIC8+CgkJLSBTZWN1cml0eSBmaXhlczxiciAvPgoJCS0gVXNlYWJpbGl0eSBpbXByb3ZlbWVudHM8YnIgLz4KCQk8YnIgLz4KCQktIDxiPldhcm5pbmc6PC9iPiBUd2VldE1nciBhbmQgQldUd2l0dGVyIGNhbid0IGJlIHByZXNlbnQgYXQgeW91ciBzaXRlIGF0IHRoZSBzYW1lIHRpbWUsIGJvdGggdXNlIHRoZSBzYW1lIFR3aXR0ZXIgYXV0aGVudGljYXRpb24gY2xhc3NlcyEKCQk8L2xpPgoJPGxpPlRoZSBUd2VldE1nciBtb2R1bGUgaXMgYSBmb3JrIG9mIHRoZSBCV1R3aXR0ZXIgbW9kdWxlLiBNYW55IHRoYW5rcyB0byBCdWlsZG5ldCBXZWJzZXJ2aWNlcyBmb3IgdGhlIGluaXRpYWwgbW9kdWxlLjwvbGk+CjwvdWw+PGJyIC8+]]></about>
	<description><![CDATA[Module for showing tweets, based on account, hash tag or search term.]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.activate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFR3ZWV0TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA0IC0gMjAxMSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDExIC0gMjAxNiBieSBUaGUgQ01TTVMgRGV2IFRlYW0KIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy90d2VldG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICggIWNtc21zKCkgKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdUd2VldE1nciAtIFVzZScpKSBleGl0OwoKLy8gSWYgd2UncmUgYWN0aXZhdGluZy9kZWFjdGl2YXRpbmcgYSBtZXNzYWdlCmlmICghZW1wdHkoJHBhcmFtc1snbWVzc2FnZUlEJ10pKXsKCS8vIENoZWNrIHRoZSBjdXJyZW50IHZhbHVlCgkkaXRlbSA9ICR0aGlzLT5fR2V0TWVzc2FnZSgkaWQsICRyZXR1cm5pZCwgJHBhcmFtc1snbWVzc2FnZUlEJ10pOwoJCgkkY3VycmVudF9zdGF0ZSA9ICRpdGVtWydBY3RpdmUnXTsKCS8vIFNldCBvcHBvc2l0ZQoJaWYgKCRjdXJyZW50X3N0YXRlID09IDEpewoJCSR1cGRhdGUgPSAwOwoJfSBlbHNlIHsKCQkkdXBkYXRlID0gMTsKCX0KCQoJLy8gU2V0IHF1ZXJ5LCB2YXJzLCBhbmQgcmVkaXJlY3QgcGFyYW1zCgkkcXVlcnlTdHJpbmcgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3JfbWVzc2FnZXMgU0VUIEFjdGl2ZT0/IFdIRVJFIElEPT8iOwoJJHZhcnMgPSBhcnJheSgkdXBkYXRlLCRwYXJhbXNbJ21lc3NhZ2VJRCddKTsKCSRyZWRpcmVjdF9wYXJhbXMgPSBhcnJheSgiYWN0aXZlX3RhYiIgPT4gJ21lc3NhZ2VzJywndGFiX21lc3NhZ2UnID0+ICR0aGlzLT5MYW5nKCd0YWJtZXNzYWdlX21lc3NhZ2VfYWN0aXZlJy4kdXBkYXRlKSApOwp9Ci8vIElmIHdlJ3JlIGFjdGl2YXRpbmcvZGVhY3RpdmF0aW5nIGEgdXNlcgplbHNlaWYgKCFlbXB0eSgkcGFyYW1zWyd1c2VySUQnXSkpewoJLy8gQ2hlY2sgdGhlIGN1cnJlbnQgdmFsdWUKCSRpdGVtID0gJHRoaXMtPl9HZXRVc2VyKCRpZCwgJHJldHVybmlkLCAkcGFyYW1zWyd1c2VySUQnXSk7CQoJJGN1cnJlbnRfc3RhdGUgPSAkaXRlbVsnQWN0aXZlJ107CgkvLyBTZXQgb3Bwb3NpdGUKCWlmICgkY3VycmVudF9zdGF0ZSA9PSAxKXsKCQkkdXBkYXRlID0gMDsKCX0gZWxzZSB7CgkJJHVwZGF0ZSA9IDE7Cgl9CgkvLyBTZXQgcXVlcnksIHZhcnMsIGFuZCByZWRpcmVjdCBwYXJhbXMKCSRxdWVyeVN0cmluZyA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV90d2VldG1ncl91c2VycyBTRVQgQWN0aXZlPT8gV0hFUkUgSUQ9PyI7CgkkdmFycyA9IGFycmF5KCR1cGRhdGUsJHBhcmFtc1sndXNlcklEJ10pOwoJJHJlZGlyZWN0X3BhcmFtcyA9IGFycmF5KCJhY3RpdmVfdGFiIiA9PiAndXNlcnMnLCd0YWJfbWVzc2FnZScgPT4gJHRoaXMtPkxhbmcoJ3RhYm1lc3NhZ2VfdXNlcl9hY3RpdmUnLiR1cGRhdGUpICk7Cn0KCS8vIElmIHdlJ3JlIGFjdGl2YXRpbmcvZGVhY3RpdmF0aW5nIGEgc291cmNlCmVsc2VpZiAoIWVtcHR5KCRwYXJhbXNbJ3NvdXJjZUlEJ10pKXsKCS8vIENoZWNrIHRoZSBjdXJyZW50IHZhbHVlCgkkaXRlbSA9ICR0aGlzLT5fR2V0U291cmNlKCRpZCwgJHJldHVybmlkLCAkcGFyYW1zWydzb3VyY2VJRCddKTsJCgkkY3VycmVudF9zdGF0ZSA9ICRpdGVtWydBY3RpdmUnXTsKCS8vIFNldCBvcHBvc2l0ZQoJaWYgKCRjdXJyZW50X3N0YXRlID09IDEpewoJCSR1cGRhdGUgPSAwOwoJfSBlbHNlIHsKCQkkdXBkYXRlID0gMTsKCX0KCS8vIFNldCBxdWVyeSwgdmFycywgYW5kIHJlZGlyZWN0IHBhcmFtcwoJJHF1ZXJ5U3RyaW5nID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX3NvdXJjZXMgU0VUIEFjdGl2ZT0/IFdIRVJFIElEPT8iOwoJJHZhcnMgPSBhcnJheSgkdXBkYXRlLCRwYXJhbXNbJ3NvdXJjZUlEJ10pOwoJJHJlZGlyZWN0X3BhcmFtcyA9IGFycmF5KCJhY3RpdmVfdGFiIiA9PiAnc291cmNlcycsJ3RhYl9tZXNzYWdlJyA9PiAkdGhpcy0+TGFuZygndGFibWVzc2FnZV9zb3VyY2VfYWN0aXZlJy4kdXBkYXRlKSApOwp9CgovLyBFeGVjdXRlIHF1ZXJ5CiRxdWVyeVJlc3VsdCA9JGRiLT5FeGVjdXRlKCRxdWVyeVN0cmluZywkdmFycyk7CmlmICgkcXVlcnlSZXN1bHQpewoJLy8gUmVkaXJlY3QJCgkkdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCwkcmVkaXJlY3RfcGFyYW1zKTsJCn0KCj8+]]></data>
	</file>
	<file>
	  <filename>/action.addtemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTW9kdWxlOiBUd2VldE1ncgojIEF1dGhvcjogUm9sZiBUamFzc2VucwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAxMSAtIDIwMTYgYnkgVGhlIENNU01TIERldiBUZWFtCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdHdlZXRtZ3IKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgppZiAoICFjbXNtcygpICkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVHdlZXRNZ3IgLSBDaGFuZ2UgVGVtcGxhdGVzJykpIGV4aXQ7CgovLyBGb3JtIHN1Ym1pdHRlZD8KaWYgKGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSl7CgkkcGFyYW1zID0gYXJyYXkoJ2FjdGl2ZV90YWInID0+ICd0ZW1wbGF0ZXMnKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwp9CgkKaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSl7CgkkdGhpcy0+U2V0VGVtcGxhdGUoJHBhcmFtc1sndGVtcGxhdGVfbmFtZSddLCRwYXJhbXNbJ3RlbXBsYXRlX2NvbnRlbnQnXSk7CgkkcGFyYW1zID0gYXJyYXkoJ3RhYl9tZXNzYWdlJz0+ICR0aGlzLT5MYW5nKCd0YWJtZXNzYWdlX3RlbXBsYXRlX2FkZCcpLCAnYWN0aXZlX3RhYicgPT4gJ3RlbXBsYXRlcycpOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7Cn0KCi8vIEdldCBkZWZhdWx0IHRlbXBsYXRlIGNvbnRlbnRzCiRmbiA9IGRpcm5hbWUoX19GSUxFX18pLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3RlbXBsYXRlcycuRElSRUNUT1JZX1NFUEFSQVRPUi4nZGVmYXVsdF90ZW1wbGF0ZS50cGwnOwppZiggZmlsZV9leGlzdHMoICRmbiApICkKICB7CiAgICAkZGVmYXVsdF90ZW1wbGF0ZSA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwogIH0gCgovLyBBc3NpZ25zCiRzbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0ICgkaWQsICdhZGR0ZW1wbGF0ZScsJHJldHVybmlkLCdwb3N0JywnJyxmYWxzZSwgJycsICRwYXJhbXMpKTsKJHNtYXJ0eS0+YXNzaWduKCduYW1lJywkdGhpcy0+TGFuZygnaW5wdXRfdGV4dF9uYW1lJykpOwokc21hcnR5LT5hc3NpZ24oJ2NvbnRlbnQnLCR0aGlzLT5MYW5nKCdpbnB1dF90ZXh0X2NvbnRlbnQnKSk7CiRzbWFydHktPmFzc2lnbigndGVtcGxhdGVfbmFtZScsJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCggJGlkLCAndGVtcGxhdGVfbmFtZScsICIiLCA1NSkpOwokc21hcnR5LT5hc3NpZ24oJ3RlbXBsYXRlX2NvbnRlbnQnLCR0aGlzLT5DcmVhdGVTeW50YXhBcmVhICgkaWQsICRkZWZhdWx0X3RlbXBsYXRlLCAndGVtcGxhdGVfY29udGVudCcpKTsKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnc3VibWl0JywgbGFuZygnc3VibWl0JykpKTsKJHNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnY2FuY2VsJywgbGFuZygnY2FuY2VsJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+QXNzaWduKCd2YXJzJyxubDJicigkdGhpcy0+TGFuZygnaGVscF90ZW1wbGF0ZVZhcnMnKSkpOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl9hZGR0ZW1wbGF0ZS50cGwnKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.add_edit_group.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFR3ZWV0TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA0IC0gMjAxMSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDExIC0gMjAxNiBieSBUaGUgQ01TTVMgRGV2IFRlYW0KIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy90d2VldG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICggIWNtc21zKCkgKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdUd2VldE1nciAtIFVzZScpKSBleGl0OwoKJHRoaXMtPkxvYWRKUygpOwoKaWYgKCFlbXB0eSgkcGFyYW1zWyd0YWJtZXNzYWdlJ10pKXsKCSR0aGlzLT5TaG93TWVzc2FnZSgkdGhpcy0+TGFuZygkcGFyYW1zWyd0YWJtZXNzYWdlJ10pKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIElGIEZPUk0gV0FTIFNFTlQKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmlmICghZW1wdHkoJHBhcmFtc1snc2VudCddKSl7CgkvLyBJZiBjYW5jZWwgd2FzIGNsaWNrZWQKCWlmIChpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpewoJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCJhY3RpdmVfdGFiIiA9PiAnZ3JvdXBzJykpOwkJCgl9CgkKCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gSWYgaXQncyBhbiB1cGRhdGUgb2YgYSBncm91cAoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglpZiAoJHBhcmFtc1snYWRkJ10gPT0gIm5vIil7CQkJCgkJLy8gVXBkYXRlIHNvdXJjZQoJCSR2YXJzID0gYXJyYXkoJHBhcmFtc1snVGl0bGUnXSxkYXRlKCJZLW0tZCBIOmk6cyIpLCRwYXJhbXNbJ0lEJ10pOwoJCSRxdWVyeVN0cmluZyA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV90d2VldG1ncl9zb3VyY2Vncm91cHMKCQlTRVQgCgkJCVRpdGxlCQkJPQkJPywJCQkKCQkJRGF0ZU1vZGlmaWVkCT0JCT8JCQkJCQkJCQkKCQlXSEVSRSBJRD0/CQkiOwoJCSRxdWVyeVJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsJHZhcnMpOwoJCQkJCgkJLy8gSWYgdGhlIHF1ZXJ5IHdhcyBzdWNjZXNzZnVsCgkJaWYgKCRxdWVyeVJlc3VsdCl7CgkJCQoJCQkvLyBSZW1vdmUgZ3JvdXAgLSBzb3VyY2UgbGlua3MKCQkJJHRoaXMtPl9EZWxldGVHcm91cEFzc2lnbm1lbnRzKCRwYXJhbXNbJ0lEJ10pOwkJCQoJCQkKCQkJLy8gQ3JlYXRlIGxpbmsgZ3JvdXAgLSBzb3VyY2UgbGlua3MKCQkJZm9yZWFjaCAoJHBhcmFtc1snc291cmNlJ10gYXMgJHNvdXJjZSl7CgkJCQkkaWQgPSAkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX3NvdXJjZXNfc291cmNlZ3JvdXBzX3NlcSIpOwoJCQkJJHF1ZXJ5U3RyaW5nID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3Jfc291cmNlc19zb3VyY2Vncm91cHMgKElELFNvdXJjZUlELFNvdXJjZWdyb3VwSUQpCgkJCQkJVkFMVUVTKD8sPyw/KQkKCQkJCQkiOwoJCQkJJHZhcnMgPSBhcnJheSgkaWQsJHNvdXJjZSwkcGFyYW1zWydJRCddKTsKCQkJCSRxdWVyeVJlc3VsdDIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCR2YXJzKTsKCQkJfQkJCQoJCQkKCQkJLy8gSWYgdGhlIHF1ZXJpZXMgd2VyZSBzdWNjZXNzZnVsCgkJCWlmICgkcXVlcnlSZXN1bHQyKXsKCQkJCS8vIElmIHN1Ym1pdCB3YXMgY2xpY2tlZCwgcmVkaXJlY3QuIERvIG5vdGhpbmcgaW4gY2FzZSBvZiBhcHBseQoJCQkJaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSl7CgkJCQkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoInRhYm1lc3NhZ2UiID0+ICJ0YWJtZXNzYWdlX2dyb3VwX2VkaXQiLCAiYWN0aXZlX3RhYiIgPT4gImdyb3VwcyIpKTsKCQkJCX0JCgkJCX0gCgkJCS8vIFNob3cgZXJyb3IgaW4gY2FzZSBxdWVyeSBkaWRuJ3Qgd29yawoJCQllbHNlIHsKCQkJCSR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdlcnJvcl9ncm91cF91cGRhdGUnKSk7CgkJCX0KCQl9IAoJCS8vIFNob3cgZXJyb3IgaW4gY2FzZSBxdWVyeSBkaWRuJ3Qgd29yawoJCWVsc2UgewoJCQkkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnZXJyb3JfZ3JvdXBfdXBkYXRlJykpOwoJCX0JCQoJfQkKCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gSWYgaXQncyBhIG5ldyBncm91cAoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgllbHNlaWYgKCRwYXJhbXNbJ2FkZCddID09ICJ5ZXMiKXsJCQoJCS8vIEdlbmVyYXRlIElECiAgICAJJHBhcmFtc1snSUQnXSA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3Jfc291cmNlZ3JvdXBzX3NlcSIpOwoJCQoJCS8vIEluc2VydAoJCSR2YXJzID0gYXJyYXkoJHBhcmFtc1snSUQnXSwkcGFyYW1zWydUaXRsZSddLGRhdGUoIlktbS1kIEg6aTpzIiksZGF0ZSgiWS1tLWQgSDppOnMiKSk7CgkJJHF1ZXJ5U3RyaW5nID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3Jfc291cmNlZ3JvdXBzCgkJCQkJCShJRCxUaXRsZSxEYXRlQ3JlYXRlZCxEYXRlTW9kaWZpZWQpCgkJCQkJCVZBTFVFUyg/LD8sPyw/KSI7CgkJJHF1ZXJ5UmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeVN0cmluZywkdmFycyk7CQkKCQkKCQkvLyBJZiB0aGUgcXVlcnkgd2FzIHN1Y2Nlc3NmdWwKCQlpZiAoJHF1ZXJ5UmVzdWx0KXsKCQkJLy8gQ3JlYXRlIGxpbmsgZ3JvdXAgLSBzb3VyY2UgbGlua3MKCQkJZm9yZWFjaCAoJHBhcmFtc1snc291cmNlJ10gYXMgJHNvdXJjZSl7CgkJCQkkaWQgPSAkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX3NvdXJjZXNfc291cmNlZ3JvdXBzX3NlcSIpOwoJCQkJJHF1ZXJ5U3RyaW5nID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3Jfc291cmNlc19zb3VyY2Vncm91cHMgKElELFNvdXJjZUlELFNvdXJjZWdyb3VwSUQpCgkJCQkJVkFMVUVTKD8sPyw/KQkKCQkJCQkiOwoJCQkJJHZhcnMgPSBhcnJheSgkaWQsJHNvdXJjZSwkcGFyYW1zWydJRCddKTsKCQkJCSRxdWVyeVJlc3VsdDIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCR2YXJzKTsKCQkJfQkJCQoJCQkKCQkJLy8gSWYgdGhlIHF1ZXJpZXMgd2VyZSBzdWNjZXNzZnVsCgkJCWlmICgkcXVlcnlSZXN1bHQyKXsKCQkJCS8vIElmIHN1Ym1pdCB3YXMgY2xpY2tlZCwgcmVkaXJlY3QuIERvIG5vdGhpbmcgaW4gY2FzZSBvZiBhcHBseQoJCQkJaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSl7CgkJCQkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoInRhYm1lc3NhZ2UiID0+ICJ0YWJtZXNzYWdlX2dyb3VwX2FkZCIsICJhY3RpdmVfdGFiIiA9PiAiZ3JvdXBzIikpOwoJCQkJfQkKCQkJfSAKCQkJLy8gU2hvdyBlcnJvciBpbiBjYXNlIHF1ZXJ5IGRpZG4ndCB3b3JrCgkJCWVsc2UgewoJCQkJJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2Vycm9yX2dyb3VwX2FkZCcpKTsKCQkJfQoJCX0gCgkJLy8gU2hvdyBlcnJvciBpbiBjYXNlIHF1ZXJ5IGRpZG4ndCB3b3JrCgkJZWxzZSB7CgkJCSR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdlcnJvcl9ncm91cF9hZGQnKSk7CgkJfQoJfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gR0VORVJBVEUgRk9STQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkvLyBJZiBhbiBJRCBpcyBnaXZlbiwgaXQncyBhbiB1cGRhdGUKCWlmICghZW1wdHkoJHBhcmFtc1snSUQnXSkpewkJCQoJCSRncm91cCA9ICR0aGlzLT5fR2V0R3JvdXAoJGlkLCAkcmV0dXJuaWQsICRwYXJhbXNbJ0lEJ10pOwkJCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJhZGQiLCR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsImFkZCIsIm5vIikpOwoJfSBlbHNlIHsKCQkvLyBObyBJRCwgc28gbWFrZSBibGFuayBpbnB1dHMKCQkkZ3JvdXAgPSBhcnJheSgiVGl0bGUiID0+ICIiKTsKCQkkcGFyYW1zWydJRCddID0gIiI7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJhZGQiLCR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsImFkZCIsInllcyIpKTsKCX0KCQoJLy8gQ3JlYXRlIElucHV0cwoJZm9yZWFjaCAoJGdyb3VwIGFzICRrZXkgPT4gJHZhbHVlKXsJCQoJCWlmICghaXNfYXJyYXkoJHZhbHVlKSl7CgkJCSR0aGlzLT5zbWFydHktPmFzc2lnbigka2V5LidfdGV4dCcsICR0aGlzLT5MYW5nKCdpbnB1dF90ZXh0XycuJGtleSkpOwoJCQkvLyBJZiBpdCdzIHRoZSB0eXBlIGlucHV0CQkJCgkJCSR0aGlzLT5zbWFydHktPmFzc2lnbigka2V5LidfaW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwka2V5LCR2YWx1ZSkpOwkJCQkKCQl9CQkKCX0KCQoJLy8gQ3JlYXRpbmcgQ2hlY2sgYm94ZXMgZm9yIHNvdXJjZSBhc3NpZ25tZW50cwoJJHNvdXJjZXMgPSAkdGhpcy0+R2V0U291cmNlcygkaWQsJHJldHVybmlkKTsJCgkkc291cmNlc19jaGVja2JveGVzID0gYXJyYXkoKTsJCglmb3JlYWNoICgkc291cmNlcyBhcyAkc291cmNlKXsKCQkvLyBDaGVjayBpZiBzb3VyY2UgaXMgYXNzaWduZWQgdG8gdGhpcyBncm91cAoJCSRxdWVyeVN0cmluZyA9ICJTRUxFQ1QgSUQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX3NvdXJjZXNfc291cmNlZ3JvdXBzIFdIRVJFIFNvdXJjZUlEPT8gQU5EIFNvdXJjZWdyb3VwSUQ9PyBMSU1JVCAxIjsKCQkkdmFycyA9IGFycmF5KCRzb3VyY2VbJ0lEJ10sJHBhcmFtc1snSUQnXSk7CgkJJHF1ZXJ5UmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeVN0cmluZywkdmFycyk7CgkJCiAJCWlmICgkcXVlcnlSZXN1bHQpewogCQkJJGZvdW5kID0gJHF1ZXJ5UmVzdWx0LT5GZXRjaFJvdygpOyAgCQkJCiAJCX0KCQkvLyBJZiBzb3VyY2UgaXMgYXNzaWduZWQgdG8gZ3JvdXAKCQlpZiAoIWVtcHR5KCRmb3VuZCkpewoJCQkkc291cmNlc19jaGVja2JveGVzWyRzb3VyY2VbJ1RpdGxlJ11dID0gJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnc291cmNlW10nLCRzb3VyY2VbJ0lEJ10sJHNvdXJjZVsnSUQnXSk7CQkJCgkJfSBlbHNlIHsKCQkJJHNvdXJjZXNfY2hlY2tib3hlc1skc291cmNlWydUaXRsZSddXSA9ICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ3NvdXJjZVtdJywkc291cmNlWydJRCddLCcwJyk7CgkJfQoJCQoJfQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzb3VyY2VzX2NoZWNrYm94ZXMnLCRzb3VyY2VzX2NoZWNrYm94ZXMpOwoJCgkKCS8vIENyZWF0ZSBmb3JtIHRhZ3MKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZm9ybV9zdGFydCcsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ2FkZF9lZGl0X2dyb3VwJywkcmV0dXJuaWQsJ3Bvc3QnLCdtdWx0aXBhcnQvZm9ybS1kYXRhJywnJywnJyxhcnJheSgic2VudCIgPT4gInllcyIsICJJRCIgPT4gJHBhcmFtc1snSUQnXSwgInRhYm1lc3NhZ2UiID0+ICJ0YWJtZXNzYWdlX2dyb3VwX2VkaXQiKSkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3JtX2VuZCcsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCBsYW5nKCdzdWJtaXQnKSkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhcHBseScsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdhcHBseScsIGxhbmcoJ2FwcGx5JykpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignY2FuY2VsJywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ2NhbmNlbCcsIGxhbmcoJ2NhbmNlbCcpKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3NvdXJjZXN0ZXh0JywkdGhpcy0+TGFuZygndGFiX3NvdXJjZXMnKSk7CgkKCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fYWRkX2VkaXRfZ3JvdXAudHBsJyk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.add_edit_source.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFR3ZWV0TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA0IC0gMjAxMSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDExIC0gMjAxNiBieSBUaGUgQ01TTVMgRGV2IFRlYW0KIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy90d2VldG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICggIWNtc21zKCkgKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdUd2VldE1nciAtIFVzZScpKSBleGl0OwoKJHRoaXMtPkxvYWRKUygpOwoKaWYgKCFlbXB0eSgkcGFyYW1zWyd0YWJtZXNzYWdlJ10pKXsKCSR0aGlzLT5TaG93TWVzc2FnZSgkdGhpcy0+TGFuZygkcGFyYW1zWyd0YWJtZXNzYWdlJ10pKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIElGIEZPUk0gV0FTIFNFTlQKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmlmICghZW1wdHkoJHBhcmFtc1snc2VudCddKSl7CgkvLyBJZiBjYW5jZWwgd2FzIGNsaWNrZWQKCWlmIChpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpewoJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCJhY3RpdmVfdGFiIiA9PiAnc291cmNlcycpKTsJCQoJfQoJCgkvLyBHZW5lcmF0ZSBYTUwgVVJMCgkkcGFyYW1zWydEYXRhJ10gPSBzdHJfcmVwbGFjZShhcnJheSgnIycsJ0AnKSwnJywkcGFyYW1zWydEYXRhJ10pOwoJJHhtbCA9IHVybGVuY29kZSgkcGFyYW1zWydEYXRhJ10pOwoJaWYgKCRwYXJhbXNbJ1R5cGUnXSA9PSAnYWNjb3VudCcpewoJCSR4bWwgPSAnc3RhdHVzZXMvdXNlcl90aW1lbGluZS5qc29uP3NjcmVlbl9uYW1lPScuJHhtbDsKCX0gZWxzZWlmICgkcGFyYW1zWydUeXBlJ10gPT0gJ3NlYXJjaCcpewoJCSR4bWwgPSAnc2VhcmNoL3R3ZWV0cy5qc29uP3E9Jy4keG1sOwoJfSBlbHNlaWYgKCRwYXJhbXNbJ1R5cGUnXSA9PSAnaGFzaHRhZycpewoJCSR4bWwgPSAnc2VhcmNoL3R3ZWV0cy5qc29uP3E9JTIzJy4keG1sOwoJfQkJCgkKCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gSWYgaXQncyBhbiB1cGRhdGUgb2YgYSBzb3VyY2UKCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJaWYgKCRwYXJhbXNbJ2FkZCddID09ICJubyIpewkJCQoJCS8vIFVwZGF0ZSBzb3VyY2UKCQkkdmFycyA9IGFycmF5KCRwYXJhbXNbJ1RpdGxlJ10sJHBhcmFtc1snVHlwZSddLCRwYXJhbXNbJ0RhdGEnXSwkeG1sLGRhdGUoIlktbS1kIEg6aTpzIiksJHBhcmFtc1snSUQnXSk7CgkJJHF1ZXJ5U3RyaW5nID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX3NvdXJjZXMKCQlTRVQgCgkJCVRpdGxlCQkJPQkJPywKCQkJVHlwZQkJCT0JCT8sCgkJCURhdGEJCQk9CQk/LAoJCQlYTUwJCQkJPQkJPywKCQkJRGF0ZU1vZGlmaWVkCT0JCT8JCQkJCQkJCQkKCQlXSEVSRSBJRD0/CQkiOwoJCSRxdWVyeVJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsJHZhcnMpOwoJCQkJCgkJLy8gSWYgdGhlIHF1ZXJ5IHdhcyBzdWNjZXNzZnVsCgkJaWYgKCRxdWVyeVJlc3VsdCl7CgkJCS8vIElmIHN1Ym1pdCB3YXMgY2xpY2tlZCwgcmVkaXJlY3QuIERvIG5vdGhpbmcgaW4gY2FzZSBvZiBhcHBseQoJCQlpZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0J10pKXsKCQkJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCJ0YWJtZXNzYWdlIiA9PiAidGFibWVzc2FnZV9zb3VyY2VfZWRpdCIsICJhY3RpdmVfdGFiIiA9PiAic291cmNlcyIpKTsKCQkJfQkJCQoJCX0gCgkJLy8gU2hvdyBlcnJvciBpbiBjYXNlIHF1ZXJ5IGRpZG4ndCB3b3JrCgkJZWxzZSB7CgkJCSR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdlcnJvcl9zb3VyY2VfdXBkYXRlJykpOwoJCX0JCQoJfQkKCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gSWYgaXQncyBhIG5ldyBzb3VyY2UKCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZWxzZWlmICgkcGFyYW1zWydhZGQnXSA9PSAieWVzIil7CQkKCQkvLyBHZW5lcmF0ZSBJRAogICAgCSRwYXJhbXNbJ0lEJ10gPSAkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX3NvdXJjZXNfc2VxIik7CgkJCgkJLy8gSW5zZXJ0CgkJJHZhcnMgPSBhcnJheSgkcGFyYW1zWydJRCddLCRwYXJhbXNbJ1RpdGxlJ10sJHBhcmFtc1snVHlwZSddLCRwYXJhbXNbJ0RhdGEnXSwkeG1sLGRhdGUoIlktbS1kIEg6aTpzIiksZGF0ZSgiWS1tLWQgSDppOnMiKSk7CgkJJHF1ZXJ5U3RyaW5nID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3Jfc291cmNlcwoJCQkJCQkoSUQsVGl0bGUsVHlwZSxEYXRhLFhNTCxEYXRlQ3JlYXRlZCxEYXRlTW9kaWZpZWQpCgkJCQkJCVZBTFVFUyg/LD8sPyw/LD8sPyw/KSI7CgkJJHF1ZXJ5UmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeVN0cmluZywkdmFycyk7CQkJCgkJCgkJLy8gSWYgdGhlIHF1ZXJ5IHdhcyBzdWNjZXNzZnVsCgkJaWYgKCRxdWVyeVJlc3VsdCl7CQkJCgkJCS8vIElmIHN1Ym1pdCB3YXMgY2xpY2tlZCwgcmVkaXJlY3QuIERvIG5vdGhpbmcgaW4gY2FzZSBvZiBhcHBseQoJCQlpZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0J10pKXsKCQkJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCJ0YWJtZXNzYWdlIiA9PiAidGFibWVzc2FnZV9zb3VyY2VfYWRkIiwgImFjdGl2ZV90YWIiID0+ICJzb3VyY2VzIikpOwoJCQl9CgkJCQoJCX0gCgkJLy8gU2hvdyBlcnJvciBpbiBjYXNlIHF1ZXJ5IGRpZG4ndCB3b3JrCgkJZWxzZSB7CgkJCSR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdlcnJvcl9zb3VyY2VfYWRkJykpOwoJCX0KCX0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEdFTkVSQVRFIEZPUk0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJLy8gSWYgYW4gSUQgaXMgZ2l2ZW4sIGl0J3MgYW4gdXBkYXRlCglpZiAoIWVtcHR5KCRwYXJhbXNbJ0lEJ10pKXsJCQkKCQkkc291cmNlID0gJHRoaXMtPl9HZXRTb3VyY2UoJGlkLCAkcmV0dXJuaWQsICRwYXJhbXNbJ0lEJ10pOwkJCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJhZGQiLCR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsImFkZCIsIm5vIikpOwoJfSBlbHNlIHsKCQkvLyBObyBJRCwgc28gbWFrZSBibGFuayBpbnB1dHMKCQkkc291cmNlID0gYXJyYXkoIlRpdGxlIiA9PiAiIiwiVHlwZSIgPT4gImFjY291bnQiLCJEYXRhIiA9PiAiIik7CgkJJHBhcmFtc1snSUQnXSA9ICIiOwoJCSR0aGlzLT5zbWFydHktPmFzc2lnbigiYWRkIiwkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCJhZGQiLCJ5ZXMiKSk7Cgl9CgkKCS8vIENoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIHByZXBlbmQgYW55dGhpbmcgdG8gdGhlIGRhdGEJCglpZiAoJHNvdXJjZVsnVHlwZSddID09ICdhY2NvdW50Jyl7CgkJJHByZWZpeCA9ICdAJzsKCX0gZWxzZWlmICgkc291cmNlWydUeXBlJ10gPT0gJ2hhc2h0YWcnKXsKCQkkcHJlZml4ID0gJyMnOwoJfSBlbHNlIHsKCQkkcHJlZml4ID0gJyc7Cgl9CgkKCS8vIENyZWF0ZSBpbnB1dHMKCWlmICghZW1wdHkoJHNvdXJjZSkpewoJCWZvcmVhY2ggKCRzb3VyY2UgYXMgJGtleSA9PiAkdmFsdWUpewkJCgkJCWlmICghaXNfYXJyYXkoJHZhbHVlKSl7CgkJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJGtleS4nX3RleHQnLCAkdGhpcy0+TGFuZygnaW5wdXRfdGV4dF8nLiRrZXkpKTsKCQkJCS8vIElmIGl0J3MgdGhlIHR5cGUgaW5wdXQKCQkJCWlmICgka2V5ID09ICJUeXBlIil7CgkJCQkJJHR5cGVzID0gYXJyYXkoJHRoaXMtPkxhbmcoJ3R5cGVzX2FjY291bnQnKSA9PiAnYWNjb3VudCcsJHRoaXMtPkxhbmcoJ3R5cGVzX3NlYXJjaCcpID0+ICdzZWFyY2gnLCR0aGlzLT5MYW5nKCd0eXBlc19oYXNodGFnJykgPT4gJ2hhc2h0YWcnKTsJCQkJCQkgCgkJCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCRrZXkuJ19pbnB1dCcsJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCRrZXksJHR5cGVzLCcnLCRzb3VyY2VbJ1R5cGUnXSkpOwoJCQkJfSAKCQkJCWVsc2VpZiAoJGtleSA9PSAiRGF0YSIpewoJCQkJCSR0aGlzLT5zbWFydHktPmFzc2lnbigka2V5LidfaW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwka2V5LCRwcmVmaXguJHZhbHVlKSk7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJGtleS4nX2lucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJGtleSwkdmFsdWUpKTsKCQkJCX0JCQoJCQkJCQoJCQl9CQkKCQl9Cgl9CgkKCQoJLy8gQ3JlYXRlIGZvcm0gdGFncwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3JtX3N0YXJ0JywkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwnYWRkX2VkaXRfc291cmNlJywkcmV0dXJuaWQsJ3Bvc3QnLCdtdWx0aXBhcnQvZm9ybS1kYXRhJywnJywnJyxhcnJheSgic2VudCIgPT4gInllcyIsICJJRCIgPT4gJHBhcmFtc1snSUQnXSwgInRhYm1lc3NhZ2UiID0+ICJ0YWJtZXNzYWdlX3NvdXJjZV9lZGl0IikpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZm9ybV9lbmQnLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgbGFuZygnc3VibWl0JykpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignYXBwbHknLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnYXBwbHknLCBsYW5nKCdhcHBseScpKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdjYW5jZWwnLCBsYW5nKCdjYW5jZWwnKSkpOwoJCgkvLyBUZW1wbGF0ZQoJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl9hZGRfZWRpdF9zb3VyY2UudHBsJyk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTW9kdWxlOiBUd2VldE1ncgojIEF1dGhvcjogUm9sZiBUamFzc2VucwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAxMSAtIDIwMTYgYnkgVGhlIENNU01TIERldiBUZWFtCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdHdlZXRtZ3IKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgppZiAoICFjbXNtcygpICkgZXhpdDsKCi8vIEdldCB0ZW1wbGF0ZQokdGVtcGxhdGUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY3VycmVudF90ZW1wbGF0ZScpOwoKLy8gSWYgYSB0ZW1wbGF0ZSBoYXMgYmVlbiBnaXZlbgppZiAoIWVtcHR5KCRwYXJhbXNbJ3RlbXBsYXRlJ10pKXsKCS8vIENoZWNrIGlmIGdpdmVuIHRlbXBsYXRlIGV4aXN0cwoJaWYgKCR0aGlzLT5HZXRUZW1wbGF0ZSgkcGFyYW1zWyd0ZW1wbGF0ZSddKSl7CgkJJHRlbXBsYXRlID0gJHBhcmFtc1sndGVtcGxhdGUnXTsKCX0KfQoKLy8gTnVtYmVyIG9mIHR3ZWV0cwokbGltaXQgPSA1OwovLyBJZiBhIGxpbWl0IGhhcyBiZWVuIGdpdmVuCmlmICghZW1wdHkoJHBhcmFtc1snbGltaXQnXSkpewoJJGxpbWl0ID0gJHBhcmFtc1snbGltaXQnXTsKfQoKLy8gU3BlY2lmaWMgc291cmNlIHRvIHNob3cKJHNvdXJjZSA9ICIiOwovLyBJZiBhIHNvdXJjZSBoYXMgYmVlbiBnaXZlbgppZiAoIWVtcHR5KCRwYXJhbXNbJ3NvdXJjZSddKSl7Cgkkc291cmNlID0gJHBhcmFtc1snc291cmNlJ107Cn0KCi8vIFNwZWNpZmljIGdyb3VwIHRvIHNob3cKJGdyb3VwID0gIiI7CmlmICghZW1wdHkoJHBhcmFtc1snZ3JvdXAnXSkpewoJJGdyb3VwID0gJHBhcmFtc1snZ3JvdXAnXTsKCS8vIFVuc2V0IHNvdXJjZSBhZ2FpbiwgeW91IGNhbiBlaXRoZXIgc2hvdyBhIHNvdXJjZSBvciBhIGdyb3VwCgkkc291cmNlID0gIiI7Cn0KCi8vIFJlZnJlc2ggZGF0YQppZiAoISR0aGlzLT5HZXRQcmVmZXJlbmNlKCdFdmVyeUxvYWQnKSl7CgkkdGhpcy0+UmVmcmVzaFR3ZWV0cygkaWQsJHJldHVybmlkLCRncm91cCwkc291cmNlLCRsaW1pdCk7CQp9CgovLyBHZXQgdGhlIGRhdGEKJHR3ZWV0cyA9ICR0aGlzLT5HZXRUd2VldHMoJGlkLCRyZXR1cm5pZCwkZ3JvdXAsJHNvdXJjZSwkbGltaXQpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywkdHdlZXRzKTsKCi8vIFNob3cgdGhlIHRlbXBsYXRlCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgkdGVtcGxhdGUpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTW9kdWxlOiBUd2VldE1ncgojIEF1dGhvcjogUm9sZiBUamFzc2VucwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAxMSAtIDIwMTYgYnkgVGhlIENNU01TIERldiBUZWFtCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdHdlZXRtZ3IKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgppZiAoICFjbXNtcygpICkgZXhpdDsKCiR0aGlzLT5Mb2FkSlMoKTsKCmVjaG8gJzxkaXYgaWQ9InR3ZWV0bWdyIj4nOwoKLy8gVGFiIGhlYWRlcnMgJiBBY3RpdmUgdGFiCmVjaG8gJHRoaXMtPlN0YXJ0VGFiSGVhZGVycygpOwoKJGFjdGl2ZV90YWIgPSAnJzsKaWYgKCFlbXB0eSgkcGFyYW1zWydhY3RpdmVfdGFiJ10pKXsKCSRhY3RpdmVfdGFiID0gJHBhcmFtc1snYWN0aXZlX3RhYiddOwp9CgppZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVHdlZXRNZ3IgLSBVc2UnKSApCnsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignbWVzc2FnZXMnLCR0aGlzLT5MYW5nKCd0YWJfbWVzc2FnZXMnKSwgKCdtZXNzYWdlcycgPT0gJGFjdGl2ZV90YWIpP3RydWU6ZmFsc2UpOwoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCd1c2VycycsJHRoaXMtPkxhbmcoJ3RhYl91c2VycycpLCAoJ3VzZXJzJyA9PSAkYWN0aXZlX3RhYik/dHJ1ZTpmYWxzZSk7CgllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3NvdXJjZXMnLCR0aGlzLT5MYW5nKCd0YWJfc291cmNlcycpLCAoJ3NvdXJjZXMnID09ICRhY3RpdmVfdGFiKT90cnVlOmZhbHNlKTsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignZ3JvdXBzJywkdGhpcy0+TGFuZygndGFiX2dyb3VwcycpLCAoJ2dyb3VwcycgPT0gJGFjdGl2ZV90YWIpP3RydWU6ZmFsc2UpOwkKfQoKaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1R3ZWV0TWdyIC0gQ2hhbmdlIFRlbXBsYXRlcycpICkKewoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCd0ZW1wbGF0ZXMnLCR0aGlzLT5MYW5nKCd0YWJfdGVtcGxhdGVzJyksICgndGVtcGxhdGVzJyA9PSAkYWN0aXZlX3RhYik/dHJ1ZTpmYWxzZSk7Cn0KCmlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdUd2VldE1nciAtIENoYW5nZSBTZXR0aW5ncycpICkKewoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdtb2R1bGVfc2V0dGluZ3MnLCR0aGlzLT5MYW5nKCd0YWJfc2V0dGluZ3MnKSwgKCdtb2R1bGVfc2V0dGluZ3MnID09ICRhY3RpdmVfdGFiKT90cnVlOmZhbHNlKTsKfQogIAplY2hvICR0aGlzLT5FbmRUYWJIZWFkZXJzKCk7CgovLyBUYWIgY29udGVudAplY2hvICR0aGlzLT5TdGFydFRhYkNvbnRlbnQoKTsKCmlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdUd2VldE1nciAtIFVzZScpICkKewoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ21lc3NhZ2VzJywgJHBhcmFtcyk7CglpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvYWRtaW5fbWVzc2FnZXN0YWIucGhwJyk7CgllY2hvICR0aGlzLT5FbmRUYWIoKTsKCQoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3VzZXJzJywgJHBhcmFtcyk7CglpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvYWRtaW5fdXNlcnN0YWIucGhwJyk7CgllY2hvICR0aGlzLT5FbmRUYWIoKTsKCQoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3NvdXJjZXMnLCAkcGFyYW1zKTsKCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9hZG1pbl9zb3VyY2VzdGFiLnBocCcpOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7CgkKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdncm91cHMnLCAkcGFyYW1zKTsKCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9hZG1pbl9ncm91cHN0YWIucGhwJyk7CgllY2hvICR0aGlzLT5FbmRUYWIoKTsKfQoKaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1R3ZWV0TWdyIC0gQ2hhbmdlIFRlbXBsYXRlcycpICkKewoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3RlbXBsYXRlcycsICRwYXJhbXMpOwkKCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9hZG1pbl90ZW1wbGF0ZXN0YWIucGhwJyk7CgllY2hvICR0aGlzLT5FbmRUYWIoKTsKfQoKaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1R3ZWV0TWdyIC0gQ2hhbmdlIFNldHRpbmdzJykgKQp7CgllY2hvICR0aGlzLT5TdGFydFRhYignbW9kdWxlX3NldHRpbmdzJywgJHBhcmFtcyk7CglpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvYWRtaW5fbW9kdWxlX3NldHRpbmdzLnBocCcpOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7Cn0KICAKZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOwoKZWNobyAnPC9kaXY+JzsKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.delete.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTW9kdWxlOiBUd2VldE1ncgojIEF1dGhvcjogUm9sZiBUamFzc2VucwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAxMSAtIDIwMTYgYnkgVGhlIENNU01TIERldiBUZWFtCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdHdlZXRtZ3IKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgppZiAoICFjbXNtcygpICkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVHdlZXRNZ3IgLSBVc2UnKSkgZXhpdDsKCi8vIElmIHdlJ3JlIGRlbGV0aW5nIGEgc291cmNlCmlmICghZW1wdHkoJHBhcmFtc1snc291cmNlSUQnXSkpewoJLy8gRGVsZXRlIHRoZSBzb3VyY2UgLSBncm91cCBhc3NpZ25tZW50cwoJJHRoaXMtPl9EZWxldGVHcm91cEFzc2lnbm1lbnRzKCcnLCRwYXJhbXNbJ3NvdXJjZUlEJ10pOwoJLy8gRGVsZXRlIHRoZSBzb3VyY2UKCSR0aGlzLT5fRGVsZXRlU291cmNlKCRwYXJhbXNbJ3NvdXJjZUlEJ10pOwoJLy8gRGVsZXRlIHRoZSBtZXNzYWdlcyBmcm9tIHRoaXMgc291cmNlCgkkdGhpcy0+X0RlbGV0ZU1lc3NhZ2VzKCRwYXJhbXNbJ3NvdXJjZUlEJ10pOwoJLy8gQXNzaWduaW5nIHJlZGlyZWN0IHBhcmFtZXRlcnMJCgkkcmVkaXJlY3RfcGFyYW1zID0gYXJyYXkoImFjdGl2ZV90YWIiID0+ICdzb3VyY2VzJywndGFiX21lc3NhZ2UnID0+ICd0YWJtZXNzYWdlX3NvdXJjZV9kZWxldGUnKTsKfQovLyBJZiB3ZSdyZSBkZWxldGluZyBhIGdyb3VwCmVsc2VpZiAoIWVtcHR5KCRwYXJhbXNbJ2dyb3VwSUQnXSkpewoJLy8gRGVsZXRlIHRoZSBzb3VyY2UgLSBncm91cCBhc3NpZ25tZW50cwoJJHRoaXMtPl9EZWxldGVHcm91cEFzc2lnbm1lbnRzKCRwYXJhbXNbJ2dyb3VwSUQnXSwnJyk7CgkvLyBEZWxldGUgdGhlIGdyb3VwCgkkdGhpcy0+X0RlbGV0ZUdyb3VwKCRwYXJhbXNbJ2dyb3VwSUQnXSk7CgkvLyBBc3NpZ25pbmcgcmVkaXJlY3QgcGFyYW1ldGVycwoJJHJlZGlyZWN0X3BhcmFtcyA9IGFycmF5KCJhY3RpdmVfdGFiIiA9PiAnZ3JvdXBzJywndGFiX21lc3NhZ2UnID0+ICd0YWJtZXNzYWdlX2dyb3VwX2RlbGV0ZScpOwp9Ci8vIElmIHdlJ3JlIGRlbGV0aW5nIGEgdGVtcGxhdGUKZWxzZWlmICghZW1wdHkoJHBhcmFtc1sndGVtcGxhdGVfbmFtZSddKSl7CglpZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0NoYW5nZSBCV01hcHMgVGVtcGxhdGVzJykpIGV4aXQ7CgkvLyBEZWxldGUgdGhlIHRlbXBsYXRlCgkkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJHBhcmFtc1sndGVtcGxhdGVfbmFtZSddKTsKCS8vIEFzc2lnbmluZyByZWRpcmVjdCBwYXJhbWV0ZXJzCgkkcmVkaXJlY3RfcGFyYW1zID0gYXJyYXkoJ3RhYl9tZXNzYWdlJz0+ICR0aGlzLT5MYW5nKCd0YWJtZXNzYWdlX3RlbXBsYXRlX2RlbGV0ZScpLCAnYWN0aXZlX3RhYicgPT4gJ3RlbXBsYXRlcycpOwp9CgokdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCwkcmVkaXJlY3RfcGFyYW1zKTsJCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.edittemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTW9kdWxlOiBUd2VldE1ncgojIEF1dGhvcjogUm9sZiBUamFzc2VucwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAxMSAtIDIwMTYgYnkgVGhlIENNU01TIERldiBUZWFtCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdHdlZXRtZ3IKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgppZiAoICFjbXNtcygpICkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVHdlZXRNZ3IgLSBDaGFuZ2UgVGVtcGxhdGVzJykpIGV4aXQ7CgovLyBGb3JtIHN1Ym1pdHRlZD8KaWYgKGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSl7CgkkcGFyYW1zID0gYXJyYXkoJ2FjdGl2ZV90YWInID0+ICd0ZW1wbGF0ZXMnKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwp9CgkKaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSl7CgkkdGhpcy0+U2V0VGVtcGxhdGUoJHBhcmFtc1sndGVtcGxhdGVfbmFtZSddLCRwYXJhbXNbJ3RlbXBsYXRlX2NvbnRlbnQnXSk7CgkkcGFyYW1zID0gYXJyYXkoJ3RhYl9tZXNzYWdlJz0+ICR0aGlzLT5MYW5nKCd0YWJtZXNzYWdlX3RlbXBsYXRlX2VkaXQnKSwgJ2FjdGl2ZV90YWInID0+ICd0ZW1wbGF0ZXMnKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwp9CgovLyBHZXQgZGVmYXVsdCB0ZW1wbGF0ZSBjb250ZW50cwokZGVmYXVsdF90ZW1wbGF0ZSA9ICR0aGlzLT5HZXRUZW1wbGF0ZSgnRGVmYXVsdCcpOwoKLy8gQXNzaWducwokc21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLCAnZWRpdHRlbXBsYXRlJywkcmV0dXJuaWQsJ3Bvc3QnLCcnLGZhbHNlLCAnJywgJHBhcmFtcykpOwokc21hcnR5LT5hc3NpZ24oJ25hbWUnLCR0aGlzLT5MYW5nKCdpbnB1dF90ZXh0X25hbWUnKSk7CiRzbWFydHktPmFzc2lnbignY29udGVudCcsJHRoaXMtPkxhbmcoJ2lucHV0X3RleHRfY29udGVudCcpKTsKJHNtYXJ0eS0+YXNzaWduKCd0ZW1wbGF0ZV9uYW1lJywkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oICRpZCwgJ3RlbXBsYXRlX25hbWUnLCAkcGFyYW1zWyd0ZW1wbGF0ZV9uYW1lJ10sIDU1KSk7CiRzbWFydHktPmFzc2lnbigndGVtcGxhdGVfY29udGVudCcsJHRoaXMtPkNyZWF0ZVN5bnRheEFyZWEgKCRpZCwgJHRoaXMtPkdldFRlbXBsYXRlKCRwYXJhbXNbJ3RlbXBsYXRlX25hbWUnXSksICd0ZW1wbGF0ZV9jb250ZW50JykpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdzdWJtaXQnLCBsYW5nKCdzdWJtaXQnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdjYW5jZWwnLCBsYW5nKCdjYW5jZWwnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwokc21hcnR5LT5Bc3NpZ24oJ3ZhcnMnLG5sMmJyKCR0aGlzLT5MYW5nKCdoZWxwX3RlbXBsYXRlVmFycycpKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX2VkaXR0ZW1wbGF0ZS50cGwnKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.login.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFR3ZWV0TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA0IC0gMjAxMSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDExIC0gMjAxNiBieSBUaGUgQ01TTVMgRGV2IFRlYW0KIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy90d2VldG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICggIWNtc21zKCkgKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdUd2VldE1nciAtIENoYW5nZSBTZXR0aW5ncycpKSBleGl0OwoKaWYgKCFlbXB0eSgkcGFyYW1zWyd0YWJtZXNzYWdlJ10pKXsKCSR0aGlzLT5TaG93TWVzc2FnZSgkdGhpcy0+TGFuZygkcGFyYW1zWyd0YWJtZXNzYWdlJ10pKTsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbJ2xvZ291dCddKSl7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnb2F1dGhfdmFsaWQnLDApOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoImFjdGl2ZV90YWIiID0+ICdtb2R1bGVfc2V0dGluZ3MnLCd0YWJfbWVzc2FnZScgPT4gJHRoaXMtPkxhbmcoJ3RhYm1lc3NhZ2VfbG9nZ2Vkb3V0JykgKSk7CglleGl0KCk7Cn0KCmlmIChpc3NldCgkX1JFUVVFU1RbJ29hdXRoX3ZlcmlmaWVyJ10pKXsKCS8vIENyZWF0ZSBUd2l0dGVyb0F1dGggb2JqZWN0IHdpdGggYXBwIGtleS9zZWNyZXQgYW5kIHRva2VuIGtleS9zZWNyZXQgZnJvbSBkZWZhdWx0IHBoYXNlCgkkdGhpcy0+Y29ubmVjdGlvbiA9IG5ldyBUd2l0dGVyT0F1dGgoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NvbnN1bWVyX2tleScsJycpLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY29uc3VtZXJfc2VjcmV0JywnJyksICRfU0VTU0lPTlsnb2F1dGhfdG9rZW4nXSwgJF9TRVNTSU9OWydvYXV0aF90b2tlbl9zZWNyZXQnXSk7CQoJLy8gUmVxdWVzdCBhY2Nlc3MgdG9rZW5zIGZyb20gdHdpdHRlcgoJJGFjY2Vzc190b2tlbiA9ICR0aGlzLT5jb25uZWN0aW9uLT5nZXRBY2Nlc3NUb2tlbigkX1JFUVVFU1RbJ29hdXRoX3ZlcmlmaWVyJ10pOwkJCgkvLyBSZW1vdmUgbm8gbG9uZ2VyIG5lZWRlZCByZXF1ZXN0IHRva2VucwoJdW5zZXQoJF9TRVNTSU9OWydvYXV0aF90b2tlbiddKTsKCXVuc2V0KCRfU0VTU0lPTlsnb2F1dGhfdG9rZW5fc2VjcmV0J10pOwkKCS8vIElmIEhUVFAgcmVzcG9uc2UgaXMgMjAwIGNvbnRpbnVlIG90aGVyd2lzZSBzZW5kIHRvIGNvbm5lY3QgcGFnZSB0byByZXRyeQoJaWYgKCR0aGlzLT5jb25uZWN0aW9uLT5odHRwX2NvZGUgPT0gMjAwKSB7CQoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdvYXV0aF90b2tlbicsJGFjY2Vzc190b2tlblsnb2F1dGhfdG9rZW4nXSk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ29hdXRoX3Rva2VuX3NlY3JldCcsJGFjY2Vzc190b2tlblsnb2F1dGhfdG9rZW5fc2VjcmV0J10pOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdvYXV0aF92YWxpZCcsMSk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ29hdXRoX3NjcmVlbm5hbWUnLCRhY2Nlc3NfdG9rZW5bJ3NjcmVlbl9uYW1lJ10pOwkJCgkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoImFjdGl2ZV90YWIiID0+ICdtb2R1bGVfc2V0dGluZ3MnLCAndGFiX21lc3NhZ2UnID0+ICR0aGlzLT5MYW5nKCd0YWJtZXNzYWdlX2xvZ2dlZGluJykgKSk7CQoJfQp9IGVsc2UgewoJJHRoaXMtPmNvbm5lY3Rpb24gPSBuZXcgVHdpdHRlck9BdXRoKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjb25zdW1lcl9rZXknLCcnKSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NvbnN1bWVyX3NlY3JldCcsJycpKTsKCS8vIEdldCB0ZW1wb3JhcnkgY3JlZGVudGlhbHMKCSRyZXF1ZXN0X3Rva2VuID0gJHRoaXMtPmNvbm5lY3Rpb24tPmdldFJlcXVlc3RUb2tlbigkdGhpcy0+Y3VyUGFnZVVSTCgpKTsKCQoJLy8gU2F2ZSB0ZW1wb3JhcnkgY3JlZGVudGlhbHMgdG8gc2Vzc2lvbgoJJF9TRVNTSU9OWydvYXV0aF90b2tlbiddID0gJHRva2VuID0gJHJlcXVlc3RfdG9rZW5bJ29hdXRoX3Rva2VuJ107CgkkX1NFU1NJT05bJ29hdXRoX3Rva2VuX3NlY3JldCddID0gJHJlcXVlc3RfdG9rZW5bJ29hdXRoX3Rva2VuX3NlY3JldCddOwoJCgkvLyBJZiBsYXN0IGNvbm5lY3Rpb24gZmFpbGVkIGRvbid0IGRpc3BsYXkgYXV0aG9yaXphdGlvbiBsaW5rCglzd2l0Y2ggKCR0aGlzLT5jb25uZWN0aW9uLT5odHRwX2NvZGUpIHsKCSAgY2FzZSAyMDA6CgkgICAgLy8gQnVpbGQgYXV0aG9yaXplIFVSTCBhbmQgcmVkaXJlY3QgdXNlciB0byBUd2l0dGVyCgkgICAgJHVybCA9ICR0aGlzLT5jb25uZWN0aW9uLT5nZXRBdXRob3JpemVVUkwoJHRva2VuKTsKCSAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHVybCk7IAoJICAgIGJyZWFrOwoJICBkZWZhdWx0OgoJICAgIC8vIFNob3cgbm90aWZpY2F0aW9uIGlmIHNvbWV0aGluZyB3ZW50IHdyb25nCgkgICAgZWNobyAnQ291bGQgbm90IGNvbm5lY3QgdG8gVHdpdHRlci4gUmVmcmVzaCB0aGUgcGFnZSBvciB0cnkgYWdhaW4gbGF0ZXIuJzsKCX0KfQoKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.setdefaulttemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFR3ZWV0TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA0IC0gMjAxMSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDExIC0gMjAxNiBieSBUaGUgQ01TTVMgRGV2IFRlYW0KIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy90d2VldG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICggIWNtc21zKCkgKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdUd2VldE1nciAtIENoYW5nZSBUZW1wbGF0ZXMnKSkgZXhpdDsKCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjdXJyZW50X3RlbXBsYXRlJywkcGFyYW1zWyd0ZW1wbGF0ZV9uYW1lJ10pOwoKJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZSc9PiAkdGhpcy0+TGFuZygndGFibWVzc2FnZV90ZW1wbGF0ZV9kZWZhdWx0JyksICdhY3RpdmVfdGFiJyA9PiAndGVtcGxhdGVzJyk7CiR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/admin_groupstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFR3ZWV0TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA0IC0gMjAxMSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDExIC0gMjAxNiBieSBUaGUgQ01TTVMgRGV2IFRlYW0KIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy90d2VldG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICggIWNtc21zKCkgKSBleGl0OwoKJGFkbWludGhlbWUgPSBjbXNfdXRpbHM6OmdldF90aGVtZV9vYmplY3QoKTsKCi8vIFNldCBzb21lIHZhcnMKJGZpZWxkcyA9IGFycmF5KCJJRCIsIlRpdGxlIiwiRGF0ZUNyZWF0ZWQiKTsKJHByZWZpeCA9ICdzb3VyY2Vncm91cHNfJzsKCi8vIFBhZ2luZwokcGVyX3BhZ2UgPSAxMDA7CiRwYWdlID0gMTsKaWYgKCFlbXB0eSgkcGFyYW1zWydwYWdlJ10pKXsKCSRwYWdlID0gJHBhcmFtc1sncGFnZSddOwp9CgovLyBPcmRlcmJ5CiRvcmRlcmJ5ID0gJGZpZWxkc1sxXTsKaWYgKCFlbXB0eSgkcGFyYW1zWyRwcmVmaXguJ29yZGVyYnknXSkpewoJJG9yZGVyYnkgPSAkcGFyYW1zWyRwcmVmaXguJ29yZGVyYnknXTsKfQokb3JkZXJ0eXBlID0gIkFTQyI7CmlmICghZW1wdHkoJHBhcmFtc1skcHJlZml4LidvcmRlcnR5cGUnXSkpewoJJG9yZGVydHlwZSA9ICRwYXJhbXNbJHByZWZpeC4nb3JkZXJ0eXBlJ107Cn0KLy8gT3Bwb3NpdGUgb3JkZXJ0eXBlcwppZiAoJG9yZGVydHlwZSA9PSAiQVNDIil7Cgkkb3JkZXJfb3Bwb3NpdGUgPSAiREVTQyI7Cn0gZWxzZSB7Cgkkb3JkZXJfb3Bwb3NpdGUgPSAiQVNDIjsKfQoKLy8gR2V0IGxpc3QKJGl0ZW1zID0gJHRoaXMtPkdldEdyb3VwcygkaWQsICRyZXR1cm5pZCwgJHBhZ2UsICRwZXJfcGFnZSwgJG9yZGVyYnksICRvcmRlcnR5cGUsIDApOwoKLy8gRmllbGRzCiR0ZW1wbGF0ZV9maWVsZHMgPSBhcnJheSgpOwpmb3JlYWNoKCRmaWVsZHMgYXMgJGZpZWxkKXsJCQoJJHRlbXBsYXRlX2ZpZWxkc1tdID0gYXJyYXkoJGZpZWxkLCR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2hlYWRlcl8nLiRmaWVsZCksIGFycmF5KCRwcmVmaXguJ3BhZ2UnID0+ICRwYWdlLCAkcHJlZml4LidvcmRlcmJ5JyA9PiAkZmllbGQsICRwcmVmaXguJ29yZGVydHlwZScgPT4gJG9yZGVyX29wcG9zaXRlLCAnYWN0aXZlX3RhYicgPT4gJ2dyb3VwcycpLCAnJywgZmFsc2UsIGZhbHNlLCAnY2xhc3M9ImFkbWluX2xpbmsiJykpOwp9CgovLyBBc3NpZ25zCiRzbWFydHktPmFzc2lnbigncGFnZScsICRwYWdlKTsKJHNtYXJ0eS0+YXNzaWduKCdvcmRlcmJ5JywgJG9yZGVyYnkpOwokc21hcnR5LT5hc3NpZ24oJ29yZGVydHlwZScsICRvcmRlcnR5cGUpOwokc21hcnR5LT5hc3NpZ24oJ2ZpZWxkcycsICRmaWVsZHMpOwokc21hcnR5LT5hc3NpZ24oJ2ZpZWxkX2hlYWRlcnMnLCAkdGVtcGxhdGVfZmllbGRzKTsKJHNtYXJ0eS0+YXNzaWduKCdub2dyb3VwcycsICR0aGlzLT5MYW5nKCdub2dyb3VwcycpKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtcycsJGl0ZW1zKTsKCi8vIExpbmtzCiRzbWFydHktPmFzc2lnbignYWRkbGluaycsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkZF9lZGl0X2dyb3VwJywgJHJldHVybmlkLCAkYWRtaW50aGVtZS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsICR0aGlzLT5MYW5nKCdidXR0b25fYWRkZ3JvdXAnKSwnJywnJywnc3lzdGVtaWNvbicpLCAnJywgJycsIGZhbHNlLCBmYWxzZSwgJycpIC4nICcuICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkZF9lZGl0X2dyb3VwJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYnV0dG9uX2FkZGdyb3VwJyksICcnLCAnJywgZmFsc2UsIGZhbHNlLCAnY2xhc3M9InBhZ2VvcHRpb25zIicpKTsKCi8vIFRlbXBsYXRlCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fZ3JvdXBzdGFiLnRwbCcpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/admin_messagestab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTW9kdWxlOiBUd2VldE1ncgojIEF1dGhvcjogUm9sZiBUamFzc2VucwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAxMSAtIDIwMTYgYnkgVGhlIENNU01TIERldiBUZWFtCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdHdlZXRtZ3IKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgppZiAoICFjbXNtcygpICkgZXhpdDsKCi8vIFNldCBzb21lIHZhcnMKJGZpZWxkcyA9IGFycmF5KCJNZXNzYWdlIiwiVXNlcm5hbWUiLCJTb3VyY2VUaXRsZSIsIkRhdGUiKTsKJHByZWZpeCA9ICdtZXNzYWdlc18nOwoKLy8gUGFnaW5nCiRwZXJfcGFnZSA9IDUwOwokcGFnZSA9IDE7CmlmICghZW1wdHkoJHBhcmFtc1skcHJlZml4LidwYWdlJ10pKXsKCSRwYWdlID0gJHBhcmFtc1skcHJlZml4LidwYWdlJ107Cn0KCi8vIE9yZGVyYnkKJG9yZGVyYnkgPSAkZmllbGRzWzNdOwppZiAoIWVtcHR5KCRwYXJhbXNbJHByZWZpeC4nb3JkZXJieSddKSl7Cgkkb3JkZXJieSA9ICRwYXJhbXNbJHByZWZpeC4nb3JkZXJieSddOwp9CiRvcmRlcnR5cGUgPSAiREVTQyI7CmlmICghZW1wdHkoJHBhcmFtc1skcHJlZml4LidvcmRlcnR5cGUnXSkpewoJJG9yZGVydHlwZSA9ICRwYXJhbXNbJHByZWZpeC4nb3JkZXJ0eXBlJ107Cn0KLy8gT3Bwb3NpdGUgb3JkZXJ0eXBlcwppZiAoJG9yZGVydHlwZSA9PSAiQVNDIil7Cgkkb3JkZXJfb3Bwb3NpdGUgPSAiREVTQyI7Cn0gZWxzZSB7Cgkkb3JkZXJfb3Bwb3NpdGUgPSAiQVNDIjsKfQovLyBTZWFyY2h0ZXJtCiRzZWFyY2ggPSAiIjsKaWYgKCFlbXB0eSgkX1BPU1RbJ3NlYXJjaCddKSl7Cgkkc2VhcmNoID0gJF9QT1NUWydzZWFyY2gnXTsKCSRwZXJfcGFnZSA9ICIiOwp9CgovLyBHZXQgbGlzdAokaXRlbXMgPSAkdGhpcy0+R2V0TWVzc2FnZXMoJGlkLCAkcmV0dXJuaWQsICRwYWdlLCAkcGVyX3BhZ2UsICRvcmRlcmJ5LCAkb3JkZXJ0eXBlLCAwLCAkc2VhcmNoKTsKLy8gV2Ugd29uJ3QgYmUgbWFraW5nIHBhZ2luZyBpZiB3ZSBhcmUgc2VhcmNoaW5nCiR0aGlzLT5zbWFydHktPmFzc2lnbigncGFnaW5nJywnJyk7CmlmIChlbXB0eSgkc2VhcmNoKSl7CgkkcGFnaW5nID0gIiI7CgkKCS8vIE51bWJlciBvZiB0b3RhbCBpdGVtcwoJJG51bWJlciA9IGNvdW50KCR0aGlzLT5HZXRNZXNzYWdlcygkaWQsICRyZXR1cm5pZCwgJHBhZ2UsICcnLCAkb3JkZXJieSwgJG9yZGVydHlwZSwgMCkpOwoJCgkvLyBHZW5lcmF0ZSBwYWdpbmcKCS8vIElmIHRoZXJlIGFyZSBtb3JlIGl0ZW1zIHRoYW4gd2UgY2FuIGZpdCBvbiBhIHBhZ2UKCWlmICgkbnVtYmVyLyRwZXJfcGFnZSA+IDEpewoJCSRwYWdlcyA9IGNlaWwoJG51bWJlci8kcGVyX3BhZ2UpOwoJCSRwYWdpbmcgPSBhcnJheSgpOwoJCWZvciAoJGk9MTskaTw9JHBhZ2VzOyRpKyspewoJCQkkcGFnaW5nWyRpXVsnbGluayddID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCwgJGksIGFycmF5KCRwcmVmaXguJ3BhZ2UnID0+ICRpLCAkcHJlZml4LidvcmRlcmJ5JyA9PiAkb3JkZXJieSwgJHByZWZpeC4nb3JkZXJ0eXBlJyA9PiAkb3JkZXJ0eXBlLCAnYWN0aXZlX3RhYicgPT4gJ21lc3NhZ2VzJyksICcnLCB0cnVlLCBmYWxzZSwgJ2NsYXNzPSJhZG1pbl9saW5rIicpOwoJCQlpZiAoJGkgPT0gJHBhZ2UpewoJCQkJJHBhZ2luZ1skaV1bJ2FjdGl2ZSddID0gdHJ1ZTsKCQkJfSBlbHNlIHsKCQkJCSRwYWdpbmdbJGldWydhY3RpdmUnXSA9IGZhbHNlOwoJCQl9CgkJfQoJfQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwYWdpbmcnLCRwYWdpbmcpOwp9CgovLyBGaWVsZHMKJHRlbXBsYXRlX2ZpZWxkcyA9IGFycmF5KCk7CmZvcmVhY2goJGZpZWxkcyBhcyAkZmllbGQpewkJCgkkdGVtcGxhdGVfZmllbGRzW10gPSBhcnJheSgkZmllbGQsJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnaGVhZGVyXycuJGZpZWxkKSwgYXJyYXkoJHByZWZpeC4ncGFnZScgPT4gJHBhZ2UsICRwcmVmaXguJ29yZGVyYnknID0+ICRmaWVsZCwgJHByZWZpeC4nb3JkZXJ0eXBlJyA9PiAkb3JkZXJfb3Bwb3NpdGUsICdhY3RpdmVfdGFiJyA9PiAnbWVzc2FnZXMnKSwgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJhZG1pbl9saW5rIicpKTsKfQoKLy8gQXNzaWducwokc21hcnR5LT5hc3NpZ24oJ3BhZ2UnLCAkcGFnZSk7CiRzbWFydHktPmFzc2lnbignb3JkZXJieScsICRvcmRlcmJ5KTsKJHNtYXJ0eS0+YXNzaWduKCdvcmRlcnR5cGUnLCAkb3JkZXJ0eXBlKTsKJHNtYXJ0eS0+YXNzaWduKCdmaWVsZHMnLCAkZmllbGRzKTsKJHNtYXJ0eS0+YXNzaWduKCdmaWVsZF9oZWFkZXJzJywgJHRlbXBsYXRlX2ZpZWxkcyk7CiRzbWFydHktPmFzc2lnbignbm9tZXNzYWdlcycsICR0aGlzLT5MYW5nKCdub21lc3NhZ2VzJykpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywkaXRlbXMpOwokc21hcnR5LT5hc3NpZ24oJ3Bvc3R1cmwnLCR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdGFkbWluJywkcmV0dXJuaWQsICcnLCBhcnJheSgkcHJlZml4LidwYWdlJyA9PiAxLCAkcHJlZml4LidvcmRlcmJ5JyA9PiAkb3JkZXJieSwgJHByZWZpeC4nb3JkZXJ0eXBlJyA9PiAkb3JkZXJ0eXBlLCAnYWN0aXZlX3RhYicgPT4gJ21lc3NhZ2VzJyksICcnLCB0cnVlLCBmYWxzZSkpOwokc21hcnR5LT5hc3NpZ24oJ3NlYXJjaHRleHQnLCR0aGlzLT5MYW5nKCdzZWFyY2h0ZXh0JykpOwoKLy8gVGVtcGxhdGUKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl9tZXNzYWdlc3RhYi50cGwnKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/admin_module_settings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFR3ZWV0TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA0IC0gMjAxMSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDExIC0gMjAxNiBieSBUaGUgQ01TTVMgRGV2IFRlYW0KIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy90d2VldG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICggIWNtc21zKCkgKSBleGl0OwoKLy8gRm9ybSBzdWJtaXR0ZWQ/CmlmKCBpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkgJiYgJHBhcmFtc1snYWN0aXZlX3RhYiddID09ICJtb2R1bGVfc2V0dGluZ3MiKXsKICAJJGVycm9yID0gRkFMU0U7CiAgCSAgCQogIAkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnUmVmcmVzaEludGVydmFsJywgJHBhcmFtc1snUmVmcmVzaEludGVydmFsJ10pOwogIAkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnY29uc3VtZXJfa2V5JywgJHBhcmFtc1snQXBwS2V5J10pOwogIAkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnY29uc3VtZXJfc2VjcmV0JywgJHBhcmFtc1snQXBwU2VjcmV0J10pOwogIAlpZiAoZW1wdHkoJHBhcmFtc1snRXZlcnlMb2FkJ10pKXsKICAJCSRwYXJhbXNbJ0V2ZXJ5TG9hZCddID0gMDsKICAJfQogIAkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnRXZlcnlMb2FkJywgJHBhcmFtc1snRXZlcnlMb2FkJ10pOwogIAkKICAJLy8gUmVkaXJlY3QgdG8gcHJldmVudCBkb3VibGUgcG9zdCBhbmQgYWxsb3dzIHVzIHRvIHNob3cgYSBtZXNzYWdlCiAgCSRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnPT4gJHRoaXMtPkxhbmcoJ3RhYm1lc3NhZ2Vfc2V0dGluZ3NfY2hhbmdlZCcpLCAnYWN0aXZlX3RhYicgPT4gJ21vZHVsZV9zZXR0aW5ncycpOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7Cn0KCi8vIExvb3Agc2V0dGluZ3MgdGhhdCB3ZSBhbGxvdyB0byBjaGFuZ2UKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9BcHBLZXknLCR0aGlzLT5MYW5nKCdzZXR0aW5nX0FwcEtleScpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9BcHBLZXknLCR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdBcHBLZXknLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjb25zdW1lcl9rZXknLCcnKSw1MCwyNTUpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9BcHBLZXlfaGVscCcsJHRoaXMtPk1ha2VUb29sVGlwKCR0aGlzLT5MYW5nKCdoZWxwX0FwcEtleScpKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX0FwcFNlY3JldCcsJHRoaXMtPkxhbmcoJ3NldHRpbmdfQXBwU2VjcmV0JykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X0FwcFNlY3JldCcsJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ0FwcFNlY3JldCcsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NvbnN1bWVyX3NlY3JldCcsJycpLDUwLDI1NSkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X0FwcFNlY3JldF9oZWxwJywkdGhpcy0+TWFrZVRvb2xUaXAoJHRoaXMtPkxhbmcoJ2hlbHBfQXBwU2VjcmV0JykpKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfUmVmcmVzaEludGVydmFsJywkdGhpcy0+TGFuZygnc2V0dGluZ19SZWZyZXNoSW50ZXJ2YWwnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfUmVmcmVzaEludGVydmFsJywkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnUmVmcmVzaEludGVydmFsJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnUmVmcmVzaEludGVydmFsJywnJyksNTAsMjU1KSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfUmVmcmVzaEludGVydmFsX2hlbHAnLCR0aGlzLT5NYWtlVG9vbFRpcCgkdGhpcy0+TGFuZygnaGVscF9SZWZyZXNoSW50ZXJ2YWwnKSkpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9FdmVyeUxvYWQnLCR0aGlzLT5MYW5nKCdzZXR0aW5nX0V2ZXJ5TG9hZCcpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9FdmVyeUxvYWQnLCR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwnRXZlcnlMb2FkJywxLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdFdmVyeUxvYWQnLCcnKSkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X0V2ZXJ5TG9hZF9oZWxwJywkdGhpcy0+TWFrZVRvb2xUaXAoJHRoaXMtPkxhbmcoJ2hlbHBfRXZlcnlMb2FkJykpKTsKCi8vIFR3aXR0ZXIgbG9naW4gYnV0dG9uCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfU2lnbkluJywkdGhpcy0+TGFuZygnc2V0dGluZ19Ud2l0dGVyQWNjb3VudCcpKTsKaWYgKCEkdGhpcy0+R2V0UHJlZmVyZW5jZSgnb2F1dGhfdmFsaWQnLCcnKSl7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3R3aXR0ZXJsb2dpbicsJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnbG9naW4nLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdzZXR0aW5nX1NpZ25JbicpLCcnLCcnLCcnLCcnLCdjbGFzcz0ic2lnbmluIicpKTsKfSBlbHNlIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbigndHdpdHRlcmxvZ2luJywnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5MYW5nKCdzZXR0aW5nX0xvZ2dlZGluJykuJHRoaXMtPkdldFByZWZlcmVuY2UoJ29hdXRoX3NjcmVlbm5hbWUnLCcnKS4nPC9wPicuJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnbG9naW4nLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdzZXR0aW5nX1Jldm9rZScpLGFycmF5KCdsb2dvdXQnID0+IHRydWUpLCcnLCcnLCcnLCdjbGFzcz0ic2lnbm91dCInKSk7Cn0KCi8vIEZvcm0gc3RhcnQvZW5kCiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsJ3Bvc3QnLCdtdWx0aXBhcnQvZm9ybS1kYXRhJywgZmFsc2UsICcnLCBhcnJheSgnYWN0aXZlX3RhYicgPT4gJ21vZHVsZV9zZXR0aW5ncycpKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCBsYW5nKCdzdWJtaXQnKSkpOwoJCi8vIFRlbXBsYXRlCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fc2V0dGluZ3N0YWIudHBsJyk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/admin_sourcestab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFR3ZWV0TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA0IC0gMjAxMSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDExIC0gMjAxNiBieSBUaGUgQ01TTVMgRGV2IFRlYW0KIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy90d2VldG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICggIWNtc21zKCkgKSBleGl0OwoKJGFkbWludGhlbWUgPSBjbXNfdXRpbHM6OmdldF90aGVtZV9vYmplY3QoKTsKCi8vIFNldCBzb21lIHZhcnMKJGZpZWxkcyA9IGFycmF5KCJJRCIsIlRpdGxlIiwiVHlwZSIsIkRhdGVDcmVhdGVkIik7CiRwcmVmaXggPSAnc291cmNlc18nOwoKLy8gUGFnaW5nCiRwZXJfcGFnZSA9IDEwMDsKJHBhZ2UgPSAxOwppZiAoIWVtcHR5KCRwYXJhbXNbJ3BhZ2UnXSkpewoJJHBhZ2UgPSAkcGFyYW1zWydwYWdlJ107Cn0KCi8vIE9yZGVyYnkKJG9yZGVyYnkgPSAkZmllbGRzWzFdOwppZiAoIWVtcHR5KCRwYXJhbXNbJHByZWZpeC4nb3JkZXJieSddKSl7Cgkkb3JkZXJieSA9ICRwYXJhbXNbJHByZWZpeC4nb3JkZXJieSddOwp9Cgokb3JkZXJ0eXBlID0gIkFTQyI7CmlmICghZW1wdHkoJHBhcmFtc1skcHJlZml4LidvcmRlcnR5cGUnXSkpewoJJG9yZGVydHlwZSA9ICRwYXJhbXNbJHByZWZpeC4nb3JkZXJ0eXBlJ107Cn0KCi8vIE9wcG9zaXRlIG9yZGVydHlwZXMKaWYgKCRvcmRlcnR5cGUgPT0gIkFTQyIpewoJJG9yZGVyX29wcG9zaXRlID0gIkRFU0MiOwp9IGVsc2UgewoJJG9yZGVyX29wcG9zaXRlID0gIkFTQyI7Cn0KCi8vIEdldCBsaXN0CiRpdGVtcyA9ICR0aGlzLT5HZXRTb3VyY2VzKCRpZCwgJHJldHVybmlkLCAkcGFnZSwgJHBlcl9wYWdlLCAkb3JkZXJieSwgJG9yZGVydHlwZSwgMCk7CgovLyBGaWVsZHMKJHRlbXBsYXRlX2ZpZWxkcyA9IGFycmF5KCk7CmZvcmVhY2goJGZpZWxkcyBhcyAkZmllbGQpewkJCgkkdGVtcGxhdGVfZmllbGRzW10gPSBhcnJheSgkZmllbGQsJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnaGVhZGVyXycuJGZpZWxkKSwgYXJyYXkoJHByZWZpeC4ncGFnZScgPT4gJHBhZ2UsICRwcmVmaXguJ29yZGVyYnknID0+ICRmaWVsZCwgJHByZWZpeC4nb3JkZXJ0eXBlJyA9PiAkb3JkZXJfb3Bwb3NpdGUsICdhY3RpdmVfdGFiJyA9PiAnc291cmNlcycpLCAnJywgZmFsc2UsIGZhbHNlLCAnY2xhc3M9ImFkbWluX2xpbmsiJykpOwp9CgovLyBBc3NpZ25zCiRzbWFydHktPmFzc2lnbigncGFnZScsICRwYWdlKTsKJHNtYXJ0eS0+YXNzaWduKCdvcmRlcmJ5JywgJG9yZGVyYnkpOwokc21hcnR5LT5hc3NpZ24oJ29yZGVydHlwZScsICRvcmRlcnR5cGUpOwokc21hcnR5LT5hc3NpZ24oJ2ZpZWxkcycsICRmaWVsZHMpOwokc21hcnR5LT5hc3NpZ24oJ2ZpZWxkX2hlYWRlcnMnLCAkdGVtcGxhdGVfZmllbGRzKTsKJHNtYXJ0eS0+YXNzaWduKCdub3NvdXJjZXMnLCAkdGhpcy0+TGFuZygnbm9zb3VyY2VzJykpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywkaXRlbXMpOwoKLy8gTGlua3MKJHNtYXJ0eS0+YXNzaWduKCdhZGRsaW5rJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkX2VkaXRfc291cmNlJywgJHJldHVybmlkLCAkYWRtaW50aGVtZS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsICR0aGlzLT5MYW5nKCdidXR0b25fYWRkc291cmNlJyksJycsJycsJ3N5c3RlbWljb24nKSwgJycsICcnLCBmYWxzZSwgZmFsc2UsICcnKSAuJyAnLiAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRfZWRpdF9zb3VyY2UnLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdidXR0b25fYWRkc291cmNlJyksICcnLCAnJywgZmFsc2UsIGZhbHNlLCAnY2xhc3M9InBhZ2VvcHRpb25zIicpKTsKCi8vIFRlbXBsYXRlCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fc291cmNlc3RhYi50cGwnKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/admin_templatestab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTW9kdWxlOiBUd2VldE1ncgojIEF1dGhvcjogUm9sZiBUamFzc2VucwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAxMSAtIDIwMTYgYnkgVGhlIENNU01TIERldiBUZWFtCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdHdlZXRtZ3IKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgppZiAoICFjbXNtcygpICkgZXhpdDsKCiRhZG1pbnRoZW1lID0gY21zX3V0aWxzOjpnZXRfdGhlbWVfb2JqZWN0KCk7CgovLyBHZXQgbGlzdAokcmVzdWx0ID0gJHRoaXMtPkdldFRlbXBsYXRlTGlzdCgpOwoKLy8gTG9vcCB0aGVtIHRvIGFkZCBsaW5rcyAvIG9wdGlvbnMgLyBldGMuCiRpdGVtcyA9IGFycmF5KCk7Cgpmb3JlYWNoKCRyZXN1bHQgYXMgJGl0ZW0pewkKCS8vIEVkaXQvRGVsZXRlCglpZiAoJGl0ZW1bJ2RlZmF1bHQnXSl7CgkJJGl0ZW1bJ2RlbGV0ZWxpbmsnXSA9ICcnOwoJfSBlbHNlIHsKCQkkaXRlbVsnZGVsZXRlbGluayddID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVsZXRlJywgJHJldHVybmlkLCAkYWRtaW50aGVtZS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsICR0aGlzLT5MYW5nKCdkZWxldGUnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgndGVtcGxhdGVfbmFtZSc9PiRpdGVtWyduYW1lJ10pLCAkdGhpcy0+TGFuZygnZGVsZXRldGVtcGxhdGVjb25maXJtJykpOwoJfQoJCgkkaXRlbVsnZWRpdGxpbmsnXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXR0ZW1wbGF0ZScsICRyZXR1cm5pZCwgJGFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgJHRoaXMtPkxhbmcoJ2VkaXQnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgndGVtcGxhdGVfbmFtZSc9PiRpdGVtWyduYW1lJ10pKTsKCQoJCglpZiAoJGl0ZW1bJ2RlZmF1bHQnXSl7CgkJJGl0ZW1bJ2RlZmF1bHQnXSA9ICRhZG1pbnRoZW1lLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS90cnVlLmdpZicsJ2RlZmF1bHQnLCcnLCcnLCdzeXN0ZW1pY29uJyk7Cgl9IGVsc2UgewoJCSRpdGVtWydkZWZhdWx0J10gPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdzZXRkZWZhdWx0dGVtcGxhdGUnLCAkcmV0dXJuaWQsICRhZG1pbnRoZW1lLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9mYWxzZS5naWYnLCdkZWZhdWx0JywnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgndGVtcGxhdGVfbmFtZSc9PiRpdGVtWyduYW1lJ10pLCAnJyk7Cgl9CgkKCS8vIEtlZXAgdGhpcyBhcyB0aGUgbGFzdCBpdGVtIHNpbmNlIGl0IG92ZXJyaWRlcyB0aGUgb3JpZ2luYWwgIm5hbWUiCgkkaXRlbVsnbmFtZSddID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdHRlbXBsYXRlJywgJHJldHVybmlkLCAkaXRlbVsnbmFtZSddLCBhcnJheSgndGVtcGxhdGVfbmFtZSc9PiRpdGVtWyduYW1lJ10pKTsKCQoJJGl0ZW1zW10gPSAkaXRlbTsKfQoKLy8gRmllbGRzCiR0ZW1wbGF0ZV9maWVsZHMgPSBhcnJheSgpOwokdGVtcGxhdGVfZmllbGRzW10gPSAkdGhpcy0+TGFuZygiaGVhZGVyX1RpdGxlIik7CiR0ZW1wbGF0ZV9maWVsZHNbXSA9ICR0aGlzLT5MYW5nKCJoZWFkZXJfRGVmYXVsdCIpOwoKLy8gQXNzaWducwokc21hcnR5LT5hc3NpZ24oJ2ZpZWxkX2hlYWRlcnMnLCAkdGVtcGxhdGVfZmllbGRzKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtcycsICRpdGVtcyk7CgovLyBMaW5rcwokc21hcnR5LT5hc3NpZ24oJ2FkZGxpbmsnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGR0ZW1wbGF0ZScsICRyZXR1cm5pZCwgJGFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYnLCAkdGhpcy0+TGFuZygnYnV0dG9uX2FkZHRlbXBsYXRlJyksJycsJycsJ3N5c3RlbWljb24nKSwgJycsICcnLCBmYWxzZSwgZmFsc2UsICcnKSAuJyAnLiAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGR0ZW1wbGF0ZScsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2J1dHRvbl9hZGR0ZW1wbGF0ZScpLCAnJywgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJwYWdlb3B0aW9ucyInKSk7CgovLyBUZW1wbGF0ZQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX3RlbXBsYXRlc3RhYi50cGwnKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/admin_userstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFR3ZWV0TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA0IC0gMjAxMSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDExIC0gMjAxNiBieSBUaGUgQ01TTVMgRGV2IFRlYW0KIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy90d2VldG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICggIWNtc21zKCkgKSBleGl0OwoKLy8gU2V0IHNvbWUgdmFycwokZmllbGRzID0gYXJyYXkoIlVzZXJuYW1lIiwiTGFzdFVwZGF0ZSIpOwokcHJlZml4ID0gJ3VzZXJzXyc7CgovLyBQYWdpbmcKJHBlcl9wYWdlID0gMTAwOwokcGFnZSA9IDE7CmlmICghZW1wdHkoJHBhcmFtc1skcHJlZml4LidwYWdlJ10pKXsKCSRwYWdlID0gJHBhcmFtc1skcHJlZml4LidwYWdlJ107Cn0KCi8vIE9yZGVyYnkKJG9yZGVyYnkgPSAkZmllbGRzWzBdOwppZiAoIWVtcHR5KCRwYXJhbXNbJHByZWZpeC4nb3JkZXJieSddKSl7Cgkkb3JkZXJieSA9ICRwYXJhbXNbJHByZWZpeC4nb3JkZXJieSddOwp9Cgokb3JkZXJ0eXBlID0gIkFTQyI7CmlmICghZW1wdHkoJHBhcmFtc1skcHJlZml4LidvcmRlcnR5cGUnXSkpewoJJG9yZGVydHlwZSA9ICRwYXJhbXNbJHByZWZpeC4nb3JkZXJ0eXBlJ107Cn0KCi8vIE9wcG9zaXRlIG9yZGVydHlwZXMKaWYgKCRvcmRlcnR5cGUgPT0gIkFTQyIpewoJJG9yZGVyX29wcG9zaXRlID0gIkRFU0MiOwp9IGVsc2UgewoJJG9yZGVyX29wcG9zaXRlID0gIkFTQyI7Cn0KCi8vIFNlYXJjaCB0ZXJtCiRzZWFyY2ggPSAiIjsKaWYgKCFlbXB0eSgkX1BPU1RbJ3NlYXJjaCddKSl7Cgkkc2VhcmNoID0gJF9QT1NUWydzZWFyY2gnXTsKCSRwZXJfcGFnZSA9ICIiOwp9CgovLyBHZXQgbGlzdAokaXRlbXMgPSAkdGhpcy0+R2V0VXNlcnMoJGlkLCAkcmV0dXJuaWQsICRwYWdlLCAkcGVyX3BhZ2UsICRvcmRlcmJ5LCAkb3JkZXJ0eXBlLCAwLCAkc2VhcmNoKTsKCi8vIFdlIHdvbid0IGJlIG1ha2luZyBwYWdpbmcgaWYgd2UgYXJlIHNlYXJjaGluZwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3BhZ2luZycsJycpOwppZiAoZW1wdHkoJHNlYXJjaCkpewoJJHBhZ2luZyA9ICIiOwoJCgkvLyBOdW1iZXIgb2YgdG90YWwgaXRlbXMKCSRudW1iZXIgPSBjb3VudCgkdGhpcy0+R2V0VXNlcnMoJGlkLCAkcmV0dXJuaWQsICRwYWdlLCAiIiwgJG9yZGVyYnksICRvcmRlcnR5cGUsIDApKTsKCQoJLy8gR2VuZXJhdGUgcGFnaW5nCgkvLyBJZiB0aGVyZSBhcmUgbW9yZSBpdGVtcyB0aGFuIHdlIGNhbiBmaXQgb24gYSBwYWdlCglpZiAoJG51bWJlci8kcGVyX3BhZ2UgPiAxKXsKCQkkcGFnZXMgPSBjZWlsKCRudW1iZXIvJHBlcl9wYWdlKTsKCQkkcGFnaW5nID0gYXJyYXkoKTsKCQlmb3IgKCRpPTE7JGk8PSRwYWdlczskaSsrKXsKCQkJJHBhZ2luZ1skaV1bJ2xpbmsnXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdGFkbWluJywkcmV0dXJuaWQsICRpLCBhcnJheSgkcHJlZml4LidwYWdlJyA9PiAkaSwgJHByZWZpeC4nb3JkZXJieScgPT4gJG9yZGVyYnksICRwcmVmaXguJ29yZGVydHlwZScgPT4gJG9yZGVydHlwZSwgJ2FjdGl2ZV90YWInID0+ICd1c2VycycpLCAnJywgdHJ1ZSwgZmFsc2UsICdjbGFzcz0iYWRtaW5fbGluayInKTsKCQkJaWYgKCRpID09ICRwYWdlKXsKCQkJCSRwYWdpbmdbJGldWydhY3RpdmUnXSA9IHRydWU7CgkJCX0gZWxzZSB7CgkJCQkkcGFnaW5nWyRpXVsnYWN0aXZlJ10gPSBmYWxzZTsKCQkJfQoJCX0KCX0KCSR0aGlzLT5zbWFydHktPmFzc2lnbigncGFnaW5nJywkcGFnaW5nKTsKfQoKLy8gRmllbGRzCiR0ZW1wbGF0ZV9maWVsZHMgPSBhcnJheSgpOwoJZm9yZWFjaCgkZmllbGRzIGFzICRmaWVsZCl7CQkKCQkkdGVtcGxhdGVfZmllbGRzW10gPSBhcnJheSgkZmllbGQsJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnaGVhZGVyXycuJGZpZWxkKSwgYXJyYXkoJHByZWZpeC4ncGFnZScgPT4gJHBhZ2UsICRwcmVmaXguJ29yZGVyYnknID0+ICRmaWVsZCwgJHByZWZpeC4nb3JkZXJ0eXBlJyA9PiAkb3JkZXJfb3Bwb3NpdGUsICdhY3RpdmVfdGFiJyA9PiAndXNlcnMnKSwgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJhZG1pbl9saW5rIicpKTsKCX0KCi8vIEFzc2lnbnMKJHNtYXJ0eS0+YXNzaWduKCdwYWdlJywgJHBhZ2UpOwokc21hcnR5LT5hc3NpZ24oJ29yZGVyYnknLCAkb3JkZXJieSk7CiRzbWFydHktPmFzc2lnbignb3JkZXJ0eXBlJywgJG9yZGVydHlwZSk7CiRzbWFydHktPmFzc2lnbignZmllbGRzJywgJGZpZWxkcyk7CiRzbWFydHktPmFzc2lnbignZmllbGRfaGVhZGVycycsICR0ZW1wbGF0ZV9maWVsZHMpOwokc21hcnR5LT5hc3NpZ24oJ25vdXNlcnMnLCAkdGhpcy0+TGFuZygnbm91c2VycycpKTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtcycsJGl0ZW1zKTsKJHNtYXJ0eS0+YXNzaWduKCdwb3N0dXJsJywkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHRhZG1pbicsJHJldHVybmlkLCAnJywgYXJyYXkoJHByZWZpeC4ncGFnZScgPT4gMSwgJHByZWZpeC4nb3JkZXJieScgPT4gJG9yZGVyYnksICRwcmVmaXguJ29yZGVydHlwZScgPT4gJG9yZGVydHlwZSwgJ2FjdGl2ZV90YWInID0+ICd1c2VycycpLCAnJywgdHJ1ZSwgZmFsc2UpKTsKJHNtYXJ0eS0+YXNzaWduKCdzZWFyY2h0ZXh0JywkdGhpcy0+TGFuZygnc2VhcmNodGV4dCcpKTsKCi8vIFRlbXBsYXRlCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fdXNlcnN0YWIudHBsJyk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgoJPGxpPjxiPlZlcnNpb24gMS4wPC9iPiAoMjAxNi0xMC0xMyk8YnIgLz4KCQktIENvbXBhdGliaWxpdHkgZml4ZXMgZm9yIENNU01TIDIueDxiciAvPgoJCS0gTW9kdWxlIGlzIGJ1aWxkIGZvciB0aGUgQ01TTVMgMi54IHNlcmllcywgYnV0IGl0IGFsc28gc3VwcG9ydHMgMS4xMi4yIHRvIGhlbHAgdXBncmFkaW5nIG9sZGVyIHdlYnNpdGVzPGJyIC8+CgkJLSBCdWcgZml4ZXM8YnIgLz4KCQktIFNlY3VyaXR5IGZpeGVzPGJyIC8+CgkJLSBVc2VhYmlsaXR5IGltcHJvdmVtZW50czxiciAvPgoJCTxiciAvPgoJCS0gPGI+V2FybmluZzo8L2I+IFR3ZWV0TWdyIGFuZCBCV1R3aXR0ZXIgY2FuJ3QgYmUgcHJlc2VudCBhdCB5b3VyIHNpdGUgYXQgdGhlIHNhbWUgdGltZSwgYm90aCB1c2UgdGhlIHNhbWUgVHdpdHRlciBhdXRoZW50aWNhdGlvbiBjbGFzc2VzIQoJCTwvbGk+Cgk8bGk+VGhlIFR3ZWV0TWdyIG1vZHVsZSBpcyBhIGZvcmsgb2YgdGhlIEJXVHdpdHRlciBtb2R1bGUuIE1hbnkgdGhhbmtzIHRvIEJ1aWxkbmV0IFdlYnNlcnZpY2VzIGZvciB0aGUgaW5pdGlhbCBtb2R1bGUuPC9saT4KPC91bD4=]]></data>
	</file>
	<file>
	  <filename>/help_text.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPldoYXQgZG9lcyB0aGlzIG1vZHVsZSBkbz88L2gzPgo8cD4KCVRoZSBnb2FsIG9mIHRoZSBUd2VldE1nciBtb2R1bGUgaXMgdG8gbWFrZSBzaG93aW5nIHR3ZWV0cyBmcm9tIGRpZmZlcmVudCBzb3VyY2VzIGFzIGVhc3kgYXMgcG9zc2libGUuPGJyIC8+CglNdWx0aXBsZSBzb3VyY2VzIGNhbiBiZSBjcmVhdGVkICh1c2VyIHByb2ZpbGVzLCBoYXNodGFncywgc2VhcmNoIHRlcm1zKSBhbmQgZ3JvdXBlZC48YnIgLz4KCVNvdXJjZXMgY2FuIGFsc28gYmUgY2FsbGVkIGluZGl2aWR1YWxseS4JCjwvcD4KCjxoMz5Ib3cgZG8gSSB1c2UgaXQ/PC9oMz4KPHA+CglUd2VldE1nciBtb2R1bGUgY2FuIGJlIHVzZWQgd2l0aCB0aGUgPHN0cm9uZz57VHdlZXRNZ3J9PC9zdHJvbmc+IHRhZyBpbiBldmVyeSBwYWdlIG9yIHRlbXBsYXRlLiBZb3UgY2FuIGVpdGhlciBzaG93IGEgZ3JvdXAgb2Ygc291cmNlcyBvciBjYWxsIHNvdXJjZXMgaW5kaXZpZHVhbGx5LiAoU2VlIHBhcmFtZXRlcnMpCjwvcD4KCjxoMz5Ib3cgZG9lcyBpdCB3b3JrPzwvaDM+CjxwPgoJQnkgZGVmYXVsdCB0aGUgZGF0YWJhc2Ugd2l0aCB0d2VldHMgaXMgcmVmcmVzaGVkIHdoZW4gdGhlIHtUd2VldE1ncn0gdGFnIGlzIGNhbGxlZCBvbiBhIHBhZ2UuPGJyIC8+CglJZiBhIHNwZWNpZmljIGdyb3VwIG9yIHNvdXJjZSBpcyBnaXZlbiBhcyBhIHBhcmFtZXRlciwgb25seSB0aG9zZSBzb3VyY2VzIHdpbGwgYmUgcmVmcmVzaGVkIHRvIGtlZXAgbG9hZGluZyB0aW1lIGFzIGxvdyBhcyBwb3NzaWJsZS48YnIgLz4KCVlvdSBjYW4gbGV0IHRoZSBkYXRhYmFzZSBiZSByZWZyZXNoZWQsIGV2ZW4gd2hlbiB0aGUgdGFnIGlzIG5vdCBjYWxsZWQgb24gYSBwYWdlLCBvbiB0aGUgc2V0dGluZ3MgdGFiLgoJWW91IGNhbiBhbHNvIHNldCB0aGUgdGltZSB0aGF0IHNob3VsZCBoYXZlIHBhc3NlZCBiZWZvcmUgYSBzb3VyY2UgaXMgcmVmcmVzaGVkLiBXZSByZWNvbW1lbmQgc2V0dGluZ3MgdGhpcyBhdCA1IG1pbnV0ZXMgKDMwMCBzZWNvbmRzKSB0byBrZWVwIGxvYWRpbmcgdGltZSBhcyBsb3cgYXMgcG9zc2libGUgYW5kIHRvIG5vdCBleGNlZWQgdGhlIG1heGl1bSBhbW91bnQgb2YgcmVxdWVzdHMgdG8gVHdpdHRlci4KPC9wPgoKPGgzPlVzZXJzPC9oMz4KPHA+CglJZiB5b3UgZG9uJ3Qgd2FudCB0byBzaG93IHR3ZWV0cyBmcm9tIGEgc3BlY2lmaWMgdXNlciB5b3UgY2FuIHNlYXJjaCBmb3IgdGhlIHVzZXIgaW4gdGhlIHVzZXJzIHRhYiBhbmQgZGVhY3RpdmF0ZSB0aGUgdXNlci48YnIgLz4KCVR3ZWV0cyBmcm9tIHRoaXMgdXNlciB3b24ndCBiZSBzYXZlZCBpbiB0aGUgZGF0YWJhc2UgYW5kIHdvbid0IGJlIHNob3duIGlmIGRlYWN0aXZhdGVkLgkKPC9wPgoKPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBjb250YWluIGFueSBjb21tZXJjaWFsIHN1cHBvcnQuIElmIHlvdSBoYXZlIHByb2JsZW1zLCBhc2sgZm9yIGhlbHAgaW4gdGhlOjwvcD4KPHVsPgoJPGxpPjxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZy8iIHRhcmdldD0iX2JsYW5rIj5DTVMgTWFkZSBTaW1wbGUgZm9ydW1zPC9hPiw8L2xpPgoJPGxpPjxhIGhyZWY9ImlyYzovL2lyYy5mcmVlbm9kZS5uZXQvY21zIiB0YXJnZXQ9Il9ibGFuayI+PGFiYnIgdGl0bGU9IkludGVybmV0IFJlbGF5IENoYXQiPklSQzwvYWJicj4gY2hhdDwvYT4sPC9saT4KCTxsaT5vciB3cml0ZSBhbiBlbWFpbCB0byB0aGUgYXV0aG9yPC9saT4KPC91bD4KCjxoMz5Db3B5cmlnaHQ8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMTYsIFJvbGYgVGphc3NlbnMgW2luZm8gYXQgY21zY2FuYmVzaW1wbGUgZG90IG9yZ10uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPGJyIC8+CjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiIHRhcmdldD0iX2JsYW5rIj5HTlUgUHVibGljIExpY2Vuc2UgdjM8L2E+LjxiciAvPgpIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZSZ0cmFkZTsuPGJyIC8+CllvdSBtYXkgb25seSB1c2UgdGhpcyBzb2Z0d2FyZSB3aGVuIHRoZXJlIGlzIGEgY2xlYXIgYW5kIG9idmlvdXMgaW5kaWNhdGlvbiBpbiB0aGUgYWRtaW4gc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIDxiPkNNUyBNYWRlIFNpbXBsZSZ0cmFkZTs8L2I+LjwvcD4KCjxiciAvPg==]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhQABAAPYAABV9wxWBxhmBxRWFyRWLzhmMzRWP0RWV1R2X1BWY1xyY1RWb2hqe2i2RyzCUzBeg3B6j3SSi2iuq3jeg0zmi1DGm2TOu3zmt3Dyx3kKf0USl00il00Op10Ss2Umv2VOs1liv10ux2lSy2Vqy2FG43mS93Eu941e/4Vy/4GbB3mvE31TC5FzC4mTF4mrH4WbM5nXF4XbO43nP427Q53TS5nrU5nrX6X7Z6YHO5IPc6ove6ZTb6Y7j65Tm7Jvm7Zfo7Zvr7qLl7aLs76Xt8Kvu8bDv8rXw8rvx88Pz9cv09tD299f3+Nn3+N/5+er7/Pb9/fj+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFEALAAAAABAAEAAAAf+gFGCg4SFhoeIiYqLjI2Oj5BQTk1MlZVLmJiWlpmdnp+gTU1OT45PS0ZDQKusra6tQquxsUCzsrW4uLNCRkulik5Hr7BCtLXFxbfItLbHw65HTolORcNDRUdHSNvc2d5HRkZF4+TjROdEQ+fGz0XShk/CrkNHSUr3Skn6+khJ3d/gxJVDN0SdEFXsWh35RWjJqyL28u3zxw0JQG/liqBLVxDhM1dLCsWDVW8ixX8Aw4Uzt5GjqoIJnxlhGMWJKlZGJlZEGVClRo0bX34cCmTIO0FNWkH0xzRlNp8sg3a8SfRjE0JJVw3pt03bxZXnjEjtqLVqVSYNcfJ8Gi4IjA3+G0DgUDc1ptmhaAcxkXUx2zhxOzIAGAxAwIiiye4qBpJX0F4gRFIODCKY8GABJRIvvts4yuPIAQeegyHAMuEGOjYv7vwYm8Co6USYJixAhmrFrGuJnqpqw+zLKm6bFZIbstSDtDT8HqzCrnCQaYvyvpl8uYDgz4mG1Kt1CLJXPSrPvp6daGeHiD+Gt469/LPzZnso/03e/bPtSJ23ks9eM6xbt8Fn1nyzBaBBCQimoOCCKjTYoAw8bFYcUfwtB0AAtAmg4YYcOlBCD7gR8hiFymH4G4YBpHhhgRga9sNd+HkWX4kp1mjjjTdeaGMBtpk14VA9bIDjkEQO+QFnIpr+9YOQRQYwQI1PDhllABQgyV1VP3AwwJZcpsjll0+C6eSWTnYAY3REZQlmmGu22WYLVjqmpAZu1vklAWBOkJpZMY441A8XbImnoAPgOSiYhnJJQAET3KBYjOilqSUBlFa66AQheKDpph1wwMEFnl4QggsR3iUEpEpOaimlBbiwyour9PDDrLTCuhmk+rHyQwerVtqqfcOciuafvBpAqbHHugrsK7hiiUGlBkQrrbLLsiLsIJH+6YG03EZ7QrXQYaskCd1yewGI4NbSbFUtHHCAAe66G20CLaCbkDG53jfsUDUgEK288L6rwAUnnIACCiywcPDCLdBQqqnrEsVDBfH+VmzxxRYPTMNiqN51AsYVJ5CAuyOTfEDJB0RQA8T7DnVDBCeLLPPMNNcs8gEYoFtVxFWxYLPMCyzwM80ROFrVtYJkWxUPGMwcdAJBPw210FOL/DQDG/PZUL6w5IDBAw9ELfbYZEcNgdFEIR2F0mZ5DUHYZcctds5nYss1eCtIAHfQYO/Nd9gPMLAABDOwLK5wN6xgwdtwg/2344FL8IKtOyeZHQ82vLCCCZx37rkJK7yQw2JqN3G3Yj3I+uKsQLC+mRBXDWJTus9QbpZRhEBhBO32GQFFIWzz/nqMgowkvHALHULN8aq5M408zB9txFGInJLK6eAO0QtNikhCCRMcS1yyyfjij7/EPZmQT/4ov0Pi/vvwxy///IIEAgA7]]></data>
	</file>
	<file>
	  <filename>/images/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBkdW1teSBpbmRleC5odG1sIC0tPgo=]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1R3ZWV0TWdyJzsKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnTW9kdWxlIGZvciBzaG93aW5nIHR3ZWV0cywgYmFzZWQgb24gYWNjb3VudCwgaGFzaCB0YWcgb3Igc2VhcmNoIHRlcm0uJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnVHdlZXRNZ3IgaGFzIGJlZW4gaW5zdGFsbGVkLic7CgovLyBUQUJTCiRsYW5nWyd0YWJfbWVzc2FnZXMnXQkJPQknVHdlZXRzJzsKJGxhbmdbJ3RhYl91c2VycyddCQkJPQknVHdlZXBzJzsKJGxhbmdbJ3RhYl9zb3VyY2VzJ10JCT0JJ1NvdXJjZXMnOwokbGFuZ1sndGFiX2dyb3VwcyddCQkJPQknR3JvdXBzJzsKJGxhbmdbJ3RhYl9zZXR0aW5ncyddCQk9CSdTZXR0aW5ncyc7CiRsYW5nWyd0YWJfdGVtcGxhdGVzJ10JCT0JJ1RlbXBsYXRlcyc7CgovLyBIRUFERVJTCiRsYW5nWydoZWFkZXJfTWVzc2FnZSddCQk9CSdNZXNzYWdlJzsKJGxhbmdbJ2hlYWRlcl9Vc2VybmFtZSddCT0JJ1VzZXInOwokbGFuZ1snaGVhZGVyX0RhdGUnXQkJPQknRGF0ZSc7CiRsYW5nWydoZWFkZXJfTGFzdFVwZGF0ZSddCT0JJ0xhc3QgdXBkYXRlJzsKJGxhbmdbJ2hlYWRlcl9UaXRsZSddCQk9CSdUaXRsZSc7CiRsYW5nWydoZWFkZXJfVHlwZSddCQk9CSdUeXBlJzsKJGxhbmdbJ2hlYWRlcl9EYXRlQ3JlYXRlZCddCT0JJ0RhdGUgY3JlYXRlZCc7CiRsYW5nWydoZWFkZXJfU291cmNlJ10JCT0JJ1NvdXJjZSc7CiRsYW5nWydoZWFkZXJfRGVmYXVsdCddCQk9CSdEZWZhdWx0JzsKJGxhbmdbJ2hlYWRlcl9JRCddCQkJPQknSUQnOwokbGFuZ1snaGVhZGVyX1NvdXJjZVRpdGxlJ10JPQknU291cmNlJzsKCi8vIFNFVFRJTkdTCiRsYW5nWydzZXR0aW5nX1JlZnJlc2hJbnRlcnZhbCddID0gJ1JlZnJlc2ggaW50ZXJ2YWwgKGluIHNlY29uZHMpJzsKJGxhbmdbJ3NldHRpbmdfRXZlcnlMb2FkJ10gCT0gJ1JlZnJlc2ggZXZlcnkgdGltZSBhIHBhZ2UgbG9hZHMnOwokbGFuZ1snc2V0dGluZ19BcHBLZXknXSAJPSAnQ29uc3VtZXIga2V5IG9mIHlvdXIgVHdlZXRNZ3IgYXBwbGljYXRpb24nOwokbGFuZ1snc2V0dGluZ19BcHBTZWNyZXQnXSAJPSAnQ29uc3VtZXIgc2VjcmV0IG9mIHlvdXIgVHdlZXRNZ3IgYXBwbGljYXRpb24nOwokbGFuZ1snc2V0dGluZ19Mb2dnZWRpbiddIAk9ICdMb2dnZWQgaW4gYXM6ICc7CiRsYW5nWydzZXR0aW5nX1NpZ25JbiddIAk9ICdTaWduIGluIHdpdGggVHdpdHRlcic7CiRsYW5nWydzZXR0aW5nX1Jldm9rZSddIAk9ICdMb2cgb3V0IG9mIFR3aXR0ZXInOwokbGFuZ1snc2V0dGluZ19Ud2l0dGVyQWNjb3VudCddIAk9ICdUd2l0dGVyIGNyZWRlbnRpYWxzJzsKCi8vIEJVVFRPTlMKJGxhbmdbJ2J1dHRvbl9hZGRzb3VyY2UnXQk9CSdBZGQgc291cmNlJzsKJGxhbmdbJ2J1dHRvbl9hZGRncm91cCddCT0JJ0FkZCBncm91cCc7CiRsYW5nWydidXR0b25fYWRkdGVtcGxhdGUnXQk9CSdBZGQgdGVtcGxhdGUnOwoKLy8gSEVMUAokbGFuZ1snaGVscF9SZWZyZXNoSW50ZXJ2YWwnXSA9ICdIb3cgbWFueSBzZWNvbmRzIHNob3VsZCBoYXZlIHBhc3NlZCBiZWZvcmUgY29udGVudCBpcyByZWZyZXNoZWQ/JzsKJGxhbmdbJ2hlbHBfRXZlcnlMb2FkJ10gCT0gJ1R1cm5pbmcgdGhpcyBvbiB3aWxsIG1ha2UgdHdlZXRzIGJlIHJlZnJlc2hlZCB3aGVuZXZlciBhbnkgcGFnZSBsb2FkLCBpbnN0ZWFkIG9mIGp1c3Qgd2hlbiBhIHBhZ2UgaXMgbG9hZGVkIHRoYXQgc2hvd3MgdGhlIG1vZHVsZS4gVGhlIHJlZnJlc2ggaW50ZXJ2YWwgaXMgc3RpbGwgdGFrZW4gaW50byBhY2NvdW50Lic7CiRsYW5nWydoZWxwX0FwcEtleSddIAkJPSAnQ29uc3VtZXIga2V5IG9mIHlvdXIgVHdlZXRNZ3IgbW9kdWxlLiBEbyBub3QgY2hhbmdlIHRoaXMgdmFsdWUgaWYgeW91IGRvIG5vdCBrbm93IHdoYXQgaXQgbWVhbnMuJzsKJGxhbmdbJ2hlbHBfQXBwU2VjcmV0J10gCT0gJ0NvbnN1bWVyIHNlY3JldCBvZiB5b3VyIFR3ZWV0TWdyIG1vZHVsZS4gRG8gbm90IGNoYW5nZSB0aGlzIHZhbHVlIGlmIHlvdSBkbyBub3Qga25vdyB3aGF0IGl0IG1lYW5zLic7CiRsYW5nWydoZWxwX3RlbXBsYXRlVmFycyddCT0gJwoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij5BdmFpbGFibGUgdmFyaWFibGVzOjwvcD4KCSR0d2VldC5JRAkJCQk6CUlEIG9mIHRoZSB0d2VldCBpbiB0aGUgZGF0YWJhc2UKCSR0d2VldC5Ud2VldElECQkJOglJRCBvZiB0aGUgdHdlZXQgb24gVHdpdHRlcgoJJHR3ZWV0Lk1lc3NhZ2UJCQk6CVJhdyBtZXNzYWdlCgkkdHdlZXQuTWVzc2FnZV9wYXJzZWQJOglNZXNzYWdlIHdoZXJlIHJlZmVyZW5jZXMgdG8gYWNjb3VudHMsIGhhc2ggdGFncyBhbmQgVVJMcyBhcmUgY29udmVydGVkIHRvIGxpbmtzCQoJJHR3ZWV0LkFjdGl2ZQkJCToJV2hldGhlciB0aGUgbWVzc2FnZSBzaG91bGQgYmUgc2hvdyAoYWx3YXlzIDEsIG9ubHkgYWN0aXZlIG1lc3NhZ2VzIGFyZSByZXR1cm5lZCkKCSR0d2VldC5zb3VyY2VJRAkJCToJSUQgb2YgdGhlIHNvdXJjZSB0aGlzIHR3ZWV0IGNhbWUgZnJvbQoJJHR3ZWV0LkRhdGUJCQkJOglEYXRlIHRoZSB0d2VldCB3YXMgcG9zdGVkCgkkdHdlZXQuRGF0ZV9wYXJzZWQJCToJTW9tZW50IHRoZSB0d2VldCB3YXMgcG9zdGVkLiBGb3IgaW5zdGFuY2UgXCcyIHdlZWtzIGFnb1wnCgkkdHdlZXQuTGluawkJCQk6CUxpbmsgdG8gdGhlIHR3ZWV0IG9uIFR3aXR0ZXIKCSR0d2VldC5Vc2VyCQkJCToJQXJyYXkgb2YgYWxsIHVzZXIgaW5mbwoJJHR3ZWV0LlVzZXIuSUQJCQk6CUlEIG9mIHRoZSB1c2VyCgkkdHdlZXQuVXNlci5Vc2VybmFtZQk6CVVzZXIgbmFtZSBvZiB0aGUgdXNlcgoJJHR3ZWV0LlVzZXIuQXZhdGFyCQk6CVR3aXR0ZXIgYXZhdGFyIG9mIHRoZSB1c2VyCgkkdHdlZXQuVXNlci5BY3RpdmUJCToJMSA9IE9LOyAwID0gQmxhY2tsaXN0ZWQKCSR0d2VldC5Vc2VyLkxhc3RVcGRhdGUJOglXaGVuIHRoZSB1c2VyIHdhcyBsYXN0IHVwZGF0ZWQKJzsKCi8vIFRBQk1FU1NBR0VTCiRsYW5nWyd0YWJtZXNzYWdlX21lc3NhZ2VfYWN0aXZlMCddCT0gIk1lc3NhZ2Ugc3VjY2Vzc2Z1bGx5IGRlYWN0aXZhdGVkIjsKJGxhbmdbJ3RhYm1lc3NhZ2VfbWVzc2FnZV9hY3RpdmUxJ10JPSAiTWVzc2FnZSBzdWNjZXNzZnVsbHkgYWN0aXZhdGVkIjsKJGxhbmdbJ3RhYm1lc3NhZ2VfdXNlcl9hY3RpdmUwJ10JPSAiVXNlciBzdWNjZXNzZnVsbHkgZGVhY3RpdmF0ZWQiOwokbGFuZ1sndGFibWVzc2FnZV91c2VyX2FjdGl2ZTEnXQk9ICJVc2VyIHN1Y2Nlc3NmdWxseSBhY3RpdmF0ZWQiOwokbGFuZ1sndGFibWVzc2FnZV9zb3VyY2VfYWN0aXZlMCddCT0gIlNvdXJjZSBzdWNjZXNzZnVsbHkgZGVhY3RpdmF0ZWQiOwokbGFuZ1sndGFibWVzc2FnZV9zb3VyY2VfYWN0aXZlMSddCT0gIlNvdXJjZSBzdWNjZXNzZnVsbHkgYWN0aXZhdGVkIjsKJGxhbmdbJ3RhYm1lc3NhZ2Vfc291cmNlX2VkaXQnXQkJPSAiU291cmNlIHN1Y2Nlc3NmdWxseSBlZGl0ZWQiOwokbGFuZ1sndGFibWVzc2FnZV9zb3VyY2VfYWRkJ10JCT0gIlNvdXJjZSBzdWNjZXNzZnVsbHkgYWRkZWQiOwokbGFuZ1sndGFibWVzc2FnZV9ncm91cF9lZGl0J10JCT0gIkdyb3VwIHN1Y2Nlc3NmdWxseSBlZGl0ZWQiOwokbGFuZ1sndGFibWVzc2FnZV9ncm91cF9hZGQnXQkJPSAiR3JvdXAgc3VjY2Vzc2Z1bGx5IGFkZGVkIjsKJGxhbmdbJ3RhYm1lc3NhZ2VfZ3JvdXBfZGVsZXRlJ10JPSAiR3JvdXAgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQiOwokbGFuZ1sndGFibWVzc2FnZV9zb3VyY2VfZGVsZXRlJ10JPSAiU291cmNlIHN1Y2Nlc3NmdWxseSBkZWxldGVkIjsKJGxhbmdbJ3RhYm1lc3NhZ2VfdGVtcGxhdGVfYWRkJ10JPSAiVGVtcGxhdGUgc3VjY2Vzc2Z1bGx5IGFkZGVkIjsKJGxhbmdbJ3RhYm1lc3NhZ2VfdGVtcGxhdGVfZWRpdCddCT0gIlRlbXBsYXRlIHN1Y2Nlc3NmdWxseSBlZGl0ZWQiOwokbGFuZ1sndGFibWVzc2FnZV90ZW1wbGF0ZV9kZWxldGUnXQk9ICJUZW1wbGF0ZSBzdWNjZXNzZnVsbHkgZGVsZXRlZCI7CiRsYW5nWyd0YWJtZXNzYWdlX3RlbXBsYXRlX2RlZmF1bHQnXT0gIkRlZmF1bHQgdGVtcGxhdGUgc3VjY2Vzc2Z1bGx5IGVkaXRlZCI7CiRsYW5nWyd0YWJtZXNzYWdlX3NldHRpbmdzX2NoYW5nZWQnXT0gIlNldHRpbmdzIHN1Y2Nlc3NmdWxseSBlZGl0ZWQiOwokbGFuZ1sndGFibWVzc2FnZV9sb2dnZWRvdXQnXQkJPSAiU3VjY2Vzc2Z1bGx5IGxvZ2dlZCBvZmYuIFBsZWFzZSBub3RlIHR3ZWV0cyBjYW4gbm90IGJlIGZldGNoZWQgbm93IjsKJGxhbmdbJ3RhYm1lc3NhZ2VfbG9nZ2VkaW4nXQkJPSAiU3VjY2Vzc2Z1bGx5IGxvZ2dlZCBpbiI7CgovLyBJTlBVVCBURVhUUwokbGFuZ1snaW5wdXRfdGV4dF9UeXBlJ10JCQk9ICJUeXBlIjsKJGxhbmdbJ2lucHV0X3RleHRfVGl0bGUnXQkJCT0gIlRpdGxlIjsKJGxhbmdbJ2lucHV0X3RleHRfRGF0YSddCQkJPSAiRGF0YSI7CiRsYW5nWydpbnB1dF90ZXh0X25hbWUnXQkJCT0gIk5hbWUiOwokbGFuZ1snaW5wdXRfdGV4dF9jb250ZW50J10JCQk9ICJDb250ZW50IjsKCi8vIFR5cGVzCiRsYW5nWyd0eXBlc19hY2NvdW50J10JCQkJPSAiVHdpdHRlciBwcm9maWxlIjsKJGxhbmdbJ3R5cGVzX2hhc2h0YWcnXQkJCQk9ICJIYXNoIHRhZyI7CiRsYW5nWyd0eXBlc19zZWFyY2gnXQkJCQk9ICJTZWFyY2ggdGVybSI7CgovLyBFUlJPUlMKJGxhbmdbJ2Vycm9yX3NvdXJjZV9lZGl0J10JCQk9ICJTb21ldGhpbmcgd2VudCB3cm9uZyB0cnlpbmcgdG8gZWRpdCB0aGUgc291cmNlLiI7CgovLyBOTyBGT1VORFMKJGxhbmdbJ25vc291cmNlcyddCQkJCQk9ICJUaGVyZSBhcmUgbm8gc291cmNlcyB5ZXQuIjsKJGxhbmdbJ25vZ3JvdXBzJ10JCQkJCT0gIlRoZXJlIGFyZSBubyBncm91cHMgeWV0LiI7CiRsYW5nWydub21lc3NhZ2VzJ10JCQkJCT0gIlRoZXJlIGFyZSBubyBtZXNzYWdlcyB5ZXQuIjsKJGxhbmdbJ25vdXNlcnMnXQkJCQkJPSAiVGhlcmUgYXJlIG5vIHVzZXJzIHlldC4iOwoKLy8gQUxFUlRTCiRsYW5nWydkZWxldGVncm91cGNvbmZpcm0nXQkJCT0gIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBncm91cD8iOwokbGFuZ1snZGVsZXRldGVtcGxhdGVjb25maXJtJ10JCT0gIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyB0ZW1wbGF0ZT8iOwokbGFuZ1snZGVsZXRlc291cmNlY29uZmlybSddCQk9ICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgc291cmNlPyI7CiRsYW5nWydtZXNzYWdlX25vdF9hdXRoZW50aWNhdGVkJ10JPSAiWW91IGhhdmUgbm90IHlldCBhdXRoZW50aWNhdGVkIHlvdXJzZWxmIHdpdGggVHdpdHRlci4gVHdlZXRzIGNhbiBub3QgYmUgZmV0Y2hlZC4iOwoKLy8gQUNUSU9OUwokbGFuZ1snYWN0aXZhdGUnXQkJCT0JJ0FjdGl2YXRlJzsKJGxhbmdbJ2RlYWN0aXZhdGUnXQkJCT0JJ0RlYWN0aXZhdGUnOwokbGFuZ1snc2VhcmNodGV4dCddCQkJPQknU2VhcmNoJzsKJGxhbmdbJ2RhdGVmb3JtYXQnXQkJCT0JJ1ktbS1kIEg6bTpzJzsKCi8vIFRJTUUKJGxhbmdbJ3RpbWVfbGVzc19ob3VyJ10JCT0JJ0xlc3MgdGhhbiBhbiBob3VyJzsKJGxhbmdbJ3RpbWVfYWdvJ10JCQk9CSdhZ28nOwokbGFuZ1sndGltZV9ob3VyJ10JCQk9CSdob3VyJzsKJGxhbmdbJ3RpbWVfaG91cnMnXQkJCT0JJ2hvdXJzJzsKJGxhbmdbJ3RpbWVfZGF5cyddCQkJPQknZGF5cyc7CiRsYW5nWyd0aW1lX2RheSddCQkJPQknZGF5JzsKJGxhbmdbJ3RpbWVfbW9udGhzJ10JCT0JJ21vbnRocyc7CiRsYW5nWyd0aW1lX21vbnRoJ10JCQk9CSdtb250aCc7CgovLyBNT0RVTEUgRVhQTEFOQVRJT04KJGxhbmdbJ3BhcmFtZXRlcl9ncm91cCddCT0gJ0lEIG9mIHRoZSBncm91cCB0byBzaG93IHR3ZWV0cyBvZi4nOwokbGFuZ1sncGFyYW1ldGVyX3NvdXJjZSddCT0gJ0lEIG9mIHRoZSBzb3VyY2Uvc291cmNlcyB0byBzaG93IHR3ZWV0cyBvZiwgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gRm9yIGV4YW1wbGUge1R3ZWV0TWdyIHNvdXJjZT0iMSwzIn0nOwokbGFuZ1sncGFyYW1ldGVyX2xpbWl0J10JPSAnRGVmYXVsdDogNSAtIE51bWJlciBvZiB0d2VldHMgdG8gc2hvdy4nOwokbGFuZ1sncGFyYW1ldGVyX3RlbXBsYXRlJ10JPSAnVGVtcGxhdGUgdG8gYmUgdXNlZCB0byBzaG93IHRoZSB0d2VldHMuJzsKCgokbGFuZ1snaW5mbyddID0gJ1doYXRcJ3MgdGhpcz8nOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBkdW1teSBpbmRleC5odG1sIC0tPgo=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1R3ZWV0TWdyJzsKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnTW9kdWxlIHZvb3IgaGV0IHRvbmVuIHZhbiB0d2VldHMsIGdlYmFzZWVyZCBvcCBhY2NvdW50LCBoYXNodGFnIG9mIHpvZWt0ZXJtLic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1R3ZWV0TWdyIGlzIGdlw69uc3RhbGxlZXJkLic7CgovLyBUQUJTCiRsYW5nWyd0YWJfbWVzc2FnZXMnXQkJPQknVHdlZXRzJzsKJGxhbmdbJ3RhYl91c2VycyddCQkJPQknVHdlZXBzJzsKJGxhbmdbJ3RhYl9zb3VyY2VzJ10JCT0JJ0Jyb25uZW4nOwokbGFuZ1sndGFiX2dyb3VwcyddCQkJPQknR3JvZXBlbic7CiRsYW5nWyd0YWJfc2V0dGluZ3MnXQkJPQknSW5zdGVsbGluZ2VuJzsKJGxhbmdbJ3RhYl90ZW1wbGF0ZXMnXQkJPQknU2phYmxvbmVuJzsKCi8vIEhFQURFUlMKJGxhbmdbJ2hlYWRlcl9NZXNzYWdlJ10JCT0JJ0JlcmljaHQnOwokbGFuZ1snaGVhZGVyX1VzZXJuYW1lJ10JPQknR2VicnVpa2VyJzsKJGxhbmdbJ2hlYWRlcl9EYXRlJ10JCT0JJ0RhdHVtJzsKJGxhbmdbJ2hlYWRlcl9MYXN0VXBkYXRlJ10JPQknTGFhdHN0IGJpamdld2Vya3QnOwokbGFuZ1snaGVhZGVyX1RpdGxlJ10JCT0JJ1RpdGVsJzsKJGxhbmdbJ2hlYWRlcl9UeXBlJ10JCT0JJ1R5cGUnOwokbGFuZ1snaGVhZGVyX0RhdGVDcmVhdGVkJ10JPQknRGF0dW0gYWFuZ2VtYWFrdCc7CiRsYW5nWydoZWFkZXJfU291cmNlJ10JCT0JJ0Jyb24nOwokbGFuZ1snaGVhZGVyX0RlZmF1bHQnXQkJPQknU3RhbmRhYXJkJzsKJGxhbmdbJ2hlYWRlcl9JRCddCQkJPQknSUQnOwokbGFuZ1snaGVhZGVyX1NvdXJjZVRpdGxlJ10JPQknQnJvbic7CgovLyBTRVRUSU5HUwokbGFuZ1snc2V0dGluZ19SZWZyZXNoSW50ZXJ2YWwnXSA9ICdWZXJuaWV1d2luZ3NpbnRlcnZhbCAoaW4gc2Vjb25kZW4pJzsKJGxhbmdbJ3NldHRpbmdfRXZlcnlMb2FkJ10gCT0gJ0Vsa2Uga2VlciB2ZXJuaWV1d2VuIGFscyBlZW4gcGFnaW5hIGdlbGFkZW4gd29yZHQnOwokbGFuZ1snc2V0dGluZ19BcHBLZXknXSAJPSAnQ29uc3VtZXIga2V5IHZhbiBqZSBUd2l0dGVyIGFwcGxpY2F0aW9uJzsKJGxhbmdbJ3NldHRpbmdfQXBwU2VjcmV0J10gCT0gJ0NvbnN1bWVyIHNlY3JldCB2YW4gamUgVHdpdHRlciBhcHBsaWNhdGlvbic7CiRsYW5nWydzZXR0aW5nX0xvZ2dlZGluJ10gCT0gJ0luZ2Vsb2dkIGFsczogJzsKJGxhbmdbJ3NldHRpbmdfU2lnbkluJ10gCT0gJ0xvZyBpbiBiaWogVHdpdHRlcic7CiRsYW5nWydzZXR0aW5nX1Jldm9rZSddIAk9ICdMb2cgdWl0IGJpaiBUd2l0dGVyJzsKJGxhbmdbJ3NldHRpbmdfVHdpdHRlckFjY291bnQnXSAJPSAnVHdpdHRlciBhY2NvdW50JzsKCi8vIEJVVFRPTlMKJGxhbmdbJ2J1dHRvbl9hZGRzb3VyY2UnXQk9CSdCcm9uIHRvZXZvZWdlbic7CiRsYW5nWydidXR0b25fYWRkZ3JvdXAnXQk9CSdHcm9lcCB0b2V2b2VnZW4nOwokbGFuZ1snYnV0dG9uX2FkZHRlbXBsYXRlJ10JPQknU2phYmxvb24gdG9ldm9lZ2VuJzsKCi8vIEhFTFAKJGxhbmdbJ2hlbHBfUmVmcmVzaEludGVydmFsJ10gPSAnSG9ldmVlbCB0aWpkIG1vZXQgZXIgdGVubWluc3RlIHZlcnN0cmVrZW4gemlqbiB2b29yZGF0IGluZm9ybWF0aWUgdmVybmlldXdkIG1vZXQgd29yZGVuPyc7CiRsYW5nWydoZWxwX0V2ZXJ5TG9hZCddIAk9ICdBbHMgdSBkaXQgaW5zY2hha2VsdCB6dWxsZW4gdHdlZXRzIGVsa2Uga2VlciB2ZXJ2ZXJzdCB3b3JkZW4gYWxzIGVlbiBwYWdpbmEgZ2VsYWRlbiB3b3JkdCwgaW4gcGxhYXRzIHZhbiBlbmtlbCBvcCBwYWdpbmFcJ3Mgd2FhciBkZSBtb2R1bGUgZ2VicnVpa3Qgd29yZHQuIERlIHZlcm5pZXV3c2ludGVydmFsIHdvcmR0IG5vZyBzdGVlZHMgZ2VoYW50ZWVyZC4nOwokbGFuZ1snaGVscF9BcHBLZXknXSAJCT0gJ0NvbnN1bWVyIGtleSB2YW4gam91dyBUd2VldE1nciBtb2R1bGUuIExhYXQgZGV6ZSB3YWFyZGUgb25nZXdpanppZ2QgYWxzIGplIG5pZXQgd2VldCB3YXQgaGV0IGJldGVrZW50Lic7CiRsYW5nWydoZWxwX0FwcFNlY3JldCddIAk9ICdDb25zdW1lciBzZWNyZXQgdmFuIGpvdXcgVHdlZXRNZ3IgbW9kdWxlLiBMYWF0IGRlemUgd2FhcmRlIG9uZ2V3aWp6aWdkIGFscyBqZSBuaWV0IHdlZXQgd2F0IGhldCBiZXRla2VudC4nOwoKJGxhbmdbJ2hlbHBfdGVtcGxhdGVWYXJzJ10JPSAnCgk8cCBjbGFzcz0icGFnZXRleHQiPkJlc2NoaWtiYXJlIHZhcmlhYmVsZW48L3A+CgkkdHdlZXQuSUQJCQkJOglJRCB2YW4gZGUgdHdlZXQgaW4gZGUgZGF0YWJhc2UKCSR0d2VldC5Ud2VldElECQkJOglJRCB2YW4gZGUgdHdlZXQgb3AgdHdpdHRlcgoJJHR3ZWV0Lk1lc3NhZ2UJCQk6CVR3ZWV0IHpvbmRlciBiZXdlcmtpbmcKCSR0d2VldC5NZXNzYWdlX3BhcnNlZAk6CVR3ZWV0LCB3YWFyaW4gdmVyd2lqemluZ2VuIG5hYXIgYWNjb3VudHMsIGhhc2h0YWdzIGVuIHVybFwncyB6aWpuIG9tZ2V6ZXQgbmFhciBsaW5rcwkKCSR0d2VldC5BY3RpdmUJCQk6CU9mIGRlIHR3ZWV0IGdldG9vbmQgbW9ldCB3b3JkZW4gKEFsdGlqZCAxLCB3YW50IGFsbGVlbiBhY3RpZXZlIGJlcmljaHRlbiBrb21lbiBpbiBkZSB0d2VldGxpanN0KQoJJHR3ZWV0LnNvdXJjZUlECQkJOglJRCB2YW4gZGUgYnJvbiB3YWFydWl0IGRlIHR3ZWV0IGtvbXQKCSR0d2VldC5EYXRlCQkJCToJRGF0dW0gZGF0IGRlIHR3ZWV0IGdlcGxhYXRzdCB3ZXJkCgkkdHdlZXQuRGF0ZV9wYXJzZWQJCToJTW9tZW50IGRhdCBkZSB0d2VldCBnZXBsYWF0c3Qgd2VyZC4gQmlqdm9vcmJlZWxkIFwnMiB3ZWtlbiBnZWxlZGVuXCcKCSR0d2VldC5MaW5rCQkJCToJTGluayBuYWFyIGRlIHR3ZWV0IG9wIFR3aXR0ZXIKCSR0d2VldC5Vc2VyCQkJCToJQXJyYXkgbWV0IGFsbGUgZ2VicnVpa2Vyc2luZm8KCQkkdHdlZXQuVXNlci5JRAkJCToJSUQgdmFuIGRlIGdlYnJ1aWtlcgoJCSR0d2VldC5Vc2VyLlVzZXJuYW1lCToJR2VicnVpa2Vyc25hYW0gdmFuIGRlIGdlYnJ1aWtlcgoJCSR0d2VldC5Vc2VyLkF2YXRhcgkJOglUd2l0dGVyIGF2YXRhciB2YW4gZGUgZ2VicnVpa2VyCgkJJHR3ZWV0LlVzZXIuQWN0aXZlCQk6CTEgPSBPSzsgMCA9IEJsYWNrbGlzdGVkCgkJJHR3ZWV0LlVzZXIuTGFzdFVwZGF0ZQk6CVdhbm5lZXIgZGUgZ2VicnVpa2VyIHZvb3IgaGV0IGxhYXRzdCB3ZXJkIGJpamdld2Vya3QKJzsKCi8vIFRBQk1FU1NBR0VTCiRsYW5nWyd0YWJtZXNzYWdlX21lc3NhZ2VfYWN0aXZlMCddCT0gIkJlcmljaHQgc3VjY2Vzdm9sIGdlZGVhY3RpdmVlcmQiOwokbGFuZ1sndGFibWVzc2FnZV9tZXNzYWdlX2FjdGl2ZTEnXQk9ICJCZXJpY2h0IHN1Y2Nlc3ZvbCBnZWFjdGl2ZWVyZCI7CiRsYW5nWyd0YWJtZXNzYWdlX3VzZXJfYWN0aXZlMCddCT0gIkdlYnJ1aWtlciBzdWNjZXN2b2wgZ2VkZWFjdGl2ZWVyZCI7CiRsYW5nWyd0YWJtZXNzYWdlX3VzZXJfYWN0aXZlMSddCT0gIkdlYnJ1aWtlciBzdWNjZXN2b2wgZ2VhY3RpdmVlcmQiOwokbGFuZ1sndGFibWVzc2FnZV9zb3VyY2VfYWN0aXZlMCddCT0gIkJyb24gc3VjY2Vzdm9sIGdlZGVhY3RpdmVlcmQiOwokbGFuZ1sndGFibWVzc2FnZV9zb3VyY2VfYWN0aXZlMSddCT0gIkJyb24gc3VjY2Vzdm9sIGdlYWN0aXZlZXJkIjsKJGxhbmdbJ3RhYm1lc3NhZ2Vfc291cmNlX2VkaXQnXQkJPSAiQnJvbiBzdWNjZXN2b2wgZ2V3aWp6aWdkIjsKJGxhbmdbJ3RhYm1lc3NhZ2Vfc291cmNlX2FkZCddCQk9ICJCcm9uIHN1Y2Nlc3ZvbCB0b2VnZXZvZWdkIjsKJGxhbmdbJ3RhYm1lc3NhZ2VfZ3JvdXBfZWRpdCddCQk9ICJHcm9lcCBzdWNjZXN2b2wgZ2V3aWp6aWdkIjsKJGxhbmdbJ3RhYm1lc3NhZ2VfZ3JvdXBfYWRkJ10JCT0gIkdyb2VwIHN1Y2Nlc3ZvbCB0b2VnZXZvZWdkIjsKJGxhbmdbJ3RhYm1lc3NhZ2VfZ3JvdXBfZGVsZXRlJ10JPSAiR3JvZXAgc3VjY2Vzdm9sIHZlcndpamRlcmQiOwokbGFuZ1sndGFibWVzc2FnZV9zb3VyY2VfZGVsZXRlJ10JPSAiQnJvbiBzdWNjZXN2b2wgdmVyd2lqZGVyZCI7CiRsYW5nWyd0YWJtZXNzYWdlX3RlbXBsYXRlX2FkZCddCT0gIlNqYWJsb29uIHN1Y2Nlc3ZvbCB0b2VnZXZvZWdkIjsKJGxhbmdbJ3RhYm1lc3NhZ2VfdGVtcGxhdGVfZWRpdCddCT0gIlNqYWJsb29uIHN1Y2Nlc3ZvbCBnZXdpanppZ2QiOwokbGFuZ1sndGFibWVzc2FnZV90ZW1wbGF0ZV9kZWxldGUnXQk9ICJTamFibG9vbiBzdWNjZXN2b2wgdmVyd2lqZGVyZCI7CiRsYW5nWyd0YWJtZXNzYWdlX3RlbXBsYXRlX2RlZmF1bHQnXT0gIlN0YW5kYWFyZCBzamFibG9vbiBzdWNjZXN2b2wgZ2V3aWp6aWdkIjsKJGxhbmdbJ3RhYm1lc3NhZ2Vfc2V0dGluZ3NfY2hhbmdlZCddPSAiSW5zdGVsbGluZ2VuIHN1Y2Nlc3ZvbCBnZXdpanppZ2QiOwokbGFuZ1sndGFibWVzc2FnZV9sb2dnZWRvdXQnXQkJPSAiU3VjY2Vzdm9sIHVpdGdlbG9nZC4gVHdlZXRzIGt1bm5lbiBuaWV0IG1lZXIgd29yZGVuIG9wZ2VoYWFsZCI7CiRsYW5nWyd0YWJtZXNzYWdlX2xvZ2dlZGluJ10JCT0gIlN1Y2Nlc3ZvbCBpbmdlbG9nZCI7CgovLyBJTlBVVCBURVhUUwokbGFuZ1snaW5wdXRfdGV4dF9UeXBlJ10JCQk9ICJUeXBlIjsKJGxhbmdbJ2lucHV0X3RleHRfVGl0bGUnXQkJCT0gIlRpdGVsIjsKJGxhbmdbJ2lucHV0X3RleHRfRGF0YSddCQkJPSAiRGF0YSI7CiRsYW5nWydpbnB1dF90ZXh0X25hbWUnXQkJCT0gIk5hYW0iOwokbGFuZ1snaW5wdXRfdGV4dF9jb250ZW50J10JCQk9ICJJbmhvdWQiOwoKLy8gVHlwZXMKJGxhbmdbJ3R5cGVzX2FjY291bnQnXQkJCQk9ICJUd2l0dGVycHJvZmllbCI7CiRsYW5nWyd0eXBlc19oYXNodGFnJ10JCQkJPSAiQmVwYWFsZGUgaGFzaHRhZyI7CiRsYW5nWyd0eXBlc19zZWFyY2gnXQkJCQk9ICJCZXBhYWxkZSB6b2VrdGVybSI7CgovLyBFUlJPUlMKJGxhbmdbJ2Vycm9yX3NvdXJjZV9lZGl0J10JCQk9ICJFciBnaW5nIGlldHMgbWlzIGJpaiBoZXQgd2lqemlnZW4gdmFuIGRlIGJyb24uIjsKCi8vIE5PIEZPVU5EUwokbGFuZ1snbm9zb3VyY2VzJ10JCQkJCT0gIkVyIHppam4gbm9nIGdlZW4gYnJvbm5lbiBhYW5nZW1hYWt0LiI7CiRsYW5nWydub2dyb3VwcyddCQkJCQk9ICJFciB6aWpuIG5vZyBnZWVuIGdyb2VwZW4gYWFuZ2VtYWFrdC4iOwokbGFuZ1snbm9tZXNzYWdlcyddCQkJCQk9ICJFciB6aWpuIG5vZyBnZWVuIGJlcmljaHRlbi4iOwokbGFuZ1snbm91c2VycyddCQkJCQk9ICJFciB6aWpuIG5vZyBnZWVuIGdlYnJ1aWtlcnMuIjsKCi8vIEFMRVJUUwokbGFuZ1snZGVsZXRlZ3JvdXBjb25maXJtJ10JCQk9ICJXZWV0IHUgemVrZXIgZGF0IHUgZGV6ZSBncm9lcCB3aWx0IHZlcndpamRlcmVuPyI7CiRsYW5nWydkZWxldGV0ZW1wbGF0ZWNvbmZpcm0nXQkJPSAiV2VldCB1IHpla2VyIGRhdCB1IGRpdCBzamFibG9vbiB3aWx0IHZlcndpamRlcmVuPyI7CiRsYW5nWydkZWxldGVzb3VyY2Vjb25maXJtJ10JCT0gIldlZXQgdSB6ZWtlciBkYXQgdSBkZXplIGJyb24gd2lsdCB2ZXJ3aWpkZXJlbj8iOwokbGFuZ1snbWVzc2FnZV9ub3RfYXV0aGVudGljYXRlZCddCT0gIlUgaGVlZnQgemljaCBub2cgbmlldCBnZWF1dG9yaXNlZXJkIGJpaiBUd2l0dGVyLiBFciBrdW5uZW4gZ2VlbiB0d2VldHMgb3BnZWhhYWxkIHdvcmRlbi4iOwoKLy8gQUNUSU9OUwokbGFuZ1snYWN0aXZhdGUnXQkJCT0JJ0FjdGl2ZWVyJzsKJGxhbmdbJ2RlYWN0aXZhdGUnXQkJCT0JJ0RlYWN0aXZlZXInOwokbGFuZ1snc2VhcmNodGV4dCddCQkJPQknWm9la2VuJzsKJGxhbmdbJ2RhdGVmb3JtYXQnXQkJCT0JJ2QtbS1ZIEg6LjpzJzsKCi8vIFRJTUUKJGxhbmdbJ3RpbWVfbGVzc19ob3VyJ10JCT0JJ01pbmRlciBkYW4gZWVuIHV1cic7CiRsYW5nWyd0aW1lX2FnbyddCQkJPQknZ2VsZWRlbic7CiRsYW5nWyd0aW1lX2hvdXInXQkJCT0JJ3V1cic7CiRsYW5nWyd0aW1lX2hvdXJzJ10JCQk9CSd1dXInOwokbGFuZ1sndGltZV9kYXlzJ10JCQk9CSdkYWdlbic7CiRsYW5nWyd0aW1lX2RheSddCQkJPQknZGFnJzsKJGxhbmdbJ3RpbWVfbW9udGhzJ10JCT0JJ21hYW5kZW4nOwokbGFuZ1sndGltZV9tb250aCddCQkJPQknbWFhbmQnOwoKLy8gTU9EVUxFIEVYUExBTkFUSU9OCiRsYW5nWydwYXJhbWV0ZXJfZ3JvdXAnXQk9ICdJRCB2YW4gZGUgZ3JvZXAgd2FhcnZhbiBkZSB0d2VldHMgZ2V0b29uZCBtb2V0ZW4gd29yZGVuLic7CiRsYW5nWydwYXJhbWV0ZXJfc291cmNlJ10JPSAnSUQgdmFuIGRlIGJyb24vYnJvbm5lbiBkaWUgZ2V0b29uZCBtb2V0KGVuKSB3b3JkZW4sIGdlc2NoZWlkZW4gZG9vciBjb21tYVwncy4gQmlqdm9vcmJlZWxkIHtUd2VldE1nciBzb3VyY2U9IjEsMyJ9JzsKJGxhbmdbJ3BhcmFtZXRlcl9saW1pdCddCT0gJ1N0YW5kYWFyZDogNSAtIEFhbnRhbCB0d2VldHMgZGF0IGdldG9vbmQgbW9ldCB3b3JkZW4uJzsKJGxhbmdbJ3BhcmFtZXRlcl90ZW1wbGF0ZSddCT0gJ1NqYWJsb29uIGRhdCBnZWJydWlrdCBtb2V0IHdvcmRlbiBvbSBkZSB0d2VldHMgdGUgdG9uZW4uJzsKCiRsYW5nWydpbmZvJ10gPSAnV2hhdFwncyB0aGlzPyc7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBkdW1teSBpbmRleC5odG1sIC0tPgo=]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/css/jquery.tooltip.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[I3Rvb2x0aXAgewoJcG9zaXRpb246IGFic29sdXRlOwoJei1pbmRleDogMTAwMDsKCWJvcmRlcjogMXB4IHNvbGlkICMwMDA7CgliYWNrZ3JvdW5kLWNvbG9yOiAjREREOwoJcGFkZGluZzogNXB4OwoJb3BhY2l0eTogMC44NTsKfQoKI3Rvb2x0aXAgaDMsIAojdG9vbHRpcCBkaXYgeyAKCW1hcmdpbjogMDsKCWZvbnQtc2l6ZTogOXB0OwoJY29sb3I6ICM1ODU4NTg7Cn0=]]></data>
	</file>
	<file>
	  <filename>/lib/css/TweetMgr.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[I3RhYmxlY29udGFpbmVyIHsgd2lkdGg6IDYwMHB4IH0KCiN0YWJsZWNvbnRhaW5lciAucGFnZXRhYmxlIGlucHV0LmNtc190ZXh0ZmllbGQsCiN0YWJsZWNvbnRhaW5lciAucGFnZXRhYmxlIHNlbGVjdCB7IHdpZHRoOiAzMDBweCB9CgoudGFiY29udGVudCAucGFnaW5nIHsKCWxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKCWxpc3Qtc3R5bGUtaW1hZ2U6IG5vbmU7CglwYWRkaW5nOiAwOwoJbWFyZ2luOiAwICFpbXBvcnRhbnQ7Cn0KCi50YWJjb250ZW50IC5wYWdpbmcgbGkgewoJZmxvYXQ6IGxlZnQ7CgltYXJnaW46IDAgMnB4IDAgMDsJCgliYWNrZ3JvdW5kOiAjREREREREOwkKCWRpc3BsYXk6IGJsb2NrOwp9CgoudGFiY29udGVudCAucGFnaW5nIGxpIGEsCi50YWJjb250ZW50IC5wYWdpbmcgbGkgc3BhbiB7CglwYWRkaW5nOiA2cHggMTJweDsKCWRpc3BsYXk6IGJsb2NrOwp9CgoKLnRhYmNvbnRlbnQgLnBhZ2luZyBsaS5hY3RpdmUgewoJZm9udC13ZWlnaHQ6IGJvbGQ7Cgl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQoKLmNsZWFyIHsgY2xlYXI6IGJvdGggfQoucG9zdHVybCB7IGRpc3BsYXk6IG5vbmUgfQouc2VhcmNoIHsgbWFyZ2luLWJvdHRvbTogMTBweCB9CgojdHdlZXRtZ3IgYS5zaWduaW4sCiN0d2VldG1nciBhLnNpZ25pbjpob3ZlciB7CglkaXNwbGF5OiBibG9jazsKCXdpZHRoOiAxMjBweDsKCWhlaWdodDogMTZweDsKCWJhY2tncm91bmQ6IHVybCgnLi4vc2lnbmluLnBuZycpIG5vLXJlcGVhdCAwIDA7Cgljb2xvcjogIzRiODBhOTsKCXRleHQtc2hhZG93OiAwcHggMXB4ICNkYmQyZDI7CglwYWRkaW5nOiA2cHggMCAwIDMwcHg7Cglmb250LXNpemU6IDEycHg7CglsaW5lLWhlaWdodDogMTJweDsKCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKI3R3ZWV0bWdyIGEuc2lnbm91dCwKI3R3ZWV0bWdyIGEuc2lnbm91dDpob3ZlciB7CglkaXNwbGF5OiBibG9jazsKCXdpZHRoOiAxMjBweDsKCWhlaWdodDogMTZweDsKCWJhY2tncm91bmQ6IHVybCgnLi4vc2lnbmluLnBuZycpIG5vLXJlcGVhdCAwIC0yMnB4OwoJY29sb3I6ICNhYjAwMDA7Cgl0ZXh0LXNoYWRvdzogMHB4IDFweCAjZGJkMmQyOwoJcGFkZGluZzogNnB4IDAgMCAzMHB4OwoJZm9udC1zaXplOiAxMnB4OwoJbGluZS1oZWlnaHQ6IDEycHg7Cgl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCiN0d2VldG1nciBhLnNpZ25vdXQ6aG92ZXIsCiN0d2VldG1nciBhLnNpZ25pbjpob3ZlciB7IHRleHQtc2hhZG93OiAwcHggMXB4ICNhZmE1YTUgfQoKI3R3ZWV0bWdyIC5wYWdldGV4dCwKI3R3ZWV0bWdyIC5wYWdlaW5wdXQgeyBtYXJnaW4tbGVmdDogMCB9]]></data>
	</file>
	<file>
	  <filename>/lib/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/js/jquery.tooltip.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogalF1ZXJ5IFRvb2x0aXAgcGx1Z2luIDEuMwogKgogKiBodHRwOi8vYmFzc2lzdGFuY2UuZGUvanF1ZXJ5LXBsdWdpbnMvanF1ZXJ5LXBsdWdpbi10b29sdGlwLwogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1BsdWdpbnMvVG9vbHRpcAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IErDtnJuIFphZWZmZXJlcgogKgogKiBqUXVlcnlJZDoganF1ZXJ5LnRvb2x0aXAuanMgNTc0MSAyMDA4LTA2LTIxIDE1OjIyOjE2WiBqb2Vybi56YWVmZmVyZXIgalF1ZXJ5CiAqIAogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlczoKICogICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAogKiAgIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbAogKi87KGZ1bmN0aW9uKGpRdWVyeSl7dmFyIGhlbHBlcj17fSxjdXJyZW50LHRpdGxlLHRJRCxJRT1qUXVlcnkuYnJvd3Nlci5tc2llJiYvTVNJRVxzKDVcLjV8NlwuKS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0cmFjaz1mYWxzZTtqUXVlcnkudG9vbHRpcD17YmxvY2tlZDpmYWxzZSxkZWZhdWx0czp7ZGVsYXk6MjAwLGZhZGU6ZmFsc2Usc2hvd1VSTDp0cnVlLGV4dHJhQ2xhc3M6IiIsdG9wOjE1LGxlZnQ6MTUsaWQ6InRvb2x0aXAifSxibG9jazpmdW5jdGlvbigpe2pRdWVyeS50b29sdGlwLmJsb2NrZWQ9IWpRdWVyeS50b29sdGlwLmJsb2NrZWQ7fX07alF1ZXJ5LmZuLmV4dGVuZCh7dG9vbHRpcDpmdW5jdGlvbihzZXR0aW5ncyl7c2V0dGluZ3M9alF1ZXJ5LmV4dGVuZCh7fSxqUXVlcnkudG9vbHRpcC5kZWZhdWx0cyxzZXR0aW5ncyk7Y3JlYXRlSGVscGVyKHNldHRpbmdzKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7alF1ZXJ5LmRhdGEodGhpcywidG9vbHRpcCIsc2V0dGluZ3MpO3RoaXMudE9wYWNpdHk9aGVscGVyLnBhcmVudC5jc3MoIm9wYWNpdHkiKTt0aGlzLnRvb2x0aXBUZXh0PXRoaXMudGl0bGU7alF1ZXJ5KHRoaXMpLnJlbW92ZUF0dHIoInRpdGxlIik7dGhpcy5hbHQ9IiI7fSkubW91c2VvdmVyKHNhdmUpLm1vdXNlb3V0KGhpZGUpLmNsaWNrKGhpZGUpO30sZml4UE5HOklFP2Z1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBpbWFnZT1qUXVlcnkodGhpcykuY3NzKCdiYWNrZ3JvdW5kSW1hZ2UnKTtpZihpbWFnZS5tYXRjaCgvXnVybFwoWyInXT8oLipcLnBuZylbIiddP1wpalF1ZXJ5L2kpKXtpbWFnZT1SZWdFeHAualF1ZXJ5MTtqUXVlcnkodGhpcykuY3NzKHsnYmFja2dyb3VuZEltYWdlJzonbm9uZScsJ2ZpbHRlcic6InByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKGVuYWJsZWQ9dHJ1ZSwgc2l6aW5nTWV0aG9kPWNyb3AsIHNyYz0nIitpbWFnZSsiJykifSkuZWFjaChmdW5jdGlvbigpe3ZhciBwb3NpdGlvbj1qUXVlcnkodGhpcykuY3NzKCdwb3NpdGlvbicpO2lmKHBvc2l0aW9uIT0nYWJzb2x1dGUnJiZwb3NpdGlvbiE9J3JlbGF0aXZlJylqUXVlcnkodGhpcykuY3NzKCdwb3NpdGlvbicsJ3JlbGF0aXZlJyk7fSk7fX0pO306ZnVuY3Rpb24oKXtyZXR1cm4gdGhpczt9LHVuZml4UE5HOklFP2Z1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2pRdWVyeSh0aGlzKS5jc3MoeydmaWx0ZXInOicnLGJhY2tncm91bmRJbWFnZTonJ30pO30pO306ZnVuY3Rpb24oKXtyZXR1cm4gdGhpczt9LGhpZGVXaGVuRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7alF1ZXJ5KHRoaXMpW2pRdWVyeSh0aGlzKS5odG1sKCk/InNob3ciOiJoaWRlIl0oKTt9KTt9LHVybDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmF0dHIoJ2hyZWYnKXx8dGhpcy5hdHRyKCdzcmMnKTt9fSk7ZnVuY3Rpb24gY3JlYXRlSGVscGVyKHNldHRpbmdzKXtpZihoZWxwZXIucGFyZW50KXJldHVybjtoZWxwZXIucGFyZW50PWpRdWVyeSgnPGRpdiBpZD0iJytzZXR0aW5ncy5pZCsnIj48aDM+PC9oMz48ZGl2IGNsYXNzPSJib2R5Ij48L2Rpdj48ZGl2IGNsYXNzPSJ1cmwiPjwvZGl2PjwvZGl2PicpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLmhpZGUoKTtpZihqUXVlcnkuZm4uYmdpZnJhbWUpaGVscGVyLnBhcmVudC5iZ2lmcmFtZSgpO2hlbHBlci50aXRsZT1qUXVlcnkoJ2gzJyxoZWxwZXIucGFyZW50KTtoZWxwZXIuYm9keT1qUXVlcnkoJ2Rpdi5ib2R5JyxoZWxwZXIucGFyZW50KTtoZWxwZXIudXJsPWpRdWVyeSgnZGl2LnVybCcsaGVscGVyLnBhcmVudCk7fWZ1bmN0aW9uIHNldHRpbmdzKGVsZW1lbnQpe3JldHVybiBqUXVlcnkuZGF0YShlbGVtZW50LCJ0b29sdGlwIik7fWZ1bmN0aW9uIGhhbmRsZShldmVudCl7aWYoc2V0dGluZ3ModGhpcykuZGVsYXkpdElEPXNldFRpbWVvdXQoc2hvdyxzZXR0aW5ncyh0aGlzKS5kZWxheSk7ZWxzZQpzaG93KCk7dHJhY2s9ISFzZXR0aW5ncyh0aGlzKS50cmFjaztqUXVlcnkoZG9jdW1lbnQuYm9keSkuYmluZCgnbW91c2Vtb3ZlJyx1cGRhdGUpO3VwZGF0ZShldmVudCk7fWZ1bmN0aW9uIHNhdmUoKXtpZihqUXVlcnkudG9vbHRpcC5ibG9ja2VkfHx0aGlzPT1jdXJyZW50fHwoIXRoaXMudG9vbHRpcFRleHQmJiFzZXR0aW5ncyh0aGlzKS5ib2R5SGFuZGxlcikpcmV0dXJuO2N1cnJlbnQ9dGhpczt0aXRsZT10aGlzLnRvb2x0aXBUZXh0O2lmKHNldHRpbmdzKHRoaXMpLmJvZHlIYW5kbGVyKXtoZWxwZXIudGl0bGUuaGlkZSgpO3ZhciBib2R5Q29udGVudD1zZXR0aW5ncyh0aGlzKS5ib2R5SGFuZGxlci5jYWxsKHRoaXMpO2lmKGJvZHlDb250ZW50Lm5vZGVUeXBlfHxib2R5Q29udGVudC5qcXVlcnkpe2hlbHBlci5ib2R5LmVtcHR5KCkuYXBwZW5kKGJvZHlDb250ZW50KX1lbHNle2hlbHBlci5ib2R5Lmh0bWwoYm9keUNvbnRlbnQpO31oZWxwZXIuYm9keS5zaG93KCk7fWVsc2UgaWYoc2V0dGluZ3ModGhpcykuc2hvd0JvZHkpe3ZhciBwYXJ0cz10aXRsZS5zcGxpdChzZXR0aW5ncyh0aGlzKS5zaG93Qm9keSk7aGVscGVyLnRpdGxlLmh0bWwocGFydHMuc2hpZnQoKSkuc2hvdygpO2hlbHBlci5ib2R5LmVtcHR5KCk7Zm9yKHZhciBpPTAscGFydDsocGFydD1wYXJ0c1tpXSk7aSsrKXtpZihpPjApaGVscGVyLmJvZHkuYXBwZW5kKCI8YnIvPiIpO2hlbHBlci5ib2R5LmFwcGVuZChwYXJ0KTt9aGVscGVyLmJvZHkuaGlkZVdoZW5FbXB0eSgpO31lbHNle2hlbHBlci50aXRsZS5odG1sKHRpdGxlKS5zaG93KCk7aGVscGVyLmJvZHkuaGlkZSgpO31pZihzZXR0aW5ncyh0aGlzKS5zaG93VVJMJiZqUXVlcnkodGhpcykudXJsKCkpaGVscGVyLnVybC5odG1sKGpRdWVyeSh0aGlzKS51cmwoKS5yZXBsYWNlKCdodHRwOi8vJywnJykpLnNob3coKTtlbHNlCmhlbHBlci51cmwuaGlkZSgpO2hlbHBlci5wYXJlbnQuYWRkQ2xhc3Moc2V0dGluZ3ModGhpcykuZXh0cmFDbGFzcyk7aWYoc2V0dGluZ3ModGhpcykuZml4UE5HKWhlbHBlci5wYXJlbnQuZml4UE5HKCk7aGFuZGxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9ZnVuY3Rpb24gc2hvdygpe3RJRD1udWxsO2lmKCghSUV8fCFqUXVlcnkuZm4uYmdpZnJhbWUpJiZzZXR0aW5ncyhjdXJyZW50KS5mYWRlKXtpZihoZWxwZXIucGFyZW50LmlzKCI6YW5pbWF0ZWQiKSloZWxwZXIucGFyZW50LnN0b3AoKS5zaG93KCkuZmFkZVRvKHNldHRpbmdzKGN1cnJlbnQpLmZhZGUsY3VycmVudC50T3BhY2l0eSk7ZWxzZQpoZWxwZXIucGFyZW50LmlzKCc6dmlzaWJsZScpP2hlbHBlci5wYXJlbnQuZmFkZVRvKHNldHRpbmdzKGN1cnJlbnQpLmZhZGUsY3VycmVudC50T3BhY2l0eSk6aGVscGVyLnBhcmVudC5mYWRlSW4oc2V0dGluZ3MoY3VycmVudCkuZmFkZSk7fWVsc2V7aGVscGVyLnBhcmVudC5zaG93KCk7fXVwZGF0ZSgpO31mdW5jdGlvbiB1cGRhdGUoZXZlbnQpe2lmKGpRdWVyeS50b29sdGlwLmJsb2NrZWQpcmV0dXJuO2lmKGV2ZW50JiZldmVudC50YXJnZXQudGFnTmFtZT09Ik9QVElPTiIpe3JldHVybjt9aWYoIXRyYWNrJiZoZWxwZXIucGFyZW50LmlzKCI6dmlzaWJsZSIpKXtqUXVlcnkoZG9jdW1lbnQuYm9keSkudW5iaW5kKCdtb3VzZW1vdmUnLHVwZGF0ZSl9aWYoY3VycmVudD09bnVsbCl7alF1ZXJ5KGRvY3VtZW50LmJvZHkpLnVuYmluZCgnbW91c2Vtb3ZlJyx1cGRhdGUpO3JldHVybjt9aGVscGVyLnBhcmVudC5yZW1vdmVDbGFzcygidmlld3BvcnQtcmlnaHQiKS5yZW1vdmVDbGFzcygidmlld3BvcnQtYm90dG9tIik7dmFyIGxlZnQ9aGVscGVyLnBhcmVudFswXS5vZmZzZXRMZWZ0O3ZhciB0b3A9aGVscGVyLnBhcmVudFswXS5vZmZzZXRUb3A7aWYoZXZlbnQpe2xlZnQ9ZXZlbnQucGFnZVgrc2V0dGluZ3MoY3VycmVudCkubGVmdDt0b3A9ZXZlbnQucGFnZVkrc2V0dGluZ3MoY3VycmVudCkudG9wO3ZhciByaWdodD0nYXV0byc7aWYoc2V0dGluZ3MoY3VycmVudCkucG9zaXRpb25MZWZ0KXtyaWdodD1qUXVlcnkod2luZG93KS53aWR0aCgpLWxlZnQ7bGVmdD0nYXV0byc7fWhlbHBlci5wYXJlbnQuY3NzKHtsZWZ0OmxlZnQscmlnaHQ6cmlnaHQsdG9wOnRvcH0pO312YXIgdj12aWV3cG9ydCgpLGg9aGVscGVyLnBhcmVudFswXTtpZih2Lngrdi5jeDxoLm9mZnNldExlZnQraC5vZmZzZXRXaWR0aCl7bGVmdC09aC5vZmZzZXRXaWR0aCsyMCtzZXR0aW5ncyhjdXJyZW50KS5sZWZ0O2hlbHBlci5wYXJlbnQuY3NzKHtsZWZ0OmxlZnQrJ3B4J30pLmFkZENsYXNzKCJ2aWV3cG9ydC1yaWdodCIpO31pZih2Lnkrdi5jeTxoLm9mZnNldFRvcCtoLm9mZnNldEhlaWdodCl7dG9wLT1oLm9mZnNldEhlaWdodCsyMCtzZXR0aW5ncyhjdXJyZW50KS50b3A7aGVscGVyLnBhcmVudC5jc3Moe3RvcDp0b3ArJ3B4J30pLmFkZENsYXNzKCJ2aWV3cG9ydC1ib3R0b20iKTt9fWZ1bmN0aW9uIHZpZXdwb3J0KCl7cmV0dXJue3g6alF1ZXJ5KHdpbmRvdykuc2Nyb2xsTGVmdCgpLHk6alF1ZXJ5KHdpbmRvdykuc2Nyb2xsVG9wKCksY3g6alF1ZXJ5KHdpbmRvdykud2lkdGgoKSxjeTpqUXVlcnkod2luZG93KS5oZWlnaHQoKX07fWZ1bmN0aW9uIGhpZGUoZXZlbnQpe2lmKGpRdWVyeS50b29sdGlwLmJsb2NrZWQpcmV0dXJuO2lmKHRJRCljbGVhclRpbWVvdXQodElEKTtjdXJyZW50PW51bGw7dmFyIHRzZXR0aW5ncz1zZXR0aW5ncyh0aGlzKTtmdW5jdGlvbiBjb21wbGV0ZSgpe2hlbHBlci5wYXJlbnQucmVtb3ZlQ2xhc3ModHNldHRpbmdzLmV4dHJhQ2xhc3MpLmhpZGUoKS5jc3MoIm9wYWNpdHkiLCIiKTt9aWYoKCFJRXx8IWpRdWVyeS5mbi5iZ2lmcmFtZSkmJnRzZXR0aW5ncy5mYWRlKXtpZihoZWxwZXIucGFyZW50LmlzKCc6YW5pbWF0ZWQnKSloZWxwZXIucGFyZW50LnN0b3AoKS5mYWRlVG8odHNldHRpbmdzLmZhZGUsMCxjb21wbGV0ZSk7ZWxzZQpoZWxwZXIucGFyZW50LnN0b3AoKS5mYWRlT3V0KHRzZXR0aW5ncy5mYWRlLGNvbXBsZXRlKTt9ZWxzZQpjb21wbGV0ZSgpO2lmKHNldHRpbmdzKHRoaXMpLmZpeFBORyloZWxwZXIucGFyZW50LnVuZml4UE5HKCk7fX0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/lib/js/TweetMgr.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQ2hlY2sgaWYgSlF1ZXJ5IGV4aXN0cywgbWFrZSBpdCBpZiBub3QNCmlmICh0eXBlb2YgalF1ZXJ5ID09PSAidW5kZWZpbmVkIikgeyANCgkvKiEgalF1ZXJ5IHYxLjcuMSBqcXVlcnkuY29tIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovDQoJKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gY3koYSl7cmV0dXJuIGYuaXNXaW5kb3coYSk/YTphLm5vZGVUeXBlPT09OT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1mdW5jdGlvbiBjdihhKXtpZighY2tbYV0pe3ZhciBiPWMuYm9keSxkPWYoIjwiK2ErIj4iKS5hcHBlbmRUbyhiKSxlPWQuY3NzKCJkaXNwbGF5Iik7ZC5yZW1vdmUoKTtpZihlPT09Im5vbmUifHxlPT09IiIpe2NsfHwoY2w9Yy5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSxjbC5mcmFtZUJvcmRlcj1jbC53aWR0aD1jbC5oZWlnaHQ9MCksYi5hcHBlbmRDaGlsZChjbCk7aWYoIWNtfHwhY2wuY3JlYXRlRWxlbWVudCljbT0oY2wuY29udGVudFdpbmRvd3x8Y2wuY29udGVudERvY3VtZW50KS5kb2N1bWVudCxjbS53cml0ZSgoYy5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQiPyI8IWRvY3R5cGUgaHRtbD4iOiIiKSsiPGh0bWw+PGJvZHk+IiksY20uY2xvc2UoKTtkPWNtLmNyZWF0ZUVsZW1lbnQoYSksY20uYm9keS5hcHBlbmRDaGlsZChkKSxlPWYuY3NzKGQsImRpc3BsYXkiKSxiLnJlbW92ZUNoaWxkKGNsKX1ja1thXT1lfXJldHVybiBja1thXX1mdW5jdGlvbiBjdShhLGIpe3ZhciBjPXt9O2YuZWFjaChjcS5jb25jYXQuYXBwbHkoW10sY3Euc2xpY2UoMCxiKSksZnVuY3Rpb24oKXtjW3RoaXNdPWF9KTtyZXR1cm4gY31mdW5jdGlvbiBjdCgpe2NyPWJ9ZnVuY3Rpb24gY3MoKXtzZXRUaW1lb3V0KGN0LDApO3JldHVybiBjcj1mLm5vdygpfWZ1bmN0aW9uIGNqKCl7dHJ5e3JldHVybiBuZXcgYS5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKGIpe319ZnVuY3Rpb24gY2koKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gY2MoYSxjKXthLmRhdGFGaWx0ZXImJihjPWEuZGF0YUZpbHRlcihjLGEuZGF0YVR5cGUpKTt2YXIgZD1hLmRhdGFUeXBlcyxlPXt9LGcsaCxpPWQubGVuZ3RoLGosaz1kWzBdLGwsbSxuLG8scDtmb3IoZz0xO2c8aTtnKyspe2lmKGc9PT0xKWZvcihoIGluIGEuY29udmVydGVycyl0eXBlb2YgaD09InN0cmluZyImJihlW2gudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2hdKTtsPWssaz1kW2ddO2lmKGs9PT0iKiIpaz1sO2Vsc2UgaWYobCE9PSIqIiYmbCE9PWspe209bCsiICIrayxuPWVbbV18fGVbIiogIitrXTtpZighbil7cD1iO2ZvcihvIGluIGUpe2o9by5zcGxpdCgiICIpO2lmKGpbMF09PT1sfHxqWzBdPT09IioiKXtwPWVbalsxXSsiICIra107aWYocCl7bz1lW29dLG89PT0hMD9uPXA6cD09PSEwJiYobj1vKTticmVha319fX0hbiYmIXAmJmYuZXJyb3IoIk5vIGNvbnZlcnNpb24gZnJvbSAiK20ucmVwbGFjZSgiICIsIiB0byAiKSksbiE9PSEwJiYoYz1uP24oYyk6cChvKGMpKSl9fXJldHVybiBjfWZ1bmN0aW9uIGNiKGEsYyxkKXt2YXIgZT1hLmNvbnRlbnRzLGY9YS5kYXRhVHlwZXMsZz1hLnJlc3BvbnNlRmllbGRzLGgsaSxqLGs7Zm9yKGkgaW4gZylpIGluIGQmJihjW2dbaV1dPWRbaV0pO3doaWxlKGZbMF09PT0iKiIpZi5zaGlmdCgpLGg9PT1iJiYoaD1hLm1pbWVUeXBlfHxjLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSk7aWYoaClmb3IoaSBpbiBlKWlmKGVbaV0mJmVbaV0udGVzdChoKSl7Zi51bnNoaWZ0KGkpO2JyZWFrfWlmKGZbMF1pbiBkKWo9ZlswXTtlbHNle2ZvcihpIGluIGQpe2lmKCFmWzBdfHxhLmNvbnZlcnRlcnNbaSsiICIrZlswXV0pe2o9aTticmVha31rfHwoaz1pKX1qPWp8fGt9aWYoail7aiE9PWZbMF0mJmYudW5zaGlmdChqKTtyZXR1cm4gZFtqXX19ZnVuY3Rpb24gY2EoYSxiLGMsZCl7aWYoZi5pc0FycmF5KGIpKWYuZWFjaChiLGZ1bmN0aW9uKGIsZSl7Y3x8YkUudGVzdChhKT9kKGEsZSk6Y2EoYSsiWyIrKHR5cGVvZiBlPT0ib2JqZWN0Inx8Zi5pc0FycmF5KGUpP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKCFjJiZiIT1udWxsJiZ0eXBlb2YgYj09Im9iamVjdCIpZm9yKHZhciBlIGluIGIpY2EoYSsiWyIrZSsiXSIsYltlXSxjLGQpO2Vsc2UgZChhLGIpfWZ1bmN0aW9uIGJfKGEsYyl7dmFyIGQsZSxnPWYuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IoZCBpbiBjKWNbZF0hPT1iJiYoKGdbZF0/YTplfHwoZT17fSkpW2RdPWNbZF0pO2UmJmYuZXh0ZW5kKCEwLGEsZSl9ZnVuY3Rpb24gYiQoYSxjLGQsZSxmLGcpe2Y9Znx8Yy5kYXRhVHlwZXNbMF0sZz1nfHx7fSxnW2ZdPSEwO3ZhciBoPWFbZl0saT0wLGo9aD9oLmxlbmd0aDowLGs9YT09PWJULGw7Zm9yKDtpPGomJihrfHwhbCk7aSsrKWw9aFtpXShjLGQsZSksdHlwZW9mIGw9PSJzdHJpbmciJiYoIWt8fGdbbF0/bD1iOihjLmRhdGFUeXBlcy51bnNoaWZ0KGwpLGw9YiQoYSxjLGQsZSxsLGcpKSk7KGt8fCFsKSYmIWdbIioiXSYmKGw9YiQoYSxjLGQsZSwiKiIsZykpO3JldHVybiBsfWZ1bmN0aW9uIGJaKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe3R5cGVvZiBiIT0ic3RyaW5nIiYmKGM9YixiPSIqIik7aWYoZi5pc0Z1bmN0aW9uKGMpKXt2YXIgZD1iLnRvTG93ZXJDYXNlKCkuc3BsaXQoYlApLGU9MCxnPWQubGVuZ3RoLGgsaSxqO2Zvcig7ZTxnO2UrKyloPWRbZV0saj0vXlwrLy50ZXN0KGgpLGomJihoPWguc3Vic3RyKDEpfHwiKiIpLGk9YVtoXT1hW2hdfHxbXSxpW2o/InVuc2hpZnQiOiJwdXNoIl0oYyl9fX1mdW5jdGlvbiBiQyhhLGIsYyl7dmFyIGQ9Yj09PSJ3aWR0aCI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxlPWI9PT0id2lkdGgiP2J4OmJ5LGc9MCxoPWUubGVuZ3RoO2lmKGQ+MCl7aWYoYyE9PSJib3JkZXIiKWZvcig7ZzxoO2crKyljfHwoZC09cGFyc2VGbG9hdChmLmNzcyhhLCJwYWRkaW5nIitlW2ddKSl8fDApLGM9PT0ibWFyZ2luIj9kKz1wYXJzZUZsb2F0KGYuY3NzKGEsYytlW2ddKSl8fDA6ZC09cGFyc2VGbG9hdChmLmNzcyhhLCJib3JkZXIiK2VbZ10rIldpZHRoIikpfHwwO3JldHVybiBkKyJweCJ9ZD1ieihhLGIsYik7aWYoZDwwfHxkPT1udWxsKWQ9YS5zdHlsZVtiXXx8MDtkPXBhcnNlRmxvYXQoZCl8fDA7aWYoYylmb3IoO2c8aDtnKyspZCs9cGFyc2VGbG9hdChmLmNzcyhhLCJwYWRkaW5nIitlW2ddKSl8fDAsYyE9PSJwYWRkaW5nIiYmKGQrPXBhcnNlRmxvYXQoZi5jc3MoYSwiYm9yZGVyIitlW2ddKyJXaWR0aCIpKXx8MCksYz09PSJtYXJnaW4iJiYoZCs9cGFyc2VGbG9hdChmLmNzcyhhLGMrZVtnXSkpfHwwKTtyZXR1cm4gZCsicHgifWZ1bmN0aW9uIGJwKGEsYil7Yi5zcmM/Zi5hamF4KHt1cmw6Yi5zcmMsYXN5bmM6ITEsZGF0YVR5cGU6InNjcmlwdCJ9KTpmLmdsb2JhbEV2YWwoKGIudGV4dHx8Yi50ZXh0Q29udGVudHx8Yi5pbm5lckhUTUx8fCIiKS5yZXBsYWNlKGJmLCIvKiQwKi8iKSksYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYil9ZnVuY3Rpb24gYm8oYSl7dmFyIGI9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTtiaC5hcHBlbmRDaGlsZChiKSxiLmlubmVySFRNTD1hLm91dGVySFRNTDtyZXR1cm4gYi5maXJzdENoaWxkfWZ1bmN0aW9uIGJuKGEpe3ZhciBiPShhLm5vZGVOYW1lfHwiIikudG9Mb3dlckNhc2UoKTtiPT09ImlucHV0Ij9ibShhKTpiIT09InNjcmlwdCImJnR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIiYmZi5ncmVwKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IiksYm0pfWZ1bmN0aW9uIGJtKGEpe2lmKGEudHlwZT09PSJjaGVja2JveCJ8fGEudHlwZT09PSJyYWRpbyIpYS5kZWZhdWx0Q2hlY2tlZD1hLmNoZWNrZWR9ZnVuY3Rpb24gYmwoYSl7cmV0dXJuIHR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIj9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6dHlwZW9mIGEucXVlcnlTZWxlY3RvckFsbCE9InVuZGVmaW5lZCI/YS5xdWVyeVNlbGVjdG9yQWxsKCIqIik6W119ZnVuY3Rpb24gYmsoYSxiKXt2YXIgYztpZihiLm5vZGVUeXBlPT09MSl7Yi5jbGVhckF0dHJpYnV0ZXMmJmIuY2xlYXJBdHRyaWJ1dGVzKCksYi5tZXJnZUF0dHJpYnV0ZXMmJmIubWVyZ2VBdHRyaWJ1dGVzKGEpLGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKGM9PT0ib2JqZWN0IiliLm91dGVySFRNTD1hLm91dGVySFRNTDtlbHNlIGlmKGMhPT0iaW5wdXQifHxhLnR5cGUhPT0iY2hlY2tib3giJiZhLnR5cGUhPT0icmFkaW8iKXtpZihjPT09Im9wdGlvbiIpYi5zZWxlY3RlZD1hLmRlZmF1bHRTZWxlY3RlZDtlbHNlIGlmKGM9PT0iaW5wdXQifHxjPT09InRleHRhcmVhIiliLmRlZmF1bHRWYWx1ZT1hLmRlZmF1bHRWYWx1ZX1lbHNlIGEuY2hlY2tlZCYmKGIuZGVmYXVsdENoZWNrZWQ9Yi5jaGVja2VkPWEuY2hlY2tlZCksYi52YWx1ZSE9PWEudmFsdWUmJihiLnZhbHVlPWEudmFsdWUpO2IucmVtb3ZlQXR0cmlidXRlKGYuZXhwYW5kbyl9fWZ1bmN0aW9uIGJqKGEsYil7aWYoYi5ub2RlVHlwZT09PTEmJiEhZi5oYXNEYXRhKGEpKXt2YXIgYyxkLGUsZz1mLl9kYXRhKGEpLGg9Zi5fZGF0YShiLGcpLGk9Zy5ldmVudHM7aWYoaSl7ZGVsZXRlIGguaGFuZGxlLGguZXZlbnRzPXt9O2ZvcihjIGluIGkpZm9yKGQ9MCxlPWlbY10ubGVuZ3RoO2Q8ZTtkKyspZi5ldmVudC5hZGQoYixjKyhpW2NdW2RdLm5hbWVzcGFjZT8iLiI6IiIpK2lbY11bZF0ubmFtZXNwYWNlLGlbY11bZF0saVtjXVtkXS5kYXRhKX1oLmRhdGEmJihoLmRhdGE9Zi5leHRlbmQoe30saC5kYXRhKSl9fWZ1bmN0aW9uIGJpKGEsYil7cmV0dXJuIGYubm9kZU5hbWUoYSwidGFibGUiKT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHxhLmFwcGVuZENoaWxkKGEub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKTphfWZ1bmN0aW9uIFUoYSl7dmFyIGI9Vi5zcGxpdCgifCIpLGM9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aWYoYy5jcmVhdGVFbGVtZW50KXdoaWxlKGIubGVuZ3RoKWMuY3JlYXRlRWxlbWVudChiLnBvcCgpKTtyZXR1cm4gY31mdW5jdGlvbiBUKGEsYixjKXtiPWJ8fDA7aWYoZi5pc0Z1bmN0aW9uKGIpKXJldHVybiBmLmdyZXAoYSxmdW5jdGlvbihhLGQpe3ZhciBlPSEhYi5jYWxsKGEsZCxhKTtyZXR1cm4gZT09PWN9KTtpZihiLm5vZGVUeXBlKXJldHVybiBmLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiBhPT09Yj09PWN9KTtpZih0eXBlb2YgYj09InN0cmluZyIpe3ZhciBkPWYuZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVUeXBlPT09MX0pO2lmKE8udGVzdChiKSlyZXR1cm4gZi5maWx0ZXIoYixkLCFjKTtiPWYuZmlsdGVyKGIsZCl9cmV0dXJuIGYuZ3JlcChhLGZ1bmN0aW9uKGEsZCl7cmV0dXJuIGYuaW5BcnJheShhLGIpPj0wPT09Y30pfWZ1bmN0aW9uIFMoYSl7cmV0dXJuIWF8fCFhLnBhcmVudE5vZGV8fGEucGFyZW50Tm9kZS5ub2RlVHlwZT09PTExfWZ1bmN0aW9uIEsoKXtyZXR1cm4hMH1mdW5jdGlvbiBKKCl7cmV0dXJuITF9ZnVuY3Rpb24gbihhLGIsYyl7dmFyIGQ9YisiZGVmZXIiLGU9YisicXVldWUiLGc9YisibWFyayIsaD1mLl9kYXRhKGEsZCk7aCYmKGM9PT0icXVldWUifHwhZi5fZGF0YShhLGUpKSYmKGM9PT0ibWFyayJ8fCFmLl9kYXRhKGEsZykpJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IWYuX2RhdGEoYSxlKSYmIWYuX2RhdGEoYSxnKSYmKGYucmVtb3ZlRGF0YShhLGQsITApLGguZmlyZSgpKX0sMCl9ZnVuY3Rpb24gbShhKXtmb3IodmFyIGIgaW4gYSl7aWYoYj09PSJkYXRhIiYmZi5pc0VtcHR5T2JqZWN0KGFbYl0pKWNvbnRpbnVlO2lmKGIhPT0idG9KU09OIilyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBsKGEsYyxkKXtpZihkPT09YiYmYS5ub2RlVHlwZT09PTEpe3ZhciBlPSJkYXRhLSIrYy5yZXBsYWNlKGssIi0kMSIpLnRvTG93ZXJDYXNlKCk7ZD1hLmdldEF0dHJpYnV0ZShlKTtpZih0eXBlb2YgZD09InN0cmluZyIpe3RyeXtkPWQ9PT0idHJ1ZSI/ITA6ZD09PSJmYWxzZSI/ITE6ZD09PSJudWxsIj9udWxsOmYuaXNOdW1lcmljKGQpP3BhcnNlRmxvYXQoZCk6ai50ZXN0KGQpP2YucGFyc2VKU09OKGQpOmR9Y2F0Y2goZyl7fWYuZGF0YShhLGMsZCl9ZWxzZSBkPWJ9cmV0dXJuIGR9ZnVuY3Rpb24gaChhKXt2YXIgYj1nW2FdPXt9LGMsZDthPWEuc3BsaXQoL1xzKy8pO2ZvcihjPTAsZD1hLmxlbmd0aDtjPGQ7YysrKWJbYVtjXV09ITA7cmV0dXJuIGJ9dmFyIGM9YS5kb2N1bWVudCxkPWEubmF2aWdhdG9yLGU9YS5sb2NhdGlvbixmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gSigpe2lmKCFlLmlzUmVhZHkpe3RyeXtjLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGEpe3NldFRpbWVvdXQoSiwxKTtyZXR1cm59ZS5yZWFkeSgpfX12YXIgZT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgZS5mbi5pbml0KGEsYixoKX0sZj1hLmpRdWVyeSxnPWEuJCxoLGk9L14oPzpbXiM8XSooPFtcd1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLGo9L1xTLyxrPS9eXHMrLyxsPS9ccyskLyxtPS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPik/JC8sbj0vXltcXSw6e31cc10qJC8sbz0vXFwoPzpbIlxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLHA9LyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy9nLHE9Lyg/Ol58OnwsKSg/OlxzKlxbKSsvZyxyPS8od2Via2l0KVsgXC9dKFtcdy5dKykvLHM9LyhvcGVyYSkoPzouKnZlcnNpb24pP1sgXC9dKFtcdy5dKykvLHQ9Lyhtc2llKSAoW1x3Ll0rKS8sdT0vKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSspKT8vLHY9Ly0oW2Etel18WzAtOV0pL2lnLHc9L14tbXMtLyx4PWZ1bmN0aW9uKGEsYil7cmV0dXJuKGIrIiIpLnRvVXBwZXJDYXNlKCl9LHk9ZC51c2VyQWdlbnQseixBLEIsQz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxFPUFycmF5LnByb3RvdHlwZS5wdXNoLEY9QXJyYXkucHJvdG90eXBlLnNsaWNlLEc9U3RyaW5nLnByb3RvdHlwZS50cmltLEg9QXJyYXkucHJvdG90eXBlLmluZGV4T2YsST17fTtlLmZuPWUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjplLGluaXQ6ZnVuY3Rpb24oYSxkLGYpe3ZhciBnLGgsaixrO2lmKCFhKXJldHVybiB0aGlzO2lmKGEubm9kZVR5cGUpe3RoaXMuY29udGV4dD10aGlzWzBdPWEsdGhpcy5sZW5ndGg9MTtyZXR1cm4gdGhpc31pZihhPT09ImJvZHkiJiYhZCYmYy5ib2R5KXt0aGlzLmNvbnRleHQ9Yyx0aGlzWzBdPWMuYm9keSx0aGlzLnNlbGVjdG9yPWEsdGhpcy5sZW5ndGg9MTtyZXR1cm4gdGhpc31pZih0eXBlb2YgYT09InN0cmluZyIpe2EuY2hhckF0KDApIT09IjwifHxhLmNoYXJBdChhLmxlbmd0aC0xKSE9PSI+Inx8YS5sZW5ndGg8Mz9nPWkuZXhlYyhhKTpnPVtudWxsLGEsbnVsbF07aWYoZyYmKGdbMV18fCFkKSl7aWYoZ1sxXSl7ZD1kIGluc3RhbmNlb2YgZT9kWzBdOmQsaz1kP2Qub3duZXJEb2N1bWVudHx8ZDpjLGo9bS5leGVjKGEpLGo/ZS5pc1BsYWluT2JqZWN0KGQpPyhhPVtjLmNyZWF0ZUVsZW1lbnQoalsxXSldLGUuZm4uYXR0ci5jYWxsKGEsZCwhMCkpOmE9W2suY3JlYXRlRWxlbWVudChqWzFdKV06KGo9ZS5idWlsZEZyYWdtZW50KFtnWzFdXSxba10pLGE9KGouY2FjaGVhYmxlP2UuY2xvbmUoai5mcmFnbWVudCk6ai5mcmFnbWVudCkuY2hpbGROb2Rlcyk7cmV0dXJuIGUubWVyZ2UodGhpcyxhKX1oPWMuZ2V0RWxlbWVudEJ5SWQoZ1syXSk7aWYoaCYmaC5wYXJlbnROb2RlKXtpZihoLmlkIT09Z1syXSlyZXR1cm4gZi5maW5kKGEpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1ofXRoaXMuY29udGV4dD1jLHRoaXMuc2VsZWN0b3I9YTtyZXR1cm4gdGhpc31yZXR1cm4hZHx8ZC5qcXVlcnk/KGR8fGYpLmZpbmQoYSk6dGhpcy5jb25zdHJ1Y3RvcihkKS5maW5kKGEpfWlmKGUuaXNGdW5jdGlvbihhKSlyZXR1cm4gZi5yZWFkeShhKTthLnNlbGVjdG9yIT09YiYmKHRoaXMuc2VsZWN0b3I9YS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9YS5jb250ZXh0KTtyZXR1cm4gZS5tYWtlQXJyYXkoYSx0aGlzKX0sc2VsZWN0b3I6IiIsanF1ZXJ5OiIxLjcuMSIsbGVuZ3RoOjAsc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBGLmNhbGwodGhpcywwKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP3RoaXMudG9BcnJheSgpOmE8MD90aGlzW3RoaXMubGVuZ3RoK2FdOnRoaXNbYV19LHB1c2hTdGFjazpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5jb25zdHJ1Y3RvcigpO2UuaXNBcnJheShhKT9FLmFwcGx5KGQsYSk6ZS5tZXJnZShkLGEpLGQucHJldk9iamVjdD10aGlzLGQuY29udGV4dD10aGlzLmNvbnRleHQsYj09PSJmaW5kIj9kLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrKHRoaXMuc2VsZWN0b3I/IiAiOiIiKStjOmImJihkLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK2IrIigiK2MrIikiKTtyZXR1cm4gZH0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBlLmVhY2godGhpcyxhLGIpfSxyZWFkeTpmdW5jdGlvbihhKXtlLmJpbmRSZWFkeSgpLEEuYWRkKGEpO3JldHVybiB0aGlzfSxlcTpmdW5jdGlvbihhKXthPSthO3JldHVybiBhPT09LTE/dGhpcy5zbGljZShhKTp0aGlzLnNsaWNlKGEsYSsxKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soRi5hcHBseSh0aGlzLGFyZ3VtZW50cyksInNsaWNlIixGLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGUubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpFLHNvcnQ6W10uc29ydCxzcGxpY2U6W10uc3BsaWNlfSxlLmZuLmluaXQucHJvdG90eXBlPWUuZm4sZS5leHRlbmQ9ZS5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgYSxjLGQsZixnLGgsaT1hcmd1bWVudHNbMF18fHt9LGo9MSxrPWFyZ3VtZW50cy5sZW5ndGgsbD0hMTt0eXBlb2YgaT09ImJvb2xlYW4iJiYobD1pLGk9YXJndW1lbnRzWzFdfHx7fSxqPTIpLHR5cGVvZiBpIT0ib2JqZWN0IiYmIWUuaXNGdW5jdGlvbihpKSYmKGk9e30pLGs9PT1qJiYoaT10aGlzLC0taik7Zm9yKDtqPGs7aisrKWlmKChhPWFyZ3VtZW50c1tqXSkhPW51bGwpZm9yKGMgaW4gYSl7ZD1pW2NdLGY9YVtjXTtpZihpPT09Ziljb250aW51ZTtsJiZmJiYoZS5pc1BsYWluT2JqZWN0KGYpfHwoZz1lLmlzQXJyYXkoZikpKT8oZz8oZz0hMSxoPWQmJmUuaXNBcnJheShkKT9kOltdKTpoPWQmJmUuaXNQbGFpbk9iamVjdChkKT9kOnt9LGlbY109ZS5leHRlbmQobCxoLGYpKTpmIT09YiYmKGlbY109Zil9cmV0dXJuIGl9LGUuZXh0ZW5kKHtub0NvbmZsaWN0OmZ1bmN0aW9uKGIpe2EuJD09PWUmJihhLiQ9ZyksYiYmYS5qUXVlcnk9PT1lJiYoYS5qUXVlcnk9Zik7cmV0dXJuIGV9LGlzUmVhZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGEpe2E/ZS5yZWFkeVdhaXQrKzplLnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oYSl7aWYoYT09PSEwJiYhLS1lLnJlYWR5V2FpdHx8YSE9PSEwJiYhZS5pc1JlYWR5KXtpZighYy5ib2R5KXJldHVybiBzZXRUaW1lb3V0KGUucmVhZHksMSk7ZS5pc1JlYWR5PSEwO2lmKGEhPT0hMCYmLS1lLnJlYWR5V2FpdD4wKXJldHVybjtBLmZpcmVXaXRoKGMsW2VdKSxlLmZuLnRyaWdnZXImJmUoYykudHJpZ2dlcigicmVhZHkiKS5vZmYoInJlYWR5Iil9fSxiaW5kUmVhZHk6ZnVuY3Rpb24oKXtpZighQSl7QT1lLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKTtpZihjLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKXJldHVybiBzZXRUaW1lb3V0KGUucmVhZHksMSk7aWYoYy5hZGRFdmVudExpc3RlbmVyKWMuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixlLnJlYWR5LCExKTtlbHNlIGlmKGMuYXR0YWNoRXZlbnQpe2MuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQiksYS5hdHRhY2hFdmVudCgib25sb2FkIixlLnJlYWR5KTt2YXIgYj0hMTt0cnl7Yj1hLmZyYW1lRWxlbWVudD09bnVsbH1jYXRjaChkKXt9Yy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwmJmImJkooKX19fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiBlLnR5cGUoYSk9PT0iZnVuY3Rpb24ifSxpc0FycmF5OkFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVybiBlLnR5cGUoYSk9PT0iYXJyYXkifSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gYSYmdHlwZW9mIGE9PSJvYmplY3QiJiYic2V0SW50ZXJ2YWwiaW4gYX0saXNOdW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KGEpKSYmaXNGaW5pdGUoYSl9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/U3RyaW5nKGEpOklbQy5jYWxsKGEpXXx8Im9iamVjdCJ9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oYSl7aWYoIWF8fGUudHlwZShhKSE9PSJvYmplY3QifHxhLm5vZGVUeXBlfHxlLmlzV2luZG93KGEpKXJldHVybiExO3RyeXtpZihhLmNvbnN0cnVjdG9yJiYhRC5jYWxsKGEsImNvbnN0cnVjdG9yIikmJiFELmNhbGwoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJvdG90eXBlT2YiKSlyZXR1cm4hMX1jYXRjaChjKXtyZXR1cm4hMX12YXIgZDtmb3IoZCBpbiBhKTtyZXR1cm4gZD09PWJ8fEQuY2FsbChhLGQpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBhKXJldHVybiExO3JldHVybiEwfSxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LHBhcnNlSlNPTjpmdW5jdGlvbihiKXtpZih0eXBlb2YgYiE9InN0cmluZyJ8fCFiKXJldHVybiBudWxsO2I9ZS50cmltKGIpO2lmKGEuSlNPTiYmYS5KU09OLnBhcnNlKXJldHVybiBhLkpTT04ucGFyc2UoYik7aWYobi50ZXN0KGIucmVwbGFjZShvLCJAIikucmVwbGFjZShwLCJdIikucmVwbGFjZShxLCIiKSkpcmV0dXJuKG5ldyBGdW5jdGlvbigicmV0dXJuICIrYikpKCk7ZS5lcnJvcigiSW52YWxpZCBKU09OOiAiK2IpfSxwYXJzZVhNTDpmdW5jdGlvbihjKXt2YXIgZCxmO3RyeXthLkRPTVBhcnNlcj8oZj1uZXcgRE9NUGFyc2VyLGQ9Zi5wYXJzZUZyb21TdHJpbmcoYywidGV4dC94bWwiKSk6KGQ9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxkLmFzeW5jPSJmYWxzZSIsZC5sb2FkWE1MKGMpKX1jYXRjaChnKXtkPWJ9KCFkfHwhZC5kb2N1bWVudEVsZW1lbnR8fGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RoKSYmZS5lcnJvcigiSW52YWxpZCBYTUw6ICIrYyk7cmV0dXJuIGR9LG5vb3A6ZnVuY3Rpb24oKXt9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYil7YiYmai50ZXN0KGIpJiYoYS5leGVjU2NyaXB0fHxmdW5jdGlvbihiKXthLmV2YWwuY2FsbChhLGIpfSkoYil9LGNhbWVsQ2FzZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKHcsIm1zLSIpLnJlcGxhY2Uodix4KX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT09Yi50b1VwcGVyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZixnPTAsaD1hLmxlbmd0aCxpPWg9PT1ifHxlLmlzRnVuY3Rpb24oYSk7aWYoZCl7aWYoaSl7Zm9yKGYgaW4gYSlpZihjLmFwcGx5KGFbZl0sZCk9PT0hMSlicmVha31lbHNlIGZvcig7ZzxoOylpZihjLmFwcGx5KGFbZysrXSxkKT09PSExKWJyZWFrfWVsc2UgaWYoaSl7Zm9yKGYgaW4gYSlpZihjLmNhbGwoYVtmXSxmLGFbZl0pPT09ITEpYnJlYWt9ZWxzZSBmb3IoO2c8aDspaWYoYy5jYWxsKGFbZ10sZyxhW2crK10pPT09ITEpYnJlYWs7cmV0dXJuIGF9LHRyaW06Rz9mdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjpHLmNhbGwoYSl9OmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOihhKyIiKS5yZXBsYWNlKGssIiIpLnJlcGxhY2UobCwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fFtdO2lmKGEhPW51bGwpe3ZhciBkPWUudHlwZShhKTthLmxlbmd0aD09bnVsbHx8ZD09PSJzdHJpbmcifHxkPT09ImZ1bmN0aW9uInx8ZD09PSJyZWdleHAifHxlLmlzV2luZG93KGEpP0UuY2FsbChjLGEpOmUubWVyZ2UoYyxhKX1yZXR1cm4gY30saW5BcnJheTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7aWYoYil7aWYoSClyZXR1cm4gSC5jYWxsKGIsYSxjKTtkPWIubGVuZ3RoLGM9Yz9jPDA/TWF0aC5tYXgoMCxkK2MpOmM6MDtmb3IoO2M8ZDtjKyspaWYoYyBpbiBiJiZiW2NdPT09YSlyZXR1cm4gY31yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxjKXt2YXIgZD1hLmxlbmd0aCxlPTA7aWYodHlwZW9mIGMubGVuZ3RoPT0ibnVtYmVyIilmb3IodmFyIGY9Yy5sZW5ndGg7ZTxmO2UrKylhW2QrK109Y1tlXTtlbHNlIHdoaWxlKGNbZV0hPT1iKWFbZCsrXT1jW2UrK107YS5sZW5ndGg9ZDtyZXR1cm4gYX0sZ3JlcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9W10sZTtjPSEhYztmb3IodmFyIGY9MCxnPWEubGVuZ3RoO2Y8ZztmKyspZT0hIWIoYVtmXSxmKSxjIT09ZSYmZC5wdXNoKGFbZl0pO3JldHVybiBkfSxtYXA6ZnVuY3Rpb24oYSxjLGQpe3ZhciBmLGcsaD1bXSxpPTAsaj1hLmxlbmd0aCxrPWEgaW5zdGFuY2VvZiBlfHxqIT09YiYmdHlwZW9mIGo9PSJudW1iZXIiJiYoaj4wJiZhWzBdJiZhW2otMV18fGo9PT0wfHxlLmlzQXJyYXkoYSkpO2lmKGspZm9yKDtpPGo7aSsrKWY9YyhhW2ldLGksZCksZiE9bnVsbCYmKGhbaC5sZW5ndGhdPWYpO2Vsc2UgZm9yKGcgaW4gYSlmPWMoYVtnXSxnLGQpLGYhPW51bGwmJihoW2gubGVuZ3RoXT1mKTtyZXR1cm4gaC5jb25jYXQuYXBwbHkoW10saCl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihhLGMpe2lmKHR5cGVvZiBjPT0ic3RyaW5nIil7dmFyIGQ9YVtjXTtjPWEsYT1kfWlmKCFlLmlzRnVuY3Rpb24oYSkpcmV0dXJuIGI7dmFyIGY9Ri5jYWxsKGFyZ3VtZW50cywyKSxnPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoYyxmLmNvbmNhdChGLmNhbGwoYXJndW1lbnRzKSkpfTtnLmd1aWQ9YS5ndWlkPWEuZ3VpZHx8Zy5ndWlkfHxlLmd1aWQrKztyZXR1cm4gZ30sYWNjZXNzOmZ1bmN0aW9uKGEsYyxkLGYsZyxoKXt2YXIgaT1hLmxlbmd0aDtpZih0eXBlb2YgYz09Im9iamVjdCIpe2Zvcih2YXIgaiBpbiBjKWUuYWNjZXNzKGEsaixjW2pdLGYsZyxkKTtyZXR1cm4gYX1pZihkIT09Yil7Zj0haCYmZiYmZS5pc0Z1bmN0aW9uKGQpO2Zvcih2YXIgaz0wO2s8aTtrKyspZyhhW2tdLGMsZj9kLmNhbGwoYVtrXSxrLGcoYVtrXSxjKSk6ZCxoKTtyZXR1cm4gYX1yZXR1cm4gaT9nKGFbMF0sYyk6Yn0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9LHVhTWF0Y2g6ZnVuY3Rpb24oYSl7YT1hLnRvTG93ZXJDYXNlKCk7dmFyIGI9ci5leGVjKGEpfHxzLmV4ZWMoYSl8fHQuZXhlYyhhKXx8YS5pbmRleE9mKCJjb21wYXRpYmxlIik8MCYmdS5leGVjKGEpfHxbXTtyZXR1cm57YnJvd3NlcjpiWzFdfHwiIix2ZXJzaW9uOmJbMl18fCIwIn19LHN1YjpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYixjKXtyZXR1cm4gbmV3IGEuZm4uaW5pdChiLGMpfWUuZXh0ZW5kKCEwLGEsdGhpcyksYS5zdXBlcmNsYXNzPXRoaXMsYS5mbj1hLnByb3RvdHlwZT10aGlzKCksYS5mbi5jb25zdHJ1Y3Rvcj1hLGEuc3ViPXRoaXMuc3ViLGEuZm4uaW5pdD1mdW5jdGlvbihkLGYpe2YmJmYgaW5zdGFuY2VvZiBlJiYhKGYgaW5zdGFuY2VvZiBhKSYmKGY9YShmKSk7cmV0dXJuIGUuZm4uaW5pdC5jYWxsKHRoaXMsZCxmLGIpfSxhLmZuLmluaXQucHJvdG90eXBlPWEuZm47dmFyIGI9YShjKTtyZXR1cm4gYX0sYnJvd3Nlcjp7fX0pLGUuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe0lbIltvYmplY3QgIitiKyJdIl09Yi50b0xvd2VyQ2FzZSgpfSksej1lLnVhTWF0Y2goeSksei5icm93c2VyJiYoZS5icm93c2VyW3ouYnJvd3Nlcl09ITAsZS5icm93c2VyLnZlcnNpb249ei52ZXJzaW9uKSxlLmJyb3dzZXIud2Via2l0JiYoZS5icm93c2VyLnNhZmFyaT0hMCksai50ZXN0KCLCoCIpJiYoaz0vXltcc1x4QTBdKy8sbD0vW1xzXHhBMF0rJC8pLGg9ZShjKSxjLmFkZEV2ZW50TGlzdGVuZXI/Qj1mdW5jdGlvbigpe2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiwhMSksZS5yZWFkeSgpfTpjLmF0dGFjaEV2ZW50JiYoQj1mdW5jdGlvbigpe2MucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSImJihjLmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEIpLGUucmVhZHkoKSl9KTtyZXR1cm4gZX0oKSxnPXt9O2YuQ2FsbGJhY2tzPWZ1bmN0aW9uKGEpe2E9YT9nW2FdfHxoKGEpOnt9O3ZhciBjPVtdLGQ9W10sZSxpLGosayxsLG09ZnVuY3Rpb24oYil7dmFyIGQsZSxnLGgsaTtmb3IoZD0wLGU9Yi5sZW5ndGg7ZDxlO2QrKylnPWJbZF0saD1mLnR5cGUoZyksaD09PSJhcnJheSI/bShnKTpoPT09ImZ1bmN0aW9uIiYmKCFhLnVuaXF1ZXx8IW8uaGFzKGcpKSYmYy5wdXNoKGcpfSxuPWZ1bmN0aW9uKGIsZil7Zj1mfHxbXSxlPSFhLm1lbW9yeXx8W2IsZl0saT0hMCxsPWp8fDAsaj0wLGs9Yy5sZW5ndGg7Zm9yKDtjJiZsPGs7bCsrKWlmKGNbbF0uYXBwbHkoYixmKT09PSExJiZhLnN0b3BPbkZhbHNlKXtlPSEwO2JyZWFrfWk9ITEsYyYmKGEub25jZT9lPT09ITA/by5kaXNhYmxlKCk6Yz1bXTpkJiZkLmxlbmd0aCYmKGU9ZC5zaGlmdCgpLG8uZmlyZVdpdGgoZVswXSxlWzFdKSkpfSxvPXthZGQ6ZnVuY3Rpb24oKXtpZihjKXt2YXIgYT1jLmxlbmd0aDttKGFyZ3VtZW50cyksaT9rPWMubGVuZ3RoOmUmJmUhPT0hMCYmKGo9YSxuKGVbMF0sZVsxXSkpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtpZihjKXt2YXIgYj1hcmd1bWVudHMsZD0wLGU9Yi5sZW5ndGg7Zm9yKDtkPGU7ZCsrKWZvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKWlmKGJbZF09PT1jW2ZdKXtpJiZmPD1rJiYoay0tLGY8PWwmJmwtLSksYy5zcGxpY2UoZi0tLDEpO2lmKGEudW5pcXVlKWJyZWFrfX1yZXR1cm4gdGhpc30saGFzOmZ1bmN0aW9uKGEpe2lmKGMpe3ZhciBiPTAsZD1jLmxlbmd0aDtmb3IoO2I8ZDtiKyspaWYoYT09PWNbYl0pcmV0dXJuITB9cmV0dXJuITF9LGVtcHR5OmZ1bmN0aW9uKCl7Yz1bXTtyZXR1cm4gdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe2M9ZD1lPWI7cmV0dXJuIHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWN9LGxvY2s6ZnVuY3Rpb24oKXtkPWIsKCFlfHxlPT09ITApJiZvLmRpc2FibGUoKTtyZXR1cm4gdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWR9LGZpcmVXaXRoOmZ1bmN0aW9uKGIsYyl7ZCYmKGk/YS5vbmNlfHxkLnB1c2goW2IsY10pOighYS5vbmNlfHwhZSkmJm4oYixjKSk7cmV0dXJuIHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtvLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWV9fTtyZXR1cm4gb307dmFyIGk9W10uc2xpY2U7Zi5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGEpe3ZhciBiPWYuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGM9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksZD1mLkNhbGxiYWNrcygibWVtb3J5IiksZT0icGVuZGluZyIsZz17cmVzb2x2ZTpiLHJlamVjdDpjLG5vdGlmeTpkfSxoPXtkb25lOmIuYWRkLGZhaWw6Yy5hZGQscHJvZ3Jlc3M6ZC5hZGQsc3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gZX0saXNSZXNvbHZlZDpiLmZpcmVkLGlzUmVqZWN0ZWQ6Yy5maXJlZCx0aGVuOmZ1bmN0aW9uKGEsYixjKXtpLmRvbmUoYSkuZmFpbChiKS5wcm9ncmVzcyhjKTtyZXR1cm4gdGhpc30sYWx3YXlzOmZ1bmN0aW9uKCl7aS5kb25lLmFwcGx5KGksYXJndW1lbnRzKS5mYWlsLmFwcGx5KGksYXJndW1lbnRzKTtyZXR1cm4gdGhpc30scGlwZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuRGVmZXJyZWQoZnVuY3Rpb24oZCl7Zi5lYWNoKHtkb25lOlthLCJyZXNvbHZlIl0sZmFpbDpbYiwicmVqZWN0Il0scHJvZ3Jlc3M6W2MsIm5vdGlmeSJdfSxmdW5jdGlvbihhLGIpe3ZhciBjPWJbMF0sZT1iWzFdLGc7Zi5pc0Z1bmN0aW9uKGMpP2lbYV0oZnVuY3Rpb24oKXtnPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpLGcmJmYuaXNGdW5jdGlvbihnLnByb21pc2UpP2cucHJvbWlzZSgpLnRoZW4oZC5yZXNvbHZlLGQucmVqZWN0LGQubm90aWZ5KTpkW2UrIldpdGgiXSh0aGlzPT09aT9kOnRoaXMsW2ddKX0pOmlbYV0oZFtlXSl9KX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtpZihhPT1udWxsKWE9aDtlbHNlIGZvcih2YXIgYiBpbiBoKWFbYl09aFtiXTtyZXR1cm4gYX19LGk9aC5wcm9taXNlKHt9KSxqO2ZvcihqIGluIGcpaVtqXT1nW2pdLmZpcmUsaVtqKyJXaXRoIl09Z1tqXS5maXJlV2l0aDtpLmRvbmUoZnVuY3Rpb24oKXtlPSJyZXNvbHZlZCJ9LGMuZGlzYWJsZSxkLmxvY2spLmZhaWwoZnVuY3Rpb24oKXtlPSJyZWplY3RlZCJ9LGIuZGlzYWJsZSxkLmxvY2spLGEmJmEuY2FsbChpLGkpO3JldHVybiBpfSx3aGVuOmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIG0oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2VbYV09YXJndW1lbnRzLmxlbmd0aD4xP2kuY2FsbChhcmd1bWVudHMsMCk6YixqLm5vdGlmeVdpdGgoayxlKX19ZnVuY3Rpb24gbChhKXtyZXR1cm4gZnVuY3Rpb24oYyl7YlthXT1hcmd1bWVudHMubGVuZ3RoPjE/aS5jYWxsKGFyZ3VtZW50cywwKTpjLC0tZ3x8ai5yZXNvbHZlV2l0aChqLGIpfX12YXIgYj1pLmNhbGwoYXJndW1lbnRzLDApLGM9MCxkPWIubGVuZ3RoLGU9QXJyYXkoZCksZz1kLGg9ZCxqPWQ8PTEmJmEmJmYuaXNGdW5jdGlvbihhLnByb21pc2UpP2E6Zi5EZWZlcnJlZCgpLGs9ai5wcm9taXNlKCk7aWYoZD4xKXtmb3IoO2M8ZDtjKyspYltjXSYmYltjXS5wcm9taXNlJiZmLmlzRnVuY3Rpb24oYltjXS5wcm9taXNlKT9iW2NdLnByb21pc2UoKS50aGVuKGwoYyksai5yZWplY3QsbShjKSk6LS1nO2d8fGoucmVzb2x2ZVdpdGgoaixiKX1lbHNlIGohPT1hJiZqLnJlc29sdmVXaXRoKGosZD9bYV06W10pO3JldHVybiBrfX0pLGYuc3VwcG9ydD1mdW5jdGlvbigpe3ZhciBiLGQsZSxnLGgsaSxqLGssbCxtLG4sbyxwLHE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxyPWMuZG9jdW1lbnRFbGVtZW50O3Euc2V0QXR0cmlidXRlKCJjbGFzc05hbWUiLCJ0IikscS5pbm5lckhUTUw9IiAgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYScgc3R5bGU9J3RvcDoxcHg7ZmxvYXQ6bGVmdDtvcGFjaXR5Oi41NTsnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixkPXEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSxlPXEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXTtpZighZHx8IWQubGVuZ3RofHwhZSlyZXR1cm57fTtnPWMuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksaD1nLmFwcGVuZENoaWxkKGMuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLGk9cS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXSxiPXtsZWFkaW5nV2hpdGVzcGFjZTpxLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0zLHRib2R5OiFxLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCxodG1sU2VyaWFsaXplOiEhcS5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxzdHlsZTovdG9wLy50ZXN0KGUuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxocmVmTm9ybWFsaXplZDplLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09Ii9hIixvcGFjaXR5Oi9eMC41NS8udGVzdChlLnN0eWxlLm9wYWNpdHkpLGNzc0Zsb2F0OiEhZS5zdHlsZS5jc3NGbG9hdCxjaGVja09uOmkudmFsdWU9PT0ib24iLG9wdFNlbGVjdGVkOmguc2VsZWN0ZWQsZ2V0U2V0QXR0cmlidXRlOnEuY2xhc3NOYW1lIT09InQiLGVuY3R5cGU6ISFjLmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLGh0bWw1Q2xvbmU6Yy5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCE9PSI8Om5hdj48LzpuYXY+IixzdWJtaXRCdWJibGVzOiEwLGNoYW5nZUJ1YmJsZXM6ITAsZm9jdXNpbkJ1YmJsZXM6ITEsZGVsZXRlRXhwYW5kbzohMCxub0Nsb25lRXZlbnQ6ITAsaW5saW5lQmxvY2tOZWVkc0xheW91dDohMSxzaHJpbmtXcmFwQmxvY2tzOiExLHJlbGlhYmxlTWFyZ2luUmlnaHQ6ITB9LGkuY2hlY2tlZD0hMCxiLm5vQ2xvbmVDaGVja2VkPWkuY2xvbmVOb2RlKCEwKS5jaGVja2VkLGcuZGlzYWJsZWQ9ITAsYi5vcHREaXNhYmxlZD0haC5kaXNhYmxlZDt0cnl7ZGVsZXRlIHEudGVzdH1jYXRjaChzKXtiLmRlbGV0ZUV4cGFuZG89ITF9IXEuYWRkRXZlbnRMaXN0ZW5lciYmcS5hdHRhY2hFdmVudCYmcS5maXJlRXZlbnQmJihxLmF0dGFjaEV2ZW50KCJvbmNsaWNrIixmdW5jdGlvbigpe2Iubm9DbG9uZUV2ZW50PSExfSkscS5jbG9uZU5vZGUoITApLmZpcmVFdmVudCgib25jbGljayIpKSxpPWMuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxpLnZhbHVlPSJ0IixpLnNldEF0dHJpYnV0ZSgidHlwZSIsInJhZGlvIiksYi5yYWRpb1ZhbHVlPWkudmFsdWU9PT0idCIsaS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIikscS5hcHBlbmRDaGlsZChpKSxrPWMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGsuYXBwZW5kQ2hpbGQocS5sYXN0Q2hpbGQpLGIuY2hlY2tDbG9uZT1rLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCxiLmFwcGVuZENoZWNrZWQ9aS5jaGVja2VkLGsucmVtb3ZlQ2hpbGQoaSksay5hcHBlbmRDaGlsZChxKSxxLmlubmVySFRNTD0iIixhLmdldENvbXB1dGVkU3R5bGUmJihqPWMuY3JlYXRlRWxlbWVudCgiZGl2Iiksai5zdHlsZS53aWR0aD0iMCIsai5zdHlsZS5tYXJnaW5SaWdodD0iMCIscS5zdHlsZS53aWR0aD0iMnB4IixxLmFwcGVuZENoaWxkKGopLGIucmVsaWFibGVNYXJnaW5SaWdodD0ocGFyc2VJbnQoKGEuZ2V0Q29tcHV0ZWRTdHlsZShqLG51bGwpfHx7bWFyZ2luUmlnaHQ6MH0pLm1hcmdpblJpZ2h0LDEwKXx8MCk9PT0wKTtpZihxLmF0dGFjaEV2ZW50KWZvcihvIGlue3N1Ym1pdDoxLGNoYW5nZToxLGZvY3VzaW46MX0pbj0ib24iK28scD1uIGluIHEscHx8KHEuc2V0QXR0cmlidXRlKG4sInJldHVybjsiKSxwPXR5cGVvZiBxW25dPT0iZnVuY3Rpb24iKSxiW28rIkJ1YmJsZXMiXT1wO2sucmVtb3ZlQ2hpbGQocSksaz1nPWg9aj1xPWk9bnVsbCxmKGZ1bmN0aW9uKCl7dmFyIGEsZCxlLGcsaCxpLGosayxtLG4sbyxyPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTshcnx8KGo9MSxrPSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7bWFyZ2luOjA7IixtPSJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6MDsiLG49InN0eWxlPSciK2srImJvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7JyIsbz0iPGRpdiAiK24rIj48ZGl2PjwvZGl2PjwvZGl2PiIrIjx0YWJsZSAiK24rIiBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPiIrIjx0cj48dGQ+PC90ZD48L3RyPjwvdGFibGU+IixhPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksYS5zdHlsZS5jc3NUZXh0PW0rIndpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246c3RhdGljO3RvcDowO21hcmdpbi10b3A6IitqKyJweCIsci5pbnNlcnRCZWZvcmUoYSxyLmZpcnN0Q2hpbGQpLHE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxhLmFwcGVuZENoaWxkKHEpLHEuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZCBzdHlsZT0ncGFkZGluZzowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSc+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIsbD1xLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLHA9bFswXS5vZmZzZXRIZWlnaHQ9PT0wLGxbMF0uc3R5bGUuZGlzcGxheT0iIixsWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGIucmVsaWFibGVIaWRkZW5PZmZzZXRzPXAmJmxbMF0ub2Zmc2V0SGVpZ2h0PT09MCxxLmlubmVySFRNTD0iIixxLnN0eWxlLndpZHRoPXEuc3R5bGUucGFkZGluZ0xlZnQ9IjFweCIsZi5ib3hNb2RlbD1iLmJveE1vZGVsPXEub2Zmc2V0V2lkdGg9PT0yLHR5cGVvZiBxLnN0eWxlLnpvb20hPSJ1bmRlZmluZWQiJiYocS5zdHlsZS5kaXNwbGF5PSJpbmxpbmUiLHEuc3R5bGUuem9vbT0xLGIuaW5saW5lQmxvY2tOZWVkc0xheW91dD1xLm9mZnNldFdpZHRoPT09MixxLnN0eWxlLmRpc3BsYXk9IiIscS5pbm5lckhUTUw9IjxkaXYgc3R5bGU9J3dpZHRoOjRweDsnPjwvZGl2PiIsYi5zaHJpbmtXcmFwQmxvY2tzPXEub2Zmc2V0V2lkdGghPT0yKSxxLnN0eWxlLmNzc1RleHQ9ayttLHEuaW5uZXJIVE1MPW8sZD1xLmZpcnN0Q2hpbGQsZT1kLmZpcnN0Q2hpbGQsaD1kLm5leHRTaWJsaW5nLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCxpPXtkb2VzTm90QWRkQm9yZGVyOmUub2Zmc2V0VG9wIT09NSxkb2VzQWRkQm9yZGVyRm9yVGFibGVBbmRDZWxsczpoLm9mZnNldFRvcD09PTV9LGUuc3R5bGUucG9zaXRpb249ImZpeGVkIixlLnN0eWxlLnRvcD0iMjBweCIsaS5maXhlZFBvc2l0aW9uPWUub2Zmc2V0VG9wPT09MjB8fGUub2Zmc2V0VG9wPT09MTUsZS5zdHlsZS5wb3NpdGlvbj1lLnN0eWxlLnRvcD0iIixkLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixpLnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZT1lLm9mZnNldFRvcD09PS01LGkuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQ9ci5vZmZzZXRUb3AhPT1qLHIucmVtb3ZlQ2hpbGQoYSkscT1hPW51bGwsZi5leHRlbmQoYixpKSl9KTtyZXR1cm4gYn0oKTt2YXIgaj0vXig/Olx7LipcfXxcWy4qXF0pJC8saz0vKFtBLVpdKS9nO2YuZXh0ZW5kKHtjYWNoZTp7fSx1dWlkOjAsZXhwYW5kbzoialF1ZXJ5IisoZi5mbi5qcXVlcnkrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksbm9EYXRhOntlbWJlZDohMCxvYmplY3Q6ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIsYXBwbGV0OiEwfSxoYXNEYXRhOmZ1bmN0aW9uKGEpe2E9YS5ub2RlVHlwZT9mLmNhY2hlW2FbZi5leHBhbmRvXV06YVtmLmV4cGFuZG9dO3JldHVybiEhYSYmIW0oYSl9LGRhdGE6ZnVuY3Rpb24oYSxjLGQsZSl7aWYoISFmLmFjY2VwdERhdGEoYSkpe3ZhciBnLGgsaSxqPWYuZXhwYW5kbyxrPXR5cGVvZiBjPT0ic3RyaW5nIixsPWEubm9kZVR5cGUsbT1sP2YuY2FjaGU6YSxuPWw/YVtqXTphW2pdJiZqLG89Yz09PSJldmVudHMiO2lmKCghbnx8IW1bbl18fCFvJiYhZSYmIW1bbl0uZGF0YSkmJmsmJmQ9PT1iKXJldHVybjtufHwobD9hW2pdPW49KytmLnV1aWQ6bj1qKSxtW25dfHwobVtuXT17fSxsfHwobVtuXS50b0pTT049Zi5ub29wKSk7aWYodHlwZW9mIGM9PSJvYmplY3QifHx0eXBlb2YgYz09ImZ1bmN0aW9uIillP21bbl09Zi5leHRlbmQobVtuXSxjKTptW25dLmRhdGE9Zi5leHRlbmQobVtuXS5kYXRhLGMpO2c9aD1tW25dLGV8fChoLmRhdGF8fChoLmRhdGE9e30pLGg9aC5kYXRhKSxkIT09YiYmKGhbZi5jYW1lbENhc2UoYyldPWQpO2lmKG8mJiFoW2NdKXJldHVybiBnLmV2ZW50cztrPyhpPWhbY10saT09bnVsbCYmKGk9aFtmLmNhbWVsQ2FzZShjKV0pKTppPWg7cmV0dXJuIGl9fSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYixjKXtpZighIWYuYWNjZXB0RGF0YShhKSl7dmFyIGQsZSxnLGg9Zi5leHBhbmRvLGk9YS5ub2RlVHlwZSxqPWk/Zi5jYWNoZTphLGs9aT9hW2hdOmg7aWYoIWpba10pcmV0dXJuO2lmKGIpe2Q9Yz9qW2tdOmpba10uZGF0YTtpZihkKXtmLmlzQXJyYXkoYil8fChiIGluIGQ/Yj1bYl06KGI9Zi5jYW1lbENhc2UoYiksYiBpbiBkP2I9W2JdOmI9Yi5zcGxpdCgiICIpKSk7Zm9yKGU9MCxnPWIubGVuZ3RoO2U8ZztlKyspZGVsZXRlIGRbYltlXV07aWYoIShjP206Zi5pc0VtcHR5T2JqZWN0KShkKSlyZXR1cm59fWlmKCFjKXtkZWxldGUgaltrXS5kYXRhO2lmKCFtKGpba10pKXJldHVybn1mLnN1cHBvcnQuZGVsZXRlRXhwYW5kb3x8IWouc2V0SW50ZXJ2YWw/ZGVsZXRlIGpba106altrXT1udWxsLGkmJihmLnN1cHBvcnQuZGVsZXRlRXhwYW5kbz9kZWxldGUgYVtoXTphLnJlbW92ZUF0dHJpYnV0ZT9hLnJlbW92ZUF0dHJpYnV0ZShoKTphW2hdPW51bGwpfX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRhdGEoYSxiLGMsITApfSxhY2NlcHREYXRhOmZ1bmN0aW9uKGEpe2lmKGEubm9kZU5hbWUpe3ZhciBiPWYubm9EYXRhW2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07aWYoYilyZXR1cm4gYiE9PSEwJiZhLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09Yn1yZXR1cm4hMH19KSxmLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGMpe3ZhciBkLGUsZyxoPW51bGw7aWYodHlwZW9mIGE9PSJ1bmRlZmluZWQiKXtpZih0aGlzLmxlbmd0aCl7aD1mLmRhdGEodGhpc1swXSk7aWYodGhpc1swXS5ub2RlVHlwZT09PTEmJiFmLl9kYXRhKHRoaXNbMF0sInBhcnNlZEF0dHJzIikpe2U9dGhpc1swXS5hdHRyaWJ1dGVzO2Zvcih2YXIgaT0wLGo9ZS5sZW5ndGg7aTxqO2krKylnPWVbaV0ubmFtZSxnLmluZGV4T2YoImRhdGEtIik9PT0wJiYoZz1mLmNhbWVsQ2FzZShnLnN1YnN0cmluZyg1KSksbCh0aGlzWzBdLGcsaFtnXSkpO2YuX2RhdGEodGhpc1swXSwicGFyc2VkQXR0cnMiLCEwKX19cmV0dXJuIGh9aWYodHlwZW9mIGE9PSJvYmplY3QiKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmRhdGEodGhpcyxhKX0pO2Q9YS5zcGxpdCgiLiIpLGRbMV09ZFsxXT8iLiIrZFsxXToiIjtpZihjPT09Yil7aD10aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIitkWzFdKyIhIixbZFswXV0pLGg9PT1iJiZ0aGlzLmxlbmd0aCYmKGg9Zi5kYXRhKHRoaXNbMF0sYSksaD1sKHRoaXNbMF0sYSxoKSk7cmV0dXJuIGg9PT1iJiZkWzFdP3RoaXMuZGF0YShkWzBdKTpofXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1mKHRoaXMpLGU9W2RbMF0sY107Yi50cmlnZ2VySGFuZGxlcigic2V0RGF0YSIrZFsxXSsiISIsZSksZi5kYXRhKHRoaXMsYSxjKSxiLnRyaWdnZXJIYW5kbGVyKCJjaGFuZ2VEYXRhIitkWzFdKyIhIixlKX0pfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLGYuZXh0ZW5kKHtfbWFyazpmdW5jdGlvbihhLGIpe2EmJihiPShifHwiZngiKSsibWFyayIsZi5fZGF0YShhLGIsKGYuX2RhdGEoYSxiKXx8MCkrMSkpfSxfdW5tYXJrOmZ1bmN0aW9uKGEsYixjKXthIT09ITAmJihjPWIsYj1hLGE9ITEpO2lmKGIpe2M9Y3x8ImZ4Ijt2YXIgZD1jKyJtYXJrIixlPWE/MDooZi5fZGF0YShiLGQpfHwxKS0xO2U/Zi5fZGF0YShiLGQsZSk6KGYucmVtb3ZlRGF0YShiLGQsITApLG4oYixjLCJtYXJrIikpfX0scXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGEpe2I9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1mLl9kYXRhKGEsYiksYyYmKCFkfHxmLmlzQXJyYXkoYyk/ZD1mLl9kYXRhKGEsYixmLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKTtyZXR1cm4gZHx8W119fSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPWYucXVldWUoYSxiKSxkPWMuc2hpZnQoKSxlPXt9O2Q9PT0iaW5wcm9ncmVzcyImJihkPWMuc2hpZnQoKSksZCYmKGI9PT0iZngiJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxmLl9kYXRhKGEsYisiLnJ1biIsZSksZC5jYWxsKGEsZnVuY3Rpb24oKXtmLmRlcXVldWUoYSxiKX0sZSkpLGMubGVuZ3RofHwoZi5yZW1vdmVEYXRhKGEsYisicXVldWUgIitiKyIucnVuIiwhMCksbihhLGIsInF1ZXVlIikpfX0pLGYuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGMpe3R5cGVvZiBhIT0ic3RyaW5nIiYmKGM9YSxhPSJmeCIpO2lmKGM9PT1iKXJldHVybiBmLnF1ZXVlKHRoaXNbMF0sYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWYucXVldWUodGhpcyxhLGMpO2E9PT0iZngiJiZiWzBdIT09ImlucHJvZ3Jlc3MiJiZmLmRlcXVldWUodGhpcyxhKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmRlcXVldWUodGhpcyxhKX0pfSxkZWxheTpmdW5jdGlvbihhLGIpe2E9Zi5meD9mLmZ4LnNwZWVkc1thXXx8YTphLGI9Ynx8ImZ4IjtyZXR1cm4gdGhpcy5xdWV1ZShiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9c2V0VGltZW91dChiLGEpO2Muc3RvcD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChkKX19KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xdWV1ZShhfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihhLGMpe2Z1bmN0aW9uIG0oKXstLWh8fGQucmVzb2x2ZVdpdGgoZSxbZV0pfXR5cGVvZiBhIT0ic3RyaW5nIiYmKGM9YSxhPWIpLGE9YXx8ImZ4Ijt2YXIgZD1mLkRlZmVycmVkKCksZT10aGlzLGc9ZS5sZW5ndGgsaD0xLGk9YSsiZGVmZXIiLGo9YSsicXVldWUiLGs9YSsibWFyayIsbDt3aGlsZShnLS0paWYobD1mLmRhdGEoZVtnXSxpLGIsITApfHwoZi5kYXRhKGVbZ10saixiLCEwKXx8Zi5kYXRhKGVbZ10sayxiLCEwKSkmJmYuZGF0YShlW2ddLGksZi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksITApKWgrKyxsLmFkZChtKTttKCk7cmV0dXJuIGQucHJvbWlzZSgpfX0pO3ZhciBvPS9bXG5cdFxyXS9nLHA9L1xzKy8scT0vXHIvZyxyPS9eKD86YnV0dG9ufGlucHV0KSQvaSxzPS9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLHQ9L15hKD86cmVhKT8kL2ksdT0vXig/OmF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSx2PWYuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGUsdyx4LHk7Zi5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGIsITAsZi5hdHRyKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5yZW1vdmVBdHRyKHRoaXMsYSl9KX0scHJvcDpmdW5jdGlvbihhLGIpe3JldHVybiBmLmFjY2Vzcyh0aGlzLGEsYiwhMCxmLnByb3ApfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe2E9Zi5wcm9wRml4W2FdfHxhO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0cnl7dGhpc1thXT1iLGRlbGV0ZSB0aGlzW2FdfWNhdGNoKGMpe319KX0sYWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZyxoLGk7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS5hZGRDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZihhJiZ0eXBlb2YgYT09InN0cmluZyIpe2I9YS5zcGxpdChwKTtmb3IoYz0wLGQ9dGhpcy5sZW5ndGg7YzxkO2MrKyl7ZT10aGlzW2NdO2lmKGUubm9kZVR5cGU9PT0xKWlmKCFlLmNsYXNzTmFtZSYmYi5sZW5ndGg9PT0xKWUuY2xhc3NOYW1lPWE7ZWxzZXtnPSIgIitlLmNsYXNzTmFtZSsiICI7Zm9yKGg9MCxpPWIubGVuZ3RoO2g8aTtoKyspfmcuaW5kZXhPZigiICIrYltoXSsiICIpfHwoZys9YltoXSsiICIpO2UuY2xhc3NOYW1lPWYudHJpbShnKX19fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZyxoLGksajtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGEmJnR5cGVvZiBhPT0ic3RyaW5nInx8YT09PWIpe2M9KGF8fCIiKS5zcGxpdChwKTtmb3IoZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyl7Zz10aGlzW2RdO2lmKGcubm9kZVR5cGU9PT0xJiZnLmNsYXNzTmFtZSlpZihhKXtoPSgiICIrZy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKG8sIiAiKTtmb3IoaT0wLGo9Yy5sZW5ndGg7aTxqO2krKyloPWgucmVwbGFjZSgiICIrY1tpXSsiICIsIiAiKTtnLmNsYXNzTmFtZT1mLnRyaW0oaCl9ZWxzZSBnLmNsYXNzTmFtZT0iIn19cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGEsZD10eXBlb2YgYj09ImJvb2xlYW4iO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe2YodGhpcykudG9nZ2xlQ2xhc3MoYS5jYWxsKHRoaXMsYyx0aGlzLmNsYXNzTmFtZSxiKSxiKX0pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihjPT09InN0cmluZyIpe3ZhciBlLGc9MCxoPWYodGhpcyksaT1iLGo9YS5zcGxpdChwKTt3aGlsZShlPWpbZysrXSlpPWQ/aTohaC5oYXNDbGFzcyhlKSxoW2k/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXShlKX1lbHNlIGlmKGM9PT0idW5kZWZpbmVkInx8Yz09PSJib29sZWFuIil0aGlzLmNsYXNzTmFtZSYmZi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjpmLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiJ9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGI9IiAiK2ErIiAiLGM9MCxkPXRoaXMubGVuZ3RoO2Zvcig7YzxkO2MrKylpZih0aGlzW2NdLm5vZGVUeXBlPT09MSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UobywiICIpLmluZGV4T2YoYik+LTEpcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZz10aGlzWzBdO3tpZighIWFyZ3VtZW50cy5sZW5ndGgpe2U9Zi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZCl7dmFyIGc9Zih0aGlzKSxoO2lmKHRoaXMubm9kZVR5cGU9PT0xKXtlP2g9YS5jYWxsKHRoaXMsZCxnLnZhbCgpKTpoPWEsaD09bnVsbD9oPSIiOnR5cGVvZiBoPT0ibnVtYmVyIj9oKz0iIjpmLmlzQXJyYXkoaCkmJihoPWYubWFwKGgsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6YSsiIn0pKSxjPWYudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXXx8Zi52YWxIb29rc1t0aGlzLnR5cGVdO2lmKCFjfHwhKCJzZXQiaW4gYyl8fGMuc2V0KHRoaXMsaCwidmFsdWUiKT09PWIpdGhpcy52YWx1ZT1ofX0pfWlmKGcpe2M9Zi52YWxIb29rc1tnLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldfHxmLnZhbEhvb2tzW2cudHlwZV07aWYoYyYmImdldCJpbiBjJiYoZD1jLmdldChnLCJ2YWx1ZSIpKSE9PWIpcmV0dXJuIGQ7ZD1nLnZhbHVlO3JldHVybiB0eXBlb2YgZD09InN0cmluZyI/ZC5yZXBsYWNlKHEsIiIpOmQ9PW51bGw/IiI6ZH19fX0pLGYuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5hdHRyaWJ1dGVzLnZhbHVlO3JldHVybiFifHxiLnNwZWNpZmllZD9hLnZhbHVlOmEudGV4dH19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGc9YS5zZWxlY3RlZEluZGV4LGg9W10saT1hLm9wdGlvbnMsaj1hLnR5cGU9PT0ic2VsZWN0LW9uZSI7aWYoZzwwKXJldHVybiBudWxsO2M9aj9nOjAsZD1qP2crMTppLmxlbmd0aDtmb3IoO2M8ZDtjKyspe2U9aVtjXTtpZihlLnNlbGVjdGVkJiYoZi5zdXBwb3J0Lm9wdERpc2FibGVkPyFlLmRpc2FibGVkOmUuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpPT09bnVsbCkmJighZS5wYXJlbnROb2RlLmRpc2FibGVkfHwhZi5ub2RlTmFtZShlLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtiPWYoZSkudmFsKCk7aWYoailyZXR1cm4gYjtoLnB1c2goYil9fWlmKGomJiFoLmxlbmd0aCYmaS5sZW5ndGgpcmV0dXJuIGYoaVtnXSkudmFsKCk7cmV0dXJuIGh9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPWYubWFrZUFycmF5KGIpO2YoYSkuZmluZCgib3B0aW9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWQ9Zi5pbkFycmF5KGYodGhpcykudmFsKCksYyk+PTB9KSxjLmxlbmd0aHx8KGEuc2VsZWN0ZWRJbmRleD0tMSk7cmV0dXJuIGN9fX0sYXR0ckZuOnt2YWw6ITAsY3NzOiEwLGh0bWw6ITAsdGV4dDohMCxkYXRhOiEwLHdpZHRoOiEwLGhlaWdodDohMCxvZmZzZXQ6ITB9LGF0dHI6ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGcsaCxpLGo9YS5ub2RlVHlwZTtpZighIWEmJmohPT0zJiZqIT09OCYmaiE9PTIpe2lmKGUmJmMgaW4gZi5hdHRyRm4pcmV0dXJuIGYoYSlbY10oZCk7aWYodHlwZW9mIGEuZ2V0QXR0cmlidXRlPT0idW5kZWZpbmVkIilyZXR1cm4gZi5wcm9wKGEsYyxkKTtpPWohPT0xfHwhZi5pc1hNTERvYyhhKSxpJiYoYz1jLnRvTG93ZXJDYXNlKCksaD1mLmF0dHJIb29rc1tjXXx8KHUudGVzdChjKT94OncpKTtpZihkIT09Yil7aWYoZD09PW51bGwpe2YucmVtb3ZlQXR0cihhLGMpO3JldHVybn1pZihoJiYic2V0ImluIGgmJmkmJihnPWguc2V0KGEsZCxjKSkhPT1iKXJldHVybiBnO2Euc2V0QXR0cmlidXRlKGMsIiIrZCk7cmV0dXJuIGR9aWYoaCYmImdldCJpbiBoJiZpJiYoZz1oLmdldChhLGMpKSE9PW51bGwpcmV0dXJuIGc7Zz1hLmdldEF0dHJpYnV0ZShjKTtyZXR1cm4gZz09PW51bGw/YjpnfX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxnLGg9MDtpZihiJiZhLm5vZGVUeXBlPT09MSl7ZD1iLnRvTG93ZXJDYXNlKCkuc3BsaXQocCksZz1kLmxlbmd0aDtmb3IoO2g8ZztoKyspZT1kW2hdLGUmJihjPWYucHJvcEZpeFtlXXx8ZSxmLmF0dHIoYSxlLCIiKSxhLnJlbW92ZUF0dHJpYnV0ZSh2P2U6YyksdS50ZXN0KGUpJiZjIGluIGEmJihhW2NdPSExKSl9fSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihhLGIpe2lmKHIudGVzdChhLm5vZGVOYW1lKSYmYS5wYXJlbnROb2RlKWYuZXJyb3IoInR5cGUgcHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZCIpO2Vsc2UgaWYoIWYuc3VwcG9ydC5yYWRpb1ZhbHVlJiZiPT09InJhZGlvIiYmZi5ub2RlTmFtZShhLCJpbnB1dCIpKXt2YXIgYz1hLnZhbHVlO2Euc2V0QXR0cmlidXRlKCJ0eXBlIixiKSxjJiYoYS52YWx1ZT1jKTtyZXR1cm4gYn19fSx2YWx1ZTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYodyYmZi5ub2RlTmFtZShhLCJidXR0b24iKSlyZXR1cm4gdy5nZXQoYSxiKTtyZXR1cm4gYiBpbiBhP2EudmFsdWU6bnVsbH0sc2V0OmZ1bmN0aW9uKGEsYixjKXtpZih3JiZmLm5vZGVOYW1lKGEsImJ1dHRvbiIpKXJldHVybiB3LnNldChhLGIsYyk7YS52YWx1ZT1ifX19LHByb3BGaXg6e3RhYmluZGV4OiJ0YWJJbmRleCIscmVhZG9ubHk6InJlYWRPbmx5IiwiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIixtYXhsZW5ndGg6Im1heExlbmd0aCIsY2VsbHNwYWNpbmc6ImNlbGxTcGFjaW5nIixjZWxscGFkZGluZzoiY2VsbFBhZGRpbmciLHJvd3NwYW46InJvd1NwYW4iLGNvbHNwYW46ImNvbFNwYW4iLHVzZW1hcDoidXNlTWFwIixmcmFtZWJvcmRlcjoiZnJhbWVCb3JkZXIiLGNvbnRlbnRlZGl0YWJsZToiY29udGVudEVkaXRhYmxlIn0scHJvcDpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZyxoLGk9YS5ub2RlVHlwZTtpZighIWEmJmkhPT0zJiZpIT09OCYmaSE9PTIpe2g9aSE9PTF8fCFmLmlzWE1MRG9jKGEpLGgmJihjPWYucHJvcEZpeFtjXXx8YyxnPWYucHJvcEhvb2tzW2NdKTtyZXR1cm4gZCE9PWI/ZyYmInNldCJpbiBnJiYoZT1nLnNldChhLGQsYykpIT09Yj9lOmFbY109ZDpnJiYiZ2V0ImluIGcmJihlPWcuZ2V0KGEsYykpIT09bnVsbD9lOmFbY119fSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGM9YS5nZXRBdHRyaWJ1dGVOb2RlKCJ0YWJpbmRleCIpO3JldHVybiBjJiZjLnNwZWNpZmllZD9wYXJzZUludChjLnZhbHVlLDEwKTpzLnRlc3QoYS5ub2RlTmFtZSl8fHQudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6Yn19fX0pLGYuYXR0ckhvb2tzLnRhYmluZGV4PWYucHJvcEhvb2tzLnRhYkluZGV4LHg9e2dldDpmdW5jdGlvbihhLGMpe3ZhciBkLGU9Zi5wcm9wKGEsYyk7cmV0dXJuIGU9PT0hMHx8dHlwZW9mIGUhPSJib29sZWFuIiYmKGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpKSYmZC5ub2RlVmFsdWUhPT0hMT9jLnRvTG93ZXJDYXNlKCk6Yn0sc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtiPT09ITE/Zi5yZW1vdmVBdHRyKGEsYyk6KGQ9Zi5wcm9wRml4W2NdfHxjLGQgaW4gYSYmKGFbZF09ITApLGEuc2V0QXR0cmlidXRlKGMsYy50b0xvd2VyQ2FzZSgpKSk7cmV0dXJuIGN9fSx2fHwoeT17bmFtZTohMCxpZDohMH0sdz1mLnZhbEhvb2tzLmJ1dHRvbj17Z2V0OmZ1bmN0aW9uKGEsYyl7dmFyIGQ7ZD1hLmdldEF0dHJpYnV0ZU5vZGUoYyk7cmV0dXJuIGQmJih5W2NdP2Qubm9kZVZhbHVlIT09IiI6ZC5zcGVjaWZpZWQpP2Qubm9kZVZhbHVlOmJ9LHNldDpmdW5jdGlvbihhLGIsZCl7dmFyIGU9YS5nZXRBdHRyaWJ1dGVOb2RlKGQpO2V8fChlPWMuY3JlYXRlQXR0cmlidXRlKGQpLGEuc2V0QXR0cmlidXRlTm9kZShlKSk7cmV0dXJuIGUubm9kZVZhbHVlPWIrIiJ9fSxmLmF0dHJIb29rcy50YWJpbmRleC5zZXQ9dy5zZXQsZi5lYWNoKFsid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGIpe2YuYXR0ckhvb2tzW2JdPWYuZXh0ZW5kKGYuYXR0ckhvb2tzW2JdLHtzZXQ6ZnVuY3Rpb24oYSxjKXtpZihjPT09IiIpe2Euc2V0QXR0cmlidXRlKGIsImF1dG8iKTtyZXR1cm4gY319fSl9KSxmLmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e2dldDp3LmdldCxzZXQ6ZnVuY3Rpb24oYSxiLGMpe2I9PT0iIiYmKGI9ImZhbHNlIiksdy5zZXQoYSxiLGMpfX0pLGYuc3VwcG9ydC5ocmVmTm9ybWFsaXplZHx8Zi5lYWNoKFsiaHJlZiIsInNyYyIsIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxjKXtmLmF0dHJIb29rc1tjXT1mLmV4dGVuZChmLmF0dHJIb29rc1tjXSx7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBkPWEuZ2V0QXR0cmlidXRlKGMsMik7cmV0dXJuIGQ9PT1udWxsP2I6ZH19KX0pLGYuc3VwcG9ydC5zdHlsZXx8KGYuYXR0ckhvb2tzLnN0eWxlPXtnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dC50b0xvd2VyQ2FzZSgpfHxifSxzZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0PSIiK2J9fSksZi5zdXBwb3J0Lm9wdFNlbGVjdGVkfHwoZi5wcm9wSG9va3Muc2VsZWN0ZWQ9Zi5leHRlbmQoZi5wcm9wSG9va3Muc2VsZWN0ZWQse2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7YiYmKGIuc2VsZWN0ZWRJbmRleCxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KTtyZXR1cm4gbnVsbH19KSksZi5zdXBwb3J0LmVuY3R5cGV8fChmLnByb3BGaXguZW5jdHlwZT0iZW5jb2RpbmciKSxmLnN1cHBvcnQuY2hlY2tPbnx8Zi5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7Zi52YWxIb29rc1t0aGlzXT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgidmFsdWUiKT09PW51bGw/Im9uIjphLnZhbHVlfX19KSxmLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtmLnZhbEhvb2tzW3RoaXNdPWYuZXh0ZW5kKGYudmFsSG9va3NbdGhpc10se3NldDpmdW5jdGlvbihhLGIpe2lmKGYuaXNBcnJheShiKSlyZXR1cm4gYS5jaGVja2VkPWYuaW5BcnJheShmKGEpLnZhbCgpLGIpPj0wfX0pfSk7dmFyIHo9L14oPzp0ZXh0YXJlYXxpbnB1dHxzZWxlY3QpJC9pLEE9L14oW15cLl0qKT8oPzpcLiguKykpPyQvLEI9L1xiaG92ZXIoXC5cUyspP1xiLyxDPS9ea2V5LyxEPS9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLyxFPS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxGPS9eKFx3KikoPzojKFtcd1wtXSspKT8oPzpcLihbXHdcLV0rKSk/JC8sRz1mdW5jdGlvbihhKXt2YXIgYj1GLmV4ZWMoYSk7YiYmKGJbMV09KGJbMV18fCIiKS50b0xvd2VyQ2FzZSgpLGJbM109YlszXSYmbmV3IFJlZ0V4cCgiKD86XnxcXHMpIitiWzNdKyIoPzpcXHN8JCkiKSk7cmV0dXJuIGJ9LEg9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmF0dHJpYnV0ZXN8fHt9O3JldHVybighYlsxXXx8YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09YlsxXSkmJighYlsyXXx8KGMuaWR8fHt9KS52YWx1ZT09PWJbMl0pJiYoIWJbM118fGJbM10udGVzdCgoY1siY2xhc3MiXXx8e30pLnZhbHVlKSl9LEk9ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZXZlbnQuc3BlY2lhbC5ob3Zlcj9hOmEucmVwbGFjZShCLCJtb3VzZWVudGVyJDEgbW91c2VsZWF2ZSQxIil9Ow0KCWYuZXZlbnQ9e2FkZDpmdW5jdGlvbihhLGMsZCxlLGcpe3ZhciBoLGksaixrLGwsbSxuLG8scCxxLHIscztpZighKGEubm9kZVR5cGU9PT0zfHxhLm5vZGVUeXBlPT09OHx8IWN8fCFkfHwhKGg9Zi5fZGF0YShhKSkpKXtkLmhhbmRsZXImJihwPWQsZD1wLmhhbmRsZXIpLGQuZ3VpZHx8KGQuZ3VpZD1mLmd1aWQrKyksaj1oLmV2ZW50cyxqfHwoaC5ldmVudHM9aj17fSksaT1oLmhhbmRsZSxpfHwoaC5oYW5kbGU9aT1mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGYhPSJ1bmRlZmluZWQiJiYoIWF8fGYuZXZlbnQudHJpZ2dlcmVkIT09YS50eXBlKT9mLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGkuZWxlbSxhcmd1bWVudHMpOmJ9LGkuZWxlbT1hKSxjPWYudHJpbShJKGMpKS5zcGxpdCgiICIpO2ZvcihrPTA7azxjLmxlbmd0aDtrKyspe2w9QS5leGVjKGNba10pfHxbXSxtPWxbMV0sbj0obFsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLHM9Zi5ldmVudC5zcGVjaWFsW21dfHx7fSxtPShnP3MuZGVsZWdhdGVUeXBlOnMuYmluZFR5cGUpfHxtLHM9Zi5ldmVudC5zcGVjaWFsW21dfHx7fSxvPWYuZXh0ZW5kKHt0eXBlOm0sb3JpZ1R5cGU6bFsxXSxkYXRhOmUsaGFuZGxlcjpkLGd1aWQ6ZC5ndWlkLHNlbGVjdG9yOmcscXVpY2s6RyhnKSxuYW1lc3BhY2U6bi5qb2luKCIuIil9LHApLHI9alttXTtpZighcil7cj1qW21dPVtdLHIuZGVsZWdhdGVDb3VudD0wO2lmKCFzLnNldHVwfHxzLnNldHVwLmNhbGwoYSxlLG4saSk9PT0hMSlhLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKG0saSwhMSk6YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudCgib24iK20saSl9cy5hZGQmJihzLmFkZC5jYWxsKGEsbyksby5oYW5kbGVyLmd1aWR8fChvLmhhbmRsZXIuZ3VpZD1kLmd1aWQpKSxnP3Iuc3BsaWNlKHIuZGVsZWdhdGVDb3VudCsrLDAsbyk6ci5wdXNoKG8pLGYuZXZlbnQuZ2xvYmFsW21dPSEwfWE9bnVsbH19LGdsb2JhbDp7fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZz1mLmhhc0RhdGEoYSkmJmYuX2RhdGEoYSksaCxpLGosayxsLG0sbixvLHAscSxyLHM7aWYoISFnJiYhIShvPWcuZXZlbnRzKSl7Yj1mLnRyaW0oSShifHwiIikpLnNwbGl0KCIgIik7Zm9yKGg9MDtoPGIubGVuZ3RoO2grKyl7aT1BLmV4ZWMoYltoXSl8fFtdLGo9az1pWzFdLGw9aVsyXTtpZighail7Zm9yKGogaW4gbylmLmV2ZW50LnJlbW92ZShhLGorYltoXSxjLGQsITApO2NvbnRpbnVlfXA9Zi5ldmVudC5zcGVjaWFsW2pdfHx7fSxqPShkP3AuZGVsZWdhdGVUeXBlOnAuYmluZFR5cGUpfHxqLHI9b1tqXXx8W10sbT1yLmxlbmd0aCxsPWw/bmV3IFJlZ0V4cCgiKF58XFwuKSIrbC5zcGxpdCgiLiIpLnNvcnQoKS5qb2luKCJcXC4oPzouKlxcLik/IikrIihcXC58JCkiKTpudWxsO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspcz1yW25dLChlfHxrPT09cy5vcmlnVHlwZSkmJighY3x8Yy5ndWlkPT09cy5ndWlkKSYmKCFsfHxsLnRlc3Qocy5uYW1lc3BhY2UpKSYmKCFkfHxkPT09cy5zZWxlY3Rvcnx8ZD09PSIqKiImJnMuc2VsZWN0b3IpJiYoci5zcGxpY2Uobi0tLDEpLHMuc2VsZWN0b3ImJnIuZGVsZWdhdGVDb3VudC0tLHAucmVtb3ZlJiZwLnJlbW92ZS5jYWxsKGEscykpO3IubGVuZ3RoPT09MCYmbSE9PXIubGVuZ3RoJiYoKCFwLnRlYXJkb3dufHxwLnRlYXJkb3duLmNhbGwoYSxsKT09PSExKSYmZi5yZW1vdmVFdmVudChhLGosZy5oYW5kbGUpLGRlbGV0ZSBvW2pdKX1mLmlzRW1wdHlPYmplY3QobykmJihxPWcuaGFuZGxlLHEmJihxLmVsZW09bnVsbCksZi5yZW1vdmVEYXRhKGEsWyJldmVudHMiLCJoYW5kbGUiXSwhMCkpfX0sY3VzdG9tRXZlbnQ6e2dldERhdGE6ITAsc2V0RGF0YTohMCxjaGFuZ2VEYXRhOiEwfSx0cmlnZ2VyOmZ1bmN0aW9uKGMsZCxlLGcpe2lmKCFlfHxlLm5vZGVUeXBlIT09MyYmZS5ub2RlVHlwZSE9PTgpe3ZhciBoPWMudHlwZXx8YyxpPVtdLGosayxsLG0sbixvLHAscSxyLHM7aWYoRS50ZXN0KGgrZi5ldmVudC50cmlnZ2VyZWQpKXJldHVybjtoLmluZGV4T2YoIiEiKT49MCYmKGg9aC5zbGljZSgwLC0xKSxrPSEwKSxoLmluZGV4T2YoIi4iKT49MCYmKGk9aC5zcGxpdCgiLiIpLGg9aS5zaGlmdCgpLGkuc29ydCgpKTtpZigoIWV8fGYuZXZlbnQuY3VzdG9tRXZlbnRbaF0pJiYhZi5ldmVudC5nbG9iYWxbaF0pcmV0dXJuO2M9dHlwZW9mIGM9PSJvYmplY3QiP2NbZi5leHBhbmRvXT9jOm5ldyBmLkV2ZW50KGgsYyk6bmV3IGYuRXZlbnQoaCksYy50eXBlPWgsYy5pc1RyaWdnZXI9ITAsYy5leGNsdXNpdmU9ayxjLm5hbWVzcGFjZT1pLmpvaW4oIi4iKSxjLm5hbWVzcGFjZV9yZT1jLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpOm51bGwsbz1oLmluZGV4T2YoIjoiKTwwPyJvbiIraDoiIjtpZighZSl7aj1mLmNhY2hlO2ZvcihsIGluIGopaltsXS5ldmVudHMmJmpbbF0uZXZlbnRzW2hdJiZmLmV2ZW50LnRyaWdnZXIoYyxkLGpbbF0uaGFuZGxlLmVsZW0sITApO3JldHVybn1jLnJlc3VsdD1iLGMudGFyZ2V0fHwoYy50YXJnZXQ9ZSksZD1kIT1udWxsP2YubWFrZUFycmF5KGQpOltdLGQudW5zaGlmdChjKSxwPWYuZXZlbnQuc3BlY2lhbFtoXXx8e307aWYocC50cmlnZ2VyJiZwLnRyaWdnZXIuYXBwbHkoZSxkKT09PSExKXJldHVybjtyPVtbZSxwLmJpbmRUeXBlfHxoXV07aWYoIWcmJiFwLm5vQnViYmxlJiYhZi5pc1dpbmRvdyhlKSl7cz1wLmRlbGVnYXRlVHlwZXx8aCxtPUUudGVzdChzK2gpP2U6ZS5wYXJlbnROb2RlLG49bnVsbDtmb3IoO207bT1tLnBhcmVudE5vZGUpci5wdXNoKFttLHNdKSxuPW07biYmbj09PWUub3duZXJEb2N1bWVudCYmci5wdXNoKFtuLmRlZmF1bHRWaWV3fHxuLnBhcmVudFdpbmRvd3x8YSxzXSl9Zm9yKGw9MDtsPHIubGVuZ3RoJiYhYy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO2wrKyltPXJbbF1bMF0sYy50eXBlPXJbbF1bMV0scT0oZi5fZGF0YShtLCJldmVudHMiKXx8e30pW2MudHlwZV0mJmYuX2RhdGEobSwiaGFuZGxlIikscSYmcS5hcHBseShtLGQpLHE9byYmbVtvXSxxJiZmLmFjY2VwdERhdGEobSkmJnEuYXBwbHkobSxkKT09PSExJiZjLnByZXZlbnREZWZhdWx0KCk7Yy50eXBlPWgsIWcmJiFjLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYoIXAuX2RlZmF1bHR8fHAuX2RlZmF1bHQuYXBwbHkoZS5vd25lckRvY3VtZW50LGQpPT09ITEpJiYoaCE9PSJjbGljayJ8fCFmLm5vZGVOYW1lKGUsImEiKSkmJmYuYWNjZXB0RGF0YShlKSYmbyYmZVtoXSYmKGghPT0iZm9jdXMiJiZoIT09ImJsdXIifHxjLnRhcmdldC5vZmZzZXRXaWR0aCE9PTApJiYhZi5pc1dpbmRvdyhlKSYmKG49ZVtvXSxuJiYoZVtvXT1udWxsKSxmLmV2ZW50LnRyaWdnZXJlZD1oLGVbaF0oKSxmLmV2ZW50LnRyaWdnZXJlZD1iLG4mJihlW29dPW4pKTtyZXR1cm4gYy5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihjKXtjPWYuZXZlbnQuZml4KGN8fGEuZXZlbnQpO3ZhciBkPShmLl9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbYy50eXBlXXx8W10sZT1kLmRlbGVnYXRlQ291bnQsZz1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSxoPSFjLmV4Y2x1c2l2ZSYmIWMubmFtZXNwYWNlLGk9W10saixrLGwsbSxuLG8scCxxLHIscyx0O2dbMF09YyxjLmRlbGVnYXRlVGFyZ2V0PXRoaXM7aWYoZSYmIWMudGFyZ2V0LmRpc2FibGVkJiYoIWMuYnV0dG9ufHxjLnR5cGUhPT0iY2xpY2siKSl7bT1mKHRoaXMpLG0uY29udGV4dD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXM7Zm9yKGw9Yy50YXJnZXQ7bCE9dGhpcztsPWwucGFyZW50Tm9kZXx8dGhpcyl7bz17fSxxPVtdLG1bMF09bDtmb3Ioaj0wO2o8ZTtqKyspcj1kW2pdLHM9ci5zZWxlY3RvcixvW3NdPT09YiYmKG9bc109ci5xdWljaz9IKGwsci5xdWljayk6bS5pcyhzKSksb1tzXSYmcS5wdXNoKHIpO3EubGVuZ3RoJiZpLnB1c2goe2VsZW06bCxtYXRjaGVzOnF9KX19ZC5sZW5ndGg+ZSYmaS5wdXNoKHtlbGVtOnRoaXMsbWF0Y2hlczpkLnNsaWNlKGUpfSk7Zm9yKGo9MDtqPGkubGVuZ3RoJiYhYy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO2orKyl7cD1pW2pdLGMuY3VycmVudFRhcmdldD1wLmVsZW07Zm9yKGs9MDtrPHAubWF0Y2hlcy5sZW5ndGgmJiFjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7aysrKXtyPXAubWF0Y2hlc1trXTtpZihofHwhYy5uYW1lc3BhY2UmJiFyLm5hbWVzcGFjZXx8Yy5uYW1lc3BhY2VfcmUmJmMubmFtZXNwYWNlX3JlLnRlc3Qoci5uYW1lc3BhY2UpKWMuZGF0YT1yLmRhdGEsYy5oYW5kbGVPYmo9cixuPSgoZi5ldmVudC5zcGVjaWFsW3Iub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxyLmhhbmRsZXIpLmFwcGx5KHAuZWxlbSxnKSxuIT09YiYmKGMucmVzdWx0PW4sbj09PSExJiYoYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCkpKX19cmV0dXJuIGMucmVzdWx0fSxwcm9wczoiYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7YS53aGljaD09bnVsbCYmKGEud2hpY2g9Yi5jaGFyQ29kZSE9bnVsbD9iLmNoYXJDb2RlOmIua2V5Q29kZSk7cmV0dXJuIGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGQpe3ZhciBlLGYsZyxoPWQuYnV0dG9uLGk9ZC5mcm9tRWxlbWVudDthLnBhZ2VYPT1udWxsJiZkLmNsaWVudFghPW51bGwmJihlPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGMsZj1lLmRvY3VtZW50RWxlbWVudCxnPWUuYm9keSxhLnBhZ2VYPWQuY2xpZW50WCsoZiYmZi5zY3JvbGxMZWZ0fHxnJiZnLnNjcm9sbExlZnR8fDApLShmJiZmLmNsaWVudExlZnR8fGcmJmcuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1kLmNsaWVudFkrKGYmJmYuc2Nyb2xsVG9wfHxnJiZnLnNjcm9sbFRvcHx8MCktKGYmJmYuY2xpZW50VG9wfHxnJiZnLmNsaWVudFRvcHx8MCkpLCFhLnJlbGF0ZWRUYXJnZXQmJmkmJihhLnJlbGF0ZWRUYXJnZXQ9aT09PWEudGFyZ2V0P2QudG9FbGVtZW50OmkpLCFhLndoaWNoJiZoIT09YiYmKGEud2hpY2g9aCYxPzE6aCYyPzM6aCY0PzI6MCk7cmV0dXJuIGF9fSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtmLmV4cGFuZG9dKXJldHVybiBhO3ZhciBkLGUsZz1hLGg9Zi5ldmVudC5maXhIb29rc1thLnR5cGVdfHx7fSxpPWgucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoaC5wcm9wcyk6dGhpcy5wcm9wczthPWYuRXZlbnQoZyk7Zm9yKGQ9aS5sZW5ndGg7ZDspZT1pWy0tZF0sYVtlXT1nW2VdO2EudGFyZ2V0fHwoYS50YXJnZXQ9Zy5zcmNFbGVtZW50fHxjKSxhLnRhcmdldC5ub2RlVHlwZT09PTMmJihhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlKSxhLm1ldGFLZXk9PT1iJiYoYS5tZXRhS2V5PWEuY3RybEtleSk7cmV0dXJuIGguZmlsdGVyP2guZmlsdGVyKGEsZyk6YX0sc3BlY2lhbDp7cmVhZHk6e3NldHVwOmYuYmluZFJlYWR5fSxsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e2RlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e2RlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxiZWZvcmV1bmxvYWQ6e3NldHVwOmZ1bmN0aW9uKGEsYixjKXtmLmlzV2luZG93KHRoaXMpJiYodGhpcy5vbmJlZm9yZXVubG9hZD1jKX0sdGVhcmRvd246ZnVuY3Rpb24oYSxiKXt0aGlzLm9uYmVmb3JldW5sb2FkPT09YiYmKHRoaXMub25iZWZvcmV1bmxvYWQ9bnVsbCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9Zi5leHRlbmQobmV3IGYuRXZlbnQsYyx7dHlwZTphLGlzU2ltdWxhdGVkOiEwLG9yaWdpbmFsRXZlbnQ6e319KTtkP2YuZXZlbnQudHJpZ2dlcihlLG51bGwsYik6Zi5ldmVudC5kaXNwYXRjaC5jYWxsKGIsZSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sZi5ldmVudC5oYW5kbGU9Zi5ldmVudC5kaXNwYXRjaCxmLnJlbW92ZUV2ZW50PWMucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihhLGIsYyl7YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixjLCExKX06ZnVuY3Rpb24oYSxiLGMpe2EuZGV0YWNoRXZlbnQmJmEuZGV0YWNoRXZlbnQoIm9uIitiLGMpfSxmLkV2ZW50PWZ1bmN0aW9uKGEsYil7aWYoISh0aGlzIGluc3RhbmNlb2YgZi5FdmVudCkpcmV0dXJuIG5ldyBmLkV2ZW50KGEsYik7YSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8YS5yZXR1cm5WYWx1ZT09PSExfHxhLmdldFByZXZlbnREZWZhdWx0JiZhLmdldFByZXZlbnREZWZhdWx0KCk/SzpKKTp0aGlzLnR5cGU9YSxiJiZmLmV4dGVuZCh0aGlzLGIpLHRoaXMudGltZVN0YW1wPWEmJmEudGltZVN0YW1wfHxmLm5vdygpLHRoaXNbZi5leHBhbmRvXT0hMH0sZi5FdmVudC5wcm90b3R5cGU9e3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9Szt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7IWF8fChhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTphLnJldHVyblZhbHVlPSExKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1LO3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDshYXx8KGEuc3RvcFByb3BhZ2F0aW9uJiZhLnN0b3BQcm9wYWdhdGlvbigpLGEuY2FuY2VsQnViYmxlPSEwKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1LLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9LGlzRGVmYXVsdFByZXZlbnRlZDpKLGlzUHJvcGFnYXRpb25TdG9wcGVkOkosaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6Sn0sZi5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0sZnVuY3Rpb24oYSxiKXtmLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMsZD1hLnJlbGF0ZWRUYXJnZXQsZT1hLmhhbmRsZU9iaixnPWUuc2VsZWN0b3IsaDtpZighZHx8ZCE9PWMmJiFmLmNvbnRhaW5zKGMsZCkpYS50eXBlPWUub3JpZ1R5cGUsaD1lLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iO3JldHVybiBofX19KSxmLnN1cHBvcnQuc3VibWl0QnViYmxlc3x8KGYuZXZlbnQuc3BlY2lhbC5zdWJtaXQ9e3NldHVwOmZ1bmN0aW9uKCl7aWYoZi5ub2RlTmFtZSh0aGlzLCJmb3JtIikpcmV0dXJuITE7Zi5ldmVudC5hZGQodGhpcywiY2xpY2suX3N1Ym1pdCBrZXlwcmVzcy5fc3VibWl0IixmdW5jdGlvbihhKXt2YXIgYz1hLnRhcmdldCxkPWYubm9kZU5hbWUoYywiaW5wdXQiKXx8Zi5ub2RlTmFtZShjLCJidXR0b24iKT9jLmZvcm06YjtkJiYhZC5fc3VibWl0X2F0dGFjaGVkJiYoZi5ldmVudC5hZGQoZCwic3VibWl0Ll9zdWJtaXQiLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmIWEuaXNUcmlnZ2VyJiZmLmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxhLCEwKX0pLGQuX3N1Ym1pdF9hdHRhY2hlZD0hMCl9KX0sdGVhcmRvd246ZnVuY3Rpb24oKXtpZihmLm5vZGVOYW1lKHRoaXMsImZvcm0iKSlyZXR1cm4hMTtmLmV2ZW50LnJlbW92ZSh0aGlzLCIuX3N1Ym1pdCIpfX0pLGYuc3VwcG9ydC5jaGFuZ2VCdWJibGVzfHwoZi5ldmVudC5zcGVjaWFsLmNoYW5nZT17c2V0dXA6ZnVuY3Rpb24oKXtpZih6LnRlc3QodGhpcy5ub2RlTmFtZSkpe2lmKHRoaXMudHlwZT09PSJjaGVja2JveCJ8fHRoaXMudHlwZT09PSJyYWRpbyIpZi5ldmVudC5hZGQodGhpcywicHJvcGVydHljaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oYSl7YS5vcmlnaW5hbEV2ZW50LnByb3BlcnR5TmFtZT09PSJjaGVja2VkIiYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMCl9KSxmLmV2ZW50LmFkZCh0aGlzLCJjbGljay5fY2hhbmdlIixmdW5jdGlvbihhKXt0aGlzLl9qdXN0X2NoYW5nZWQmJiFhLmlzVHJpZ2dlciYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMSxmLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsYSwhMCkpfSk7cmV0dXJuITF9Zi5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7ei50ZXN0KGIubm9kZU5hbWUpJiYhYi5fY2hhbmdlX2F0dGFjaGVkJiYoZi5ldmVudC5hZGQoYiwiY2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmIWEuaXNTaW11bGF0ZWQmJiFhLmlzVHJpZ2dlciYmZi5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLnBhcmVudE5vZGUsYSwhMCl9KSxiLl9jaGFuZ2VfYXR0YWNoZWQ9ITApfSl9LGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtpZih0aGlzIT09Ynx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fGIudHlwZSE9PSJyYWRpbyImJmIudHlwZSE9PSJjaGVja2JveCIpcmV0dXJuIGEuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0ZWFyZG93bjpmdW5jdGlvbigpe2YuZXZlbnQucmVtb3ZlKHRoaXMsIi5fY2hhbmdlIik7cmV0dXJuIHoudGVzdCh0aGlzLm5vZGVOYW1lKX19KSxmLnN1cHBvcnQuZm9jdXNpbkJ1YmJsZXN8fGYuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oYSxiKXt2YXIgZD0wLGU9ZnVuY3Rpb24oYSl7Zi5ldmVudC5zaW11bGF0ZShiLGEudGFyZ2V0LGYuZXZlbnQuZml4KGEpLCEwKX07Zi5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpmdW5jdGlvbigpe2QrKz09PTAmJmMuYWRkRXZlbnRMaXN0ZW5lcihhLGUsITApfSx0ZWFyZG93bjpmdW5jdGlvbigpey0tZD09PTAmJmMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGUsITApfX19KSxmLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxjLGQsZSxnKXt2YXIgaCxpO2lmKHR5cGVvZiBhPT0ib2JqZWN0Iil7dHlwZW9mIGMhPSJzdHJpbmciJiYoZD1jLGM9Yik7Zm9yKGkgaW4gYSl0aGlzLm9uKGksYyxkLGFbaV0sZyk7cmV0dXJuIHRoaXN9ZD09bnVsbCYmZT09bnVsbD8oZT1jLGQ9Yz1iKTplPT1udWxsJiYodHlwZW9mIGM9PSJzdHJpbmciPyhlPWQsZD1iKTooZT1kLGQ9YyxjPWIpKTtpZihlPT09ITEpZT1KO2Vsc2UgaWYoIWUpcmV0dXJuIHRoaXM7Zz09PTEmJihoPWUsZT1mdW5jdGlvbihhKXtmKCkub2ZmKGEpO3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZS5ndWlkPWguZ3VpZHx8KGguZ3VpZD1mLmd1aWQrKykpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmV2ZW50LmFkZCh0aGlzLGEsZSxkLGMpfSl9LG9uZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbi5jYWxsKHRoaXMsYSxiLGMsZCwxKX0sb2ZmOmZ1bmN0aW9uKGEsYyxkKXtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iail7dmFyIGU9YS5oYW5kbGVPYmo7ZihhLmRlbGVnYXRlVGFyZ2V0KS5vZmYoZS5uYW1lc3BhY2U/ZS50eXBlKyIuIitlLm5hbWVzcGFjZTplLnR5cGUsZS5zZWxlY3RvcixlLmhhbmRsZXIpO3JldHVybiB0aGlzfWlmKHR5cGVvZiBhPT0ib2JqZWN0Iil7Zm9yKHZhciBnIGluIGEpdGhpcy5vZmYoZyxjLGFbZ10pO3JldHVybiB0aGlzfWlmKGM9PT0hMXx8dHlwZW9mIGM9PSJmdW5jdGlvbiIpZD1jLGM9YjtkPT09ITEmJihkPUopO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmV2ZW50LnJlbW92ZSh0aGlzLGEsZCxjKX0pfSxiaW5kOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5vbihhLG51bGwsYixjKX0sdW5iaW5kOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMub2ZmKGEsbnVsbCxiKX0sbGl2ZTpmdW5jdGlvbihhLGIsYyl7Zih0aGlzLmNvbnRleHQpLm9uKGEsdGhpcy5zZWxlY3RvcixiLGMpO3JldHVybiB0aGlzfSxkaWU6ZnVuY3Rpb24oYSxiKXtmKHRoaXMuY29udGV4dCkub2ZmKGEsdGhpcy5zZWxlY3Rvcnx8IioqIixiKTtyZXR1cm4gdGhpc30sZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24oYixhLGMsZCl9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT0xP3RoaXMub2ZmKGEsIioqIik6dGhpcy5vZmYoYixhLGMpfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YuZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXtpZih0aGlzWzBdKXJldHVybiBmLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXNbMF0sITApfSx0b2dnbGU6ZnVuY3Rpb24oYSl7dmFyIGI9YXJndW1lbnRzLGM9YS5ndWlkfHxmLmd1aWQrKyxkPTAsZT1mdW5jdGlvbihjKXt2YXIgZT0oZi5fZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIithLmd1aWQpfHwwKSVkO2YuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkLGUrMSksYy5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBiW2VdLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8ITF9O2UuZ3VpZD1jO3doaWxlKGQ8Yi5sZW5ndGgpYltkKytdLmd1aWQ9YztyZXR1cm4gdGhpcy5jbGljayhlKX0saG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEpLm1vdXNlbGVhdmUoYnx8YSl9fSksZi5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7Zi5mbltiXT1mdW5jdGlvbihhLGMpe2M9PW51bGwmJihjPWEsYT1udWxsKTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24oYixudWxsLGEsYyk6dGhpcy50cmlnZ2VyKGIpfSxmLmF0dHJGbiYmKGYuYXR0ckZuW2JdPSEwKSxDLnRlc3QoYikmJihmLmV2ZW50LmZpeEhvb2tzW2JdPWYuZXZlbnQua2V5SG9va3MpLEQudGVzdChiKSYmKGYuZXZlbnQuZml4SG9va3NbYl09Zi5ldmVudC5tb3VzZUhvb2tzKX0pLGZ1bmN0aW9uKCl7ZnVuY3Rpb24geChhLGIsYyxlLGYsZyl7Zm9yKHZhciBoPTAsaT1lLmxlbmd0aDtoPGk7aCsrKXt2YXIgaj1lW2hdO2lmKGope3ZhciBrPSExO2o9althXTt3aGlsZShqKXtpZihqW2RdPT09Yyl7az1lW2ouc2l6c2V0XTticmVha31pZihqLm5vZGVUeXBlPT09MSl7Z3x8KGpbZF09YyxqLnNpenNldD1oKTtpZih0eXBlb2YgYiE9InN0cmluZyIpe2lmKGo9PT1iKXtrPSEwO2JyZWFrfX1lbHNlIGlmKG0uZmlsdGVyKGIsW2pdKS5sZW5ndGg+MCl7az1qO2JyZWFrfX1qPWpbYV19ZVtoXT1rfX19ZnVuY3Rpb24gdyhhLGIsYyxlLGYsZyl7Zm9yKHZhciBoPTAsaT1lLmxlbmd0aDtoPGk7aCsrKXt2YXIgaj1lW2hdO2lmKGope3ZhciBrPSExO2o9althXTt3aGlsZShqKXtpZihqW2RdPT09Yyl7az1lW2ouc2l6c2V0XTticmVha31qLm5vZGVUeXBlPT09MSYmIWcmJihqW2RdPWMsai5zaXpzZXQ9aCk7aWYoai5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yil7az1qO2JyZWFrfWo9althXX1lW2hdPWt9fX12YXIgYT0vKCg/OlwoKD86XChbXigpXStcKXxbXigpXSspK1wpfFxbKD86XFtbXlxbXF1dKlxdfFsnIl1bXiciXSpbJyJdfFteXFtcXSciXSspK1xdfFxcLnxbXiA+K34sKFxbXFxdKykrfFs+K35dKShccyosXHMqKT8oKD86LnxccnxcbikqKS9nLGQ9InNpemNhY2hlIisoTWF0aC5yYW5kb20oKSsiIikucmVwbGFjZSgiLiIsIiIpLGU9MCxnPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaD0hMSxpPSEwLGo9L1xcL2csaz0vXHJcbi9nLGw9L1xXLztbMCwwXS5zb3J0KGZ1bmN0aW9uKCl7aT0hMTtyZXR1cm4gMH0pO3ZhciBtPWZ1bmN0aW9uKGIsZCxlLGYpe2U9ZXx8W10sZD1kfHxjO3ZhciBoPWQ7aWYoZC5ub2RlVHlwZSE9PTEmJmQubm9kZVR5cGUhPT05KXJldHVybltdO2lmKCFifHx0eXBlb2YgYiE9InN0cmluZyIpcmV0dXJuIGU7dmFyIGksaixrLGwsbixxLHIsdCx1PSEwLHY9bS5pc1hNTChkKSx3PVtdLHg9Yjtkb3thLmV4ZWMoIiIpLGk9YS5leGVjKHgpO2lmKGkpe3g9aVszXSx3LnB1c2goaVsxXSk7aWYoaVsyXSl7bD1pWzNdO2JyZWFrfX19d2hpbGUoaSk7aWYody5sZW5ndGg+MSYmcC5leGVjKGIpKWlmKHcubGVuZ3RoPT09MiYmby5yZWxhdGl2ZVt3WzBdXSlqPXkod1swXSt3WzFdLGQsZik7ZWxzZXtqPW8ucmVsYXRpdmVbd1swXV0/W2RdOm0ody5zaGlmdCgpLGQpO3doaWxlKHcubGVuZ3RoKWI9dy5zaGlmdCgpLG8ucmVsYXRpdmVbYl0mJihiKz13LnNoaWZ0KCkpLGo9eShiLGosZil9ZWxzZXshZiYmdy5sZW5ndGg+MSYmZC5ub2RlVHlwZT09PTkmJiF2JiZvLm1hdGNoLklELnRlc3Qod1swXSkmJiFvLm1hdGNoLklELnRlc3Qod1t3Lmxlbmd0aC0xXSkmJihuPW0uZmluZCh3LnNoaWZ0KCksZCx2KSxkPW4uZXhwcj9tLmZpbHRlcihuLmV4cHIsbi5zZXQpWzBdOm4uc2V0WzBdKTtpZihkKXtuPWY/e2V4cHI6dy5wb3AoKSxzZXQ6cyhmKX06bS5maW5kKHcucG9wKCksdy5sZW5ndGg9PT0xJiYod1swXT09PSJ+Inx8d1swXT09PSIrIikmJmQucGFyZW50Tm9kZT9kLnBhcmVudE5vZGU6ZCx2KSxqPW4uZXhwcj9tLmZpbHRlcihuLmV4cHIsbi5zZXQpOm4uc2V0LHcubGVuZ3RoPjA/az1zKGopOnU9ITE7d2hpbGUody5sZW5ndGgpcT13LnBvcCgpLHI9cSxvLnJlbGF0aXZlW3FdP3I9dy5wb3AoKTpxPSIiLHI9PW51bGwmJihyPWQpLG8ucmVsYXRpdmVbcV0oayxyLHYpfWVsc2Ugaz13PVtdfWt8fChrPWopLGt8fG0uZXJyb3IocXx8Yik7aWYoZy5jYWxsKGspPT09IltvYmplY3QgQXJyYXldIilpZighdSllLnB1c2guYXBwbHkoZSxrKTtlbHNlIGlmKGQmJmQubm9kZVR5cGU9PT0xKWZvcih0PTA7a1t0XSE9bnVsbDt0Kyspa1t0XSYmKGtbdF09PT0hMHx8a1t0XS5ub2RlVHlwZT09PTEmJm0uY29udGFpbnMoZCxrW3RdKSkmJmUucHVzaChqW3RdKTtlbHNlIGZvcih0PTA7a1t0XSE9bnVsbDt0Kyspa1t0XSYma1t0XS5ub2RlVHlwZT09PTEmJmUucHVzaChqW3RdKTtlbHNlIHMoayxlKTtsJiYobShsLGgsZSxmKSxtLnVuaXF1ZVNvcnQoZSkpO3JldHVybiBlfTttLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7aWYodSl7aD1pLGEuc29ydCh1KTtpZihoKWZvcih2YXIgYj0xO2I8YS5sZW5ndGg7YisrKWFbYl09PT1hW2ItMV0mJmEuc3BsaWNlKGItLSwxKX1yZXR1cm4gYX0sbS5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG0oYSxudWxsLG51bGwsYil9LG0ubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG0oYixudWxsLG51bGwsW2FdKS5sZW5ndGg+MH0sbS5maW5kPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7aWYoIWEpcmV0dXJuW107Zm9yKGU9MCxmPW8ub3JkZXIubGVuZ3RoO2U8ZjtlKyspe2g9by5vcmRlcltlXTtpZihnPW8ubGVmdE1hdGNoW2hdLmV4ZWMoYSkpe2k9Z1sxXSxnLnNwbGljZSgxLDEpO2lmKGkuc3Vic3RyKGkubGVuZ3RoLTEpIT09IlxcIil7Z1sxXT0oZ1sxXXx8IiIpLnJlcGxhY2UoaiwiIiksZD1vLmZpbmRbaF0oZyxiLGMpO2lmKGQhPW51bGwpe2E9YS5yZXBsYWNlKG8ubWF0Y2hbaF0sIiIpO2JyZWFrfX19fWR8fChkPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIj9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6W10pO3JldHVybntzZXQ6ZCxleHByOmF9fSxtLmZpbHRlcj1mdW5jdGlvbihhLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxuLHAscT1hLHI9W10scz1jLHQ9YyYmY1swXSYmbS5pc1hNTChjWzBdKTt3aGlsZShhJiZjLmxlbmd0aCl7Zm9yKGggaW4gby5maWx0ZXIpaWYoKGY9by5sZWZ0TWF0Y2hbaF0uZXhlYyhhKSkhPW51bGwmJmZbMl0pe2s9by5maWx0ZXJbaF0sbD1mWzFdLGc9ITEsZi5zcGxpY2UoMSwxKTtpZihsLnN1YnN0cihsLmxlbmd0aC0xKT09PSJcXCIpY29udGludWU7cz09PXImJihyPVtdKTtpZihvLnByZUZpbHRlcltoXSl7Zj1vLnByZUZpbHRlcltoXShmLHMsZCxyLGUsdCk7aWYoIWYpZz1pPSEwO2Vsc2UgaWYoZj09PSEwKWNvbnRpbnVlfWlmKGYpZm9yKG49MDsoaj1zW25dKSE9bnVsbDtuKyspaiYmKGk9ayhqLGYsbixzKSxwPWVeaSxkJiZpIT1udWxsP3A/Zz0hMDpzW25dPSExOnAmJihyLnB1c2goaiksZz0hMCkpO2lmKGkhPT1iKXtkfHwocz1yKSxhPWEucmVwbGFjZShvLm1hdGNoW2hdLCIiKTtpZighZylyZXR1cm5bXTticmVha319aWYoYT09PXEpaWYoZz09bnVsbCltLmVycm9yKGEpO2Vsc2UgYnJlYWs7cT1hfXJldHVybiBzfSxtLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIithKX07dmFyIG49bS5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1hLm5vZGVUeXBlLGU9IiI7aWYoZCl7aWYoZD09PTF8fGQ9PT05KXtpZih0eXBlb2YgYS50ZXh0Q29udGVudD09InN0cmluZyIpcmV0dXJuIGEudGV4dENvbnRlbnQ7aWYodHlwZW9mIGEuaW5uZXJUZXh0PT0ic3RyaW5nIilyZXR1cm4gYS5pbm5lclRleHQucmVwbGFjZShrLCIiKTtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpZSs9bihhKX1lbHNlIGlmKGQ9PT0zfHxkPT09NClyZXR1cm4gYS5ub2RlVmFsdWV9ZWxzZSBmb3IoYj0wO2M9YVtiXTtiKyspYy5ub2RlVHlwZSE9PTgmJihlKz1uKGMpKTtyZXR1cm4gZX0sbz1tLnNlbGVjdG9ycz17b3JkZXI6WyJJRCIsIk5BTUUiLCJUQUciXSxtYXRjaDp7SUQ6LyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLENMQVNTOi9cLigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sTkFNRTovXFtuYW1lPVsnIl0qKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspWyciXSpcXS8sQVRUUjovXFtccyooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylccyooPzooXFM/PSlccyooPzooWyciXSkoLio/KVwzfCgjPyg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSopfCl8KVxzKlxdLyxUQUc6L14oKD86W1x3XHUwMGMwLVx1RkZGRlwqXC1dfFxcLikrKS8sQ0hJTEQ6Lzoob25seXxudGh8bGFzdHxmaXJzdCktY2hpbGQoPzpcKFxzKihldmVufG9kZHwoPzpbK1wtXT9cZCt8KD86WytcLV0/XGQqKT9uXHMqKD86WytcLV1ccypcZCspPykpXHMqXCkpPy8sUE9TOi86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W15cLV18JCkvLFBTRVVETzovOigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKSg/OlwoKFsnIl0/KSgoPzpcKFteXCldK1wpfFteXChcKV0qKSspXDJcKSk/L30sbGVmdE1hdGNoOnt9LGF0dHJNYXA6eyJjbGFzcyI6ImNsYXNzTmFtZSIsImZvciI6Imh0bWxGb3IifSxhdHRySGFuZGxlOntocmVmOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgidHlwZSIpfX0scmVsYXRpdmU6eyIrIjpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBiPT0ic3RyaW5nIixkPWMmJiFsLnRlc3QoYiksZT1jJiYhZDtkJiYoYj1iLnRvTG93ZXJDYXNlKCkpO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGgsaDtmPGc7ZisrKWlmKGg9YVtmXSl7d2hpbGUoKGg9aC5wcmV2aW91c1NpYmxpbmcpJiZoLm5vZGVUeXBlIT09MSk7YVtmXT1lfHxoJiZoLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iP2h8fCExOmg9PT1ifWUmJm0uZmlsdGVyKGIsYSwhMCl9LCI+IjpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9dHlwZW9mIGI9PSJzdHJpbmciLGU9MCxmPWEubGVuZ3RoO2lmKGQmJiFsLnRlc3QoYikpe2I9Yi50b0xvd2VyQ2FzZSgpO2Zvcig7ZTxmO2UrKyl7Yz1hW2VdO2lmKGMpe3ZhciBnPWMucGFyZW50Tm9kZTthW2VdPWcubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWI/ZzohMX19fWVsc2V7Zm9yKDtlPGY7ZSsrKWM9YVtlXSxjJiYoYVtlXT1kP2MucGFyZW50Tm9kZTpjLnBhcmVudE5vZGU9PT1iKTtkJiZtLmZpbHRlcihiLGEsITApfX0sIiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9eDt0eXBlb2YgYj09InN0cmluZyImJiFsLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz13KSxnKCJwYXJlbnROb2RlIixiLGYsYSxkLGMpfSwifiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9eDt0eXBlb2YgYj09InN0cmluZyImJiFsLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz13KSxnKCJwcmV2aW91c1NpYmxpbmciLGIsZixhLGQsYyl9fSxmaW5kOntJRDpmdW5jdGlvbihhLGIsYyl7aWYodHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQhPSJ1bmRlZmluZWQiJiYhYyl7dmFyIGQ9Yi5nZXRFbGVtZW50QnlJZChhWzFdKTtyZXR1cm4gZCYmZC5wYXJlbnROb2RlP1tkXTpbXX19LE5BTUU6ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5TmFtZSE9InVuZGVmaW5lZCIpe3ZhciBjPVtdLGQ9Yi5nZXRFbGVtZW50c0J5TmFtZShhWzFdKTtmb3IodmFyIGU9MCxmPWQubGVuZ3RoO2U8ZjtlKyspZFtlXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKT09PWFbMV0mJmMucHVzaChkW2VdKTtyZXR1cm4gYy5sZW5ndGg9PT0wP251bGw6Y319LFRBRzpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIilyZXR1cm4gYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhWzFdKX19LHByZUZpbHRlcjp7Q0xBU1M6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2E9IiAiK2FbMV0ucmVwbGFjZShqLCIiKSsiICI7aWYoZilyZXR1cm4gYTtmb3IodmFyIGc9MCxoOyhoPWJbZ10pIT1udWxsO2crKyloJiYoZV4oaC5jbGFzc05hbWUmJigiICIraC5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKC9bXHRcblxyXS9nLCIgIikuaW5kZXhPZihhKT49MCk/Y3x8ZC5wdXNoKGgpOmMmJihiW2ddPSExKSk7cmV0dXJuITF9LElEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdLnJlcGxhY2UoaiwiIil9LFRBRzpmdW5jdGlvbihhLGIpe3JldHVybiBhWzFdLnJlcGxhY2UoaiwiIikudG9Mb3dlckNhc2UoKX0sQ0hJTEQ6ZnVuY3Rpb24oYSl7aWYoYVsxXT09PSJudGgiKXthWzJdfHxtLmVycm9yKGFbMF0pLGFbMl09YVsyXS5yZXBsYWNlKC9eXCt8XHMqL2csIiIpO3ZhciBiPS8oLT8pKFxkKikoPzpuKFsrXC1dP1xkKikpPy8uZXhlYyhhWzJdPT09ImV2ZW4iJiYiMm4ifHxhWzJdPT09Im9kZCImJiIybisxInx8IS9cRC8udGVzdChhWzJdKSYmIjBuKyIrYVsyXXx8YVsyXSk7YVsyXT1iWzFdKyhiWzJdfHwxKS0wLGFbM109YlszXS0wfWVsc2UgYVsyXSYmbS5lcnJvcihhWzBdKTthWzBdPWUrKztyZXR1cm4gYX0sQVRUUjpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9YVsxXT1hWzFdLnJlcGxhY2UoaiwiIik7IWYmJm8uYXR0ck1hcFtnXSYmKGFbMV09by5hdHRyTWFwW2ddKSxhWzRdPShhWzRdfHxhWzVdfHwiIikucmVwbGFjZShqLCIiKSxhWzJdPT09In49IiYmKGFbNF09IiAiK2FbNF0rIiAiKTtyZXR1cm4gYX0sUFNFVURPOmZ1bmN0aW9uKGIsYyxkLGUsZil7aWYoYlsxXT09PSJub3QiKWlmKChhLmV4ZWMoYlszXSl8fCIiKS5sZW5ndGg+MXx8L15cdy8udGVzdChiWzNdKSliWzNdPW0oYlszXSxudWxsLG51bGwsYyk7ZWxzZXt2YXIgZz1tLmZpbHRlcihiWzNdLGMsZCwhMF5mKTtkfHxlLnB1c2guYXBwbHkoZSxnKTtyZXR1cm4hMX1lbHNlIGlmKG8ubWF0Y2guUE9TLnRlc3QoYlswXSl8fG8ubWF0Y2guQ0hJTEQudGVzdChiWzBdKSlyZXR1cm4hMDtyZXR1cm4gYn0sUE9TOmZ1bmN0aW9uKGEpe2EudW5zaGlmdCghMCk7cmV0dXJuIGF9fSxmaWx0ZXJzOntlbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITEmJmEudHlwZSE9PSJoaWRkZW4ifSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmNoZWNrZWQ9PT0hMH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7YS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtyZXR1cm4gYS5zZWxlY3RlZD09PSEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuISFhLmZpcnN0Q2hpbGR9LGVtcHR5OmZ1bmN0aW9uKGEpe3JldHVybiFhLmZpcnN0Q2hpbGR9LGhhczpmdW5jdGlvbihhLGIsYyl7cmV0dXJuISFtKGNbM10sYSkubGVuZ3RofSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuL2hcZC9pLnRlc3QoYS5ub2RlTmFtZSl9LHRleHQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSxjPWEudHlwZTtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInRleHQiPT09YyYmKGI9PT1jfHxiPT09bnVsbCl9LHJhZGlvOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYicmFkaW8iPT09YS50eXBlfSxjaGVja2JveDpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImNoZWNrYm94Ij09PWEudHlwZX0sZmlsZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImZpbGUiPT09YS50eXBlfSxwYXNzd29yZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInBhc3N3b3JkIj09PWEudHlwZX0sc3VibWl0OmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oYj09PSJpbnB1dCJ8fGI9PT0iYnV0dG9uIikmJiJzdWJtaXQiPT09YS50eXBlfSxpbWFnZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImltYWdlIj09PWEudHlwZX0scmVzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihiPT09ImlucHV0Inx8Yj09PSJidXR0b24iKSYmInJlc2V0Ij09PWEudHlwZX0sYnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gYj09PSJpbnB1dCImJiJidXR0b24iPT09YS50eXBlfHxiPT09ImJ1dHRvbiJ9LGlucHV0OmZ1bmN0aW9uKGEpe3JldHVybi9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2kudGVzdChhLm5vZGVOYW1lKX0sZm9jdXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1hLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudH19LHNldEZpbHRlcnM6e2ZpcnN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0wfSxsYXN0OmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBiPT09ZC5sZW5ndGgtMX0sZXZlbjpmdW5jdGlvbihhLGIpe3JldHVybiBiJTI9PT0wfSxvZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYiUyPT09MX0sbHQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPGNbM10tMH0sZ3Q6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPmNbM10tMH0sbnRoOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gY1szXS0wPT09Yn0sZXE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjWzNdLTA9PT1ifX0sZmlsdGVyOntQU0VVRE86ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsxXSxmPW8uZmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpO2lmKGU9PT0iY29udGFpbnMiKXJldHVybihhLnRleHRDb250ZW50fHxhLmlubmVyVGV4dHx8bihbYV0pfHwiIikuaW5kZXhPZihiWzNdKT49MDtpZihlPT09Im5vdCIpe3ZhciBnPWJbM107Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKWlmKGdbaF09PT1hKXJldHVybiExO3JldHVybiEwfW0uZXJyb3IoZSl9LENISUxEOmZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGcsaCxpLGosaz1iWzFdLGw9YTtzd2l0Y2goayl7Y2FzZSJvbmx5IjpjYXNlImZpcnN0Ijp3aGlsZShsPWwucHJldmlvdXNTaWJsaW5nKWlmKGwubm9kZVR5cGU9PT0xKXJldHVybiExO2lmKGs9PT0iZmlyc3QiKXJldHVybiEwO2w9YTtjYXNlImxhc3QiOndoaWxlKGw9bC5uZXh0U2libGluZylpZihsLm5vZGVUeXBlPT09MSlyZXR1cm4hMTtyZXR1cm4hMDtjYXNlIm50aCI6Yz1iWzJdLGU9YlszXTtpZihjPT09MSYmZT09PTApcmV0dXJuITA7Zj1iWzBdLGc9YS5wYXJlbnROb2RlO2lmKGcmJihnW2RdIT09Znx8IWEubm9kZUluZGV4KSl7aT0wO2ZvcihsPWcuZmlyc3RDaGlsZDtsO2w9bC5uZXh0U2libGluZylsLm5vZGVUeXBlPT09MSYmKGwubm9kZUluZGV4PSsraSk7Z1tkXT1mfWo9YS5ub2RlSW5kZXgtZTtyZXR1cm4gYz09PTA/aj09PTA6aiVjPT09MCYmai9jPj0wfX0sSUQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlVHlwZT09PTEmJmEuZ2V0QXR0cmlidXRlKCJpZCIpPT09Yn0sVEFHOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0iKiImJmEubm9kZVR5cGU9PT0xfHwhIWEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWJ9LENMQVNTOmZ1bmN0aW9uKGEsYil7cmV0dXJuKCIgIisoYS5jbGFzc05hbWV8fGEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSsiICIpLmluZGV4T2YoYik+LTF9LEFUVFI6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iWzFdLGQ9bS5hdHRyP20uYXR0cihhLGMpOm8uYXR0ckhhbmRsZVtjXT9vLmF0dHJIYW5kbGVbY10oYSk6YVtjXSE9bnVsbD9hW2NdOmEuZ2V0QXR0cmlidXRlKGMpLGU9ZCsiIixmPWJbMl0sZz1iWzRdO3JldHVybiBkPT1udWxsP2Y9PT0iIT0iOiFmJiZtLmF0dHI/ZCE9bnVsbDpmPT09Ij0iP2U9PT1nOmY9PT0iKj0iP2UuaW5kZXhPZihnKT49MDpmPT09In49Ij8oIiAiK2UrIiAiKS5pbmRleE9mKGcpPj0wOmc/Zj09PSIhPSI/ZSE9PWc6Zj09PSJePSI/ZS5pbmRleE9mKGcpPT09MDpmPT09IiQ9Ij9lLnN1YnN0cihlLmxlbmd0aC1nLmxlbmd0aCk9PT1nOmY9PT0ifD0iP2U9PT1nfHxlLnN1YnN0cigwLGcubGVuZ3RoKzEpPT09ZysiLSI6ITE6ZSYmZCE9PSExfSxQT1M6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsyXSxmPW8uc2V0RmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpfX19LHA9by5tYXRjaC5QT1MscT1mdW5jdGlvbihhLGIpe3JldHVybiJcXCIrKGItMCsxKX07Zm9yKHZhciByIGluIG8ubWF0Y2gpby5tYXRjaFtyXT1uZXcgUmVnRXhwKG8ubWF0Y2hbcl0uc291cmNlKy8oPyFbXlxbXSpcXSkoPyFbXlwoXSpcKSkvLnNvdXJjZSksby5sZWZ0TWF0Y2hbcl09bmV3IFJlZ0V4cCgvKF4oPzoufFxyfFxuKSo/KS8uc291cmNlK28ubWF0Y2hbcl0uc291cmNlLnJlcGxhY2UoL1xcKFxkKykvZyxxKSk7dmFyIHM9ZnVuY3Rpb24oYSxiKXthPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEsMCk7aWYoYil7Yi5wdXNoLmFwcGx5KGIsYSk7cmV0dXJuIGJ9cmV0dXJuIGF9O3RyeXtBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLDApWzBdLm5vZGVUeXBlfWNhdGNoKHQpe3M9ZnVuY3Rpb24oYSxiKXt2YXIgYz0wLGQ9Ynx8W107aWYoZy5jYWxsKGEpPT09IltvYmplY3QgQXJyYXldIilBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShkLGEpO2Vsc2UgaWYodHlwZW9mIGEubGVuZ3RoPT0ibnVtYmVyIilmb3IodmFyIGU9YS5sZW5ndGg7YzxlO2MrKylkLnB1c2goYVtjXSk7ZWxzZSBmb3IoO2FbY107YysrKWQucHVzaChhW2NdKTtyZXR1cm4gZH19dmFyIHUsdjtjLmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj91PWZ1bmN0aW9uKGEsYil7aWYoYT09PWIpe2g9ITA7cmV0dXJuIDB9aWYoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb258fCFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uPy0xOjE7cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmND8tMToxfToodT1mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXtoPSEwO3JldHVybiAwfWlmKGEuc291cmNlSW5kZXgmJmIuc291cmNlSW5kZXgpcmV0dXJuIGEuc291cmNlSW5kZXgtYi5zb3VyY2VJbmRleDt2YXIgYyxkLGU9W10sZj1bXSxnPWEucGFyZW50Tm9kZSxpPWIucGFyZW50Tm9kZSxqPWc7aWYoZz09PWkpcmV0dXJuIHYoYSxiKTtpZighZylyZXR1cm4tMTtpZighaSlyZXR1cm4gMTt3aGlsZShqKWUudW5zaGlmdChqKSxqPWoucGFyZW50Tm9kZTtqPWk7d2hpbGUoailmLnVuc2hpZnQoaiksaj1qLnBhcmVudE5vZGU7Yz1lLmxlbmd0aCxkPWYubGVuZ3RoO2Zvcih2YXIgaz0wO2s8YyYmazxkO2srKylpZihlW2tdIT09ZltrXSlyZXR1cm4gdihlW2tdLGZba10pO3JldHVybiBrPT09Yz92KGEsZltrXSwtMSk6dihlW2tdLGIsMSl9LHY9ZnVuY3Rpb24oYSxiLGMpe2lmKGE9PT1iKXJldHVybiBjO3ZhciBkPWEubmV4dFNpYmxpbmc7d2hpbGUoZCl7aWYoZD09PWIpcmV0dXJuLTE7ZD1kLm5leHRTaWJsaW5nfXJldHVybiAxfSksZnVuY3Rpb24oKXt2YXIgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9InNjcmlwdCIrKG5ldyBEYXRlKS5nZXRUaW1lKCksZT1jLmRvY3VtZW50RWxlbWVudDthLmlubmVySFRNTD0iPGEgbmFtZT0nIitkKyInLz4iLGUuaW5zZXJ0QmVmb3JlKGEsZS5maXJzdENoaWxkKSxjLmdldEVsZW1lbnRCeUlkKGQpJiYoby5maW5kLklEPWZ1bmN0aW9uKGEsYyxkKXtpZih0eXBlb2YgYy5nZXRFbGVtZW50QnlJZCE9InVuZGVmaW5lZCImJiFkKXt2YXIgZT1jLmdldEVsZW1lbnRCeUlkKGFbMV0pO3JldHVybiBlP2UuaWQ9PT1hWzFdfHx0eXBlb2YgZS5nZXRBdHRyaWJ1dGVOb2RlIT0idW5kZWZpbmVkIiYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLm5vZGVWYWx1ZT09PWFbMV0/W2VdOmI6W119fSxvLmZpbHRlci5JRD1mdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhLmdldEF0dHJpYnV0ZU5vZGUhPSJ1bmRlZmluZWQiJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGEubm9kZVR5cGU9PT0xJiZjJiZjLm5vZGVWYWx1ZT09PWJ9KSxlLnJlbW92ZUNoaWxkKGEpLGU9YT1udWxsfSgpLGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmFwcGVuZENoaWxkKGMuY3JlYXRlQ29tbWVudCgiIikpLGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg+MCYmKG8uZmluZC5UQUc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGFbMV0pO2lmKGFbMV09PT0iKiIpe3ZhciBkPVtdO2Zvcih2YXIgZT0wO2NbZV07ZSsrKWNbZV0ubm9kZVR5cGU9PT0xJiZkLnB1c2goY1tlXSk7Yz1kfXJldHVybiBjfSksYS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLGEuZmlyc3RDaGlsZCYmdHlwZW9mIGEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUhPSJ1bmRlZmluZWQiJiZhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikhPT0iIyImJihvLmF0dHJIYW5kbGUuaHJlZj1mdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImhyZWYiLDIpfSksYT1udWxsfSgpLGMucXVlcnlTZWxlY3RvckFsbCYmZnVuY3Rpb24oKXt2YXIgYT1tLGI9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPSJfX3NpenpsZV9fIjtiLmlubmVySFRNTD0iPHAgY2xhc3M9J1RFU1QnPjwvcD4iO2lmKCFiLnF1ZXJ5U2VsZWN0b3JBbGx8fGIucXVlcnlTZWxlY3RvckFsbCgiLlRFU1QiKS5sZW5ndGghPT0wKXttPWZ1bmN0aW9uKGIsZSxmLGcpe2U9ZXx8YztpZighZyYmIW0uaXNYTUwoZSkpe3ZhciBoPS9eKFx3KyQpfF5cLihbXHdcLV0rJCl8XiMoW1x3XC1dKyQpLy5leGVjKGIpO2lmKGgmJihlLm5vZGVUeXBlPT09MXx8ZS5ub2RlVHlwZT09PTkpKXtpZihoWzFdKXJldHVybiBzKGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYiksZik7aWYoaFsyXSYmby5maW5kLkNMQVNTJiZlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIHMoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGhbMl0pLGYpfWlmKGUubm9kZVR5cGU9PT05KXtpZihiPT09ImJvZHkiJiZlLmJvZHkpcmV0dXJuIHMoW2UuYm9keV0sZik7aWYoaCYmaFszXSl7dmFyIGk9ZS5nZXRFbGVtZW50QnlJZChoWzNdKTtpZighaXx8IWkucGFyZW50Tm9kZSlyZXR1cm4gcyhbXSxmKTtpZihpLmlkPT09aFszXSlyZXR1cm4gcyhbaV0sZil9dHJ5e3JldHVybiBzKGUucXVlcnlTZWxlY3RvckFsbChiKSxmKX1jYXRjaChqKXt9fWVsc2UgaWYoZS5ub2RlVHlwZT09PTEmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJvYmplY3QiKXt2YXIgaz1lLGw9ZS5nZXRBdHRyaWJ1dGUoImlkIiksbj1sfHxkLHA9ZS5wYXJlbnROb2RlLHE9L15ccypbK35dLy50ZXN0KGIpO2w/bj1uLnJlcGxhY2UoLycvZywiXFwkJiIpOmUuc2V0QXR0cmlidXRlKCJpZCIsbikscSYmcCYmKGU9ZS5wYXJlbnROb2RlKTt0cnl7aWYoIXF8fHApcmV0dXJuIHMoZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWQ9JyIrbisiJ10gIitiKSxmKX1jYXRjaChyKXt9ZmluYWxseXtsfHxrLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBhKGIsZSxmLGcpfTtmb3IodmFyIGUgaW4gYSltW2VdPWFbZV07Yj1udWxsfX0oKSxmdW5jdGlvbigpe3ZhciBhPWMuZG9jdW1lbnRFbGVtZW50LGI9YS5tYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8YS5tc01hdGNoZXNTZWxlY3RvcjtpZihiKXt2YXIgZD0hYi5jYWxsKGMuY3JlYXRlRWxlbWVudCgiZGl2IiksImRpdiIpLGU9ITE7dHJ5e2IuY2FsbChjLmRvY3VtZW50RWxlbWVudCwiW3Rlc3QhPScnXTpzaXp6bGUiKX1jYXRjaChmKXtlPSEwfW0ubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYyl7Yz1jLnJlcGxhY2UoL1w9XHMqKFteJyJcXV0qKVxzKlxdL2csIj0nJDEnXSIpO2lmKCFtLmlzWE1MKGEpKXRyeXtpZihlfHwhby5tYXRjaC5QU0VVRE8udGVzdChjKSYmIS8hPS8udGVzdChjKSl7dmFyIGY9Yi5jYWxsKGEsYyk7aWYoZnx8IWR8fGEuZG9jdW1lbnQmJmEuZG9jdW1lbnQubm9kZVR5cGUhPT0xMSlyZXR1cm4gZn19Y2F0Y2goZyl7fXJldHVybiBtKGMsbnVsbCxudWxsLFthXSkubGVuZ3RoPjB9fX0oKSxmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J3Rlc3QgZSc+PC9kaXY+PGRpdiBjbGFzcz0ndGVzdCc+PC9kaXY+IjtpZighIWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoIT09MCl7YS5sYXN0Q2hpbGQuY2xhc3NOYW1lPSJlIjtpZihhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGg9PT0xKXJldHVybjtvLm9yZGVyLnNwbGljZSgxLDAsIkNMQVNTIiksby5maW5kLkNMQVNTPWZ1bmN0aW9uKGEsYixjKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIT0idW5kZWZpbmVkIiYmIWMpcmV0dXJuIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhWzFdKX0sYT1udWxsfX0oKSxjLmRvY3VtZW50RWxlbWVudC5jb250YWlucz9tLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEhPT1iJiYoYS5jb250YWlucz9hLmNvbnRhaW5zKGIpOiEwKX06Yy5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/bS5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiEhKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmMTYpfTptLmNvbnRhaW5zPWZ1bmN0aW9uKCl7cmV0dXJuITF9LG0uaXNYTUw9ZnVuY3Rpb24oYSl7dmFyIGI9KGE/YS5vd25lckRvY3VtZW50fHxhOjApLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj9iLm5vZGVOYW1lIT09IkhUTUwiOiExfTt2YXIgeT1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZT1bXSxmPSIiLGc9Yi5ub2RlVHlwZT9bYl06Yjt3aGlsZShkPW8ubWF0Y2guUFNFVURPLmV4ZWMoYSkpZis9ZFswXSxhPWEucmVwbGFjZShvLm1hdGNoLlBTRVVETywiIik7YT1vLnJlbGF0aXZlW2FdP2ErIioiOmE7Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKW0oYSxnW2hdLGUsYyk7cmV0dXJuIG0uZmlsdGVyKGYsZSl9O20uYXR0cj1mLmF0dHIsbS5zZWxlY3RvcnMuYXR0ck1hcD17fSxmLmZpbmQ9bSxmLmV4cHI9bS5zZWxlY3RvcnMsZi5leHByWyI6Il09Zi5leHByLmZpbHRlcnMsZi51bmlxdWU9bS51bmlxdWVTb3J0LGYudGV4dD1tLmdldFRleHQsZi5pc1hNTERvYz1tLmlzWE1MLGYuY29udGFpbnM9bS5jb250YWluc30oKTt2YXIgTD0vVW50aWwkLyxNPS9eKD86cGFyZW50c3xwcmV2VW50aWx8cHJldkFsbCkvLE49LywvLE89L14uW146I1xbXC4sXSokLyxQPUFycmF5LnByb3RvdHlwZS5zbGljZSxRPWYuZXhwci5tYXRjaC5QT1MsUj17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtmLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLGMsZDtpZih0eXBlb2YgYSE9InN0cmluZyIpcmV0dXJuIGYoYSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKGM9MCxkPWIubGVuZ3RoO2M8ZDtjKyspaWYoZi5jb250YWlucyhiW2NdLHRoaXMpKXJldHVybiEwfSk7dmFyIGU9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpLGcsaCxpO2ZvcihjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKXtnPWUubGVuZ3RoLGYuZmluZChhLHRoaXNbY10sZSk7aWYoYz4wKWZvcihoPWc7aDxlLmxlbmd0aDtoKyspZm9yKGk9MDtpPGc7aSsrKWlmKGVbaV09PT1lW2hdKXtlLnNwbGljZShoLS0sMSk7YnJlYWt9fXJldHVybiBlfSxoYXM6ZnVuY3Rpb24oYSl7dmFyIGI9ZihhKTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxjPWIubGVuZ3RoO2E8YzthKyspaWYoZi5jb250YWlucyh0aGlzLGJbYV0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soVCh0aGlzLGEsITEpLCJub3QiLGEpfSxmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFQodGhpcyxhLCEwKSwiZmlsdGVyIixhKX0saXM6ZnVuY3Rpb24oYSl7cmV0dXJuISFhJiYodHlwZW9mIGE9PSJzdHJpbmciP1EudGVzdChhKT9mKGEsdGhpcy5jb250ZXh0KS5pbmRleCh0aGlzWzBdKT49MDpmLmZpbHRlcihhLHRoaXMpLmxlbmd0aD4wOnRoaXMuZmlsdGVyKGEpLmxlbmd0aD4wKX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQsZSxnPXRoaXNbMF07aWYoZi5pc0FycmF5KGEpKXt2YXIgaD0xO3doaWxlKGcmJmcub3duZXJEb2N1bWVudCYmZyE9PWIpe2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspZihnKS5pcyhhW2RdKSYmYy5wdXNoKHtzZWxlY3RvcjphW2RdLGVsZW06ZyxsZXZlbDpofSk7Zz1nLnBhcmVudE5vZGUsaCsrfXJldHVybiBjfXZhciBpPVEudGVzdChhKXx8dHlwZW9mIGEhPSJzdHJpbmciP2YoYSxifHx0aGlzLmNvbnRleHQpOjA7Zm9yKGQ9MCxlPXRoaXMubGVuZ3RoO2Q8ZTtkKyspe2c9dGhpc1tkXTt3aGlsZShnKXtpZihpP2kuaW5kZXgoZyk+LTE6Zi5maW5kLm1hdGNoZXNTZWxlY3RvcihnLGEpKXtjLnB1c2goZyk7YnJlYWt9Zz1nLnBhcmVudE5vZGU7aWYoIWd8fCFnLm93bmVyRG9jdW1lbnR8fGc9PT1ifHxnLm5vZGVUeXBlPT09MTEpYnJlYWt9fWM9Yy5sZW5ndGg+MT9mLnVuaXF1ZShjKTpjO3JldHVybiB0aGlzLnB1c2hTdGFjayhjLCJjbG9zZXN0IixhKX0saW5kZXg6ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuIHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLnByZXZBbGwoKS5sZW5ndGg6LTE7aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBmLmluQXJyYXkodGhpc1swXSxmKGEpKTtyZXR1cm4gZi5pbkFycmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKX0sYWRkOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGE9PSJzdHJpbmciP2YoYSxiKTpmLm1ha2VBcnJheShhJiZhLm5vZGVUeXBlP1thXTphKSxkPWYubWVyZ2UodGhpcy5nZXQoKSxjKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUyhjWzBdKXx8UyhkWzBdKT9kOmYudW5pcXVlKGQpKX0sYW5kU2VsZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFkZCh0aGlzLnByZXZPYmplY3QpfX0pLGYuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmYi5ub2RlVHlwZSE9PTExP2I6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gZi5kaXIoYSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJwYXJlbnROb2RlIixjKX0sbmV4dDpmdW5jdGlvbihhKXtyZXR1cm4gZi5udGgoYSwyLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGEpe3JldHVybiBmLm50aChhLDIsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kaXIoYSwibmV4dFNpYmxpbmciLGMpfSxwcmV2VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJwcmV2aW91c1NpYmxpbmciLGMpfSxzaWJsaW5nczpmdW5jdGlvbihhKXtyZXR1cm4gZi5zaWJsaW5nKGEucGFyZW50Tm9kZS5maXJzdENoaWxkLGEpfSxjaGlsZHJlbjpmdW5jdGlvbihhKXtyZXR1cm4gZi5zaWJsaW5nKGEuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBmLm5vZGVOYW1lKGEsImlmcmFtZSIpP2EuY29udGVudERvY3VtZW50fHxhLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ6Zi5tYWtlQXJyYXkoYS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGEsYil7Zi5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPWYubWFwKHRoaXMsYixjKTtMLnRlc3QoYSl8fChkPWMpLGQmJnR5cGVvZiBkPT0ic3RyaW5nIiYmKGU9Zi5maWx0ZXIoZCxlKSksZT10aGlzLmxlbmd0aD4xJiYhUlthXT9mLnVuaXF1ZShlKTplLCh0aGlzLmxlbmd0aD4xfHxOLnRlc3QoZCkpJiZNLnRlc3QoYSkmJihlPWUucmV2ZXJzZSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZSxhLFAuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9fSksZi5leHRlbmQoe2ZpbHRlcjpmdW5jdGlvbihhLGIsYyl7YyYmKGE9Ijpub3QoIithKyIpIik7cmV0dXJuIGIubGVuZ3RoPT09MT9mLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGJbMF0sYSk/W2JbMF1dOltdOmYuZmluZC5tYXRjaGVzKGEsYil9LGRpcjpmdW5jdGlvbihhLGMsZCl7dmFyIGU9W10sZz1hW2NdO3doaWxlKGcmJmcubm9kZVR5cGUhPT05JiYoZD09PWJ8fGcubm9kZVR5cGUhPT0xfHwhZihnKS5pcyhkKSkpZy5ub2RlVHlwZT09PTEmJmUucHVzaChnKSxnPWdbY107cmV0dXJuIGV9LG50aDpmdW5jdGlvbihhLGIsYyxkKXtiPWJ8fDE7dmFyIGU9MDtmb3IoO2E7YT1hW2NdKWlmKGEubm9kZVR5cGU9PT0xJiYrK2U9PT1iKWJyZWFrO3JldHVybiBhfSxzaWJsaW5nOmZ1bmN0aW9uKGEsYil7dmFyIGM9W107Zm9yKDthO2E9YS5uZXh0U2libGluZylhLm5vZGVUeXBlPT09MSYmYSE9PWImJmMucHVzaChhKTtyZXR1cm4gY319KTt2YXIgVj0iYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGNhbnZhc3xkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2aWRlbyIsVz0vIGpRdWVyeVxkKz0iKD86XGQrfG51bGwpIi9nLFg9L15ccysvLFk9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9pZyxaPS88KFtcdzpdKykvLCQ9Lzx0Ym9keS9pLF89Lzx8JiM/XHcrOy8sYmE9LzwoPzpzY3JpcHR8c3R5bGUpL2ksYmI9LzwoPzpzY3JpcHR8b2JqZWN0fGVtYmVkfG9wdGlvbnxzdHlsZSkvaSxiYz1uZXcgUmVnRXhwKCI8KD86IitWKyIpIiwiaSIpLGJkPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGJlPS9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksYmY9L15ccyo8ISg/OlxbQ0RBVEFcW3xcLVwtKS8sYmc9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX0sYmg9VShjKTtiZy5vcHRncm91cD1iZy5vcHRpb24sYmcudGJvZHk9YmcudGZvb3Q9YmcuY29sZ3JvdXA9YmcuY2FwdGlvbj1iZy50aGVhZCxiZy50aD1iZy50ZCxmLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZXx8KGJnLl9kZWZhdWx0PVsxLCJkaXY8ZGl2PiIsIjwvZGl2PiJdKSxmLmZuLmV4dGVuZCh7dGV4dDpmdW5jdGlvbihhKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpO2MudGV4dChhLmNhbGwodGhpcyxiLGMudGV4dCgpKSl9KTtpZih0eXBlb2YgYSE9Im9iamVjdCImJmEhPT1iKXJldHVybiB0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGMpLmNyZWF0ZVRleHROb2RlKGEpKTtyZXR1cm4gZi50ZXh0KHRoaXMpfSx3cmFwQWxsOmZ1bmN0aW9uKGEpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2YodGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxiKSl9KTtpZih0aGlzWzBdKXt2YXIgYj1mKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCk7dGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJlZm9yZSh0aGlzWzBdKSxiLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXM7d2hpbGUoYS5maXJzdENoaWxkJiZhLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0xKWE9YS5maXJzdENoaWxkO3JldHVybiBhfSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsYikpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWYodGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7dmFyIGI9Zi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7Zih0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsYyk6YSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe2Yubm9kZU5hbWUodGhpcywiYm9keSIpfHxmKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9uKGEpe3RoaXMubm9kZVR5cGU9PT0xJiZ0aGlzLmFwcGVuZENoaWxkKGEpfSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuaW5zZXJ0QmVmb3JlKGEsdGhpcy5maXJzdENoaWxkKX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCExLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPWYuY2xlYW4oYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSx0aGlzLnRvQXJyYXkoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGEsImJlZm9yZSIsYXJndW1lbnRzKX19LGFmdGVyOmZ1bmN0aW9uKCl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMSxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KTtpZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgYT10aGlzLnB1c2hTdGFjayh0aGlzLCJhZnRlciIsYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSxmLmNsZWFuKGFyZ3VtZW50cykpO3JldHVybiBhfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZDsoZD10aGlzW2NdKSE9bnVsbDtjKyspaWYoIWF8fGYuZmlsdGVyKGEsW2RdKS5sZW5ndGgpIWImJmQubm9kZVR5cGU9PT0xJiYoZi5jbGVhbkRhdGEoZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKSxmLmNsZWFuRGF0YShbZF0pKSxkLnBhcmVudE5vZGUmJmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKQ0KCXtmb3IodmFyIGE9MCxiOyhiPXRoaXNbYV0pIT1udWxsO2ErKyl7Yi5ub2RlVHlwZT09PTEmJmYuY2xlYW5EYXRhKGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSk7d2hpbGUoYi5maXJzdENoaWxkKWIucmVtb3ZlQ2hpbGQoYi5maXJzdENoaWxkKX1yZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oYSxiKXthPWE9PW51bGw/ITE6YSxiPWI9PW51bGw/YTpiO3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBmLmNsb25lKHRoaXMsYSxiKX0pfSxodG1sOmZ1bmN0aW9uKGEpe2lmKGE9PT1iKXJldHVybiB0aGlzWzBdJiZ0aGlzWzBdLm5vZGVUeXBlPT09MT90aGlzWzBdLmlubmVySFRNTC5yZXBsYWNlKFcsIiIpOm51bGw7aWYodHlwZW9mIGE9PSJzdHJpbmciJiYhYmEudGVzdChhKSYmKGYuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZXx8IVgudGVzdChhKSkmJiFiZ1soWi5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1hLnJlcGxhY2UoWSwiPCQxPjwvJDI+Iik7dHJ5e2Zvcih2YXIgYz0wLGQ9dGhpcy5sZW5ndGg7YzxkO2MrKyl0aGlzW2NdLm5vZGVUeXBlPT09MSYmKGYuY2xlYW5EYXRhKHRoaXNbY10uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSksdGhpc1tjXS5pbm5lckhUTUw9YSl9Y2F0Y2goZSl7dGhpcy5lbXB0eSgpLmFwcGVuZChhKX19ZWxzZSBmLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyk7Yy5odG1sKGEuY2FsbCh0aGlzLGIsYy5odG1sKCkpKX0pOnRoaXMuZW1wdHkoKS5hcHBlbmQoYSk7cmV0dXJuIHRoaXN9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKGEpe2lmKHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9Zih0aGlzKSxkPWMuaHRtbCgpO2MucmVwbGFjZVdpdGgoYS5jYWxsKHRoaXMsYixkKSl9KTt0eXBlb2YgYSE9InN0cmluZyImJihhPWYoYSkuZGV0YWNoKCkpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj10aGlzLm5leHRTaWJsaW5nLGM9dGhpcy5wYXJlbnROb2RlO2YodGhpcykucmVtb3ZlKCksYj9mKGIpLmJlZm9yZShhKTpmKGMpLmFwcGVuZChhKX0pfXJldHVybiB0aGlzLmxlbmd0aD90aGlzLnB1c2hTdGFjayhmKGYuaXNGdW5jdGlvbihhKT9hKCk6YSksInJlcGxhY2VXaXRoIixhKTp0aGlzfSxkZXRhY2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucmVtb3ZlKGEsITApfSxkb21NYW5pcDpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZyxoLGksaj1hWzBdLGs9W107aWYoIWYuc3VwcG9ydC5jaGVja0Nsb25lJiZhcmd1bWVudHMubGVuZ3RoPT09MyYmdHlwZW9mIGo9PSJzdHJpbmciJiZiZC50ZXN0KGopKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmKHRoaXMpLmRvbU1hbmlwKGEsYyxkLCEwKX0pO2lmKGYuaXNGdW5jdGlvbihqKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBnPWYodGhpcyk7YVswXT1qLmNhbGwodGhpcyxlLGM/Zy5odG1sKCk6YiksZy5kb21NYW5pcChhLGMsZCl9KTtpZih0aGlzWzBdKXtpPWomJmoucGFyZW50Tm9kZSxmLnN1cHBvcnQucGFyZW50Tm9kZSYmaSYmaS5ub2RlVHlwZT09PTExJiZpLmNoaWxkTm9kZXMubGVuZ3RoPT09dGhpcy5sZW5ndGg/ZT17ZnJhZ21lbnQ6aX06ZT1mLmJ1aWxkRnJhZ21lbnQoYSx0aGlzLGspLGg9ZS5mcmFnbWVudCxoLmNoaWxkTm9kZXMubGVuZ3RoPT09MT9nPWg9aC5maXJzdENoaWxkOmc9aC5maXJzdENoaWxkO2lmKGcpe2M9YyYmZi5ub2RlTmFtZShnLCJ0ciIpO2Zvcih2YXIgbD0wLG09dGhpcy5sZW5ndGgsbj1tLTE7bDxtO2wrKylkLmNhbGwoYz9iaSh0aGlzW2xdLGcpOnRoaXNbbF0sZS5jYWNoZWFibGV8fG0+MSYmbDxuP2YuY2xvbmUoaCwhMCwhMCk6aCl9ay5sZW5ndGgmJmYuZWFjaChrLGJwKX1yZXR1cm4gdGhpc319KSxmLmJ1aWxkRnJhZ21lbnQ9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGcsaCxpLGo9YVswXTtiJiZiWzBdJiYoaT1iWzBdLm93bmVyRG9jdW1lbnR8fGJbMF0pLGkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudHx8KGk9YyksYS5sZW5ndGg9PT0xJiZ0eXBlb2Ygaj09InN0cmluZyImJmoubGVuZ3RoPDUxMiYmaT09PWMmJmouY2hhckF0KDApPT09IjwiJiYhYmIudGVzdChqKSYmKGYuc3VwcG9ydC5jaGVja0Nsb25lfHwhYmQudGVzdChqKSkmJihmLnN1cHBvcnQuaHRtbDVDbG9uZXx8IWJjLnRlc3QoaikpJiYoZz0hMCxoPWYuZnJhZ21lbnRzW2pdLGgmJmghPT0xJiYoZT1oKSksZXx8KGU9aS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZi5jbGVhbihhLGksZSxkKSksZyYmKGYuZnJhZ21lbnRzW2pdPWg/ZToxKTtyZXR1cm57ZnJhZ21lbnQ6ZSxjYWNoZWFibGU6Z319LGYuZnJhZ21lbnRzPXt9LGYuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGEsYil7Zi5mblthXT1mdW5jdGlvbihjKXt2YXIgZD1bXSxlPWYoYyksZz10aGlzLmxlbmd0aD09PTEmJnRoaXNbMF0ucGFyZW50Tm9kZTtpZihnJiZnLm5vZGVUeXBlPT09MTEmJmcuY2hpbGROb2Rlcy5sZW5ndGg9PT0xJiZlLmxlbmd0aD09PTEpe2VbYl0odGhpc1swXSk7cmV0dXJuIHRoaXN9Zm9yKHZhciBoPTAsaT1lLmxlbmd0aDtoPGk7aCsrKXt2YXIgaj0oaD4wP3RoaXMuY2xvbmUoITApOnRoaXMpLmdldCgpO2YoZVtoXSlbYl0oaiksZD1kLmNvbmNhdChqKX1yZXR1cm4gdGhpcy5wdXNoU3RhY2soZCxhLGUuc2VsZWN0b3IpfX0pLGYuZXh0ZW5kKHtjbG9uZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxnLGg9Zi5zdXBwb3J0Lmh0bWw1Q2xvbmV8fCFiYy50ZXN0KCI8IithLm5vZGVOYW1lKT9hLmNsb25lTm9kZSghMCk6Ym8oYSk7aWYoKCFmLnN1cHBvcnQubm9DbG9uZUV2ZW50fHwhZi5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSYmKGEubm9kZVR5cGU9PT0xfHxhLm5vZGVUeXBlPT09MTEpJiYhZi5pc1hNTERvYyhhKSl7YmsoYSxoKSxkPWJsKGEpLGU9YmwoaCk7Zm9yKGc9MDtkW2ddOysrZyllW2ddJiZiayhkW2ddLGVbZ10pfWlmKGIpe2JqKGEsaCk7aWYoYyl7ZD1ibChhKSxlPWJsKGgpO2ZvcihnPTA7ZFtnXTsrK2cpYmooZFtnXSxlW2ddKX19ZD1lPW51bGw7cmV0dXJuIGh9LGNsZWFuOmZ1bmN0aW9uKGEsYixkLGUpe3ZhciBnO2I9Ynx8Yyx0eXBlb2YgYi5jcmVhdGVFbGVtZW50PT0idW5kZWZpbmVkIiYmKGI9Yi5vd25lckRvY3VtZW50fHxiWzBdJiZiWzBdLm93bmVyRG9jdW1lbnR8fGMpO3ZhciBoPVtdLGk7Zm9yKHZhciBqPTAsazsoaz1hW2pdKSE9bnVsbDtqKyspe3R5cGVvZiBrPT0ibnVtYmVyIiYmKGsrPSIiKTtpZighayljb250aW51ZTtpZih0eXBlb2Ygaz09InN0cmluZyIpaWYoIV8udGVzdChrKSlrPWIuY3JlYXRlVGV4dE5vZGUoayk7ZWxzZXtrPWsucmVwbGFjZShZLCI8JDE+PC8kMj4iKTt2YXIgbD0oWi5leGVjKGspfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLG09YmdbbF18fGJnLl9kZWZhdWx0LG49bVswXSxvPWIuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yj09PWM/YmguYXBwZW5kQ2hpbGQobyk6VShiKS5hcHBlbmRDaGlsZChvKSxvLmlubmVySFRNTD1tWzFdK2srbVsyXTt3aGlsZShuLS0pbz1vLmxhc3RDaGlsZDtpZighZi5zdXBwb3J0LnRib2R5KXt2YXIgcD0kLnRlc3QoaykscT1sPT09InRhYmxlIiYmIXA/by5maXJzdENoaWxkJiZvLmZpcnN0Q2hpbGQuY2hpbGROb2RlczptWzFdPT09Ijx0YWJsZT4iJiYhcD9vLmNoaWxkTm9kZXM6W107Zm9yKGk9cS5sZW5ndGgtMTtpPj0wOy0taSlmLm5vZGVOYW1lKHFbaV0sInRib2R5IikmJiFxW2ldLmNoaWxkTm9kZXMubGVuZ3RoJiZxW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocVtpXSl9IWYuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSYmWC50ZXN0KGspJiZvLmluc2VydEJlZm9yZShiLmNyZWF0ZVRleHROb2RlKFguZXhlYyhrKVswXSksby5maXJzdENoaWxkKSxrPW8uY2hpbGROb2Rlc312YXIgcjtpZighZi5zdXBwb3J0LmFwcGVuZENoZWNrZWQpaWYoa1swXSYmdHlwZW9mIChyPWsubGVuZ3RoKT09Im51bWJlciIpZm9yKGk9MDtpPHI7aSsrKWJuKGtbaV0pO2Vsc2UgYm4oayk7ay5ub2RlVHlwZT9oLnB1c2goayk6aD1mLm1lcmdlKGgsayl9aWYoZCl7Zz1mdW5jdGlvbihhKXtyZXR1cm4hYS50eXBlfHxiZS50ZXN0KGEudHlwZSl9O2ZvcihqPTA7aFtqXTtqKyspaWYoZSYmZi5ub2RlTmFtZShoW2pdLCJzY3JpcHQiKSYmKCFoW2pdLnR5cGV8fGhbal0udHlwZS50b0xvd2VyQ2FzZSgpPT09InRleHQvamF2YXNjcmlwdCIpKWUucHVzaChoW2pdLnBhcmVudE5vZGU/aFtqXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGhbal0pOmhbal0pO2Vsc2V7aWYoaFtqXS5ub2RlVHlwZT09PTEpe3ZhciBzPWYuZ3JlcChoW2pdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxnKTtoLnNwbGljZS5hcHBseShoLFtqKzEsMF0uY29uY2F0KHMpKX1kLmFwcGVuZENoaWxkKGhbal0pfX1yZXR1cm4gaH0sY2xlYW5EYXRhOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1mLmNhY2hlLGU9Zi5ldmVudC5zcGVjaWFsLGc9Zi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG87Zm9yKHZhciBoPTAsaTsoaT1hW2hdKSE9bnVsbDtoKyspe2lmKGkubm9kZU5hbWUmJmYubm9EYXRhW2kubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pY29udGludWU7Yz1pW2YuZXhwYW5kb107aWYoYyl7Yj1kW2NdO2lmKGImJmIuZXZlbnRzKXtmb3IodmFyIGogaW4gYi5ldmVudHMpZVtqXT9mLmV2ZW50LnJlbW92ZShpLGopOmYucmVtb3ZlRXZlbnQoaSxqLGIuaGFuZGxlKTtiLmhhbmRsZSYmKGIuaGFuZGxlLmVsZW09bnVsbCl9Zz9kZWxldGUgaVtmLmV4cGFuZG9dOmkucmVtb3ZlQXR0cmlidXRlJiZpLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pLGRlbGV0ZSBkW2NdfX19fSk7dmFyIGJxPS9hbHBoYVwoW14pXSpcKS9pLGJyPS9vcGFjaXR5PShbXildKikvLGJzPS8oW0EtWl18Xm1zKS9nLGJ0PS9eLT9cZCsoPzpweCk/JC9pLGJ1PS9eLT9cZC8sYnY9L14oW1wtK10pPShbXC0rLlxkZV0rKS8sYnc9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LGJ4PVsiTGVmdCIsIlJpZ2h0Il0sYnk9WyJUb3AiLCJCb3R0b20iXSxieixiQSxiQjtmLmZuLmNzcz1mdW5jdGlvbihhLGMpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZjPT09YilyZXR1cm4gdGhpcztyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGMsITAsZnVuY3Rpb24oYSxjLGQpe3JldHVybiBkIT09Yj9mLnN0eWxlKGEsYyxkKTpmLmNzcyhhLGMpfSl9LGYuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9YnooYSwib3BhY2l0eSIsIm9wYWNpdHkiKTtyZXR1cm4gYz09PSIiPyIxIjpjfXJldHVybiBhLnN0eWxlLm9wYWNpdHl9fX0sY3NzTnVtYmVyOntmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6Zi5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGMsZCxlKXtpZighIWEmJmEubm9kZVR5cGUhPT0zJiZhLm5vZGVUeXBlIT09OCYmISFhLnN0eWxlKXt2YXIgZyxoLGk9Zi5jYW1lbENhc2UoYyksaj1hLnN0eWxlLGs9Zi5jc3NIb29rc1tpXTtjPWYuY3NzUHJvcHNbaV18fGk7aWYoZD09PWIpe2lmKGsmJiJnZXQiaW4gayYmKGc9ay5nZXQoYSwhMSxlKSkhPT1iKXJldHVybiBnO3JldHVybiBqW2NdfWg9dHlwZW9mIGQsaD09PSJzdHJpbmciJiYoZz1idi5leGVjKGQpKSYmKGQ9KyhnWzFdKzEpKitnWzJdK3BhcnNlRmxvYXQoZi5jc3MoYSxjKSksaD0ibnVtYmVyIik7aWYoZD09bnVsbHx8aD09PSJudW1iZXIiJiZpc05hTihkKSlyZXR1cm47aD09PSJudW1iZXIiJiYhZi5jc3NOdW1iZXJbaV0mJihkKz0icHgiKTtpZigha3x8ISgic2V0ImluIGspfHwoZD1rLnNldChhLGQpKSE9PWIpdHJ5e2pbY109ZH1jYXRjaChsKXt9fX0sY3NzOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxnO2M9Zi5jYW1lbENhc2UoYyksZz1mLmNzc0hvb2tzW2NdLGM9Zi5jc3NQcm9wc1tjXXx8YyxjPT09ImNzc0Zsb2F0IiYmKGM9ImZsb2F0Iik7aWYoZyYmImdldCJpbiBnJiYoZT1nLmdldChhLCEwLGQpKSE9PWIpcmV0dXJuIGU7aWYoYnopcmV0dXJuIGJ6KGEsYyl9LHN3YXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9O2Zvcih2YXIgZSBpbiBiKWRbZV09YS5zdHlsZVtlXSxhLnN0eWxlW2VdPWJbZV07Yy5jYWxsKGEpO2ZvcihlIGluIGIpYS5zdHlsZVtlXT1kW2VdfX0pLGYuY3VyQ1NTPWYuY3NzLGYuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oYSxiKXtmLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlO2lmKGMpe2lmKGEub2Zmc2V0V2lkdGghPT0wKXJldHVybiBiQyhhLGIsZCk7Zi5zd2FwKGEsYncsZnVuY3Rpb24oKXtlPWJDKGEsYixkKX0pO3JldHVybiBlfX0sc2V0OmZ1bmN0aW9uKGEsYil7aWYoIWJ0LnRlc3QoYikpcmV0dXJuIGI7Yj1wYXJzZUZsb2F0KGIpO2lmKGI+PTApcmV0dXJuIGIrInB4In19fSksZi5zdXBwb3J0Lm9wYWNpdHl8fChmLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBici50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/cGFyc2VGbG9hdChSZWdFeHAuJDEpLzEwMCsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZSxkPWEuY3VycmVudFN0eWxlLGU9Zi5pc051bWVyaWMoYik/ImFscGhhKG9wYWNpdHk9IitiKjEwMCsiKSI6IiIsZz1kJiZkLmZpbHRlcnx8Yy5maWx0ZXJ8fCIiO2Muem9vbT0xO2lmKGI+PTEmJmYudHJpbShnLnJlcGxhY2UoYnEsIiIpKT09PSIiKXtjLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIik7aWYoZCYmIWQuZmlsdGVyKXJldHVybn1jLmZpbHRlcj1icS50ZXN0KGcpP2cucmVwbGFjZShicSxlKTpnKyIgIitlfX0pLGYoZnVuY3Rpb24oKXtmLnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodHx8KGYuY3NzSG9va3MubWFyZ2luUmlnaHQ9e2dldDpmdW5jdGlvbihhLGIpe3ZhciBjO2Yuc3dhcChhLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSxmdW5jdGlvbigpe2I/Yz1ieihhLCJtYXJnaW4tcmlnaHQiLCJtYXJnaW5SaWdodCIpOmM9YS5zdHlsZS5tYXJnaW5SaWdodH0pO3JldHVybiBjfX0pfSksYy5kZWZhdWx0VmlldyYmYy5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYoYkE9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU7Yj1iLnJlcGxhY2UoYnMsIi0kMSIpLnRvTG93ZXJDYXNlKCksKGQ9YS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSYmKGU9ZC5nZXRDb21wdXRlZFN0eWxlKGEsbnVsbCkpJiYoYz1lLmdldFByb3BlcnR5VmFsdWUoYiksYz09PSIiJiYhZi5jb250YWlucyhhLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGEpJiYoYz1mLnN0eWxlKGEsYikpKTtyZXR1cm4gY30pLGMuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSYmKGJCPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9YS5jdXJyZW50U3R5bGUmJmEuY3VycmVudFN0eWxlW2JdLGc9YS5zdHlsZTtmPT09bnVsbCYmZyYmKGU9Z1tiXSkmJihmPWUpLCFidC50ZXN0KGYpJiZidS50ZXN0KGYpJiYoYz1nLmxlZnQsZD1hLnJ1bnRpbWVTdHlsZSYmYS5ydW50aW1lU3R5bGUubGVmdCxkJiYoYS5ydW50aW1lU3R5bGUubGVmdD1hLmN1cnJlbnRTdHlsZS5sZWZ0KSxnLmxlZnQ9Yj09PSJmb250U2l6ZSI/IjFlbSI6Znx8MCxmPWcucGl4ZWxMZWZ0KyJweCIsZy5sZWZ0PWMsZCYmKGEucnVudGltZVN0eWxlLmxlZnQ9ZCkpO3JldHVybiBmPT09IiI/ImF1dG8iOmZ9KSxiej1iQXx8YkIsZi5leHByJiZmLmV4cHIuZmlsdGVycyYmKGYuZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihhKXt2YXIgYj1hLm9mZnNldFdpZHRoLGM9YS5vZmZzZXRIZWlnaHQ7cmV0dXJuIGI9PT0wJiZjPT09MHx8IWYuc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMmJihhLnN0eWxlJiZhLnN0eWxlLmRpc3BsYXl8fGYuY3NzKGEsImRpc3BsYXkiKSk9PT0ibm9uZSJ9LGYuZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oYSl7cmV0dXJuIWYuZXhwci5maWx0ZXJzLmhpZGRlbihhKX0pO3ZhciBiRD0vJTIwL2csYkU9L1xbXF0kLyxiRj0vXHI/XG4vZyxiRz0vIy4qJC8sYkg9L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZyxiST0vXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZGF0ZXRpbWUtbG9jYWx8ZW1haWx8aGlkZGVufG1vbnRofG51bWJlcnxwYXNzd29yZHxyYW5nZXxzZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8d2VlaykkL2ksYko9L14oPzphYm91dHxhcHB8YXBwXC1zdG9yYWdlfC4rXC1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxiSz0vXig/OkdFVHxIRUFEKSQvLGJMPS9eXC9cLy8sYk09L1w/LyxiTj0vPHNjcmlwdFxiW148XSooPzooPyE8XC9zY3JpcHQ+KTxbXjxdKikqPFwvc2NyaXB0Pi9naSxiTz0vXig/OnNlbGVjdHx0ZXh0YXJlYSkvaSxiUD0vXHMrLyxiUT0vKFs/Jl0pXz1bXiZdKi8sYlI9L14oW1x3XCtcLlwtXSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKSk/KT8vLGJTPWYuZm4ubG9hZCxiVD17fSxiVT17fSxiVixiVyxiWD1bIiovIl0rWyIqIl07dHJ5e2JWPWUuaHJlZn1jYXRjaChiWSl7YlY9Yy5jcmVhdGVFbGVtZW50KCJhIiksYlYuaHJlZj0iIixiVj1iVi5ocmVmfWJXPWJSLmV4ZWMoYlYudG9Mb3dlckNhc2UoKSl8fFtdLGYuZm4uZXh0ZW5kKHtsb2FkOmZ1bmN0aW9uKGEsYyxkKXtpZih0eXBlb2YgYSE9InN0cmluZyImJmJTKXJldHVybiBiUy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoIXRoaXMubGVuZ3RoKXJldHVybiB0aGlzO3ZhciBlPWEuaW5kZXhPZigiICIpO2lmKGU+PTApe3ZhciBnPWEuc2xpY2UoZSxhLmxlbmd0aCk7YT1hLnNsaWNlKDAsZSl9dmFyIGg9IkdFVCI7YyYmKGYuaXNGdW5jdGlvbihjKT8oZD1jLGM9Yik6dHlwZW9mIGM9PSJvYmplY3QiJiYoYz1mLnBhcmFtKGMsZi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLGg9IlBPU1QiKSk7dmFyIGk9dGhpcztmLmFqYXgoe3VybDphLHR5cGU6aCxkYXRhVHlwZToiaHRtbCIsZGF0YTpjLGNvbXBsZXRlOmZ1bmN0aW9uKGEsYixjKXtjPWEucmVzcG9uc2VUZXh0LGEuaXNSZXNvbHZlZCgpJiYoYS5kb25lKGZ1bmN0aW9uKGEpe2M9YX0pLGkuaHRtbChnP2YoIjxkaXY+IikuYXBwZW5kKGMucmVwbGFjZShiTiwiIikpLmZpbmQoZyk6YykpLGQmJmkuZWFjaChkLFtjLGIsYV0pfX0pO3JldHVybiB0aGlzfSxzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gZi5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnRzP2YubWFrZUFycmF5KHRoaXMuZWxlbWVudHMpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lJiYhdGhpcy5kaXNhYmxlZCYmKHRoaXMuY2hlY2tlZHx8Yk8udGVzdCh0aGlzLm5vZGVOYW1lKXx8YkkudGVzdCh0aGlzLnR5cGUpKX0pLm1hcChmdW5jdGlvbihhLGIpe3ZhciBjPWYodGhpcykudmFsKCk7cmV0dXJuIGM9PW51bGw/bnVsbDpmLmlzQXJyYXkoYyk/Zi5tYXAoYyxmdW5jdGlvbihhLGMpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxhY2UoYkYsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKGJGLCJcclxuIil9fSkuZ2V0KCl9fSksZi5lYWNoKCJhamF4U3RhcnQgYWpheFN0b3AgYWpheENvbXBsZXRlIGFqYXhFcnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2YuZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub24oYixhKX19KSxmLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxjKXtmW2NdPWZ1bmN0aW9uKGEsZCxlLGcpe2YuaXNGdW5jdGlvbihkKSYmKGc9Z3x8ZSxlPWQsZD1iKTtyZXR1cm4gZi5hamF4KHt0eXBlOmMsdXJsOmEsZGF0YTpkLHN1Y2Nlc3M6ZSxkYXRhVHlwZTpnfSl9fSksZi5leHRlbmQoe2dldFNjcmlwdDpmdW5jdGlvbihhLGMpe3JldHVybiBmLmdldChhLGIsYywic2NyaXB0Iil9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmdldChhLGIsYywianNvbiIpfSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtiP2JfKGEsZi5hamF4U2V0dGluZ3MpOihiPWEsYT1mLmFqYXhTZXR0aW5ncyksYl8oYSxiKTtyZXR1cm4gYX0sYWpheFNldHRpbmdzOnt1cmw6YlYsaXNMb2NhbDpiSi50ZXN0KGJXWzFdKSxnbG9iYWw6ITAsdHlwZToiR0VUIixjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixwcm9jZXNzRGF0YTohMCxhc3luYzohMCxhY2NlcHRzOnt4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6InRleHQvaHRtbCIsdGV4dDoidGV4dC9wbGFpbiIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwiKiI6Ylh9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjphLlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpmLnBhcnNlSlNPTiwidGV4dCB4bWwiOmYucGFyc2VYTUx9LGZsYXRPcHRpb25zOntjb250ZXh0OiEwLHVybDohMH19LGFqYXhQcmVmaWx0ZXI6YlooYlQpLGFqYXhUcmFuc3BvcnQ6YlooYlUpLGFqYXg6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiB3KGEsYyxsLG0pe2lmKHMhPT0yKXtzPTIscSYmY2xlYXJUaW1lb3V0KHEpLHA9YixuPW18fCIiLHYucmVhZHlTdGF0ZT1hPjA/NDowO3ZhciBvLHIsdSx3PWMseD1sP2NiKGQsdixsKTpiLHksejtpZihhPj0yMDAmJmE8MzAwfHxhPT09MzA0KXtpZihkLmlmTW9kaWZpZWQpe2lmKHk9di5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpKWYubGFzdE1vZGlmaWVkW2tdPXk7aWYoej12LmdldFJlc3BvbnNlSGVhZGVyKCJFdGFnIikpZi5ldGFnW2tdPXp9aWYoYT09PTMwNCl3PSJub3Rtb2RpZmllZCIsbz0hMDtlbHNlIHRyeXtyPWNjKGQseCksdz0ic3VjY2VzcyIsbz0hMH1jYXRjaChBKXt3PSJwYXJzZXJlcnJvciIsdT1BfX1lbHNle3U9dztpZighd3x8YSl3PSJlcnJvciIsYTwwJiYoYT0wKX12LnN0YXR1cz1hLHYuc3RhdHVzVGV4dD0iIisoY3x8dyksbz9oLnJlc29sdmVXaXRoKGUsW3Isdyx2XSk6aC5yZWplY3RXaXRoKGUsW3Ysdyx1XSksdi5zdGF0dXNDb2RlKGopLGo9Yix0JiZnLnRyaWdnZXIoImFqYXgiKyhvPyJTdWNjZXNzIjoiRXJyb3IiKSxbdixkLG8/cjp1XSksaS5maXJlV2l0aChlLFt2LHddKSx0JiYoZy50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt2LGRdKSwtLWYuYWN0aXZlfHxmLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpfX10eXBlb2YgYT09Im9iamVjdCImJihjPWEsYT1iKSxjPWN8fHt9O3ZhciBkPWYuYWpheFNldHVwKHt9LGMpLGU9ZC5jb250ZXh0fHxkLGc9ZSE9PWQmJihlLm5vZGVUeXBlfHxlIGluc3RhbmNlb2YgZik/ZihlKTpmLmV2ZW50LGg9Zi5EZWZlcnJlZCgpLGk9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iiksaj1kLnN0YXR1c0NvZGV8fHt9LGssbD17fSxtPXt9LG4sbyxwLHEscixzPTAsdCx1LHY9e3JlYWR5U3RhdGU6MCxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7aWYoIXMpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTthPW1bY109bVtjXXx8YSxsW2FdPWJ9cmV0dXJuIHRoaXN9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiBzPT09Mj9uOm51bGx9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBjO2lmKHM9PT0yKXtpZighbyl7bz17fTt3aGlsZShjPWJILmV4ZWMobikpb1tjWzFdLnRvTG93ZXJDYXNlKCldPWNbMl19Yz1vW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIGM9PT1iP251bGw6Y30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtzfHwoZC5taW1lVHlwZT1hKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7YT1hfHwiYWJvcnQiLHAmJnAuYWJvcnQoYSksdygwLGEpO3JldHVybiB0aGlzfX07aC5wcm9taXNlKHYpLHYuc3VjY2Vzcz12LmRvbmUsdi5lcnJvcj12LmZhaWwsdi5jb21wbGV0ZT1pLmFkZCx2LnN0YXR1c0NvZGU9ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI7aWYoczwyKWZvcihiIGluIGEpaltiXT1baltiXSxhW2JdXTtlbHNlIGI9YVt2LnN0YXR1c10sdi50aGVuKGIsYil9cmV0dXJuIHRoaXN9LGQudXJsPSgoYXx8ZC51cmwpKyIiKS5yZXBsYWNlKGJHLCIiKS5yZXBsYWNlKGJMLGJXWzFdKyIvLyIpLGQuZGF0YVR5cGVzPWYudHJpbShkLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkuc3BsaXQoYlApLGQuY3Jvc3NEb21haW49PW51bGwmJihyPWJSLmV4ZWMoZC51cmwudG9Mb3dlckNhc2UoKSksZC5jcm9zc0RvbWFpbj0hKCFyfHxyWzFdPT1iV1sxXSYmclsyXT09YldbMl0mJihyWzNdfHwoclsxXT09PSJodHRwOiI/ODA6NDQzKSk9PShiV1szXXx8KGJXWzFdPT09Imh0dHA6Ij84MDo0NDMpKSkpLGQuZGF0YSYmZC5wcm9jZXNzRGF0YSYmdHlwZW9mIGQuZGF0YSE9InN0cmluZyImJihkLmRhdGE9Zi5wYXJhbShkLmRhdGEsZC50cmFkaXRpb25hbCkpLGIkKGJULGQsYyx2KTtpZihzPT09MilyZXR1cm4hMTt0PWQuZ2xvYmFsLGQudHlwZT1kLnR5cGUudG9VcHBlckNhc2UoKSxkLmhhc0NvbnRlbnQ9IWJLLnRlc3QoZC50eXBlKSx0JiZmLmFjdGl2ZSsrPT09MCYmZi5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtpZighZC5oYXNDb250ZW50KXtkLmRhdGEmJihkLnVybCs9KGJNLnRlc3QoZC51cmwpPyImIjoiPyIpK2QuZGF0YSxkZWxldGUgZC5kYXRhKSxrPWQudXJsO2lmKGQuY2FjaGU9PT0hMSl7dmFyIHg9Zi5ub3coKSx5PWQudXJsLnJlcGxhY2UoYlEsIiQxXz0iK3gpO2QudXJsPXkrKHk9PT1kLnVybD8oYk0udGVzdChkLnVybCk/IiYiOiI/IikrIl89Iit4OiIiKX19KGQuZGF0YSYmZC5oYXNDb250ZW50JiZkLmNvbnRlbnRUeXBlIT09ITF8fGMuY29udGVudFR5cGUpJiZ2LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZC5jb250ZW50VHlwZSksZC5pZk1vZGlmaWVkJiYoaz1rfHxkLnVybCxmLmxhc3RNb2RpZmllZFtrXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsZi5sYXN0TW9kaWZpZWRba10pLGYuZXRhZ1trXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixmLmV0YWdba10pKSx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsZC5kYXRhVHlwZXNbMF0mJmQuYWNjZXB0c1tkLmRhdGFUeXBlc1swXV0/ZC5hY2NlcHRzW2QuZGF0YVR5cGVzWzBdXSsoZC5kYXRhVHlwZXNbMF0hPT0iKiI/IiwgIitiWCsiOyBxPTAuMDEiOiIiKTpkLmFjY2VwdHNbIioiXSk7Zm9yKHUgaW4gZC5oZWFkZXJzKXYuc2V0UmVxdWVzdEhlYWRlcih1LGQuaGVhZGVyc1t1XSk7aWYoZC5iZWZvcmVTZW5kJiYoZC5iZWZvcmVTZW5kLmNhbGwoZSx2LGQpPT09ITF8fHM9PT0yKSl7di5hYm9ydCgpO3JldHVybiExfWZvcih1IGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbdV0oZFt1XSk7cD1iJChiVSxkLGMsdik7aWYoIXApdygtMSwiTm8gVHJhbnNwb3J0Iik7ZWxzZXt2LnJlYWR5U3RhdGU9MSx0JiZnLnRyaWdnZXIoImFqYXhTZW5kIixbdixkXSksZC5hc3luYyYmZC50aW1lb3V0PjAmJihxPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2LmFib3J0KCJ0aW1lb3V0Iil9LGQudGltZW91dCkpO3RyeXtzPTEscC5zZW5kKGwsdyl9Y2F0Y2goeil7aWYoczwyKXcoLTEseik7ZWxzZSB0aHJvdyB6fX1yZXR1cm4gdn0scGFyYW06ZnVuY3Rpb24oYSxjKXt2YXIgZD1bXSxlPWZ1bmN0aW9uKGEsYil7Yj1mLmlzRnVuY3Rpb24oYik/YigpOmIsZFtkLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYil9O2M9PT1iJiYoYz1mLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCk7aWYoZi5pc0FycmF5KGEpfHxhLmpxdWVyeSYmIWYuaXNQbGFpbk9iamVjdChhKSlmLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IodmFyIGcgaW4gYSljYShnLGFbZ10sYyxlKTtyZXR1cm4gZC5qb2luKCImIikucmVwbGFjZShiRCwiKyIpfX0pLGYuZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fX0pO3ZhciBjZD1mLm5vdygpLGNlPS8oXD0pXD8oJnwkKXxcP1w/L2k7Zi5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3JldHVybiBmLmV4cGFuZG8rIl8iK2NkKyt9fSksZi5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihiLGMsZCl7dmFyIGU9Yi5jb250ZW50VHlwZT09PSJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiJiZ0eXBlb2YgYi5kYXRhPT0ic3RyaW5nIjtpZihiLmRhdGFUeXBlc1swXT09PSJqc29ucCJ8fGIuanNvbnAhPT0hMSYmKGNlLnRlc3QoYi51cmwpfHxlJiZjZS50ZXN0KGIuZGF0YSkpKXt2YXIgZyxoPWIuanNvbnBDYWxsYmFjaz1mLmlzRnVuY3Rpb24oYi5qc29ucENhbGxiYWNrKT9iLmpzb25wQ2FsbGJhY2soKTpiLmpzb25wQ2FsbGJhY2ssaT1hW2hdLGo9Yi51cmwsaz1iLmRhdGEsbD0iJDEiK2grIiQyIjtiLmpzb25wIT09ITEmJihqPWoucmVwbGFjZShjZSxsKSxiLnVybD09PWomJihlJiYoaz1rLnJlcGxhY2UoY2UsbCkpLGIuZGF0YT09PWsmJihqKz0oL1w/Ly50ZXN0KGopPyImIjoiPyIpK2IuanNvbnArIj0iK2gpKSksYi51cmw9aixiLmRhdGE9ayxhW2hdPWZ1bmN0aW9uKGEpe2c9W2FdfSxkLmFsd2F5cyhmdW5jdGlvbigpe2FbaF09aSxnJiZmLmlzRnVuY3Rpb24oaSkmJmFbaF0oZ1swXSl9KSxiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtnfHxmLmVycm9yKGgrIiB3YXMgbm90IGNhbGxlZCIpO3JldHVybiBnWzBdfSxiLmRhdGFUeXBlc1swXT0ianNvbiI7cmV0dXJuInNjcmlwdCJ9fSksZi5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi9qYXZhc2NyaXB0fGVjbWFzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe2YuZ2xvYmFsRXZhbChhKTtyZXR1cm4gYX19fSksZi5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2EuY2FjaGU9PT1iJiYoYS5jYWNoZT0hMSksYS5jcm9zc0RvbWFpbiYmKGEudHlwZT0iR0VUIixhLmdsb2JhbD0hMSl9KSxmLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24oYSl7aWYoYS5jcm9zc0RvbWFpbil7dmFyIGQsZT1jLmhlYWR8fGMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8Yy5kb2N1bWVudEVsZW1lbnQ7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZixnKXtkPWMuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksZC5hc3luYz0iYXN5bmMiLGEuc2NyaXB0Q2hhcnNldCYmKGQuY2hhcnNldD1hLnNjcmlwdENoYXJzZXQpLGQuc3JjPWEudXJsLGQub25sb2FkPWQub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGEsYyl7aWYoY3x8IWQucmVhZHlTdGF0ZXx8L2xvYWRlZHxjb21wbGV0ZS8udGVzdChkLnJlYWR5U3RhdGUpKWQub25sb2FkPWQub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsZSYmZC5wYXJlbnROb2RlJiZlLnJlbW92ZUNoaWxkKGQpLGQ9YixjfHxnKDIwMCwic3VjY2VzcyIpfSxlLmluc2VydEJlZm9yZShkLGUuZmlyc3RDaGlsZCl9LGFib3J0OmZ1bmN0aW9uKCl7ZCYmZC5vbmxvYWQoMCwxKX19fX0pO3ZhciBjZj1hLkFjdGl2ZVhPYmplY3Q/ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gY2gpY2hbYV0oMCwxKX06ITEsY2c9MCxjaDtmLmFqYXhTZXR0aW5ncy54aHI9YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNMb2NhbCYmY2koKXx8Y2ooKX06Y2ksZnVuY3Rpb24oYSl7Zi5leHRlbmQoZi5zdXBwb3J0LHthamF4OiEhYSxjb3JzOiEhYSYmIndpdGhDcmVkZW50aWFscyJpbiBhfSl9KGYuYWpheFNldHRpbmdzLnhocigpKSxmLnN1cHBvcnQuYWpheCYmZi5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGMpe2lmKCFjLmNyb3NzRG9tYWlufHxmLnN1cHBvcnQuY29ycyl7dmFyIGQ7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSxnKXt2YXIgaD1jLnhocigpLGksajtjLnVzZXJuYW1lP2gub3BlbihjLnR5cGUsYy51cmwsYy5hc3luYyxjLnVzZXJuYW1lLGMucGFzc3dvcmQpOmgub3BlbihjLnR5cGUsYy51cmwsYy5hc3luYyk7aWYoYy54aHJGaWVsZHMpZm9yKGogaW4gYy54aHJGaWVsZHMpaFtqXT1jLnhockZpZWxkc1tqXTtjLm1pbWVUeXBlJiZoLm92ZXJyaWRlTWltZVR5cGUmJmgub3ZlcnJpZGVNaW1lVHlwZShjLm1pbWVUeXBlKSwhYy5jcm9zc0RvbWFpbiYmIWVbIlgtUmVxdWVzdGVkLVdpdGgiXSYmKGVbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTt0cnl7Zm9yKGogaW4gZSloLnNldFJlcXVlc3RIZWFkZXIoaixlW2pdKX1jYXRjaChrKXt9aC5zZW5kKGMuaGFzQ29udGVudCYmYy5kYXRhfHxudWxsKSxkPWZ1bmN0aW9uKGEsZSl7dmFyIGosayxsLG0sbjt0cnl7aWYoZCYmKGV8fGgucmVhZHlTdGF0ZT09PTQpKXtkPWIsaSYmKGgub25yZWFkeXN0YXRlY2hhbmdlPWYubm9vcCxjZiYmZGVsZXRlIGNoW2ldKTtpZihlKWgucmVhZHlTdGF0ZSE9PTQmJmguYWJvcnQoKTtlbHNle2o9aC5zdGF0dXMsbD1oLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLG09e30sbj1oLnJlc3BvbnNlWE1MLG4mJm4uZG9jdW1lbnRFbGVtZW50JiYobS54bWw9biksbS50ZXh0PWgucmVzcG9uc2VUZXh0O3RyeXtrPWguc3RhdHVzVGV4dH1jYXRjaChvKXtrPSIifSFqJiZjLmlzTG9jYWwmJiFjLmNyb3NzRG9tYWluP2o9bS50ZXh0PzIwMDo0MDQ6aj09PTEyMjMmJihqPTIwNCl9fX1jYXRjaChwKXtlfHxnKC0xLHApfW0mJmcoaixrLG0sbCl9LCFjLmFzeW5jfHxoLnJlYWR5U3RhdGU9PT00P2QoKTooaT0rK2NnLGNmJiYoY2h8fChjaD17fSxmKGEpLnVubG9hZChjZikpLGNoW2ldPWQpLGgub25yZWFkeXN0YXRlY2hhbmdlPWQpfSxhYm9ydDpmdW5jdGlvbigpe2QmJmQoMCwxKX19fX0pO3ZhciBjaz17fSxjbCxjbSxjbj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sY289L14oWytcLV09KT8oW1xkKy5cLV0rKShbYS16JV0qKSQvaSxjcCxjcT1bWyJoZWlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLFsid2lkdGgiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCJdLFsib3BhY2l0eSJdXSxjcjtmLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtpZihhfHxhPT09MClyZXR1cm4gdGhpcy5hbmltYXRlKGN1KCJzaG93IiwzKSxhLGIsYyk7Zm9yKHZhciBnPTAsaD10aGlzLmxlbmd0aDtnPGg7ZysrKWQ9dGhpc1tnXSxkLnN0eWxlJiYoZT1kLnN0eWxlLmRpc3BsYXksIWYuX2RhdGEoZCwib2xkZGlzcGxheSIpJiZlPT09Im5vbmUiJiYoZT1kLnN0eWxlLmRpc3BsYXk9IiIpLGU9PT0iIiYmZi5jc3MoZCwiZGlzcGxheSIpPT09Im5vbmUiJiZmLl9kYXRhKGQsIm9sZGRpc3BsYXkiLGN2KGQubm9kZU5hbWUpKSk7Zm9yKGc9MDtnPGg7ZysrKXtkPXRoaXNbZ107aWYoZC5zdHlsZSl7ZT1kLnN0eWxlLmRpc3BsYXk7aWYoZT09PSIifHxlPT09Im5vbmUiKWQuc3R5bGUuZGlzcGxheT1mLl9kYXRhKGQsIm9sZGRpc3BsYXkiKXx8IiJ9fXJldHVybiB0aGlzfSxoaWRlOmZ1bmN0aW9uKGEsYixjKXtpZihhfHxhPT09MClyZXR1cm4gdGhpcy5hbmltYXRlKGN1KCJoaWRlIiwzKSxhLGIsYyk7dmFyIGQsZSxnPTAsaD10aGlzLmxlbmd0aDtmb3IoO2c8aDtnKyspZD10aGlzW2ddLGQuc3R5bGUmJihlPWYuY3NzKGQsImRpc3BsYXkiKSxlIT09Im5vbmUiJiYhZi5fZGF0YShkLCJvbGRkaXNwbGF5IikmJmYuX2RhdGEoZCwib2xkZGlzcGxheSIsZSkpO2ZvcihnPTA7ZzxoO2crKyl0aGlzW2ddLnN0eWxlJiYodGhpc1tnXS5zdHlsZS5kaXNwbGF5PSJub25lIik7cmV0dXJuIHRoaXN9LF90b2dnbGU6Zi5mbi50b2dnbGUsdG9nZ2xlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10eXBlb2YgYT09ImJvb2xlYW4iO2YuaXNGdW5jdGlvbihhKSYmZi5pc0Z1bmN0aW9uKGIpP3RoaXMuX3RvZ2dsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YT09bnVsbHx8ZD90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1kP2E6Zih0aGlzKS5pcygiOmhpZGRlbiIpO2YodGhpcylbYj8ic2hvdyI6ImhpZGUiXSgpfSk6dGhpcy5hbmltYXRlKGN1KCJ0b2dnbGUiLDMpLGEsYixjKTtyZXR1cm4gdGhpc30sZmFkZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmZpbHRlcigiOmhpZGRlbiIpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6Yn0sYSxjLGQpfSxhbmltYXRlOmZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGcoKXtlLnF1ZXVlPT09ITEmJmYuX21hcmsodGhpcyk7dmFyIGI9Zi5leHRlbmQoe30sZSksYz10aGlzLm5vZGVUeXBlPT09MSxkPWMmJmYodGhpcykuaXMoIjpoaWRkZW4iKSxnLGgsaSxqLGssbCxtLG4sbztiLmFuaW1hdGVkUHJvcGVydGllcz17fTtmb3IoaSBpbiBhKXtnPWYuY2FtZWxDYXNlKGkpLGkhPT1nJiYoYVtnXT1hW2ldLGRlbGV0ZSBhW2ldKSxoPWFbZ10sZi5pc0FycmF5KGgpPyhiLmFuaW1hdGVkUHJvcGVydGllc1tnXT1oWzFdLGg9YVtnXT1oWzBdKTpiLmFuaW1hdGVkUHJvcGVydGllc1tnXT1iLnNwZWNpYWxFYXNpbmcmJmIuc3BlY2lhbEVhc2luZ1tnXXx8Yi5lYXNpbmd8fCJzd2luZyI7aWYoaD09PSJoaWRlIiYmZHx8aD09PSJzaG93IiYmIWQpcmV0dXJuIGIuY29tcGxldGUuY2FsbCh0aGlzKTtjJiYoZz09PSJoZWlnaHQifHxnPT09IndpZHRoIikmJihiLm92ZXJmbG93PVt0aGlzLnN0eWxlLm92ZXJmbG93LHRoaXMuc3R5bGUub3ZlcmZsb3dYLHRoaXMuc3R5bGUub3ZlcmZsb3dZXSxmLmNzcyh0aGlzLCJkaXNwbGF5Iik9PT0iaW5saW5lIiYmZi5jc3ModGhpcywiZmxvYXQiKT09PSJub25lIiYmKCFmLnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dHx8Y3YodGhpcy5ub2RlTmFtZSk9PT0iaW5saW5lIj90aGlzLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayI6dGhpcy5zdHlsZS56b29tPTEpKX1iLm92ZXJmbG93IT1udWxsJiYodGhpcy5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIik7Zm9yKGkgaW4gYSlqPW5ldyBmLmZ4KHRoaXMsYixpKSxoPWFbaV0sY24udGVzdChoKT8obz1mLl9kYXRhKHRoaXMsInRvZ2dsZSIraSl8fChoPT09InRvZ2dsZSI/ZD8ic2hvdyI6ImhpZGUiOjApLG8/KGYuX2RhdGEodGhpcywidG9nZ2xlIitpLG89PT0ic2hvdyI/ImhpZGUiOiJzaG93IiksaltvXSgpKTpqW2hdKCkpOihrPWNvLmV4ZWMoaCksbD1qLmN1cigpLGs/KG09cGFyc2VGbG9hdChrWzJdKSxuPWtbM118fChmLmNzc051bWJlcltpXT8iIjoicHgiKSxuIT09InB4IiYmKGYuc3R5bGUodGhpcyxpLChtfHwxKStuKSxsPShtfHwxKS9qLmN1cigpKmwsZi5zdHlsZSh0aGlzLGksbCtuKSksa1sxXSYmKG09KGtbMV09PT0iLT0iPy0xOjEpKm0rbCksai5jdXN0b20obCxtLG4pKTpqLmN1c3RvbShsLGgsIiIpKTtyZXR1cm4hMH12YXIgZT1mLnNwZWVkKGIsYyxkKTtpZihmLmlzRW1wdHlPYmplY3QoYSkpcmV0dXJuIHRoaXMuZWFjaChlLmNvbXBsZXRlLFshMV0pO2E9Zi5leHRlbmQoe30sYSk7cmV0dXJuIGUucXVldWU9PT0hMT90aGlzLmVhY2goZyk6dGhpcy5xdWV1ZShlLnF1ZXVlLGcpfSxzdG9wOmZ1bmN0aW9uKGEsYyxkKXt0eXBlb2YgYSE9InN0cmluZyImJihkPWMsYz1hLGE9YiksYyYmYSE9PSExJiZ0aGlzLnF1ZXVlKGF8fCJmeCIsW10pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmdW5jdGlvbiBoKGEsYixjKXt2YXIgZT1iW2NdO2YucmVtb3ZlRGF0YShhLGMsITApLGUuc3RvcChkKX12YXIgYixjPSExLGU9Zi50aW1lcnMsZz1mLl9kYXRhKHRoaXMpO2R8fGYuX3VubWFyayghMCx0aGlzKTtpZihhPT1udWxsKWZvcihiIGluIGcpZ1tiXSYmZ1tiXS5zdG9wJiZiLmluZGV4T2YoIi5ydW4iKT09PWIubGVuZ3RoLTQmJmgodGhpcyxnLGIpO2Vsc2UgZ1tiPWErIi5ydW4iXSYmZ1tiXS5zdG9wJiZoKHRoaXMsZyxiKTtmb3IoYj1lLmxlbmd0aDtiLS07KWVbYl0uZWxlbT09PXRoaXMmJihhPT1udWxsfHxlW2JdLnF1ZXVlPT09YSkmJihkP2VbYl0oITApOmVbYl0uc2F2ZVN0YXRlKCksYz0hMCxlLnNwbGljZShiLDEpKTsoIWR8fCFjKSYmZi5kZXF1ZXVlKHRoaXMsYSl9KX19KSxmLmVhY2goe3NsaWRlRG93bjpjdSgic2hvdyIsMSksc2xpZGVVcDpjdSgiaGlkZSIsMSksc2xpZGVUb2dnbGU6Y3UoInRvZ2dsZSIsMSksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihhLGIpe2YuZm5bYV09ZnVuY3Rpb24oYSxjLGQpe3JldHVybiB0aGlzLmFuaW1hdGUoYixhLGMsZCl9fSksZi5leHRlbmQoe3NwZWVkOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hJiZ0eXBlb2YgYT09Im9iamVjdCI/Zi5leHRlbmQoe30sYSk6e2NvbXBsZXRlOmN8fCFjJiZifHxmLmlzRnVuY3Rpb24oYSkmJmEsZHVyYXRpb246YSxlYXNpbmc6YyYmYnx8YiYmIWYuaXNGdW5jdGlvbihiKSYmYn07ZC5kdXJhdGlvbj1mLmZ4Lm9mZj8wOnR5cGVvZiBkLmR1cmF0aW9uPT0ibnVtYmVyIj9kLmR1cmF0aW9uOmQuZHVyYXRpb24gaW4gZi5meC5zcGVlZHM/Zi5meC5zcGVlZHNbZC5kdXJhdGlvbl06Zi5meC5zcGVlZHMuX2RlZmF1bHQ7aWYoZC5xdWV1ZT09bnVsbHx8ZC5xdWV1ZT09PSEwKWQucXVldWU9ImZ4IjtkLm9sZD1kLmNvbXBsZXRlLGQuY29tcGxldGU9ZnVuY3Rpb24oYSl7Zi5pc0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlP2YuZGVxdWV1ZSh0aGlzLGQucXVldWUpOmEhPT0hMSYmZi5fdW5tYXJrKHRoaXMpfTtyZXR1cm4gZH0sZWFzaW5nOntsaW5lYXI6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGMrZCphfSxzd2luZzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oLU1hdGguY29zKGEqTWF0aC5QSSkvMisuNSkqZCtjfX0sdGltZXJzOltdLGZ4OmZ1bmN0aW9uKGEsYixjKXt0aGlzLm9wdGlvbnM9Yix0aGlzLmVsZW09YSx0aGlzLnByb3A9YyxiLm9yaWc9Yi5vcmlnfHx7fX19KSxmLmZ4LnByb3RvdHlwZT17dXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLChmLmZ4LnN0ZXBbdGhpcy5wcm9wXXx8Zi5meC5zdGVwLl9kZWZhdWx0KSh0aGlzKX0sY3VyOmZ1bmN0aW9uKCl7aWYodGhpcy5lbGVtW3RoaXMucHJvcF0hPW51bGwmJighdGhpcy5lbGVtLnN0eWxlfHx0aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXT09bnVsbCkpcmV0dXJuIHRoaXMuZWxlbVt0aGlzLnByb3BdO3ZhciBhLGI9Zi5jc3ModGhpcy5lbGVtLHRoaXMucHJvcCk7cmV0dXJuIGlzTmFOKGE9cGFyc2VGbG9hdChiKSk/IWJ8fGI9PT0iYXV0byI/MDpiOmF9LGN1c3RvbTpmdW5jdGlvbihhLGMsZCl7ZnVuY3Rpb24gaChhKXtyZXR1cm4gZS5zdGVwKGEpfXZhciBlPXRoaXMsZz1mLmZ4O3RoaXMuc3RhcnRUaW1lPWNyfHxjcygpLHRoaXMuZW5kPWMsdGhpcy5ub3c9dGhpcy5zdGFydD1hLHRoaXMucG9zPXRoaXMuc3RhdGU9MCx0aGlzLnVuaXQ9ZHx8dGhpcy51bml0fHwoZi5jc3NOdW1iZXJbdGhpcy5wcm9wXT8iIjoicHgiKSxoLnF1ZXVlPXRoaXMub3B0aW9ucy5xdWV1ZSxoLmVsZW09dGhpcy5lbGVtLGguc2F2ZVN0YXRlPWZ1bmN0aW9uKCl7ZS5vcHRpb25zLmhpZGUmJmYuX2RhdGEoZS5lbGVtLCJmeHNob3ciK2UucHJvcCk9PT1iJiZmLl9kYXRhKGUuZWxlbSwiZnhzaG93IitlLnByb3AsZS5zdGFydCl9LGgoKSYmZi50aW1lcnMucHVzaChoKSYmIWNwJiYoY3A9c2V0SW50ZXJ2YWwoZy50aWNrLGcuaW50ZXJ2YWwpKX0sc2hvdzpmdW5jdGlvbigpe3ZhciBhPWYuX2RhdGEodGhpcy5lbGVtLCJmeHNob3ciK3RoaXMucHJvcCk7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1hfHxmLnN0eWxlKHRoaXMuZWxlbSx0aGlzLnByb3ApLHRoaXMub3B0aW9ucy5zaG93PSEwLGEhPT1iP3RoaXMuY3VzdG9tKHRoaXMuY3VyKCksYSk6dGhpcy5jdXN0b20odGhpcy5wcm9wPT09IndpZHRoInx8dGhpcy5wcm9wPT09ImhlaWdodCI/MTowLHRoaXMuY3VyKCkpLGYodGhpcy5lbGVtKS5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPWYuX2RhdGEodGhpcy5lbGVtLCJmeHNob3ciK3RoaXMucHJvcCl8fGYuc3R5bGUodGhpcy5lbGVtLHRoaXMucHJvcCksdGhpcy5vcHRpb25zLmhpZGU9ITAsdGhpcy5jdXN0b20odGhpcy5jdXIoKSwwKX0sc3RlcDpmdW5jdGlvbihhKXt2YXIgYixjLGQsZT1jcnx8Y3MoKSxnPSEwLGg9dGhpcy5lbGVtLGk9dGhpcy5vcHRpb25zO2lmKGF8fGU+PWkuZHVyYXRpb24rdGhpcy5zdGFydFRpbWUpe3RoaXMubm93PXRoaXMuZW5kLHRoaXMucG9zPXRoaXMuc3RhdGU9MSx0aGlzLnVwZGF0ZSgpLGkuYW5pbWF0ZWRQcm9wZXJ0aWVzW3RoaXMucHJvcF09ITA7Zm9yKGIgaW4gaS5hbmltYXRlZFByb3BlcnRpZXMpaS5hbmltYXRlZFByb3BlcnRpZXNbYl0hPT0hMCYmKGc9ITEpO2lmKGcpe2kub3ZlcmZsb3chPW51bGwmJiFmLnN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyYmZi5lYWNoKFsiIiwiWCIsIlkiXSxmdW5jdGlvbihhLGIpe2guc3R5bGVbIm92ZXJmbG93IitiXT1pLm92ZXJmbG93W2FdfSksaS5oaWRlJiZmKGgpLmhpZGUoKTtpZihpLmhpZGV8fGkuc2hvdylmb3IoYiBpbiBpLmFuaW1hdGVkUHJvcGVydGllcylmLnN0eWxlKGgsYixpLm9yaWdbYl0pLGYucmVtb3ZlRGF0YShoLCJmeHNob3ciK2IsITApLGYucmVtb3ZlRGF0YShoLCJ0b2dnbGUiK2IsITApO2Q9aS5jb21wbGV0ZSxkJiYoaS5jb21wbGV0ZT0hMSxkLmNhbGwoaCkpfXJldHVybiExfWkuZHVyYXRpb249PUluZmluaXR5P3RoaXMubm93PWU6KGM9ZS10aGlzLnN0YXJ0VGltZSx0aGlzLnN0YXRlPWMvaS5kdXJhdGlvbix0aGlzLnBvcz1mLmVhc2luZ1tpLmFuaW1hdGVkUHJvcGVydGllc1t0aGlzLnByb3BdXSh0aGlzLnN0YXRlLGMsMCwxLGkuZHVyYXRpb24pLHRoaXMubm93PXRoaXMuc3RhcnQrKHRoaXMuZW5kLXRoaXMuc3RhcnQpKnRoaXMucG9zKSx0aGlzLnVwZGF0ZSgpO3JldHVybiEwfX0sZi5leHRlbmQoZi5meCx7dGljazpmdW5jdGlvbigpe3ZhciBhLGI9Zi50aW1lcnMsYz0wO2Zvcig7YzxiLmxlbmd0aDtjKyspYT1iW2NdLCFhKCkmJmJbY109PT1hJiZiLnNwbGljZShjLS0sMSk7Yi5sZW5ndGh8fGYuZnguc3RvcCgpfSxpbnRlcnZhbDoxMyxzdG9wOmZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChjcCksY3A9bnVsbH0sc3BlZWRzOntzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LHN0ZXA6e29wYWNpdHk6ZnVuY3Rpb24oYSl7Zi5zdHlsZShhLmVsZW0sIm9wYWNpdHkiLGEubm93KX0sX2RlZmF1bHQ6ZnVuY3Rpb24oYSl7YS5lbGVtLnN0eWxlJiZhLmVsZW0uc3R5bGVbYS5wcm9wXSE9bnVsbD9hLmVsZW0uc3R5bGVbYS5wcm9wXT1hLm5vdythLnVuaXQ6YS5lbGVtW2EucHJvcF09YS5ub3d9fX0pLGYuZWFjaChbIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxiKXtmLmZ4LnN0ZXBbYl09ZnVuY3Rpb24oYSl7Zi5zdHlsZShhLmVsZW0sYixNYXRoLm1heCgwLGEubm93KSthLnVuaXQpfX0pLGYuZXhwciYmZi5leHByLmZpbHRlcnMmJihmLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gZi5ncmVwKGYudGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofSk7dmFyIGN3PS9edCg/OmFibGV8ZHxoKSQvaSxjeD0vXig/OmJvZHl8aHRtbCkkL2k7ImdldEJvdW5kaW5nQ2xpZW50UmVjdCJpbiBjLmRvY3VtZW50RWxlbWVudD9mLmZuLm9mZnNldD1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdLGM7aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2Yub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGYub2Zmc2V0LmJvZHlPZmZzZXQoYik7dHJ5e2M9Yi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jYXRjaChkKXt9dmFyIGU9Yi5vd25lckRvY3VtZW50LGc9ZS5kb2N1bWVudEVsZW1lbnQ7aWYoIWN8fCFmLmNvbnRhaW5zKGcsYikpcmV0dXJuIGM/e3RvcDpjLnRvcCxsZWZ0OmMubGVmdH06e3RvcDowLGxlZnQ6MH07dmFyIGg9ZS5ib2R5LGk9Y3koZSksaj1nLmNsaWVudFRvcHx8aC5jbGllbnRUb3B8fDAsaz1nLmNsaWVudExlZnR8fGguY2xpZW50TGVmdHx8MCxsPWkucGFnZVlPZmZzZXR8fGYuc3VwcG9ydC5ib3hNb2RlbCYmZy5zY3JvbGxUb3B8fGguc2Nyb2xsVG9wLG09aS5wYWdlWE9mZnNldHx8Zi5zdXBwb3J0LmJveE1vZGVsJiZnLnNjcm9sbExlZnR8fGguc2Nyb2xsTGVmdCxuPWMudG9wK2wtaixvPWMubGVmdCttLWs7cmV0dXJue3RvcDpuLGxlZnQ6b319OmYuZm4ub2Zmc2V0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF07aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2Yub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGYub2Zmc2V0LmJvZHlPZmZzZXQoYik7dmFyIGMsZD1iLm9mZnNldFBhcmVudCxlPWIsZz1iLm93bmVyRG9jdW1lbnQsaD1nLmRvY3VtZW50RWxlbWVudCxpPWcuYm9keSxqPWcuZGVmYXVsdFZpZXcsaz1qP2ouZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlLGw9Yi5vZmZzZXRUb3AsbT1iLm9mZnNldExlZnQ7d2hpbGUoKGI9Yi5wYXJlbnROb2RlKSYmYiE9PWkmJmIhPT1oKXtpZihmLnN1cHBvcnQuZml4ZWRQb3NpdGlvbiYmay5wb3NpdGlvbj09PSJmaXhlZCIpYnJlYWs7Yz1qP2ouZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlLGwtPWIuc2Nyb2xsVG9wLG0tPWIuc2Nyb2xsTGVmdCxiPT09ZCYmKGwrPWIub2Zmc2V0VG9wLG0rPWIub2Zmc2V0TGVmdCxmLnN1cHBvcnQuZG9lc05vdEFkZEJvcmRlciYmKCFmLnN1cHBvcnQuZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHN8fCFjdy50ZXN0KGIubm9kZU5hbWUpKSYmKGwrPXBhcnNlRmxvYXQoYy5ib3JkZXJUb3BXaWR0aCl8fDAsbSs9cGFyc2VGbG9hdChjLmJvcmRlckxlZnRXaWR0aCl8fDApLGU9ZCxkPWIub2Zmc2V0UGFyZW50KSxmLnN1cHBvcnQuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlJiZjLm92ZXJmbG93IT09InZpc2libGUiJiYobCs9cGFyc2VGbG9hdChjLmJvcmRlclRvcFdpZHRoKXx8MCxtKz1wYXJzZUZsb2F0KGMuYm9yZGVyTGVmdFdpZHRoKXx8MCksaz1jfWlmKGsucG9zaXRpb249PT0icmVsYXRpdmUifHxrLnBvc2l0aW9uPT09InN0YXRpYyIpbCs9aS5vZmZzZXRUb3AsbSs9aS5vZmZzZXRMZWZ0O2Yuc3VwcG9ydC5maXhlZFBvc2l0aW9uJiZrLnBvc2l0aW9uPT09ImZpeGVkIiYmKGwrPU1hdGgubWF4KGguc2Nyb2xsVG9wLGkuc2Nyb2xsVG9wKSxtKz1NYXRoLm1heChoLnNjcm9sbExlZnQsaS5zY3JvbGxMZWZ0KSk7cmV0dXJue3RvcDpsLGxlZnQ6bX19LGYub2Zmc2V0PXtib2R5T2Zmc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0VG9wLGM9YS5vZmZzZXRMZWZ0O2Yuc3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCYmKGIrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCk7cmV0dXJue3RvcDpiLGxlZnQ6Y319LHNldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9Zi5jc3MoYSwicG9zaXRpb24iKTtkPT09InN0YXRpYyImJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciBlPWYoYSksZz1lLm9mZnNldCgpLGg9Zi5jc3MoYSwidG9wIiksaT1mLmNzcyhhLCJsZWZ0Iiksaj0oZD09PSJhYnNvbHV0ZSJ8fGQ9PT0iZml4ZWQiKSYmZi5pbkFycmF5KCJhdXRvIixbaCxpXSk+LTEsaz17fSxsPXt9LG0sbjtqPyhsPWUucG9zaXRpb24oKSxtPWwudG9wLG49bC5sZWZ0KToobT1wYXJzZUZsb2F0KGgpfHwwLG49cGFyc2VGbG9hdChpKXx8MCksZi5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGcpKSxiLnRvcCE9bnVsbCYmKGsudG9wPWIudG9wLWcudG9wK20pLGIubGVmdCE9bnVsbCYmKGsubGVmdD1iLmxlZnQtZy5sZWZ0K24pLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLGspOmUuY3NzKGspfX0sZi5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pcmV0dXJuIG51bGw7dmFyIGE9dGhpc1swXSxiPXRoaXMub2Zmc2V0UGFyZW50KCksYz10aGlzLm9mZnNldCgpLGQ9Y3gudGVzdChiWzBdLm5vZGVOYW1lKT97dG9wOjAsbGVmdDowfTpiLm9mZnNldCgpO2MudG9wLT1wYXJzZUZsb2F0KGYuY3NzKGEsIm1hcmdpblRvcCIpKXx8MCxjLmxlZnQtPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCxkLnRvcCs9cGFyc2VGbG9hdChmLmNzcyhiWzBdLCJib3JkZXJUb3BXaWR0aCIpKXx8MCxkLmxlZnQrPXBhcnNlRmxvYXQoZi5jc3MoYlswXSwiYm9yZGVyTGVmdFdpZHRoIikpfHwwO3JldHVybnt0b3A6Yy50b3AtZC50b3AsbGVmdDpjLmxlZnQtZC5sZWZ0fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXRQYXJlbnR8fGMuYm9keTt3aGlsZShhJiYhY3gudGVzdChhLm5vZGVOYW1lKSYmZi5jc3MoYSwicG9zaXRpb24iKT09PSJzdGF0aWMiKWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9KX19KSxmLmVhY2goWyJMZWZ0IiwiVG9wIl0sZnVuY3Rpb24oYSxjKXt2YXIgZD0ic2Nyb2xsIitjO2YuZm5bZF09ZnVuY3Rpb24oYyl7dmFyIGUsZztpZihjPT09Yil7ZT10aGlzWzBdO2lmKCFlKXJldHVybiBudWxsO2c9Y3koZSk7cmV0dXJuIGc/InBhZ2VYT2Zmc2V0ImluIGc/Z1thPyJwYWdlWU9mZnNldCI6InBhZ2VYT2Zmc2V0Il06Zi5zdXBwb3J0LmJveE1vZGVsJiZnLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXXx8Zy5kb2N1bWVudC5ib2R5W2RdOmVbZF19cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2c9Y3kodGhpcyksZz9nLnNjcm9sbFRvKGE/ZihnKS5zY3JvbGxMZWZ0KCk6YyxhP2M6ZihnKS5zY3JvbGxUb3AoKSk6dGhpc1tkXT1jfSl9fSksZi5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihhLGMpe3ZhciBkPWMudG9Mb3dlckNhc2UoKTtmLmZuWyJpbm5lciIrY109ZnVuY3Rpb24oKXt2YXIgYT10aGlzWzBdO3JldHVybiBhP2Euc3R5bGU/cGFyc2VGbG9hdChmLmNzcyhhLGQsInBhZGRpbmciKSk6dGhpc1tkXSgpOm51bGx9LGYuZm5bIm91dGVyIitjXT1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdO3JldHVybiBiP2Iuc3R5bGU/cGFyc2VGbG9hdChmLmNzcyhiLGQsYT8ibWFyZ2luIjoiYm9yZGVyIikpOnRoaXNbZF0oKTpudWxsfSxmLmZuW2RdPWZ1bmN0aW9uKGEpe3ZhciBlPXRoaXNbMF07aWYoIWUpcmV0dXJuIGE9PW51bGw/bnVsbDp0aGlzO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyk7Y1tkXShhLmNhbGwodGhpcyxiLGNbZF0oKSkpfSk7aWYoZi5pc1dpbmRvdyhlKSl7dmFyIGc9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY10saD1lLmRvY3VtZW50LmJvZHk7cmV0dXJuIGUuZG9jdW1lbnQuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IiYmZ3x8aCYmaFsiY2xpZW50IitjXXx8Z31pZihlLm5vZGVUeXBlPT09OSlyZXR1cm4gTWF0aC5tYXgoZS5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY10sZS5ib2R5WyJzY3JvbGwiK2NdLGUuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiK2NdLGUuYm9keVsib2Zmc2V0IitjXSxlLmRvY3VtZW50RWxlbWVudFsib2Zmc2V0IitjXSk7aWYoYT09PWIpe3ZhciBpPWYuY3NzKGUsZCksaj1wYXJzZUZsb2F0KGkpO3JldHVybiBmLmlzTnVtZXJpYyhqKT9qOml9cmV0dXJuIHRoaXMuY3NzKGQsdHlwZW9mIGE9PSJzdHJpbmciP2E6YSsicHgiKX19KSxhLmpRdWVyeT1hLiQ9Zix0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kJiZkZWZpbmUuYW1kLmpRdWVyeSYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KX0pKHdpbmRvdyk7DQoJJC5ub0NvbmZsaWN0KCk7DQp9DQoJDQoNCg0KalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KCS8vIENoYW5nZSB0aGUgcHJlZml4IG9mIHNvdXJjZSBkYXRhIG9uIGNoYW5nZQ0KCXZhciBEYXRhSW5wdXQgPSBqUXVlcnkoImlucHV0W3R5cGU9J3RleHQnXVtuYW1lKj0nRGF0YSddIik7DQoJaWYgKGpRdWVyeShEYXRhSW5wdXQpLmxlbmd0aD4wKXsNCgkJDQoJCWpRdWVyeSgiI3RhYmxlY29udGFpbmVyIC5wYWdldGFibGUgc2VsZWN0IikuY2hhbmdlKGZ1bmN0aW9uKCl7DQoJCQl2YXIgRGF0YSA9IGpRdWVyeShEYXRhSW5wdXQpLnZhbCgpOw0KCQkJRGF0YSA9IERhdGEucmVwbGFjZSgiIyIsIiIpOw0KCQkJRGF0YSA9IERhdGEucmVwbGFjZSgnQCcsIiIpOw0KCQkJDQoJCQl2YXIgU2VsZWN0ZWQgPSBqUXVlcnkodGhpcykudmFsKCk7DQoJCQlpZiAoU2VsZWN0ZWQgPT0gJ2FjY291bnQnKXsJCQkNCgkJCQlqUXVlcnkoRGF0YUlucHV0KS52YWwoIkAiK0RhdGEpOw0KCQkJfQ0KCQkJZWxzZSBpZiAoU2VsZWN0ZWQgPT0gJ3NlYXJjaCcpew0KCQkJCWpRdWVyeShEYXRhSW5wdXQpLnZhbChEYXRhKTsJCQkNCgkJCX0NCgkJCWVsc2UgaWYgKFNlbGVjdGVkID09ICdoYXNodGFnJyl7DQoJCQkJalF1ZXJ5KERhdGFJbnB1dCkudmFsKCIjIitEYXRhKTsNCgkJCX0JDQoJCQkNCgkJfSkNCgl9DQoJDQoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoJLy8gQUpBWCBTRUFSQ0gNCgkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCgl2YXIgeGhyID0gIiI7CQ0KCXZhciB0YWJuYW1lID0gIiI7DQoJdmFyIHBvc3R1cmwgPSAiIjsNCgl2YXIgVGltZU91dDsNCglqUXVlcnkoIi5zZWFyY2giKS5rZXl1cChmdW5jdGlvbihlKXsNCgkJLy8gQ2xlYXIgdGltZW91dCBzbyBzZWFyY2hpbmcgaXMgY2FuY2VsZWQgd2hpbGUgc3RpbGwgdHlwaW5nDQoJCWNsZWFyVGltZW91dChUaW1lT3V0KTsNCgkJdGFibmFtZSA9IGpRdWVyeSh0aGlzKS5wYXJlbnQoKS5hdHRyKCJpZCIpOwkJDQoJCXBvc3R1cmwgPSBqUXVlcnkoIiMiK3RhYm5hbWUpLmZpbmQoIi5wb3N0dXJsIikudGV4dCgpOw0KCQkvLyBTZXQgdGhlIHRpbWVvdXQgdG8gc2VhcmNoDQoJCVRpbWVPdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7QXBwbHlGaWx0ZXIoKX0sNDAwKTsJCQkJDQoJfSk7DQoNCglmdW5jdGlvbiBBcHBseUZpbHRlcigpew0KCQkvLyBHZXQgdmFsdWUgb2Ygc2VhcmNoIGlucHV0DQoJCXZhciB2YWx1ZSA9IGpRdWVyeSgiIyIrdGFibmFtZSsiIC5zZWFyY2giKS52YWwoKTsJCQ0KCQkvLyBJZiBhIHdhcyBhbHJlYWR5IHNlbnQsIHN0b3AgcmlnaHQgaGVyZQ0KCQlpZih4aHIgIT09ICIiKSB7IHhoci5hYm9ydCgpOyB9DQoJCQkvLyBDaGFuZ2UgdGhlIGNvbnRlbnQgb2YgdGhlIHRhYmxlIHRvIGEgbG9hZGluZyBpbmRpY2F0b3INCgkJCWpRdWVyeSgiI3BhZ2VfY29udGVudCAjIiArIHRhYm5hbWUgKyAiIC5wYWdldGFibGUgdGJvZHkiKS5odG1sKCI8dGQgY29sc3Bhbj0nMjAnIGFsaWduPSdjZW50ZXInIHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXInPkxvYWRpbmcuLi48L3RkPiIpOw0KCQkvLyBNYWtlIHRoZSBBamF4IGNhbGwNCgkJICB4aHIgPSBqUXVlcnkuYWpheCh7DQoJCQl0eXBlOiAiUE9TVCIsDQoJCQlkYXRhOiAic2VhcmNoPSIrZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSwNCgkJICAgIHVybDogcG9zdHVybCwNCgkJICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHsNCgkJICAgIAl2YXIganFPYmogPSBqUXVlcnkoZGF0YSk7DQoJCSAgICAJdmFyIHJlc3VsdCA9IGpxT2JqLmZpbmQoIiNwYWdlX2NvbnRlbnQgIyIgKyB0YWJuYW1lICsgIiAudGFiY29udGVudCIpLmh0bWwoKTsNCgkJICAgIAlqUXVlcnkoIiNwYWdlX2NvbnRlbnQgIyIgKyB0YWJuYW1lICsgIiAudGFiY29udGVudCIpLmh0bWwocmVzdWx0KTsNCgkJICAgIH0NCgkJICB9KTsNCgl9DQoJDQoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoJLy8gU0VBUkNIIEZJRUxEDQoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoJDQoJdmFyIG9ydmFsID0gIiI7DQoJdmFyIG9sZHZhbCA9ICIiOw0KCWpRdWVyeSgiLnNlYXJjaCIpLmZvY3VzKGZ1bmN0aW9uKGV2ZW50KXsNCgkJb2xkdmFsID0galF1ZXJ5KHRoaXMpLmF0dHIoInZhbHVlIik7DQoJCWlmKG9ydmFsID09ICIiKXsNCgkJCW9ydmFsID0gb2xkdmFsOwkJCQ0KCQl9DQoJCWlmIChvbGR2YWwgPT0gb3J2YWwpew0KCQkJalF1ZXJ5KHRoaXMpLmF0dHIoInZhbHVlIiwiIik7DQoJCX0NCgl9KS5ibHVyKGZ1bmN0aW9uKGV2ZW50KXsJCQ0KCQlpZiAoKGpRdWVyeSh0aGlzKS5hdHRyKCJ2YWx1ZSIpKT09IiIpew0KCQkJalF1ZXJ5KHRoaXMpLmF0dHIoInZhbHVlIixvbGR2YWwpOw0KCQl9CQkNCgl9KTsNCgkNCgkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoJLy8gU0VUVElOR1MgRklFTEQNCgkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoJDQoJalF1ZXJ5KCIuY21zX3RleHRmaWVsZFtuYW1lKj0nUmVmcmVzaEludGVydmFsJ10iKS5rZXl1cChmdW5jdGlvbigpew0KCQl0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5yZXBsYWNlKC9cRC9nLCAnJyk7DQoJfSk7DQoJDQp9KQ==]]></data>
	</file>
	<file>
	  <filename>/lib/OAuth.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy8gdmltOiBmb2xkbWV0aG9kPW1hcmtlcgoKLyogR2VuZXJpYyBleGNlcHRpb24gY2xhc3MKICovCmlmICghY2xhc3NfZXhpc3RzKCdPQXV0aEV4Y2VwdGlvbicpKSB7CiAgY2xhc3MgT0F1dGhFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24gewogICAgLy8gcGFzcwogIH0KfQoKY2xhc3MgT0F1dGhDb25zdW1lciB7CiAgcHVibGljICRrZXk7CiAgcHVibGljICRzZWNyZXQ7CgogIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRrZXksICRzZWNyZXQsICRjYWxsYmFja191cmw9TlVMTCkgewogICAgJHRoaXMtPmtleSA9ICRrZXk7CiAgICAkdGhpcy0+c2VjcmV0ID0gJHNlY3JldDsKICAgICR0aGlzLT5jYWxsYmFja191cmwgPSAkY2FsbGJhY2tfdXJsOwogIH0KCiAgZnVuY3Rpb24gX190b1N0cmluZygpIHsKICAgIHJldHVybiAiT0F1dGhDb25zdW1lcltrZXk9JHRoaXMtPmtleSxzZWNyZXQ9JHRoaXMtPnNlY3JldF0iOwogIH0KfQoKY2xhc3MgT0F1dGhUb2tlbiB7CiAgLy8gYWNjZXNzIHRva2VucyBhbmQgcmVxdWVzdCB0b2tlbnMKICBwdWJsaWMgJGtleTsKICBwdWJsaWMgJHNlY3JldDsKCiAgLyoqCiAgICoga2V5ID0gdGhlIHRva2VuCiAgICogc2VjcmV0ID0gdGhlIHRva2VuIHNlY3JldAogICAqLwogIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRrZXksICRzZWNyZXQpIHsKICAgICR0aGlzLT5rZXkgPSAka2V5OwogICAgJHRoaXMtPnNlY3JldCA9ICRzZWNyZXQ7CiAgfQoKICAvKioKICAgKiBnZW5lcmF0ZXMgdGhlIGJhc2ljIHN0cmluZyBzZXJpYWxpemF0aW9uIG9mIGEgdG9rZW4gdGhhdCBhIHNlcnZlcgogICAqIHdvdWxkIHJlc3BvbmQgdG8gcmVxdWVzdF90b2tlbiBhbmQgYWNjZXNzX3Rva2VuIGNhbGxzIHdpdGgKICAgKi8KICBmdW5jdGlvbiB0b19zdHJpbmcoKSB7CiAgICByZXR1cm4gIm9hdXRoX3Rva2VuPSIgLgogICAgICAgICAgIE9BdXRoVXRpbDo6dXJsZW5jb2RlX3JmYzM5ODYoJHRoaXMtPmtleSkgLgogICAgICAgICAgICImb2F1dGhfdG9rZW5fc2VjcmV0PSIgLgogICAgICAgICAgIE9BdXRoVXRpbDo6dXJsZW5jb2RlX3JmYzM5ODYoJHRoaXMtPnNlY3JldCk7CiAgfQoKICBmdW5jdGlvbiBfX3RvU3RyaW5nKCkgewogICAgcmV0dXJuICR0aGlzLT50b19zdHJpbmcoKTsKICB9Cn0KCi8qKgogKiBBIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgYSBTaWduYXR1cmUgTWV0aG9kCiAqIFNlZSBzZWN0aW9uIDkgKCJTaWduaW5nIFJlcXVlc3RzIikgaW4gdGhlIHNwZWMKICovCmFic3RyYWN0IGNsYXNzIE9BdXRoU2lnbmF0dXJlTWV0aG9kIHsKICAvKioKICAgKiBOZWVkcyB0byByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIFNpZ25hdHVyZSBNZXRob2QgKGllIEhNQUMtU0hBMSkKICAgKiBAcmV0dXJuIHN0cmluZwogICAqLwogIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBnZXRfbmFtZSgpOwoKICAvKioKICAgKiBCdWlsZCB1cCB0aGUgc2lnbmF0dXJlCiAgICogTk9URTogVGhlIG91dHB1dCBvZiB0aGlzIGZ1bmN0aW9uIE1VU1QgTk9UIGJlIHVybGVuY29kZWQuCiAgICogdGhlIGVuY29kaW5nIGlzIGhhbmRsZWQgaW4gT0F1dGhSZXF1ZXN0IHdoZW4gdGhlIGZpbmFsCiAgICogcmVxdWVzdCBpcyBzZXJpYWxpemVkCiAgICogQHBhcmFtIE9BdXRoUmVxdWVzdCAkcmVxdWVzdAogICAqIEBwYXJhbSBPQXV0aENvbnN1bWVyICRjb25zdW1lcgogICAqIEBwYXJhbSBPQXV0aFRva2VuICR0b2tlbgogICAqIEByZXR1cm4gc3RyaW5nCiAgICovCiAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGJ1aWxkX3NpZ25hdHVyZSgkcmVxdWVzdCwgJGNvbnN1bWVyLCAkdG9rZW4pOwoKICAvKioKICAgKiBWZXJpZmllcyB0aGF0IGEgZ2l2ZW4gc2lnbmF0dXJlIGlzIGNvcnJlY3QKICAgKiBAcGFyYW0gT0F1dGhSZXF1ZXN0ICRyZXF1ZXN0CiAgICogQHBhcmFtIE9BdXRoQ29uc3VtZXIgJGNvbnN1bWVyCiAgICogQHBhcmFtIE9BdXRoVG9rZW4gJHRva2VuCiAgICogQHBhcmFtIHN0cmluZyAkc2lnbmF0dXJlCiAgICogQHJldHVybiBib29sCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGNoZWNrX3NpZ25hdHVyZSgkcmVxdWVzdCwgJGNvbnN1bWVyLCAkdG9rZW4sICRzaWduYXR1cmUpIHsKICAgICRidWlsdCA9ICR0aGlzLT5idWlsZF9zaWduYXR1cmUoJHJlcXVlc3QsICRjb25zdW1lciwgJHRva2VuKTsKICAgIHJldHVybiAkYnVpbHQgPT0gJHNpZ25hdHVyZTsKICB9Cn0KCi8qKgogKiBUaGUgSE1BQy1TSEExIHNpZ25hdHVyZSBtZXRob2QgdXNlcyB0aGUgSE1BQy1TSEExIHNpZ25hdHVyZSBhbGdvcml0aG0gYXMgZGVmaW5lZCBpbiBbUkZDMjEwNF0gCiAqIHdoZXJlIHRoZSBTaWduYXR1cmUgQmFzZSBTdHJpbmcgaXMgdGhlIHRleHQgYW5kIHRoZSBrZXkgaXMgdGhlIGNvbmNhdGVuYXRlZCB2YWx1ZXMgKGVhY2ggZmlyc3QgCiAqIGVuY29kZWQgcGVyIFBhcmFtZXRlciBFbmNvZGluZykgb2YgdGhlIENvbnN1bWVyIFNlY3JldCBhbmQgVG9rZW4gU2VjcmV0LCBzZXBhcmF0ZWQgYnkgYW4gJyYnIAogKiBjaGFyYWN0ZXIgKEFTQ0lJIGNvZGUgMzgpIGV2ZW4gaWYgZW1wdHkuCiAqICAgLSBDaGFwdGVyIDkuMiAoIkhNQUMtU0hBMSIpCiAqLwpjbGFzcyBPQXV0aFNpZ25hdHVyZU1ldGhvZF9ITUFDX1NIQTEgZXh0ZW5kcyBPQXV0aFNpZ25hdHVyZU1ldGhvZCB7CiAgZnVuY3Rpb24gZ2V0X25hbWUoKSB7CiAgICByZXR1cm4gIkhNQUMtU0hBMSI7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gYnVpbGRfc2lnbmF0dXJlKCRyZXF1ZXN0LCAkY29uc3VtZXIsICR0b2tlbikgewogICAgJGJhc2Vfc3RyaW5nID0gJHJlcXVlc3QtPmdldF9zaWduYXR1cmVfYmFzZV9zdHJpbmcoKTsKICAgICRyZXF1ZXN0LT5iYXNlX3N0cmluZyA9ICRiYXNlX3N0cmluZzsKCiAgICAka2V5X3BhcnRzID0gYXJyYXkoCiAgICAgICRjb25zdW1lci0+c2VjcmV0LAogICAgICAoJHRva2VuKSA/ICR0b2tlbi0+c2VjcmV0IDogIiIKICAgICk7CgogICAgJGtleV9wYXJ0cyA9IE9BdXRoVXRpbDo6dXJsZW5jb2RlX3JmYzM5ODYoJGtleV9wYXJ0cyk7CiAgICAka2V5ID0gaW1wbG9kZSgnJicsICRrZXlfcGFydHMpOwoKICAgIHJldHVybiBiYXNlNjRfZW5jb2RlKGhhc2hfaG1hYygnc2hhMScsICRiYXNlX3N0cmluZywgJGtleSwgdHJ1ZSkpOwogIH0KfQoKLyoqCiAqIFRoZSBQTEFJTlRFWFQgbWV0aG9kIGRvZXMgbm90IHByb3ZpZGUgYW55IHNlY3VyaXR5IHByb3RlY3Rpb24gYW5kIFNIT1VMRCBvbmx5IGJlIHVzZWQgCiAqIG92ZXIgYSBzZWN1cmUgY2hhbm5lbCBzdWNoIGFzIEhUVFBTLiBJdCBkb2VzIG5vdCB1c2UgdGhlIFNpZ25hdHVyZSBCYXNlIFN0cmluZy4KICogICAtIENoYXB0ZXIgOS40ICgiUExBSU5URVhUIikKICovCmNsYXNzIE9BdXRoU2lnbmF0dXJlTWV0aG9kX1BMQUlOVEVYVCBleHRlbmRzIE9BdXRoU2lnbmF0dXJlTWV0aG9kIHsKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X25hbWUoKSB7CiAgICByZXR1cm4gIlBMQUlOVEVYVCI7CiAgfQoKICAvKioKICAgKiBvYXV0aF9zaWduYXR1cmUgaXMgc2V0IHRvIHRoZSBjb25jYXRlbmF0ZWQgZW5jb2RlZCB2YWx1ZXMgb2YgdGhlIENvbnN1bWVyIFNlY3JldCBhbmQgCiAgICogVG9rZW4gU2VjcmV0LCBzZXBhcmF0ZWQgYnkgYSAnJicgY2hhcmFjdGVyIChBU0NJSSBjb2RlIDM4KSwgZXZlbiBpZiBlaXRoZXIgc2VjcmV0IGlzIAogICAqIGVtcHR5LiBUaGUgcmVzdWx0IE1VU1QgYmUgZW5jb2RlZCBhZ2Fpbi4KICAgKiAgIC0gQ2hhcHRlciA5LjQuMSAoIkdlbmVyYXRpbmcgU2lnbmF0dXJlcyIpCiAgICoKICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBzZWNvbmQgZW5jb2RpbmcgTVVTVCBOT1QgaGFwcGVuIGluIHRoZSBTaWduYXR1cmVNZXRob2QsIGFzCiAgICogT0F1dGhSZXF1ZXN0IGhhbmRsZXMgdGhpcyEKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gYnVpbGRfc2lnbmF0dXJlKCRyZXF1ZXN0LCAkY29uc3VtZXIsICR0b2tlbikgewogICAgJGtleV9wYXJ0cyA9IGFycmF5KAogICAgICAkY29uc3VtZXItPnNlY3JldCwKICAgICAgKCR0b2tlbikgPyAkdG9rZW4tPnNlY3JldCA6ICIiCiAgICApOwoKICAgICRrZXlfcGFydHMgPSBPQXV0aFV0aWw6OnVybGVuY29kZV9yZmMzOTg2KCRrZXlfcGFydHMpOwogICAgJGtleSA9IGltcGxvZGUoJyYnLCAka2V5X3BhcnRzKTsKICAgICRyZXF1ZXN0LT5iYXNlX3N0cmluZyA9ICRrZXk7CgogICAgcmV0dXJuICRrZXk7CiAgfQp9CgovKioKICogVGhlIFJTQS1TSEExIHNpZ25hdHVyZSBtZXRob2QgdXNlcyB0aGUgUlNBU1NBLVBLQ1MxLXYxXzUgc2lnbmF0dXJlIGFsZ29yaXRobSBhcyBkZWZpbmVkIGluIAogKiBbUkZDMzQ0N10gc2VjdGlvbiA4LjIgKG1vcmUgc2ltcGx5IGtub3duIGFzIFBLQ1MjMSksIHVzaW5nIFNIQS0xIGFzIHRoZSBoYXNoIGZ1bmN0aW9uIGZvciAKICogRU1TQS1QS0NTMS12MV81LiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIENvbnN1bWVyIGhhcyBwcm92aWRlZCBpdHMgUlNBIHB1YmxpYyBrZXkgaW4gYSAKICogdmVyaWZpZWQgd2F5IHRvIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLCBpbiBhIG1hbm5lciB3aGljaCBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgCiAqIHNwZWNpZmljYXRpb24uCiAqICAgLSBDaGFwdGVyIDkuMyAoIlJTQS1TSEExIikKICovCmFic3RyYWN0IGNsYXNzIE9BdXRoU2lnbmF0dXJlTWV0aG9kX1JTQV9TSEExIGV4dGVuZHMgT0F1dGhTaWduYXR1cmVNZXRob2QgewogIHB1YmxpYyBmdW5jdGlvbiBnZXRfbmFtZSgpIHsKICAgIHJldHVybiAiUlNBLVNIQTEiOwogIH0KCiAgLy8gVXAgdG8gdGhlIFNQIHRvIGltcGxlbWVudCB0aGlzIGxvb2t1cCBvZiBrZXlzLiBQb3NzaWJsZSBpZGVhcyBhcmU6CiAgLy8gKDEpIGRvIGEgbG9va3VwIGluIGEgdGFibGUgb2YgdHJ1c3RlZCBjZXJ0cyBrZXllZCBvZmYgb2YgY29uc3VtZXIKICAvLyAoMikgZmV0Y2ggdmlhIGh0dHAgdXNpbmcgYSB1cmwgcHJvdmlkZWQgYnkgdGhlIHJlcXVlc3RlcgogIC8vICgzKSBzb21lIHNvcnQgb2Ygc3BlY2lmaWMgZGlzY292ZXJ5IGNvZGUgYmFzZWQgb24gcmVxdWVzdAogIC8vCiAgLy8gRWl0aGVyIHdheSBzaG91bGQgcmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjZXJ0aWZpY2F0ZQogIHByb3RlY3RlZCBhYnN0cmFjdCBmdW5jdGlvbiBmZXRjaF9wdWJsaWNfY2VydCgmJHJlcXVlc3QpOwoKICAvLyBVcCB0byB0aGUgU1AgdG8gaW1wbGVtZW50IHRoaXMgbG9va3VwIG9mIGtleXMuIFBvc3NpYmxlIGlkZWFzIGFyZToKICAvLyAoMSkgZG8gYSBsb29rdXAgaW4gYSB0YWJsZSBvZiB0cnVzdGVkIGNlcnRzIGtleWVkIG9mZiBvZiBjb25zdW1lcgogIC8vCiAgLy8gRWl0aGVyIHdheSBzaG91bGQgcmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjZXJ0aWZpY2F0ZQogIHByb3RlY3RlZCBhYnN0cmFjdCBmdW5jdGlvbiBmZXRjaF9wcml2YXRlX2NlcnQoJiRyZXF1ZXN0KTsKCiAgcHVibGljIGZ1bmN0aW9uIGJ1aWxkX3NpZ25hdHVyZSgkcmVxdWVzdCwgJGNvbnN1bWVyLCAkdG9rZW4pIHsKICAgICRiYXNlX3N0cmluZyA9ICRyZXF1ZXN0LT5nZXRfc2lnbmF0dXJlX2Jhc2Vfc3RyaW5nKCk7CiAgICAkcmVxdWVzdC0+YmFzZV9zdHJpbmcgPSAkYmFzZV9zdHJpbmc7CgogICAgLy8gRmV0Y2ggdGhlIHByaXZhdGUga2V5IGNlcnQgYmFzZWQgb24gdGhlIHJlcXVlc3QKICAgICRjZXJ0ID0gJHRoaXMtPmZldGNoX3ByaXZhdGVfY2VydCgkcmVxdWVzdCk7CgogICAgLy8gUHVsbCB0aGUgcHJpdmF0ZSBrZXkgSUQgZnJvbSB0aGUgY2VydGlmaWNhdGUKICAgICRwcml2YXRla2V5aWQgPSBvcGVuc3NsX2dldF9wcml2YXRla2V5KCRjZXJ0KTsKCiAgICAvLyBTaWduIHVzaW5nIHRoZSBrZXkKICAgICRvayA9IG9wZW5zc2xfc2lnbigkYmFzZV9zdHJpbmcsICRzaWduYXR1cmUsICRwcml2YXRla2V5aWQpOwoKICAgIC8vIFJlbGVhc2UgdGhlIGtleSByZXNvdXJjZQogICAgb3BlbnNzbF9mcmVlX2tleSgkcHJpdmF0ZWtleWlkKTsKCiAgICByZXR1cm4gYmFzZTY0X2VuY29kZSgkc2lnbmF0dXJlKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBjaGVja19zaWduYXR1cmUoJHJlcXVlc3QsICRjb25zdW1lciwgJHRva2VuLCAkc2lnbmF0dXJlKSB7CiAgICAkZGVjb2RlZF9zaWcgPSBiYXNlNjRfZGVjb2RlKCRzaWduYXR1cmUpOwoKICAgICRiYXNlX3N0cmluZyA9ICRyZXF1ZXN0LT5nZXRfc2lnbmF0dXJlX2Jhc2Vfc3RyaW5nKCk7CgogICAgLy8gRmV0Y2ggdGhlIHB1YmxpYyBrZXkgY2VydCBiYXNlZCBvbiB0aGUgcmVxdWVzdAogICAgJGNlcnQgPSAkdGhpcy0+ZmV0Y2hfcHVibGljX2NlcnQoJHJlcXVlc3QpOwoKICAgIC8vIFB1bGwgdGhlIHB1YmxpYyBrZXkgSUQgZnJvbSB0aGUgY2VydGlmaWNhdGUKICAgICRwdWJsaWNrZXlpZCA9IG9wZW5zc2xfZ2V0X3B1YmxpY2tleSgkY2VydCk7CgogICAgLy8gQ2hlY2sgdGhlIGNvbXB1dGVkIHNpZ25hdHVyZSBhZ2FpbnN0IHRoZSBvbmUgcGFzc2VkIGluIHRoZSBxdWVyeQogICAgJG9rID0gb3BlbnNzbF92ZXJpZnkoJGJhc2Vfc3RyaW5nLCAkZGVjb2RlZF9zaWcsICRwdWJsaWNrZXlpZCk7CgogICAgLy8gUmVsZWFzZSB0aGUga2V5IHJlc291cmNlCiAgICBvcGVuc3NsX2ZyZWVfa2V5KCRwdWJsaWNrZXlpZCk7CgogICAgcmV0dXJuICRvayA9PSAxOwogIH0KfQoKY2xhc3MgT0F1dGhSZXF1ZXN0IHsKICBwcml2YXRlICRwYXJhbWV0ZXJzOwogIHByaXZhdGUgJGh0dHBfbWV0aG9kOwogIHByaXZhdGUgJGh0dHBfdXJsOwogIC8vIGZvciBkZWJ1ZyBwdXJwb3NlcwogIHB1YmxpYyAkYmFzZV9zdHJpbmc7CiAgcHVibGljIHN0YXRpYyAkdmVyc2lvbiA9ICcxLjAnOwogIHB1YmxpYyBzdGF0aWMgJFBPU1RfSU5QVVQgPSAncGhwOi8vaW5wdXQnOwoKICBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkaHR0cF9tZXRob2QsICRodHRwX3VybCwgJHBhcmFtZXRlcnM9TlVMTCkgewogICAgQCRwYXJhbWV0ZXJzIG9yICRwYXJhbWV0ZXJzID0gYXJyYXkoKTsKICAgICRwYXJhbWV0ZXJzID0gYXJyYXlfbWVyZ2UoIE9BdXRoVXRpbDo6cGFyc2VfcGFyYW1ldGVycyhwYXJzZV91cmwoJGh0dHBfdXJsLCBQSFBfVVJMX1FVRVJZKSksICRwYXJhbWV0ZXJzKTsKICAgICR0aGlzLT5wYXJhbWV0ZXJzID0gJHBhcmFtZXRlcnM7CiAgICAkdGhpcy0+aHR0cF9tZXRob2QgPSAkaHR0cF9tZXRob2Q7CiAgICAkdGhpcy0+aHR0cF91cmwgPSAkaHR0cF91cmw7CiAgfQoKCiAgLyoqCiAgICogYXR0ZW1wdCB0byBidWlsZCB1cCBhIHJlcXVlc3QgZnJvbSB3aGF0IHdhcyBwYXNzZWQgdG8gdGhlIHNlcnZlcgogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbV9yZXF1ZXN0KCRodHRwX21ldGhvZD1OVUxMLCAkaHR0cF91cmw9TlVMTCwgJHBhcmFtZXRlcnM9TlVMTCkgewogICAgJHNjaGVtZSA9ICghaXNzZXQoJF9TRVJWRVJbJ0hUVFBTJ10pIHx8ICRfU0VSVkVSWydIVFRQUyddICE9ICJvbiIpCiAgICAgICAgICAgICAgPyAnaHR0cCcKICAgICAgICAgICAgICA6ICdodHRwcyc7CiAgICBAJGh0dHBfdXJsIG9yICRodHRwX3VybCA9ICRzY2hlbWUgLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOi8vJyAuICRfU0VSVkVSWydIVFRQX0hPU1QnXSAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6JyAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfU0VSVkVSWydTRVJWRVJfUE9SVCddIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ107CiAgICBAJGh0dHBfbWV0aG9kIG9yICRodHRwX21ldGhvZCA9ICRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddOwoKICAgIC8vIFdlIHdlcmVuJ3QgaGFuZGVkIGFueSBwYXJhbWV0ZXJzLCBzbyBsZXQncyBmaW5kIHRoZSBvbmVzIHJlbGV2YW50IHRvCiAgICAvLyB0aGlzIHJlcXVlc3QuCiAgICAvLyBJZiB5b3UgcnVuIFhNTC1SUEMgb3Igc2ltaWxhciB5b3Ugc2hvdWxkIHVzZSB0aGlzIHRvIHByb3ZpZGUgeW91ciBvd24KICAgIC8vIHBhcnNlZCBwYXJhbWV0ZXItbGlzdAogICAgaWYgKCEkcGFyYW1ldGVycykgewogICAgICAvLyBGaW5kIHJlcXVlc3QgaGVhZGVycwogICAgICAkcmVxdWVzdF9oZWFkZXJzID0gT0F1dGhVdGlsOjpnZXRfaGVhZGVycygpOwoKICAgICAgLy8gUGFyc2UgdGhlIHF1ZXJ5LXN0cmluZyB0byBmaW5kIEdFVCBwYXJhbWV0ZXJzCiAgICAgICRwYXJhbWV0ZXJzID0gT0F1dGhVdGlsOjpwYXJzZV9wYXJhbWV0ZXJzKCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSk7CgogICAgICAvLyBJdCdzIGEgUE9TVCByZXF1ZXN0IG9mIHRoZSBwcm9wZXIgY29udGVudC10eXBlLCBzbyBwYXJzZSBQT1NUCiAgICAgIC8vIHBhcmFtZXRlcnMgYW5kIGFkZCB0aG9zZSBvdmVycmlkaW5nIGFueSBkdXBsaWNhdGVzIGZyb20gR0VUCiAgICAgIGlmICgkaHR0cF9tZXRob2QgPT0gIlBPU1QiCiAgICAgICAgICAmJiBAc3Ryc3RyKCRyZXF1ZXN0X2hlYWRlcnNbIkNvbnRlbnQtVHlwZSJdLAogICAgICAgICAgICAgICAgICAgICAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikKICAgICAgICAgICkgewogICAgICAgICRwb3N0X2RhdGEgPSBPQXV0aFV0aWw6OnBhcnNlX3BhcmFtZXRlcnMoCiAgICAgICAgICBmaWxlX2dldF9jb250ZW50cyhzZWxmOjokUE9TVF9JTlBVVCkKICAgICAgICApOwogICAgICAgICRwYXJhbWV0ZXJzID0gYXJyYXlfbWVyZ2UoJHBhcmFtZXRlcnMsICRwb3N0X2RhdGEpOwogICAgICB9CgogICAgICAvLyBXZSBoYXZlIGEgQXV0aG9yaXphdGlvbi1oZWFkZXIgd2l0aCBPQXV0aCBkYXRhLiBQYXJzZSB0aGUgaGVhZGVyCiAgICAgIC8vIGFuZCBhZGQgdGhvc2Ugb3ZlcnJpZGluZyBhbnkgZHVwbGljYXRlcyBmcm9tIEdFVCBvciBQT1NUCiAgICAgIGlmIChAc3Vic3RyKCRyZXF1ZXN0X2hlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSwgMCwgNikgPT0gIk9BdXRoICIpIHsKICAgICAgICAkaGVhZGVyX3BhcmFtZXRlcnMgPSBPQXV0aFV0aWw6OnNwbGl0X2hlYWRlcigKICAgICAgICAgICRyZXF1ZXN0X2hlYWRlcnNbJ0F1dGhvcml6YXRpb24nXQogICAgICAgICk7CiAgICAgICAgJHBhcmFtZXRlcnMgPSBhcnJheV9tZXJnZSgkcGFyYW1ldGVycywgJGhlYWRlcl9wYXJhbWV0ZXJzKTsKICAgICAgfQoKICAgIH0KCiAgICByZXR1cm4gbmV3IE9BdXRoUmVxdWVzdCgkaHR0cF9tZXRob2QsICRodHRwX3VybCwgJHBhcmFtZXRlcnMpOwogIH0KCiAgLyoqCiAgICogcHJldHR5IG11Y2ggYSBoZWxwZXIgZnVuY3Rpb24gdG8gc2V0IHVwIHRoZSByZXF1ZXN0CiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tX2NvbnN1bWVyX2FuZF90b2tlbigkY29uc3VtZXIsICR0b2tlbiwgJGh0dHBfbWV0aG9kLCAkaHR0cF91cmwsICRwYXJhbWV0ZXJzPU5VTEwpIHsKICAgIEAkcGFyYW1ldGVycyBvciAkcGFyYW1ldGVycyA9IGFycmF5KCk7CiAgICAkZGVmYXVsdHMgPSBhcnJheSgib2F1dGhfdmVyc2lvbiIgPT4gT0F1dGhSZXF1ZXN0OjokdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICJvYXV0aF9ub25jZSIgPT4gT0F1dGhSZXF1ZXN0OjpnZW5lcmF0ZV9ub25jZSgpLAogICAgICAgICAgICAgICAgICAgICAgIm9hdXRoX3RpbWVzdGFtcCIgPT4gT0F1dGhSZXF1ZXN0OjpnZW5lcmF0ZV90aW1lc3RhbXAoKSwKICAgICAgICAgICAgICAgICAgICAgICJvYXV0aF9jb25zdW1lcl9rZXkiID0+ICRjb25zdW1lci0+a2V5KTsKICAgIGlmICgkdG9rZW4pCiAgICAgICRkZWZhdWx0c1snb2F1dGhfdG9rZW4nXSA9ICR0b2tlbi0+a2V5OwoKICAgICRwYXJhbWV0ZXJzID0gYXJyYXlfbWVyZ2UoJGRlZmF1bHRzLCAkcGFyYW1ldGVycyk7CgogICAgcmV0dXJuIG5ldyBPQXV0aFJlcXVlc3QoJGh0dHBfbWV0aG9kLCAkaHR0cF91cmwsICRwYXJhbWV0ZXJzKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfcGFyYW1ldGVyKCRuYW1lLCAkdmFsdWUsICRhbGxvd19kdXBsaWNhdGVzID0gdHJ1ZSkgewogICAgaWYgKCRhbGxvd19kdXBsaWNhdGVzICYmIGlzc2V0KCR0aGlzLT5wYXJhbWV0ZXJzWyRuYW1lXSkpIHsKICAgICAgLy8gV2UgaGF2ZSBhbHJlYWR5IGFkZGVkIHBhcmFtZXRlcihzKSB3aXRoIHRoaXMgbmFtZSwgc28gYWRkIHRvIHRoZSBsaXN0CiAgICAgIGlmIChpc19zY2FsYXIoJHRoaXMtPnBhcmFtZXRlcnNbJG5hbWVdKSkgewogICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGR1cGxpY2F0ZSwgc28gdHJhbnNmb3JtIHNjYWxhciAoc3RyaW5nKQogICAgICAgIC8vIGludG8gYW4gYXJyYXkgc28gd2UgY2FuIGFkZCB0aGUgZHVwbGljYXRlcwogICAgICAgICR0aGlzLT5wYXJhbWV0ZXJzWyRuYW1lXSA9IGFycmF5KCR0aGlzLT5wYXJhbWV0ZXJzWyRuYW1lXSk7CiAgICAgIH0KCiAgICAgICR0aGlzLT5wYXJhbWV0ZXJzWyRuYW1lXVtdID0gJHZhbHVlOwogICAgfSBlbHNlIHsKICAgICAgJHRoaXMtPnBhcmFtZXRlcnNbJG5hbWVdID0gJHZhbHVlOwogICAgfQogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF9wYXJhbWV0ZXIoJG5hbWUpIHsKICAgIHJldHVybiBpc3NldCgkdGhpcy0+cGFyYW1ldGVyc1skbmFtZV0pID8gJHRoaXMtPnBhcmFtZXRlcnNbJG5hbWVdIDogbnVsbDsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfcGFyYW1ldGVycygpIHsKICAgIHJldHVybiAkdGhpcy0+cGFyYW1ldGVyczsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiB1bnNldF9wYXJhbWV0ZXIoJG5hbWUpIHsKICAgIHVuc2V0KCR0aGlzLT5wYXJhbWV0ZXJzWyRuYW1lXSk7CiAgfQoKICAvKioKICAgKiBUaGUgcmVxdWVzdCBwYXJhbWV0ZXJzLCBzb3J0ZWQgYW5kIGNvbmNhdGVuYXRlZCBpbnRvIGEgbm9ybWFsaXplZCBzdHJpbmcuCiAgICogQHJldHVybiBzdHJpbmcKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3NpZ25hYmxlX3BhcmFtZXRlcnMoKSB7CiAgICAvLyBHcmFiIGFsbCBwYXJhbWV0ZXJzCiAgICAkcGFyYW1zID0gJHRoaXMtPnBhcmFtZXRlcnM7CgogICAgLy8gUmVtb3ZlIG9hdXRoX3NpZ25hdHVyZSBpZiBwcmVzZW50CiAgICAvLyBSZWY6IFNwZWM6IDkuMS4xICgiVGhlIG9hdXRoX3NpZ25hdHVyZSBwYXJhbWV0ZXIgTVVTVCBiZSBleGNsdWRlZC4iKQogICAgaWYgKGlzc2V0KCRwYXJhbXNbJ29hdXRoX3NpZ25hdHVyZSddKSkgewogICAgICB1bnNldCgkcGFyYW1zWydvYXV0aF9zaWduYXR1cmUnXSk7CiAgICB9CgogICAgcmV0dXJuIE9BdXRoVXRpbDo6YnVpbGRfaHR0cF9xdWVyeSgkcGFyYW1zKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGJhc2Ugc3RyaW5nIG9mIHRoaXMgcmVxdWVzdAogICAqCiAgICogVGhlIGJhc2Ugc3RyaW5nIGRlZmluZWQgYXMgdGhlIG1ldGhvZCwgdGhlIHVybAogICAqIGFuZCB0aGUgcGFyYW1ldGVycyAobm9ybWFsaXplZCksIGVhY2ggdXJsZW5jb2RlZAogICAqIGFuZCB0aGUgY29uY2F0ZWQgd2l0aCAmLgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXRfc2lnbmF0dXJlX2Jhc2Vfc3RyaW5nKCkgewogICAgJHBhcnRzID0gYXJyYXkoCiAgICAgICR0aGlzLT5nZXRfbm9ybWFsaXplZF9odHRwX21ldGhvZCgpLAogICAgICAkdGhpcy0+Z2V0X25vcm1hbGl6ZWRfaHR0cF91cmwoKSwKICAgICAgJHRoaXMtPmdldF9zaWduYWJsZV9wYXJhbWV0ZXJzKCkKICAgICk7CgogICAgJHBhcnRzID0gT0F1dGhVdGlsOjp1cmxlbmNvZGVfcmZjMzk4NigkcGFydHMpOwoKICAgIHJldHVybiBpbXBsb2RlKCcmJywgJHBhcnRzKTsKICB9CgogIC8qKgogICAqIGp1c3QgdXBwZXJjYXNlcyB0aGUgaHR0cCBtZXRob2QKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZ2V0X25vcm1hbGl6ZWRfaHR0cF9tZXRob2QoKSB7CiAgICByZXR1cm4gc3RydG91cHBlcigkdGhpcy0+aHR0cF9tZXRob2QpOwogIH0KCiAgLyoqCiAgICogcGFyc2VzIHRoZSB1cmwgYW5kIHJlYnVpbGRzIGl0IHRvIGJlCiAgICogc2NoZW1lOi8vaG9zdC9wYXRoCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGdldF9ub3JtYWxpemVkX2h0dHBfdXJsKCkgewogICAgJHBhcnRzID0gcGFyc2VfdXJsKCR0aGlzLT5odHRwX3VybCk7CgogICAgJHBvcnQgPSBAJHBhcnRzWydwb3J0J107CiAgICAkc2NoZW1lID0gJHBhcnRzWydzY2hlbWUnXTsKICAgICRob3N0ID0gJHBhcnRzWydob3N0J107CiAgICAkcGF0aCA9IEAkcGFydHNbJ3BhdGgnXTsKCiAgICAkcG9ydCBvciAkcG9ydCA9ICgkc2NoZW1lID09ICdodHRwcycpID8gJzQ0MycgOiAnODAnOwoKICAgIGlmICgoJHNjaGVtZSA9PSAnaHR0cHMnICYmICRwb3J0ICE9ICc0NDMnKQogICAgICAgIHx8ICgkc2NoZW1lID09ICdodHRwJyAmJiAkcG9ydCAhPSAnODAnKSkgewogICAgICAkaG9zdCA9ICIkaG9zdDokcG9ydCI7CiAgICB9CiAgICByZXR1cm4gIiRzY2hlbWU6Ly8kaG9zdCRwYXRoIjsKICB9CgogIC8qKgogICAqIGJ1aWxkcyBhIHVybCB1c2FibGUgZm9yIGEgR0VUIHJlcXVlc3QKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gdG9fdXJsKCkgewogICAgJHBvc3RfZGF0YSA9ICR0aGlzLT50b19wb3N0ZGF0YSgpOwogICAgJG91dCA9ICR0aGlzLT5nZXRfbm9ybWFsaXplZF9odHRwX3VybCgpOwogICAgaWYgKCRwb3N0X2RhdGEpIHsKICAgICAgJG91dCAuPSAnPycuJHBvc3RfZGF0YTsKICAgIH0KICAgIHJldHVybiAkb3V0OwogIH0KCiAgLyoqCiAgICogYnVpbGRzIHRoZSBkYXRhIG9uZSB3b3VsZCBzZW5kIGluIGEgUE9TVCByZXF1ZXN0CiAgICovCiAgcHVibGljIGZ1bmN0aW9uIHRvX3Bvc3RkYXRhKCkgewogICAgcmV0dXJuIE9BdXRoVXRpbDo6YnVpbGRfaHR0cF9xdWVyeSgkdGhpcy0+cGFyYW1ldGVycyk7CiAgfQoKICAvKioKICAgKiBidWlsZHMgdGhlIEF1dGhvcml6YXRpb246IGhlYWRlcgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiB0b19oZWFkZXIoJHJlYWxtPW51bGwpIHsKICAgICRmaXJzdCA9IHRydWU7CglpZigkcmVhbG0pIHsKICAgICAgJG91dCA9ICdBdXRob3JpemF0aW9uOiBPQXV0aCByZWFsbT0iJyAuIE9BdXRoVXRpbDo6dXJsZW5jb2RlX3JmYzM5ODYoJHJlYWxtKSAuICciJzsKICAgICAgJGZpcnN0ID0gZmFsc2U7CiAgICB9IGVsc2UKICAgICAgJG91dCA9ICdBdXRob3JpemF0aW9uOiBPQXV0aCc7CgogICAgJHRvdGFsID0gYXJyYXkoKTsKICAgIGZvcmVhY2ggKCR0aGlzLT5wYXJhbWV0ZXJzIGFzICRrID0+ICR2KSB7CiAgICAgIGlmIChzdWJzdHIoJGssIDAsIDUpICE9ICJvYXV0aCIpIGNvbnRpbnVlOwogICAgICBpZiAoaXNfYXJyYXkoJHYpKSB7CiAgICAgICAgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uKCdBcnJheXMgbm90IHN1cHBvcnRlZCBpbiBoZWFkZXJzJyk7CiAgICAgIH0KICAgICAgJG91dCAuPSAoJGZpcnN0KSA/ICcgJyA6ICcsJzsKICAgICAgJG91dCAuPSBPQXV0aFV0aWw6OnVybGVuY29kZV9yZmMzOTg2KCRrKSAuCiAgICAgICAgICAgICAgJz0iJyAuCiAgICAgICAgICAgICAgT0F1dGhVdGlsOjp1cmxlbmNvZGVfcmZjMzk4NigkdikgLgogICAgICAgICAgICAgICciJzsKICAgICAgJGZpcnN0ID0gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gJG91dDsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkgewogICAgcmV0dXJuICR0aGlzLT50b191cmwoKTsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gc2lnbl9yZXF1ZXN0KCRzaWduYXR1cmVfbWV0aG9kLCAkY29uc3VtZXIsICR0b2tlbikgewogICAgJHRoaXMtPnNldF9wYXJhbWV0ZXIoCiAgICAgICJvYXV0aF9zaWduYXR1cmVfbWV0aG9kIiwKICAgICAgJHNpZ25hdHVyZV9tZXRob2QtPmdldF9uYW1lKCksCiAgICAgIGZhbHNlCiAgICApOwogICAgJHNpZ25hdHVyZSA9ICR0aGlzLT5idWlsZF9zaWduYXR1cmUoJHNpZ25hdHVyZV9tZXRob2QsICRjb25zdW1lciwgJHRva2VuKTsKICAgICR0aGlzLT5zZXRfcGFyYW1ldGVyKCJvYXV0aF9zaWduYXR1cmUiLCAkc2lnbmF0dXJlLCBmYWxzZSk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gYnVpbGRfc2lnbmF0dXJlKCRzaWduYXR1cmVfbWV0aG9kLCAkY29uc3VtZXIsICR0b2tlbikgewogICAgJHNpZ25hdHVyZSA9ICRzaWduYXR1cmVfbWV0aG9kLT5idWlsZF9zaWduYXR1cmUoJHRoaXMsICRjb25zdW1lciwgJHRva2VuKTsKICAgIHJldHVybiAkc2lnbmF0dXJlOwogIH0KCiAgLyoqCiAgICogdXRpbCBmdW5jdGlvbjogY3VycmVudCB0aW1lc3RhbXAKICAgKi8KICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZW5lcmF0ZV90aW1lc3RhbXAoKSB7CiAgICByZXR1cm4gdGltZSgpOwogIH0KCiAgLyoqCiAgICogdXRpbCBmdW5jdGlvbjogY3VycmVudCBub25jZQogICAqLwogIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdlbmVyYXRlX25vbmNlKCkgewogICAgJG10ID0gbWljcm90aW1lKCk7CiAgICAkcmFuZCA9IG10X3JhbmQoKTsKCiAgICByZXR1cm4gbWQ1KCRtdCAuICRyYW5kKTsgLy8gbWQ1cyBsb29rIG5pY2VyIHRoYW4gbnVtYmVycwogIH0KfQoKY2xhc3MgT0F1dGhTZXJ2ZXIgewogIHByb3RlY3RlZCAkdGltZXN0YW1wX3RocmVzaG9sZCA9IDMwMDsgLy8gaW4gc2Vjb25kcywgZml2ZSBtaW51dGVzCiAgcHJvdGVjdGVkICR2ZXJzaW9uID0gJzEuMCc7ICAgICAgICAgICAgIC8vIGhpIGJsYWluZQogIHByb3RlY3RlZCAkc2lnbmF0dXJlX21ldGhvZHMgPSBhcnJheSgpOwoKICBwcm90ZWN0ZWQgJGRhdGFfc3RvcmU7CgogIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRkYXRhX3N0b3JlKSB7CiAgICAkdGhpcy0+ZGF0YV9zdG9yZSA9ICRkYXRhX3N0b3JlOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGFkZF9zaWduYXR1cmVfbWV0aG9kKCRzaWduYXR1cmVfbWV0aG9kKSB7CiAgICAkdGhpcy0+c2lnbmF0dXJlX21ldGhvZHNbJHNpZ25hdHVyZV9tZXRob2QtPmdldF9uYW1lKCldID0KICAgICAgJHNpZ25hdHVyZV9tZXRob2Q7CiAgfQoKICAvLyBoaWdoIGxldmVsIGZ1bmN0aW9ucwoKICAvKioKICAgKiBwcm9jZXNzIGEgcmVxdWVzdF90b2tlbiByZXF1ZXN0CiAgICogcmV0dXJucyB0aGUgcmVxdWVzdCB0b2tlbiBvbiBzdWNjZXNzCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGZldGNoX3JlcXVlc3RfdG9rZW4oJiRyZXF1ZXN0KSB7CiAgICAkdGhpcy0+Z2V0X3ZlcnNpb24oJHJlcXVlc3QpOwoKICAgICRjb25zdW1lciA9ICR0aGlzLT5nZXRfY29uc3VtZXIoJHJlcXVlc3QpOwoKICAgIC8vIG5vIHRva2VuIHJlcXVpcmVkIGZvciB0aGUgaW5pdGlhbCB0b2tlbiByZXF1ZXN0CiAgICAkdG9rZW4gPSBOVUxMOwoKICAgICR0aGlzLT5jaGVja19zaWduYXR1cmUoJHJlcXVlc3QsICRjb25zdW1lciwgJHRva2VuKTsKCiAgICAvLyBSZXYgQSBjaGFuZ2UKICAgICRjYWxsYmFjayA9ICRyZXF1ZXN0LT5nZXRfcGFyYW1ldGVyKCdvYXV0aF9jYWxsYmFjaycpOwogICAgJG5ld190b2tlbiA9ICR0aGlzLT5kYXRhX3N0b3JlLT5uZXdfcmVxdWVzdF90b2tlbigkY29uc3VtZXIsICRjYWxsYmFjayk7CgogICAgcmV0dXJuICRuZXdfdG9rZW47CiAgfQoKICAvKioKICAgKiBwcm9jZXNzIGFuIGFjY2Vzc190b2tlbiByZXF1ZXN0CiAgICogcmV0dXJucyB0aGUgYWNjZXNzIHRva2VuIG9uIHN1Y2Nlc3MKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZmV0Y2hfYWNjZXNzX3Rva2VuKCYkcmVxdWVzdCkgewogICAgJHRoaXMtPmdldF92ZXJzaW9uKCRyZXF1ZXN0KTsKCiAgICAkY29uc3VtZXIgPSAkdGhpcy0+Z2V0X2NvbnN1bWVyKCRyZXF1ZXN0KTsKCiAgICAvLyByZXF1aXJlcyBhdXRob3JpemVkIHJlcXVlc3QgdG9rZW4KICAgICR0b2tlbiA9ICR0aGlzLT5nZXRfdG9rZW4oJHJlcXVlc3QsICRjb25zdW1lciwgInJlcXVlc3QiKTsKCiAgICAkdGhpcy0+Y2hlY2tfc2lnbmF0dXJlKCRyZXF1ZXN0LCAkY29uc3VtZXIsICR0b2tlbik7CgogICAgLy8gUmV2IEEgY2hhbmdlCiAgICAkdmVyaWZpZXIgPSAkcmVxdWVzdC0+Z2V0X3BhcmFtZXRlcignb2F1dGhfdmVyaWZpZXInKTsKICAgICRuZXdfdG9rZW4gPSAkdGhpcy0+ZGF0YV9zdG9yZS0+bmV3X2FjY2Vzc190b2tlbigkdG9rZW4sICRjb25zdW1lciwgJHZlcmlmaWVyKTsKCiAgICByZXR1cm4gJG5ld190b2tlbjsKICB9CgogIC8qKgogICAqIHZlcmlmeSBhbiBhcGkgY2FsbCwgY2hlY2tzIGFsbCB0aGUgcGFyYW1ldGVycwogICAqLwogIHB1YmxpYyBmdW5jdGlvbiB2ZXJpZnlfcmVxdWVzdCgmJHJlcXVlc3QpIHsKICAgICR0aGlzLT5nZXRfdmVyc2lvbigkcmVxdWVzdCk7CiAgICAkY29uc3VtZXIgPSAkdGhpcy0+Z2V0X2NvbnN1bWVyKCRyZXF1ZXN0KTsKICAgICR0b2tlbiA9ICR0aGlzLT5nZXRfdG9rZW4oJHJlcXVlc3QsICRjb25zdW1lciwgImFjY2VzcyIpOwogICAgJHRoaXMtPmNoZWNrX3NpZ25hdHVyZSgkcmVxdWVzdCwgJGNvbnN1bWVyLCAkdG9rZW4pOwogICAgcmV0dXJuIGFycmF5KCRjb25zdW1lciwgJHRva2VuKTsKICB9CgogIC8vIEludGVybmFscyBmcm9tIGhlcmUKICAvKioKICAgKiB2ZXJzaW9uIDEKICAgKi8KICBwcml2YXRlIGZ1bmN0aW9uIGdldF92ZXJzaW9uKCYkcmVxdWVzdCkgewogICAgJHZlcnNpb24gPSAkcmVxdWVzdC0+Z2V0X3BhcmFtZXRlcigib2F1dGhfdmVyc2lvbiIpOwogICAgaWYgKCEkdmVyc2lvbikgewogICAgICAvLyBTZXJ2aWNlIFByb3ZpZGVycyBNVVNUIGFzc3VtZSB0aGUgcHJvdG9jb2wgdmVyc2lvbiB0byBiZSAxLjAgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHByZXNlbnQuIAogICAgICAvLyBDaGFwdGVyIDcuMCAoIkFjY2Vzc2luZyBQcm90ZWN0ZWQgUmVzc291cmNlcyIpCiAgICAgICR2ZXJzaW9uID0gJzEuMCc7CiAgICB9CiAgICBpZiAoJHZlcnNpb24gIT09ICR0aGlzLT52ZXJzaW9uKSB7CiAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbigiT0F1dGggdmVyc2lvbiAnJHZlcnNpb24nIG5vdCBzdXBwb3J0ZWQiKTsKICAgIH0KICAgIHJldHVybiAkdmVyc2lvbjsKICB9CgogIC8qKgogICAqIGZpZ3VyZSBvdXQgdGhlIHNpZ25hdHVyZSB3aXRoIHNvbWUgZGVmYXVsdHMKICAgKi8KICBwcml2YXRlIGZ1bmN0aW9uIGdldF9zaWduYXR1cmVfbWV0aG9kKCYkcmVxdWVzdCkgewogICAgJHNpZ25hdHVyZV9tZXRob2QgPQogICAgICAgIEAkcmVxdWVzdC0+Z2V0X3BhcmFtZXRlcigib2F1dGhfc2lnbmF0dXJlX21ldGhvZCIpOwoKICAgIGlmICghJHNpZ25hdHVyZV9tZXRob2QpIHsKICAgICAgLy8gQWNjb3JkaW5nIHRvIGNoYXB0ZXIgNyAoIkFjY2Vzc2luZyBQcm90ZWN0ZWQgUmVzc291cmNlcyIpIHRoZSBzaWduYXR1cmUtbWV0aG9kCiAgICAgIC8vIHBhcmFtZXRlciBpcyByZXF1aXJlZCwgYW5kIHdlIGNhbid0IGp1c3QgZmFsbGJhY2sgdG8gUExBSU5URVhUCiAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbignTm8gc2lnbmF0dXJlIG1ldGhvZCBwYXJhbWV0ZXIuIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkJyk7CiAgICB9CgogICAgaWYgKCFpbl9hcnJheSgkc2lnbmF0dXJlX21ldGhvZCwKICAgICAgICAgICAgICAgICAgYXJyYXlfa2V5cygkdGhpcy0+c2lnbmF0dXJlX21ldGhvZHMpKSkgewogICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24oCiAgICAgICAgIlNpZ25hdHVyZSBtZXRob2QgJyRzaWduYXR1cmVfbWV0aG9kJyBub3Qgc3VwcG9ydGVkICIgLgogICAgICAgICJ0cnkgb25lIG9mIHRoZSBmb2xsb3dpbmc6ICIgLgogICAgICAgIGltcGxvZGUoIiwgIiwgYXJyYXlfa2V5cygkdGhpcy0+c2lnbmF0dXJlX21ldGhvZHMpKQogICAgICApOwogICAgfQogICAgcmV0dXJuICR0aGlzLT5zaWduYXR1cmVfbWV0aG9kc1skc2lnbmF0dXJlX21ldGhvZF07CiAgfQoKICAvKioKICAgKiB0cnkgdG8gZmluZCB0aGUgY29uc3VtZXIgZm9yIHRoZSBwcm92aWRlZCByZXF1ZXN0J3MgY29uc3VtZXIga2V5CiAgICovCiAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfY29uc3VtZXIoJiRyZXF1ZXN0KSB7CiAgICAkY29uc3VtZXJfa2V5ID0gQCRyZXF1ZXN0LT5nZXRfcGFyYW1ldGVyKCJvYXV0aF9jb25zdW1lcl9rZXkiKTsKICAgIGlmICghJGNvbnN1bWVyX2tleSkgewogICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24oIkludmFsaWQgY29uc3VtZXIga2V5Iik7CiAgICB9CgogICAgJGNvbnN1bWVyID0gJHRoaXMtPmRhdGFfc3RvcmUtPmxvb2t1cF9jb25zdW1lcigkY29uc3VtZXJfa2V5KTsKICAgIGlmICghJGNvbnN1bWVyKSB7CiAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbigiSW52YWxpZCBjb25zdW1lciIpOwogICAgfQoKICAgIHJldHVybiAkY29uc3VtZXI7CiAgfQoKICAvKioKICAgKiB0cnkgdG8gZmluZCB0aGUgdG9rZW4gZm9yIHRoZSBwcm92aWRlZCByZXF1ZXN0J3MgdG9rZW4ga2V5CiAgICovCiAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfdG9rZW4oJiRyZXF1ZXN0LCAkY29uc3VtZXIsICR0b2tlbl90eXBlPSJhY2Nlc3MiKSB7CiAgICAkdG9rZW5fZmllbGQgPSBAJHJlcXVlc3QtPmdldF9wYXJhbWV0ZXIoJ29hdXRoX3Rva2VuJyk7CiAgICAkdG9rZW4gPSAkdGhpcy0+ZGF0YV9zdG9yZS0+bG9va3VwX3Rva2VuKAogICAgICAkY29uc3VtZXIsICR0b2tlbl90eXBlLCAkdG9rZW5fZmllbGQKICAgICk7CiAgICBpZiAoISR0b2tlbikgewogICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24oIkludmFsaWQgJHRva2VuX3R5cGUgdG9rZW46ICR0b2tlbl9maWVsZCIpOwogICAgfQogICAgcmV0dXJuICR0b2tlbjsKICB9CgogIC8qKgogICAqIGFsbC1pbi1vbmUgZnVuY3Rpb24gdG8gY2hlY2sgdGhlIHNpZ25hdHVyZSBvbiBhIHJlcXVlc3QKICAgKiBzaG91bGQgZ3Vlc3MgdGhlIHNpZ25hdHVyZSBtZXRob2QgYXBwcm9wcmlhdGVseQogICAqLwogIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tfc2lnbmF0dXJlKCYkcmVxdWVzdCwgJGNvbnN1bWVyLCAkdG9rZW4pIHsKICAgIC8vIHRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGluIGEgZGlmZmVyZW50IG1ldGhvZAogICAgJHRpbWVzdGFtcCA9IEAkcmVxdWVzdC0+Z2V0X3BhcmFtZXRlcignb2F1dGhfdGltZXN0YW1wJyk7CiAgICAkbm9uY2UgPSBAJHJlcXVlc3QtPmdldF9wYXJhbWV0ZXIoJ29hdXRoX25vbmNlJyk7CgogICAgJHRoaXMtPmNoZWNrX3RpbWVzdGFtcCgkdGltZXN0YW1wKTsKICAgICR0aGlzLT5jaGVja19ub25jZSgkY29uc3VtZXIsICR0b2tlbiwgJG5vbmNlLCAkdGltZXN0YW1wKTsKCiAgICAkc2lnbmF0dXJlX21ldGhvZCA9ICR0aGlzLT5nZXRfc2lnbmF0dXJlX21ldGhvZCgkcmVxdWVzdCk7CgogICAgJHNpZ25hdHVyZSA9ICRyZXF1ZXN0LT5nZXRfcGFyYW1ldGVyKCdvYXV0aF9zaWduYXR1cmUnKTsKICAgICR2YWxpZF9zaWcgPSAkc2lnbmF0dXJlX21ldGhvZC0+Y2hlY2tfc2lnbmF0dXJlKAogICAgICAkcmVxdWVzdCwKICAgICAgJGNvbnN1bWVyLAogICAgICAkdG9rZW4sCiAgICAgICRzaWduYXR1cmUKICAgICk7CgogICAgaWYgKCEkdmFsaWRfc2lnKSB7CiAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbigiSW52YWxpZCBzaWduYXR1cmUiKTsKICAgIH0KICB9CgogIC8qKgogICAqIGNoZWNrIHRoYXQgdGhlIHRpbWVzdGFtcCBpcyBuZXcgZW5vdWdoCiAgICovCiAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja190aW1lc3RhbXAoJHRpbWVzdGFtcCkgewogICAgaWYoICEgJHRpbWVzdGFtcCApCiAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbigKICAgICAgICAnTWlzc2luZyB0aW1lc3RhbXAgcGFyYW1ldGVyLiBUaGUgcGFyYW1ldGVyIGlzIHJlcXVpcmVkJwogICAgICApOwogICAgCiAgICAvLyB2ZXJpZnkgdGhhdCB0aW1lc3RhbXAgaXMgcmVjZW50aXNoCiAgICAkbm93ID0gdGltZSgpOwogICAgaWYgKGFicygkbm93IC0gJHRpbWVzdGFtcCkgPiAkdGhpcy0+dGltZXN0YW1wX3RocmVzaG9sZCkgewogICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24oCiAgICAgICAgIkV4cGlyZWQgdGltZXN0YW1wLCB5b3VycyAkdGltZXN0YW1wLCBvdXJzICRub3ciCiAgICAgICk7CiAgICB9CiAgfQoKICAvKioKICAgKiBjaGVjayB0aGF0IHRoZSBub25jZSBpcyBub3QgcmVwZWF0ZWQKICAgKi8KICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrX25vbmNlKCRjb25zdW1lciwgJHRva2VuLCAkbm9uY2UsICR0aW1lc3RhbXApIHsKICAgIGlmKCAhICRub25jZSApCiAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbigKICAgICAgICAnTWlzc2luZyBub25jZSBwYXJhbWV0ZXIuIFRoZSBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQnCiAgICAgICk7CgogICAgLy8gdmVyaWZ5IHRoYXQgdGhlIG5vbmNlIGlzIHVuaXF1ZWlzaAogICAgJGZvdW5kID0gJHRoaXMtPmRhdGFfc3RvcmUtPmxvb2t1cF9ub25jZSgKICAgICAgJGNvbnN1bWVyLAogICAgICAkdG9rZW4sCiAgICAgICRub25jZSwKICAgICAgJHRpbWVzdGFtcAogICAgKTsKICAgIGlmICgkZm91bmQpIHsKICAgICAgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uKCJOb25jZSBhbHJlYWR5IHVzZWQ6ICRub25jZSIpOwogICAgfQogIH0KCn0KCmNsYXNzIE9BdXRoRGF0YVN0b3JlIHsKICBmdW5jdGlvbiBsb29rdXBfY29uc3VtZXIoJGNvbnN1bWVyX2tleSkgewogICAgLy8gaW1wbGVtZW50IG1lCiAgfQoKICBmdW5jdGlvbiBsb29rdXBfdG9rZW4oJGNvbnN1bWVyLCAkdG9rZW5fdHlwZSwgJHRva2VuKSB7CiAgICAvLyBpbXBsZW1lbnQgbWUKICB9CgogIGZ1bmN0aW9uIGxvb2t1cF9ub25jZSgkY29uc3VtZXIsICR0b2tlbiwgJG5vbmNlLCAkdGltZXN0YW1wKSB7CiAgICAvLyBpbXBsZW1lbnQgbWUKICB9CgogIGZ1bmN0aW9uIG5ld19yZXF1ZXN0X3Rva2VuKCRjb25zdW1lciwgJGNhbGxiYWNrID0gbnVsbCkgewogICAgLy8gcmV0dXJuIGEgbmV3IHRva2VuIGF0dGFjaGVkIHRvIHRoaXMgY29uc3VtZXIKICB9CgogIGZ1bmN0aW9uIG5ld19hY2Nlc3NfdG9rZW4oJHRva2VuLCAkY29uc3VtZXIsICR2ZXJpZmllciA9IG51bGwpIHsKICAgIC8vIHJldHVybiBhIG5ldyBhY2Nlc3MgdG9rZW4gYXR0YWNoZWQgdG8gdGhpcyBjb25zdW1lcgogICAgLy8gZm9yIHRoZSB1c2VyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRva2VuIGlmIHRoZSByZXF1ZXN0IHRva2VuCiAgICAvLyBpcyBhdXRob3JpemVkCiAgICAvLyBzaG91bGQgYWxzbyBpbnZhbGlkYXRlIHRoZSByZXF1ZXN0IHRva2VuCiAgfQoKfQoKY2xhc3MgT0F1dGhVdGlsIHsKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVybGVuY29kZV9yZmMzOTg2KCRpbnB1dCkgewogIGlmIChpc19hcnJheSgkaW5wdXQpKSB7CiAgICByZXR1cm4gYXJyYXlfbWFwKGFycmF5KCdPQXV0aFV0aWwnLCAndXJsZW5jb2RlX3JmYzM5ODYnKSwgJGlucHV0KTsKICB9IGVsc2UgaWYgKGlzX3NjYWxhcigkaW5wdXQpKSB7CiAgICByZXR1cm4gc3RyX3JlcGxhY2UoCiAgICAgICcrJywKICAgICAgJyAnLAogICAgICBzdHJfcmVwbGFjZSgnJTdFJywgJ34nLCByYXd1cmxlbmNvZGUoJGlucHV0KSkKICAgICk7CiAgfSBlbHNlIHsKICAgIHJldHVybiAnJzsKICB9Cn0KCgogIC8vIFRoaXMgZGVjb2RlIGZ1bmN0aW9uIGlzbid0IHRha2luZyBpbnRvIGNvbnNpZGVyYXRpb24gdGhlIGFib3ZlCiAgLy8gbW9kaWZpY2F0aW9ucyB0byB0aGUgZW5jb2RpbmcgcHJvY2Vzcy4gSG93ZXZlciwgdGhpcyBtZXRob2QgZG9lc24ndAogIC8vIHNlZW0gdG8gYmUgdXNlZCBhbnl3aGVyZSBzbyBsZWF2aW5nIGl0IGFzIGlzLgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXJsZGVjb2RlX3JmYzM5ODYoJHN0cmluZykgewogICAgcmV0dXJuIHVybGRlY29kZSgkc3RyaW5nKTsKICB9CgogIC8vIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHR1cm5pbmcgdGhlIEF1dGhvcml6YXRpb246IGhlYWRlciBpbnRvCiAgLy8gcGFyYW1ldGVycywgaGFzIHRvIGRvIHNvbWUgdW5lc2NhcGluZwogIC8vIENhbiBmaWx0ZXIgb3V0IGFueSBub24tb2F1dGggcGFyYW1ldGVycyBpZiBuZWVkZWQgKGRlZmF1bHQgYmVoYXZpb3VyKQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3BsaXRfaGVhZGVyKCRoZWFkZXIsICRvbmx5X2FsbG93X29hdXRoX3BhcmFtZXRlcnMgPSB0cnVlKSB7CiAgICAkcGF0dGVybiA9ICcvKChbLV9hLXpdKik9KCIoW14iXSopInwoW14sXSopKSw/KS8nOwogICAgJG9mZnNldCA9IDA7CiAgICAkcGFyYW1zID0gYXJyYXkoKTsKICAgIHdoaWxlIChwcmVnX21hdGNoKCRwYXR0ZXJuLCAkaGVhZGVyLCAkbWF0Y2hlcywgUFJFR19PRkZTRVRfQ0FQVFVSRSwgJG9mZnNldCkgPiAwKSB7CiAgICAgICRtYXRjaCA9ICRtYXRjaGVzWzBdOwogICAgICAkaGVhZGVyX25hbWUgPSAkbWF0Y2hlc1syXVswXTsKICAgICAgJGhlYWRlcl9jb250ZW50ID0gKGlzc2V0KCRtYXRjaGVzWzVdKSkgPyAkbWF0Y2hlc1s1XVswXSA6ICRtYXRjaGVzWzRdWzBdOwogICAgICBpZiAocHJlZ19tYXRjaCgnL15vYXV0aF8vJywgJGhlYWRlcl9uYW1lKSB8fCAhJG9ubHlfYWxsb3dfb2F1dGhfcGFyYW1ldGVycykgewogICAgICAgICRwYXJhbXNbJGhlYWRlcl9uYW1lXSA9IE9BdXRoVXRpbDo6dXJsZGVjb2RlX3JmYzM5ODYoJGhlYWRlcl9jb250ZW50KTsKICAgICAgfQogICAgICAkb2Zmc2V0ID0gJG1hdGNoWzFdICsgc3RybGVuKCRtYXRjaFswXSk7CiAgICB9CgogICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3JlYWxtJ10pKSB7CiAgICAgIHVuc2V0KCRwYXJhbXNbJ3JlYWxtJ10pOwogICAgfQoKICAgIHJldHVybiAkcGFyYW1zOwogIH0KCiAgLy8gaGVscGVyIHRvIHRyeSB0byBzb3J0IG91dCBoZWFkZXJzIGZvciBwZW9wbGUgd2hvIGFyZW4ndCBydW5uaW5nIGFwYWNoZQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X2hlYWRlcnMoKSB7CiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdhcGFjaGVfcmVxdWVzdF9oZWFkZXJzJykpIHsKICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIGdldCB0aGUgYWN0dWFsIEF1dGhvcml6YXRpb246IGhlYWRlcgogICAgICAvLyBiZWNhdXNlIGFwYWNoZSB0ZW5kcyB0byB0ZWxsIHVzIGl0IGRvZXNuJ3QgZXhpc3QKICAgICAgJGhlYWRlcnMgPSBhcGFjaGVfcmVxdWVzdF9oZWFkZXJzKCk7CgogICAgICAvLyBzYW5pdGl6ZSB0aGUgb3V0cHV0IG9mIGFwYWNoZV9yZXF1ZXN0X2hlYWRlcnMgYmVjYXVzZQogICAgICAvLyB3ZSBhbHdheXMgd2FudCB0aGUga2V5cyB0byBiZSBDYXNlZC1MaWtlLVRoaXMgYW5kIGFyaCgpCiAgICAgIC8vIHJldHVybnMgdGhlIGhlYWRlcnMgaW4gdGhlIHNhbWUgY2FzZSBhcyB0aGV5IGFyZSBpbiB0aGUKICAgICAgLy8gcmVxdWVzdAogICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgZm9yZWFjaCggJGhlYWRlcnMgQVMgJGtleSA9PiAkdmFsdWUgKSB7CiAgICAgICAgJGtleSA9IHN0cl9yZXBsYWNlKAogICAgICAgICAgICAiICIsCiAgICAgICAgICAgICItIiwKICAgICAgICAgICAgdWN3b3JkcyhzdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCItIiwgIiAiLCAka2V5KSkpCiAgICAgICAgICApOwogICAgICAgICRvdXRbJGtleV0gPSAkdmFsdWU7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIG90aGVyd2lzZSB3ZSBkb24ndCBoYXZlIGFwYWNoZSBhbmQgYXJlIGp1c3QgZ29pbmcgdG8gaGF2ZSB0byBob3BlCiAgICAgIC8vIHRoYXQgJF9TRVJWRVIgYWN0dWFsbHkgY29udGFpbnMgd2hhdCB3ZSBuZWVkCiAgICAgICRvdXQgPSBhcnJheSgpOwogICAgICBpZiggaXNzZXQoJF9TRVJWRVJbJ0NPTlRFTlRfVFlQRSddKSApCiAgICAgICAgJG91dFsnQ29udGVudC1UeXBlJ10gPSAkX1NFUlZFUlsnQ09OVEVOVF9UWVBFJ107CiAgICAgIGlmKCBpc3NldCgkX0VOVlsnQ09OVEVOVF9UWVBFJ10pICkKICAgICAgICAkb3V0WydDb250ZW50LVR5cGUnXSA9ICRfRU5WWydDT05URU5UX1RZUEUnXTsKCiAgICAgIGZvcmVhY2ggKCRfU0VSVkVSIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgaWYgKHN1YnN0cigka2V5LCAwLCA1KSA9PSAiSFRUUF8iKSB7CiAgICAgICAgICAvLyB0aGlzIGlzIGNoYW9zLCBiYXNpY2FsbHkgaXQgaXMganVzdCB0aGVyZSB0byBjYXBpdGFsaXplIHRoZSBmaXJzdAogICAgICAgICAgLy8gbGV0dGVyIG9mIGV2ZXJ5IHdvcmQgdGhhdCBpcyBub3QgYW4gaW5pdGlhbCBIVFRQIGFuZCBzdHJpcCBIVFRQCiAgICAgICAgICAvLyBjb2RlIGZyb20gcHJ6ZW1lawogICAgICAgICAgJGtleSA9IHN0cl9yZXBsYWNlKAogICAgICAgICAgICAiICIsCiAgICAgICAgICAgICItIiwKICAgICAgICAgICAgdWN3b3JkcyhzdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCJfIiwgIiAiLCBzdWJzdHIoJGtleSwgNSkpKSkKICAgICAgICAgICk7CiAgICAgICAgICAkb3V0WyRrZXldID0gJHZhbHVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuICRvdXQ7CiAgfQoKICAvLyBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgaW5wdXQgbGlrZSBhPWImYT1jJmQ9ZSBhbmQgcmV0dXJucyB0aGUgcGFyc2VkCiAgLy8gcGFyYW1ldGVycyBsaWtlIHRoaXMKICAvLyBhcnJheSgnYScgPT4gYXJyYXkoJ2InLCdjJyksICdkJyA9PiAnZScpCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZV9wYXJhbWV0ZXJzKCAkaW5wdXQgKSB7CiAgICBpZiAoIWlzc2V0KCRpbnB1dCkgfHwgISRpbnB1dCkgcmV0dXJuIGFycmF5KCk7CgogICAgJHBhaXJzID0gZXhwbG9kZSgnJicsICRpbnB1dCk7CgogICAgJHBhcnNlZF9wYXJhbWV0ZXJzID0gYXJyYXkoKTsKICAgIGZvcmVhY2ggKCRwYWlycyBhcyAkcGFpcikgewogICAgICAkc3BsaXQgPSBleHBsb2RlKCc9JywgJHBhaXIsIDIpOwogICAgICAkcGFyYW1ldGVyID0gT0F1dGhVdGlsOjp1cmxkZWNvZGVfcmZjMzk4Nigkc3BsaXRbMF0pOwogICAgICAkdmFsdWUgPSBpc3NldCgkc3BsaXRbMV0pID8gT0F1dGhVdGlsOjp1cmxkZWNvZGVfcmZjMzk4Nigkc3BsaXRbMV0pIDogJyc7CgogICAgICBpZiAoaXNzZXQoJHBhcnNlZF9wYXJhbWV0ZXJzWyRwYXJhbWV0ZXJdKSkgewogICAgICAgIC8vIFdlIGhhdmUgYWxyZWFkeSByZWNpZXZlZCBwYXJhbWV0ZXIocykgd2l0aCB0aGlzIG5hbWUsIHNvIGFkZCB0byB0aGUgbGlzdAogICAgICAgIC8vIG9mIHBhcmFtZXRlcnMgd2l0aCB0aGlzIG5hbWUKCiAgICAgICAgaWYgKGlzX3NjYWxhcigkcGFyc2VkX3BhcmFtZXRlcnNbJHBhcmFtZXRlcl0pKSB7CiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBkdXBsaWNhdGUsIHNvIHRyYW5zZm9ybSBzY2FsYXIgKHN0cmluZykgaW50byBhbiBhcnJheQogICAgICAgICAgLy8gc28gd2UgY2FuIGFkZCB0aGUgZHVwbGljYXRlcwogICAgICAgICAgJHBhcnNlZF9wYXJhbWV0ZXJzWyRwYXJhbWV0ZXJdID0gYXJyYXkoJHBhcnNlZF9wYXJhbWV0ZXJzWyRwYXJhbWV0ZXJdKTsKICAgICAgICB9CgogICAgICAgICRwYXJzZWRfcGFyYW1ldGVyc1skcGFyYW1ldGVyXVtdID0gJHZhbHVlOwogICAgICB9IGVsc2UgewogICAgICAgICRwYXJzZWRfcGFyYW1ldGVyc1skcGFyYW1ldGVyXSA9ICR2YWx1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuICRwYXJzZWRfcGFyYW1ldGVyczsKICB9CgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYnVpbGRfaHR0cF9xdWVyeSgkcGFyYW1zKSB7CiAgICBpZiAoISRwYXJhbXMpIHJldHVybiAnJzsKCiAgICAvLyBVcmxlbmNvZGUgYm90aCBrZXlzIGFuZCB2YWx1ZXMKICAgICRrZXlzID0gT0F1dGhVdGlsOjp1cmxlbmNvZGVfcmZjMzk4NihhcnJheV9rZXlzKCRwYXJhbXMpKTsKICAgICR2YWx1ZXMgPSBPQXV0aFV0aWw6OnVybGVuY29kZV9yZmMzOTg2KGFycmF5X3ZhbHVlcygkcGFyYW1zKSk7CiAgICAkcGFyYW1zID0gYXJyYXlfY29tYmluZSgka2V5cywgJHZhbHVlcyk7CgogICAgLy8gUGFyYW1ldGVycyBhcmUgc29ydGVkIGJ5IG5hbWUsIHVzaW5nIGxleGljb2dyYXBoaWNhbCBieXRlIHZhbHVlIG9yZGVyaW5nLgogICAgLy8gUmVmOiBTcGVjOiA5LjEuMSAoMSkKICAgIHVrc29ydCgkcGFyYW1zLCAnc3RyY21wJyk7CgogICAgJHBhaXJzID0gYXJyYXkoKTsKICAgIGZvcmVhY2ggKCRwYXJhbXMgYXMgJHBhcmFtZXRlciA9PiAkdmFsdWUpIHsKICAgICAgaWYgKGlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAvLyBJZiB0d28gb3IgbW9yZSBwYXJhbWV0ZXJzIHNoYXJlIHRoZSBzYW1lIG5hbWUsIHRoZXkgYXJlIHNvcnRlZCBieSB0aGVpciB2YWx1ZQogICAgICAgIC8vIFJlZjogU3BlYzogOS4xLjEgKDEpCiAgICAgICAgbmF0c29ydCgkdmFsdWUpOwogICAgICAgIGZvcmVhY2ggKCR2YWx1ZSBhcyAkZHVwbGljYXRlX3ZhbHVlKSB7CiAgICAgICAgICAkcGFpcnNbXSA9ICRwYXJhbWV0ZXIgLiAnPScgLiAkZHVwbGljYXRlX3ZhbHVlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAkcGFpcnNbXSA9ICRwYXJhbWV0ZXIgLiAnPScgLiAkdmFsdWU7CiAgICAgIH0KICAgIH0KICAgIC8vIEZvciBlYWNoIHBhcmFtZXRlciwgdGhlIG5hbWUgaXMgc2VwYXJhdGVkIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgYnkgYW4gJz0nIGNoYXJhY3RlciAoQVNDSUkgY29kZSA2MSkKICAgIC8vIEVhY2ggbmFtZS12YWx1ZSBwYWlyIGlzIHNlcGFyYXRlZCBieSBhbiAnJicgY2hhcmFjdGVyIChBU0NJSSBjb2RlIDM4KQogICAgcmV0dXJuIGltcGxvZGUoJyYnLCAkcGFpcnMpOwogIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/signin.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAJYAAAAsCAYAAACHUEHxAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAUzSURBVHja7JxdaxxVHMaf2Zmss9ndhJDEEJN2kzYBUauNCaHWmkoKLRQUFS+8KtgP0HyBICq9UT+CUPGyVyoFL0S9qAUDFksuLLYxTYakTdO8NbtxNjsvZzxnttlk2j2zxN2FsPN/YJkJZ+cMnPnx/F9yZpW848Z/XNr4aHnb+hYkUpXq0uM43932vnLVWDnSrMUmBlubLyk1vMGV+S1c7EvRSkdIHv/MbJowHQZtwSzMDj+fwmxhu6Y3SWgKbMWDsV2gFY+QUrqKO4/y0GzXQ87zan4DlUPlMA+uR4sdJeW4bwmmNNtjYKj904/FAJfPW4+5SQdbginN4XSxOjx7lX8cPi8jriInwZQmwhWThMJffrqJG7/P4dQb/ThzduR/hEImnZvUwGAxEQpFHiT5wtT0GvT2Hv/49tn9Ta7wEtMGpHOTGjgUFsGSu4qWSJeO+3WeneSdHCuKYIkci/E8SPIFTddL519+cS0wNjrSi7EzQyHJuwLHT95J0QuFEGAxuBJXUZ/bBSvZMxAYm/5nE2+Oy91IEWWn324gx4oeWGwnea/sWE/r3GhvaMXHDYtXhR5VhVFN3n2wJL2mvWB99mEmMLaQzcEM6VGpMdHPoD5WZMFywxxrTyi8fm8JnV1te8hpQhgzflXIyLGiKHe33VD+6SdTCRSc4tjPU4tg9sPS2Iv9Oo4P98nB4o5lcb9yybGi2W5wQ/KgY4cSuLVUrOtSh4LJ+3xuHa96lasDcqwIOpZXCoXln/5AR55HvBbcXlNgOcGxk/3d/Doz9AYWVYTRDYXi0ct6TRuqhkxrFid6UjwZD+7WMjaz2EITrSLpGQmmNGEqYb2m9ZiKdTNfpuzT+AzkSKQyYHkoOtajnIWOdJxWhFS1VjlLvmMdbtExv2Jyyjy0E1ykKrTGoTJW8xBMKY8te2zyT2PC2Mx/QEtDqlaZ1gQuv565oKVdd+rT+3/3WcsrBBapasW7OpF+rTenrFz97kisOTnRPHj0kt8ur5G2rnyD1MWPaaUjlrWbM7Ng5r/QCgsPZlPDw9ieXazpPZREMzyboWDcpwWPkNRUC/J3ZnhVaPMsPmfWHl5Vg+fYgEt7SCNlWpwlwZTGbBdePXbjxThYrlefuUkHWoIpzXMsflYHVxH7ZhynPnOTDrZrcaY4WA53lfK2cvPX7zH31w30v3wKI+Pv7TsUspC5SY0MliNyLJEHlX/4azNT6Enq/hGn391n9i52+rnSuUkNDBZniudYcldJN2ml436dZyd5J8eKYo7FHQuicpNsmtJVrXR+7evJwFjv4CiGxt4JMawYB4s2ZEVSjnAskQdJWgK6qpbOB1qSgbHNxWl+3Xm5Y/FQKCzRo3ZD9BzLz7H8yo1VdKyn1XvinPS6YrtBOJYb/h1SAyfvfuVWORRmJr4KjOUWHsAzQ377SuRYtnxuUqOD5cpdRdd2wVq6/hvaOl8o/V1x7+iTUEiOFUGwXPfJv3QkLYGEnuRwFF1p8Y8f8HAPJHr3S+g7fjoELBXMcqVzkxq53SAapOLBS1wlcfQY2N1bxeQ9Hfw90fX1e/y6typWB+RYUXQsVgyFsl5TPjOElpgKZe424FqBse6RkzArQONZBFVkQ6G/810CiLaRQ7bnFaRGxnlkC1aIWWMRTVt5WkVSGbI8ARYLzYPU9Rzy/PMMdAC940ySgMWKjmU9WkK8o4sWhFS1rNXlomPphzMw5+/6b+nE2wkuUhVQrS0jb8xAMKXYj7NjxuTnE3nDoJcpSFUrkckgc/mTC/8JMADBjqjQjZKxYgAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/lib/twitteroauth.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIEFicmFoYW0gV2lsbGlhbXMgKGFicmFoYW1AYWJyYWguYW0pIGh0dHA6Ly9hYnJhaC5hbQogKgogKiBUaGUgZmlyc3QgUEhQIExpYnJhcnkgdG8gc3VwcG9ydCBPQXV0aCBmb3IgVHdpdHRlcidzIFJFU1QgQVBJLgogKi8KCi8qIExvYWQgT0F1dGggbGliLiBZb3UgY2FuIGZpbmQgaXQgYXQgaHR0cDovL29hdXRoLm5ldCAqLwpyZXF1aXJlX29uY2UoJ09BdXRoLnBocCcpOwoKLyoqCiAqIFR3aXR0ZXIgT0F1dGggY2xhc3MKICovCmNsYXNzIFR3aXR0ZXJPQXV0aCB7CiAgLyogQ29udGFpbnMgdGhlIGxhc3QgSFRUUCBzdGF0dXMgY29kZSByZXR1cm5lZC4gKi8KICBwdWJsaWMgJGh0dHBfY29kZTsKICAvKiBDb250YWlucyB0aGUgbGFzdCBBUEkgY2FsbC4gKi8KICBwdWJsaWMgJHVybDsKICAvKiBTZXQgdXAgdGhlIEFQSSByb290IFVSTC4gKi8KICBwdWJsaWMgJGhvc3QgPSAiaHR0cHM6Ly9hcGkudHdpdHRlci5jb20vMS4xLyI7CiAgLyogU2V0IHRpbWVvdXQgZGVmYXVsdC4gKi8KICBwdWJsaWMgJHRpbWVvdXQgPSAzMDsKICAvKiBTZXQgY29ubmVjdCB0aW1lb3V0LiAqLwogIHB1YmxpYyAkY29ubmVjdHRpbWVvdXQgPSAzMDsgCiAgLyogVmVyaWZ5IFNTTCBDZXJ0LiAqLwogIHB1YmxpYyAkc3NsX3ZlcmlmeXBlZXIgPSBGQUxTRTsKICAvKiBSZXNwb25zIGZvcm1hdC4gKi8KICBwdWJsaWMgJGZvcm1hdCA9ICdqc29uJzsKICAvKiBEZWNvZGUgcmV0dXJuZWQganNvbiBkYXRhLiAqLwogIHB1YmxpYyAkZGVjb2RlX2pzb24gPSBUUlVFOwogIC8qIENvbnRhaW5zIHRoZSBsYXN0IEhUVFAgaGVhZGVycyByZXR1cm5lZC4gKi8KICBwdWJsaWMgJGh0dHBfaW5mbzsKICAvKiBTZXQgdGhlIHVzZXJhZ25ldC4gKi8KICBwdWJsaWMgJHVzZXJhZ2VudCA9ICdUd2l0dGVyT0F1dGggdjAuMi4wLWJldGEyJzsKICAvKiBJbW1lZGlhdGVseSByZXRyeSB0aGUgQVBJIGNhbGwgaWYgdGhlIHJlc3BvbnNlIHdhcyBub3Qgc3VjY2Vzc2Z1bC4gKi8KICAvL3B1YmxpYyAkcmV0cnkgPSBUUlVFOwoKCgoKICAvKioKICAgKiBTZXQgQVBJIFVSTFMKICAgKi8KICBmdW5jdGlvbiBhY2Nlc3NUb2tlblVSTCgpICB7IHJldHVybiAnaHR0cHM6Ly9hcGkudHdpdHRlci5jb20vb2F1dGgvYWNjZXNzX3Rva2VuJzsgfQogIGZ1bmN0aW9uIGF1dGhlbnRpY2F0ZVVSTCgpIHsgcmV0dXJuICdodHRwczovL2FwaS50d2l0dGVyLmNvbS9vYXV0aC9hdXRoZW50aWNhdGUnOyB9CiAgZnVuY3Rpb24gYXV0aG9yaXplVVJMKCkgICAgeyByZXR1cm4gJ2h0dHBzOi8vYXBpLnR3aXR0ZXIuY29tL29hdXRoL2F1dGhvcml6ZSc7IH0KICBmdW5jdGlvbiByZXF1ZXN0VG9rZW5VUkwoKSB7IHJldHVybiAnaHR0cHM6Ly9hcGkudHdpdHRlci5jb20vb2F1dGgvcmVxdWVzdF90b2tlbic7IH0KCiAgLyoqCiAgICogRGVidWcgaGVscGVycwogICAqLwogIGZ1bmN0aW9uIGxhc3RTdGF0dXNDb2RlKCkgeyByZXR1cm4gJHRoaXMtPmh0dHBfc3RhdHVzOyB9CiAgZnVuY3Rpb24gbGFzdEFQSUNhbGwoKSB7IHJldHVybiAkdGhpcy0+bGFzdF9hcGlfY2FsbDsgfQoKICAvKioKICAgKiBjb25zdHJ1Y3QgVHdpdHRlck9BdXRoIG9iamVjdAogICAqLwogIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb25zdW1lcl9rZXksICRjb25zdW1lcl9zZWNyZXQsICRvYXV0aF90b2tlbiA9IE5VTEwsICRvYXV0aF90b2tlbl9zZWNyZXQgPSBOVUxMKSB7CiAgICAkdGhpcy0+c2hhMV9tZXRob2QgPSBuZXcgT0F1dGhTaWduYXR1cmVNZXRob2RfSE1BQ19TSEExKCk7CiAgICAkdGhpcy0+Y29uc3VtZXIgPSBuZXcgT0F1dGhDb25zdW1lcigkY29uc3VtZXJfa2V5LCAkY29uc3VtZXJfc2VjcmV0KTsKICAgIGlmICghZW1wdHkoJG9hdXRoX3Rva2VuKSAmJiAhZW1wdHkoJG9hdXRoX3Rva2VuX3NlY3JldCkpIHsKICAgICAgJHRoaXMtPnRva2VuID0gbmV3IE9BdXRoQ29uc3VtZXIoJG9hdXRoX3Rva2VuLCAkb2F1dGhfdG9rZW5fc2VjcmV0KTsKICAgIH0gZWxzZSB7CiAgICAgICR0aGlzLT50b2tlbiA9IE5VTEw7CiAgICB9CiAgfQoKCiAgLyoqCiAgICogR2V0IGEgcmVxdWVzdF90b2tlbiBmcm9tIFR3aXR0ZXIKICAgKgogICAqIEByZXR1cm5zIGEga2V5L3ZhbHVlIGFycmF5IGNvbnRhaW5pbmcgb2F1dGhfdG9rZW4gYW5kIG9hdXRoX3Rva2VuX3NlY3JldAogICAqLwogIGZ1bmN0aW9uIGdldFJlcXVlc3RUb2tlbigkb2F1dGhfY2FsbGJhY2spIHsKICAgICRwYXJhbWV0ZXJzID0gYXJyYXkoKTsKICAgICRwYXJhbWV0ZXJzWydvYXV0aF9jYWxsYmFjayddID0gJG9hdXRoX2NhbGxiYWNrOyAKICAgICRyZXF1ZXN0ID0gJHRoaXMtPm9BdXRoUmVxdWVzdCgkdGhpcy0+cmVxdWVzdFRva2VuVVJMKCksICdHRVQnLCAkcGFyYW1ldGVycyk7CiAgICAkdG9rZW4gPSBPQXV0aFV0aWw6OnBhcnNlX3BhcmFtZXRlcnMoJHJlcXVlc3QpOwogICAgJHRoaXMtPnRva2VuID0gbmV3IE9BdXRoQ29uc3VtZXIoJHRva2VuWydvYXV0aF90b2tlbiddLCAkdG9rZW5bJ29hdXRoX3Rva2VuX3NlY3JldCddKTsKICAgIHJldHVybiAkdG9rZW47CiAgfQoKICAvKioKICAgKiBHZXQgdGhlIGF1dGhvcml6ZSBVUkwKICAgKgogICAqIEByZXR1cm5zIGEgc3RyaW5nCiAgICovCiAgZnVuY3Rpb24gZ2V0QXV0aG9yaXplVVJMKCR0b2tlbiwgJHNpZ25faW5fd2l0aF90d2l0dGVyID0gVFJVRSkgewogICAgaWYgKGlzX2FycmF5KCR0b2tlbikpIHsKICAgICAgJHRva2VuID0gJHRva2VuWydvYXV0aF90b2tlbiddOwogICAgfQogICAgaWYgKGVtcHR5KCRzaWduX2luX3dpdGhfdHdpdHRlcikpIHsKICAgICAgcmV0dXJuICR0aGlzLT5hdXRob3JpemVVUkwoKSAuICI/b2F1dGhfdG9rZW49eyR0b2tlbn0iOwogICAgfSBlbHNlIHsKICAgICAgIHJldHVybiAkdGhpcy0+YXV0aGVudGljYXRlVVJMKCkgLiAiP29hdXRoX3Rva2VuPXskdG9rZW59IjsKICAgIH0KICB9CgogIC8qKgogICAqIEV4Y2hhbmdlIHJlcXVlc3QgdG9rZW4gYW5kIHNlY3JldCBmb3IgYW4gYWNjZXNzIHRva2VuIGFuZAogICAqIHNlY3JldCwgdG8gc2lnbiBBUEkgY2FsbHMuCiAgICoKICAgKiBAcmV0dXJucyBhcnJheSgib2F1dGhfdG9rZW4iID0+ICJ0aGUtYWNjZXNzLXRva2VuIiwKICAgKiAgICAgICAgICAgICAgICAib2F1dGhfdG9rZW5fc2VjcmV0IiA9PiAidGhlLWFjY2Vzcy1zZWNyZXQiLAogICAqICAgICAgICAgICAgICAgICJ1c2VyX2lkIiA9PiAiOTQzNjk5MiIsCiAgICogICAgICAgICAgICAgICAgInNjcmVlbl9uYW1lIiA9PiAiYWJyYWhhbSIpCiAgICovCiAgZnVuY3Rpb24gZ2V0QWNjZXNzVG9rZW4oJG9hdXRoX3ZlcmlmaWVyKSB7CiAgICAkcGFyYW1ldGVycyA9IGFycmF5KCk7CiAgICAkcGFyYW1ldGVyc1snb2F1dGhfdmVyaWZpZXInXSA9ICRvYXV0aF92ZXJpZmllcjsKICAgICRyZXF1ZXN0ID0gJHRoaXMtPm9BdXRoUmVxdWVzdCgkdGhpcy0+YWNjZXNzVG9rZW5VUkwoKSwgJ0dFVCcsICRwYXJhbWV0ZXJzKTsKICAgICR0b2tlbiA9IE9BdXRoVXRpbDo6cGFyc2VfcGFyYW1ldGVycygkcmVxdWVzdCk7CiAgICAkdGhpcy0+dG9rZW4gPSBuZXcgT0F1dGhDb25zdW1lcigkdG9rZW5bJ29hdXRoX3Rva2VuJ10sICR0b2tlblsnb2F1dGhfdG9rZW5fc2VjcmV0J10pOwogICAgcmV0dXJuICR0b2tlbjsKICB9CgogIC8qKgogICAqIE9uZSB0aW1lIGV4Y2hhbmdlIG9mIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmb3IgYWNjZXNzIHRva2VuIGFuZCBzZWNyZXQuCiAgICoKICAgKiBAcmV0dXJucyBhcnJheSgib2F1dGhfdG9rZW4iID0+ICJ0aGUtYWNjZXNzLXRva2VuIiwKICAgKiAgICAgICAgICAgICAgICAib2F1dGhfdG9rZW5fc2VjcmV0IiA9PiAidGhlLWFjY2Vzcy1zZWNyZXQiLAogICAqICAgICAgICAgICAgICAgICJ1c2VyX2lkIiA9PiAiOTQzNjk5MiIsCiAgICogICAgICAgICAgICAgICAgInNjcmVlbl9uYW1lIiA9PiAiYWJyYWhhbSIsCiAgICogICAgICAgICAgICAgICAgInhfYXV0aF9leHBpcmVzIiA9PiAiMCIpCiAgICovICAKICBmdW5jdGlvbiBnZXRYQXV0aFRva2VuKCR1c2VybmFtZSwgJHBhc3N3b3JkKSB7CiAgICAkcGFyYW1ldGVycyA9IGFycmF5KCk7CiAgICAkcGFyYW1ldGVyc1sneF9hdXRoX3VzZXJuYW1lJ10gPSAkdXNlcm5hbWU7CiAgICAkcGFyYW1ldGVyc1sneF9hdXRoX3Bhc3N3b3JkJ10gPSAkcGFzc3dvcmQ7CiAgICAkcGFyYW1ldGVyc1sneF9hdXRoX21vZGUnXSA9ICdjbGllbnRfYXV0aCc7CiAgICAkcmVxdWVzdCA9ICR0aGlzLT5vQXV0aFJlcXVlc3QoJHRoaXMtPmFjY2Vzc1Rva2VuVVJMKCksICdQT1NUJywgJHBhcmFtZXRlcnMpOwogICAgJHRva2VuID0gT0F1dGhVdGlsOjpwYXJzZV9wYXJhbWV0ZXJzKCRyZXF1ZXN0KTsKICAgICR0aGlzLT50b2tlbiA9IG5ldyBPQXV0aENvbnN1bWVyKCR0b2tlblsnb2F1dGhfdG9rZW4nXSwgJHRva2VuWydvYXV0aF90b2tlbl9zZWNyZXQnXSk7CiAgICByZXR1cm4gJHRva2VuOwogIH0KCiAgLyoqCiAgICogR0VUIHdyYXBwZXIgZm9yIG9BdXRoUmVxdWVzdC4KICAgKi8KICBmdW5jdGlvbiBnZXQoJHVybCwgJHBhcmFtZXRlcnMgPSBhcnJheSgpKSB7CiAgICAkcmVzcG9uc2UgPSAkdGhpcy0+b0F1dGhSZXF1ZXN0KCR1cmwsICdHRVQnLCAkcGFyYW1ldGVycyk7CiAgICBpZiAoJHRoaXMtPmZvcm1hdCA9PT0gJ2pzb24nICYmICR0aGlzLT5kZWNvZGVfanNvbikgewogICAgICByZXR1cm4ganNvbl9kZWNvZGUoJHJlc3BvbnNlKTsKICAgIH0KICAgIHJldHVybiAkcmVzcG9uc2U7CiAgfQogIAogIC8qKgogICAqIFBPU1Qgd3JhcHBlciBmb3Igb0F1dGhSZXF1ZXN0LgogICAqLwogIGZ1bmN0aW9uIHBvc3QoJHVybCwgJHBhcmFtZXRlcnMgPSBhcnJheSgpKSB7CiAgICAkcmVzcG9uc2UgPSAkdGhpcy0+b0F1dGhSZXF1ZXN0KCR1cmwsICdQT1NUJywgJHBhcmFtZXRlcnMpOwogICAgaWYgKCR0aGlzLT5mb3JtYXQgPT09ICdqc29uJyAmJiAkdGhpcy0+ZGVjb2RlX2pzb24pIHsKICAgICAgcmV0dXJuIGpzb25fZGVjb2RlKCRyZXNwb25zZSk7CiAgICB9CiAgICByZXR1cm4gJHJlc3BvbnNlOwogIH0KCiAgLyoqCiAgICogREVMRVRFIHdyYXBwZXIgZm9yIG9BdXRoUmVxZXVzdC4KICAgKi8KICBmdW5jdGlvbiBkZWxldGUoJHVybCwgJHBhcmFtZXRlcnMgPSBhcnJheSgpKSB7CiAgICAkcmVzcG9uc2UgPSAkdGhpcy0+b0F1dGhSZXF1ZXN0KCR1cmwsICdERUxFVEUnLCAkcGFyYW1ldGVycyk7CiAgICBpZiAoJHRoaXMtPmZvcm1hdCA9PT0gJ2pzb24nICYmICR0aGlzLT5kZWNvZGVfanNvbikgewogICAgICByZXR1cm4ganNvbl9kZWNvZGUoJHJlc3BvbnNlKTsKICAgIH0KICAgIHJldHVybiAkcmVzcG9uc2U7CiAgfQoKICAvKioKICAgKiBGb3JtYXQgYW5kIHNpZ24gYW4gT0F1dGggLyBBUEkgcmVxdWVzdAogICAqLwogIGZ1bmN0aW9uIG9BdXRoUmVxdWVzdCgkdXJsLCAkbWV0aG9kLCAkcGFyYW1ldGVycykgewogICAgaWYgKHN0cnJwb3MoJHVybCwgJ2h0dHBzOi8vJykgIT09IDAgJiYgc3RycnBvcygkdXJsLCAnaHR0cDovLycpICE9PSAwKSB7CiAgICAgICR1cmwgPSAieyR0aGlzLT5ob3N0fXskdXJsfS57JHRoaXMtPmZvcm1hdH0iOwogICAgfQogICAgJHJlcXVlc3QgPSBPQXV0aFJlcXVlc3Q6OmZyb21fY29uc3VtZXJfYW5kX3Rva2VuKCR0aGlzLT5jb25zdW1lciwgJHRoaXMtPnRva2VuLCAkbWV0aG9kLCAkdXJsLCAkcGFyYW1ldGVycyk7CiAgICAkcmVxdWVzdC0+c2lnbl9yZXF1ZXN0KCR0aGlzLT5zaGExX21ldGhvZCwgJHRoaXMtPmNvbnN1bWVyLCAkdGhpcy0+dG9rZW4pOwogICAgc3dpdGNoICgkbWV0aG9kKSB7CiAgICBjYXNlICdHRVQnOgogICAgICByZXR1cm4gJHRoaXMtPmh0dHAoJHJlcXVlc3QtPnRvX3VybCgpLCAnR0VUJyk7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gJHRoaXMtPmh0dHAoJHJlcXVlc3QtPmdldF9ub3JtYWxpemVkX2h0dHBfdXJsKCksICRtZXRob2QsICRyZXF1ZXN0LT50b19wb3N0ZGF0YSgpKTsKICAgIH0KICB9CgogIC8qKgogICAqIE1ha2UgYW4gSFRUUCByZXF1ZXN0CiAgICoKICAgKiBAcmV0dXJuIEFQSSByZXN1bHRzCiAgICovCiAgZnVuY3Rpb24gaHR0cCgkdXJsLCAkbWV0aG9kLCAkcG9zdGZpZWxkcyA9IE5VTEwpIHsKICAgICR0aGlzLT5odHRwX2luZm8gPSBhcnJheSgpOwogICAgJGNpID0gY3VybF9pbml0KCk7CiAgICAvKiBDdXJsIHNldHRpbmdzICovCiAgICBjdXJsX3NldG9wdCgkY2ksIENVUkxPUFRfVVNFUkFHRU5ULCAkdGhpcy0+dXNlcmFnZW50KTsKICAgIGN1cmxfc2V0b3B0KCRjaSwgQ1VSTE9QVF9DT05ORUNUVElNRU9VVCwgJHRoaXMtPmNvbm5lY3R0aW1lb3V0KTsKICAgIGN1cmxfc2V0b3B0KCRjaSwgQ1VSTE9QVF9USU1FT1VULCAkdGhpcy0+dGltZW91dCk7CiAgICBjdXJsX3NldG9wdCgkY2ksIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIFRSVUUpOwogICAgY3VybF9zZXRvcHQoJGNpLCBDVVJMT1BUX0hUVFBIRUFERVIsIGFycmF5KCdFeHBlY3Q6JykpOwogICAgY3VybF9zZXRvcHQoJGNpLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCAkdGhpcy0+c3NsX3ZlcmlmeXBlZXIpOwogICAgY3VybF9zZXRvcHQoJGNpLCBDVVJMT1BUX0hFQURFUkZVTkNUSU9OLCBhcnJheSgkdGhpcywgJ2dldEhlYWRlcicpKTsKICAgIGN1cmxfc2V0b3B0KCRjaSwgQ1VSTE9QVF9IRUFERVIsIEZBTFNFKTsKCiAgICBzd2l0Y2ggKCRtZXRob2QpIHsKICAgICAgY2FzZSAnUE9TVCc6CiAgICAgICAgY3VybF9zZXRvcHQoJGNpLCBDVVJMT1BUX1BPU1QsIFRSVUUpOwogICAgICAgIGlmICghZW1wdHkoJHBvc3RmaWVsZHMpKSB7CiAgICAgICAgICBjdXJsX3NldG9wdCgkY2ksIENVUkxPUFRfUE9TVEZJRUxEUywgJHBvc3RmaWVsZHMpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSAnREVMRVRFJzoKICAgICAgICBjdXJsX3NldG9wdCgkY2ksIENVUkxPUFRfQ1VTVE9NUkVRVUVTVCwgJ0RFTEVURScpOwogICAgICAgIGlmICghZW1wdHkoJHBvc3RmaWVsZHMpKSB7CiAgICAgICAgICAkdXJsID0gInskdXJsfT97JHBvc3RmaWVsZHN9IjsKICAgICAgICB9CiAgICB9CgogICAgY3VybF9zZXRvcHQoJGNpLCBDVVJMT1BUX1VSTCwgJHVybCk7CiAgICAkcmVzcG9uc2UgPSBjdXJsX2V4ZWMoJGNpKTsKICAgICR0aGlzLT5odHRwX2NvZGUgPSBjdXJsX2dldGluZm8oJGNpLCBDVVJMSU5GT19IVFRQX0NPREUpOwogICAgJHRoaXMtPmh0dHBfaW5mbyA9IGFycmF5X21lcmdlKCR0aGlzLT5odHRwX2luZm8sIGN1cmxfZ2V0aW5mbygkY2kpKTsKICAgICR0aGlzLT51cmwgPSAkdXJsOwogICAgY3VybF9jbG9zZSAoJGNpKTsKICAgIHJldHVybiAkcmVzcG9uc2U7CiAgfQoKICAvKioKICAgKiBHZXQgdGhlIGhlYWRlciBpbmZvIHRvIHN0b3JlLgogICAqLwogIGZ1bmN0aW9uIGdldEhlYWRlcigkY2gsICRoZWFkZXIpIHsKICAgICRpID0gc3RycG9zKCRoZWFkZXIsICc6Jyk7CiAgICBpZiAoIWVtcHR5KCRpKSkgewogICAgICAka2V5ID0gc3RyX3JlcGxhY2UoJy0nLCAnXycsIHN0cnRvbG93ZXIoc3Vic3RyKCRoZWFkZXIsIDAsICRpKSkpOwogICAgICAkdmFsdWUgPSB0cmltKHN1YnN0cigkaGVhZGVyLCAkaSArIDIpKTsKICAgICAgJHRoaXMtPmh0dHBfaGVhZGVyWyRrZXldID0gJHZhbHVlOwogICAgfQogICAgcmV0dXJuIHN0cmxlbigkaGVhZGVyKTsKICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFR3ZWV0TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA0IC0gMjAxMSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDExIC0gMjAxNiBieSBUaGUgQ01TTVMgRGV2IFRlYW0KIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy90d2VldG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICggIWNtc21zKCkgKSBleGl0OwoKLy8gREIgQ29ubmVjdGlvbgokZGIgPSYgJHRoaXMtPkdldERiKCk7CiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCi8vIFNvdXJjZWdyb3VwcyB0YWJsZQoJJGZsZHMgPSAiCgkJSUQgSSBLRVksCgkJVGl0bGUgQygyNTYpLAkJCgkJRGF0ZUNyZWF0ZWQgREFURVRJTUUsCgkJRGF0ZU1vZGlmaWVkIERBVEVUSU1FCQoJIjsgCgkkdGFib3B0YXJyYXkgPSBhcnJheSgnbXlzcWwnID0+ICdFTkdJTkU9TXlJU0FNJyk7Cgkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3Jfc291cmNlZ3JvdXBzIiwgJGZsZHMsICR0YWJvcHRhcnJheSk7CgkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkkZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX3NvdXJjZWdyb3Vwc19zZXEiKTsKCQovLyBTb3VyY2VzX3NvdXJjZXNncm91cHMgdGFibGUKCSRmbGRzID0gIgoJCUlEIEkgS0VZLAoJCVNvdXJjZUlEIEksCgkJU291cmNlZ3JvdXBJRCBJCQoJIjsgCgkkdGFib3B0YXJyYXkgPSBhcnJheSgnbXlzcWwnID0+ICdFTkdJTkU9TXlJU0FNJyk7Cgkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3Jfc291cmNlc19zb3VyY2Vncm91cHMiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCSRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3Jfc291cmNlc19zb3VyY2Vncm91cHNfc2VxIik7CgkKLy8gU291cmNlcyB0YWJsZQoJJGZsZHMgPSAiCgkJSUQgSSBLRVksCgkJVGl0bGUgQygyNTYpLAoJCVR5cGUgQygxMjgpLAoJCURhdGEgVGV4dCwKCQlYTUwgQygyNTYpLAoJCUFjdGl2ZSBJTlQoMSkgREVGQVVMVCAxLAoJCUxhc3RVcGRhdGUgREFURVRJTUUsCgkJRGF0ZUNyZWF0ZWQgREFURVRJTUUsCgkJRGF0ZU1vZGlmaWVkIERBVEVUSU1FCgkiOwoJJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnRU5HSU5FPU15SVNBTScpOwoJJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX3NvdXJjZXMiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCSRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3Jfc291cmNlc19zZXEiKTsKCQovLyBNZXNzYWdlcyB0YWJsZQoJJGZsZHMgPSAiCgkJSUQgSSBLRVksCgkJTWVzc2FnZSBDKDI1NiksCgkJVXNlciBJLAkJCgkJQWN0aXZlIElOVCgxKSBERUZBVUxUIDEsCgkJc291cmNlSUQgSSwJCQoJCURhdGUgREFURVRJTUUsCgkJTGluayBDKDI1NiksCgkJdHdlZXRJRCBDKDI1NSkKCSI7CgkkdGFib3B0YXJyYXkgPSBhcnJheSgnbXlzcWwnID0+ICdFTkdJTkU9TXlJU0FNJyk7Cgkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3JfbWVzc2FnZXMiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCSRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3JfbWVzc2FnZXNfc2VxIik7CgkKLy8gVXNlcnMgdGFibGUKCSRmbGRzID0gIgoJCUlEIEkgS0VZLAoJCVVzZXJuYW1lIEMoMjU2KSwKCQlBdmF0YXIgQygyNTYpLAkJCgkJQWN0aXZlIElOVCgxKSBERUZBVUxUIDEsCQkKCQlMYXN0VXBkYXRlIERBVEVUSU1FCQkKCSI7IAoJJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnRU5HSU5FPU15SVNBTScpOwoJJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX3VzZXJzIiwgJGZsZHMsICR0YWJvcHRhcnJheSk7CgkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkkZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX3VzZXJzX3NlcSIpOwkKCi8vIExvYWQgZGVmYXVsdCB0d2VldCB0ZW1wbGF0ZQokZm4gPSBkaXJuYW1lKF9fRklMRV9fKS5ESVJFQ1RPUllfU0VQQVJBVE9SLid0ZW1wbGF0ZXMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ2RlZmF1bHRfdGVtcGxhdGUudHBsJzsKaWYoIGZpbGVfZXhpc3RzKCAkZm4gKSApCnsKCSR0ZW1wbGF0ZSA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwoJJHRoaXMtPlNldFRlbXBsYXRlKCdEZWZhdWx0JywkdGVtcGxhdGUpOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2N1cnJlbnRfdGVtcGxhdGUnLCdEZWZhdWx0Jyk7Cn0gIAoKLy8gRGVmYXVsdCBwcmVmZXJlbmNlcwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnUmVmcmVzaEludGVydmFsJywnMzAwJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdFdmVyeUxvYWQnLCcwJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjb25zdW1lcl9rZXknLCd3RXk2NWh6QXhueVFSRGdCbGg2b3FyWXpHJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjb25zdW1lcl9zZWNyZXQnLCdDVTAzWTdhUE9tQ2xKelhpRnVCdlB4TXFUckR4TEJWZnBVSzR3WDhjN2wxTVp2Szg2aicpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnb2F1dGhfdG9rZW4nLCcnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ29hdXRoX3Rva2VuX3NlY3JldCcsJycpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnb2F1dGhfdmFsaWQnLDApOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnb2F1dGhfc2NyZWVubmFtZScsJycpOwogIAovLyBQZXJtaXNzaW9ucwokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignVHdlZXRNZ3IgLSBVc2UnLCAnVHdlZXRNZ3IgLSBVc2UnKTsKJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ1R3ZWV0TWdyIC0gQ2hhbmdlIFNldHRpbmdzJywgJ1R3ZWV0TWdyIC0gQ2hhbmdlIFNldHRpbmdzJyk7CiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdUd2VldE1nciAtIENoYW5nZSBUZW1wbGF0ZXMnLCAnVHdlZXRNZ3IgLSBDaGFuZ2UgVGVtcGxhdGVzJyk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFR3ZWV0TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA0IC0gMjAxMSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDExIC0gMjAxNiBieSBUaGUgQ01TTVMgRGV2IFRlYW0KIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy90d2VldG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICggIWNtc21zKCkgKSBleGl0OwoKLy8gREIKJGRiID0mICR0aGlzLT5HZXREYigpOwokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKCi8vIFRhYmxlcwoJLy8gU291cmNlZ3JvdXBzIHRhYmxlCgkkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV90d2VldG1ncl9zb3VyY2Vncm91cHMiICk7CgkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkkZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3Jfc291cmNlZ3JvdXBzX3NlcSIgKTsKCQoJLy8gU291cmNlc19zb3VyY2VzZ3JvdXBzIHRhYmxlCgkkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV90d2VldG1ncl9zb3VyY2VzX3NvdXJjZWdyb3VwcyIgKTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCSRkYi0+RHJvcFNlcXVlbmNlKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV90d2VldG1ncl9zb3VyY2VzX3NvdXJjZWdyb3Vwc19zZXEiICk7CgkKCS8vIFNvdXJjZXMgdGFibGUKCSRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX3NvdXJjZXMiICk7CgkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkkZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3Jfc291cmNlc19zZXEiICk7CgkKCS8vIE1lc3NhZ2VzIHRhYmxlCgkkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV90d2VldG1ncl9tZXNzYWdlcyIgKTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCSRkYi0+RHJvcFNlcXVlbmNlKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV90d2VldG1ncl9tZXNzYWdlc19zZXEiICk7CgkKCS8vIFVzZXJzIHRhYmxlCgkkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV90d2VldG1ncl91c2VycyIgKTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCSRkYi0+RHJvcFNlcXVlbmNlKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV90d2VldG1ncl91c2Vyc19zZXEiICk7CQoKLy8gVGVtcGxhdGVzCiR0aGlzLT5EZWxldGVUZW1wbGF0ZSgpOwoKLy8gUHJlZmVyZW5jZXMKJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoKTsKCi8vIFBlcm1pc3Npb25zCiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdUd2VldE1nciAtIFVzZScpOwokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignVHdlZXRNZ3IgLSBDaGFuZ2UgU2V0dGluZ3MnKTsKJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJ1R3ZWV0TWdyIC0gQ2hhbmdlIFRlbXBsYXRlcycpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFR3ZWV0TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA0IC0gMjAxMSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDExIC0gMjAxNiBieSBUaGUgQ01TTVMgRGV2IFRlYW0KIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy90d2VldG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICggIWNtc21zKCkgKSBleGl0OwoKJGRiID0mICR0aGlzLT5HZXREYigpOwokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9IFR3ZWV0TWdyCnZlcnNpb24gPSAxLjAKZGVzY3JpcHRpb24gPSAKYXV0aG9yID0gUm9sZiBUamFzc2VucwphdXRob3JlbWFpbCA9IGluZm8gW2F0XSBjbXNjYW5iZXNpbXBsZSBbZG90XSBvcmcKbWluY21zdmVyc2lvbiA9IDEuMTIuMgpsYXp5bG9hZGFkbWluID0gMApsYXp5bG9hZGZyb250ZW5kID0gMAo=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin_addtemplate.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBpZD0iYWRkdGVtcGxhdGUiPg0KCXskc3RhcnRmb3JtfQ0KCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG5hbWV9OjwvcD4NCgkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGVtcGxhdGVfbmFtZX08L3A+DQoJCTwvZGl2Pg0KCQkNCgkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRjb250ZW50fTo8L3A+DQoJCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHRlbXBsYXRlX2NvbnRlbnR9PC9wPg0KCQk8L2Rpdj4NCgkJDQoJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4NCgkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fXskY2FuY2VsfTwvcD4NCgkJPC9kaXY+DQoJeyRlbmRmb3JtfQ0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJPGRpdiBjbGFzcz0icGFnZWlucHV0Ij57JHZhcnN9PC9kaXY+DQo8L2Rpdj4=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_add_edit_group.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBpZD0idGFibGVjb250YWluZXIiPg0KCXskZm9ybV9zdGFydH0NCgkNCgk8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSI+DQoJCTx0cj4NCgkJCTx0ZCB3aWR0aD0iNTAlIj4NCgkJCTx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IiB3aWR0aD0iNTAlIj57JHN1Ym1pdH17JGNhbmNlbH17JGFwcGx5fTwvdGQ+DQoJCTwvdHI+DQoJCQ0KCQk8dHIgY2xhc3M9InJvdzEiPg0KCQkJPHRkPjxzdHJvbmc+eyRUaXRsZV90ZXh0fTo8L3N0cm9uZz48L3RkPg0KCQkJPHRkPnskVGl0bGVfaW5wdXR9PC90ZD4NCgkJPC90cj4NCgkJCQ0KCQl7KiBTb3VyY2VzICp9DQoJCTx0cj4NCgkJCTx0ZCBjb2xzcGFuPSIyIj4NCgkJCQk8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSI+DQoJCQkJCTx0cj4NCgkJCQkJCTx0aCBjb2xzcGFuPSIyIj57JHNvdXJjZXN0ZXh0fTo8L3RoPg0KCQkJCQk8L3RyPg0KCQkJCQl7YXNzaWduIHZhcj0iY291bnRlciIgdmFsdWU9IjEifQ0KCQkJCQl7Zm9yZWFjaCBmcm9tPSRzb3VyY2VzX2NoZWNrYm94ZXMga2V5PXNvdXJjZSBpdGVtPWNoZWNrYm94fQ0KCQkJCQkNCgkJCQkJPHRyIGNsYXNzPSJyb3d7JGNvdW50ZXJ9Ij4NCgkJCQkJCTx0ZCB3aWR0aD0iMTAiPnskY2hlY2tib3h9PC90ZD4NCgkJCQkJCTx0ZD57JHNvdXJjZX08L3RkPg0KCQkJCQk8L3RyPg0KCQkJCQl7aWYgJGNvdW50ZXIgPT0gMX0NCgkJCQkJCXthc3NpZ24gdmFyPSJjb3VudGVyIiB2YWx1ZT0iMiJ9DQoJCQkJCXtlbHNlfQ0KCQkJCQkJe2Fzc2lnbiB2YXI9ImNvdW50ZXIiIHZhbHVlPSIxIn0NCgkJCQkJey9pZn0JCQkJDQoJCQkJCXsvZm9yZWFjaH0JDQoJCQkJDQoJCQkJPC90YWJsZT4JCQkNCgkJCTwvdGQ+DQoJCTwvdHI+DQoJCTx0cj4NCgkJCTx0ZD48L3RkPg0KCQkJPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPnskc3VibWl0fXskY2FuY2VsfXskYXBwbHl9PC90ZD4NCgkJPC90cj4NCgk8L3RhYmxlPg0KCQ0KCXskYWRkfQ0KCXskZm9ybV9lbmR9DQo8L2Rpdj4=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_add_edit_source.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBpZD0idGFibGVjb250YWluZXIiPg0KCXskZm9ybV9zdGFydH0NCgkNCgk8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSI+DQoJCTx0cj4NCgkJCTx0ZCB3aWR0aD0iNTAlIj4NCgkJCTx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IiB3aWR0aD0iNTAlIj57JHN1Ym1pdH17JGNhbmNlbH17JGFwcGx5fTwvdGQ+DQoJCTwvdHI+DQoJCQ0KCQk8dHIgY2xhc3M9InJvdzEiPg0KCQkJPHRkPjxzdHJvbmc+eyRUaXRsZV90ZXh0fTo8L3N0cm9uZz48L3RkPg0KCQkJPHRkPnskVGl0bGVfaW5wdXR9PC90ZD4NCgkJPC90cj4NCgkJDQoJCTx0ciBjbGFzcz0icm93MiI+DQoJCQk8dGQ+PHN0cm9uZz57JFR5cGVfdGV4dH06PC9zdHJvbmc+PC90ZD4NCgkJCTx0ZD57JFR5cGVfaW5wdXR9PC90ZD4NCgkJPC90cj4NCgkJDQoJCTx0ciBjbGFzcz0icm93MSI+DQoJCQk8dGQ+PHN0cm9uZyBjbGFzcz0iZmVlZHByZWZpeCI+eyREYXRhX3RleHR9Ojwvc3Ryb25nPjwvdGQ+DQoJCQk8dGQ+eyREYXRhX2lucHV0fTwvdGQ+DQoJCTwvdHI+DQoJCQkJCQ0KCQk8dHI+DQoJCQk8dGQ+PC90ZD4NCgkJCTx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij57JHN1Ym1pdH17JGNhbmNlbH17JGFwcGx5fTwvdGQ+DQoJCTwvdHI+DQoJPC90YWJsZT4NCgkNCgl7JGFkZH0NCgl7JGZvcm1fZW5kfQ0KPC9kaXY+]]></data>
	</file>
	<file>
	  <filename>/templates/admin_edittemplate.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBpZD0iYWRkdGVtcGxhdGUiPg0KCXskc3RhcnRmb3JtfQ0KCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JGNvbnRlbnR9OjwvcD4NCgkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGVtcGxhdGVfY29udGVudH08L3A+DQoJCTwvZGl2Pg0KCQkNCgkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPg0KCQkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyR0ZW1wbGF0ZV9uYW1lfXskc3VibWl0fXskY2FuY2VsfTwvcD4NCgkJPC9kaXY+DQoJeyRlbmRmb3JtfQ0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJPGRpdiBjbGFzcz0icGFnZWlucHV0Ij57JHZhcnN9PC9kaXY+DQo8L2Rpdj4=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_groupstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPg0KCTxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRhZGRsaW5rfTwvcD4NCjwvZGl2Pg0KDQo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPg0KCTx0aGVhZD4NCgkJPHRyPg0KCQkJe2ZvcmVhY2ggZnJvbT0kZmllbGRfaGVhZGVycyBpdGVtPWhlYWRlcn0NCgkJCTx0aD57aWYgJG9yZGVyYnkgPT0gJGhlYWRlci4wfTx1PnsvaWZ9eyRoZWFkZXIuMX17aWYgJG9yZGVyYnkgPT0gJGhlYWRlci4wfTwvdT57L2lmfTwvdGg+DQoJCQl7L2ZvcmVhY2h9CQkJCQkJDQoJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPg0KCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4NCgkJPC90cj4NCgk8L3RoZWFkPg0KCTx0Ym9keT4NCgl7aWYgJGl0ZW1zfEBjb3VudCA+IDB9DQoJCXthc3NpZ24gdmFyPSJ0ZWxsZXIiIHZhbHVlPSIxIn0NCgkJe2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1pdGVtfQ0KCQkJPHRyIGNsYXNzPSJyb3d7JHRlbGxlcn0iPg0KCQkJCXtmb3JlYWNoIGZyb209JGZpZWxkcyBpdGVtPWZpZWxkfQ0KCQkJCQk8dGQ+e2lmICRmaWVsZCA9PSAiVGl0bGUifXskaXRlbS5lZGl0VGl0bGV9e2Vsc2V9eyRpdGVtLiRmaWVsZHx0cnVuY2F0ZTonNzUnOicuLic6dHJ1ZX17L2lmfTwvdGQ+DQoJCQkJey9mb3JlYWNofQ0KCQkJCQ0KCQkJCTx0ZD57JGl0ZW0uZWRpdGxpbmt9PC90ZD4NCgkJCQk8dGQ+eyRpdGVtLmRlbGV0ZWxpbmt9PC90ZD4JCQkNCgkJCTwvdHI+DQoJCQl7aWYgJHRlbGxlciA9PSAxfQ0KCQkJCXthc3NpZ24gdmFyPSJ0ZWxsZXIiIHZhbHVlPSIyIn0NCgkJCXtlbHNlfQ0KCQkJCXthc3NpZ24gdmFyPSJ0ZWxsZXIiIHZhbHVlPSIxIn0NCgkJCXsvaWZ9DQoJCXsvZm9yZWFjaH0NCgl7ZWxzZX0NCgkJPHRyPg0KCQkJPHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPnskbm9ncm91cHN9PC90ZD4NCgkJPC90cj4NCgl7L2lmfQ0KCTwvdGJvZHk+DQo8L3RhYmxlPg0KDQoNCjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj4NCgk8cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskYWRkbGlua308L3A+DQo8L2Rpdj4=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_messagestab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJzZWFyY2giIHZhbHVlPSJ7JHNlYXJjaHRleHR9IiAvPjxiciAvPg0KDQo8ZGl2IGNsYXNzPSJwb3N0dXJsIj57JHBvc3R1cmx9PC9kaXY+DQoNCjxkaXYgY2xhc3M9InRhYmNvbnRlbnQiPg0KCXtpZiAhZW1wdHkoJHBhZ2luZyl9DQoJCTx1bCBjbGFzcz0icGFnaW5nIj4NCgkJe2ZvcmVhY2ggZnJvbT0kcGFnaW5nIGtleT1wYWdlIGl0ZW09YnV0dG9ufQ0KCQkJe2lmICRidXR0b24uYWN0aXZlfQ0KCQkJCTxsaSBjbGFzcz0iYWN0aXZlIj48c3Bhbj57JHBhZ2V9PC9zcGFuPjwvbGk+DQoJCQl7ZWxzZX0NCgkJCQk8bGk+PGEgaHJlZj0ieyRidXR0b24ubGlua30iPnskcGFnZX08L2E+PC9saT4NCgkJCXsvaWZ9DQoJCXsvZm9yZWFjaH0NCgkJPC91bD4NCgkJPGRpdiBjbGFzcz0iY2xlYXIiPjwvZGl2Pg0KCXsvaWZ9DQoJDQoJPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4NCgkJPHRoZWFkPg0KCQkJPHRyPg0KCQkJCXtmb3JlYWNoIGZyb209JGZpZWxkX2hlYWRlcnMgaXRlbT1oZWFkZXJ9DQoJCQkJPHRoPntpZiAkb3JkZXJieSA9PSAkaGVhZGVyLjB9PHU+ey9pZn17JGhlYWRlci4xfXtpZiAkb3JkZXJieSA9PSAkaGVhZGVyLjB9PC91PnsvaWZ9PC90aD4NCgkJCQl7L2ZvcmVhY2h9DQoJCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4JCQkNCgkJCTwvdHI+DQoJCTwvdGhlYWQ+DQoJCTx0Ym9keT4NCgkJe2lmICRpdGVtc3xAY291bnQgPiAwfQ0KCQkJe2Fzc2lnbiB2YXI9InRlbGxlciIgdmFsdWU9IjEifQ0KCQkJe2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1pdGVtfQ0KCQkJCTx0ciBjbGFzcz0icm93eyR0ZWxsZXJ9Ij4NCgkJCQkJe2ZvcmVhY2ggZnJvbT0kZmllbGRzIGl0ZW09ZmllbGR9DQoJCQkJCQk8dGQ+eyRpdGVtLiRmaWVsZHx0cnVuY2F0ZTonNzUnOicuLic6dHJ1ZX08L3RkPg0KCQkJCQl7L2ZvcmVhY2h9DQoJCQkJCTx0ZD57JGl0ZW0uYWN0aXZlbGlua308L3RkPgkJCQkNCgkJCQk8L3RyPg0KCQkJCXtpZiAkdGVsbGVyID09IDF9DQoJCQkJCXthc3NpZ24gdmFyPSJ0ZWxsZXIiIHZhbHVlPSIyIn0NCgkJCQl7ZWxzZX0NCgkJCQkJe2Fzc2lnbiB2YXI9InRlbGxlciIgdmFsdWU9IjEifQ0KCQkJCXsvaWZ9DQoJCQl7L2ZvcmVhY2h9CQkNCgkJe2Vsc2V9DQoJCQk8dHI+DQoJCQkJPHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPnskbm9tZXNzYWdlc308L3RkPg0KCQkJPC90cj4NCgkJey9pZn0NCgkJPC90Ym9keT4NCgk8L3RhYmxlPg0KCQ0KCXtpZiAhZW1wdHkoJHBhZ2luZyl9CQkNCgkJPHVsIGNsYXNzPSJwYWdpbmciPg0KCQl7Zm9yZWFjaCBmcm9tPSRwYWdpbmcga2V5PXBhZ2UgaXRlbT1idXR0b259DQoJCQl7aWYgJGJ1dHRvbi5hY3RpdmV9DQoJCQkJPGxpIGNsYXNzPSJhY3RpdmUiPjxzcGFuPnskcGFnZX08L3NwYW4+PC9saT4NCgkJCXtlbHNlfQ0KCQkJCTxsaT48YSBocmVmPSJ7JGJ1dHRvbi5saW5rfSI+eyRwYWdlfTwvYT48L2xpPg0KCQkJey9pZn0NCgkJey9mb3JlYWNofQ0KCQk8L3VsPg0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+PC9kaXY+DQoJey9pZn0NCjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_settingstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBpZD0ibW9kdWxlX3NldHRpbmdzIj4NCgl7JHN0YXJ0Zm9ybX0NCgkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9SZWZyZXNoSW50ZXJ2YWx9OjwvcD4NCgkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfUmVmcmVzaEludGVydmFsfSB7JGlucHV0X1JlZnJlc2hJbnRlcnZhbF9oZWxwfTwvcD4NCgkJPC9kaXY+DQoJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfRXZlcnlMb2FkfTo8L3A+DQoJCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X0V2ZXJ5TG9hZH0geyRpbnB1dF9FdmVyeUxvYWRfaGVscH08L3A+DQoJCTwvZGl2Pg0KCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX0FwcEtleX06PC9wPg0KCQkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9BcHBLZXl9IHskaW5wdXRfQXBwS2V5X2hlbHB9PC9wPg0KCQk8L2Rpdj4NCgkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9BcHBTZWNyZXR9OjwvcD4NCgkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfQXBwU2VjcmV0fSB7JGlucHV0X0FwcFNlY3JldF9oZWxwfTwvcD4NCgkJPC9kaXY+DQoJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfU2lnbklufTo8L3A+DQoJCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHR3aXR0ZXJsb2dpbn08L3A+DQoJCTwvZGl2Pg0KCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+DQoJCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdH08L3A+DQoJCTwvZGl2Pg0KCXskZW5kZm9ybX0NCjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_sourcestab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPg0KCTxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRhZGRsaW5rfTwvcD4NCjwvZGl2Pg0KDQo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPg0KCTx0aGVhZD4NCgkJPHRyPg0KCQkJe2ZvcmVhY2ggZnJvbT0kZmllbGRfaGVhZGVycyBpdGVtPWhlYWRlcn0NCgkJCTx0aD57aWYgJG9yZGVyYnkgPT0gJGhlYWRlci4wfTx1PnsvaWZ9eyRoZWFkZXIuMX17aWYgJG9yZGVyYnkgPT0gJGhlYWRlci4wfTwvdT57L2lmfTwvdGg+DQoJCQl7L2ZvcmVhY2h9DQoJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPg0KCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4NCgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CQkJDQoJCTwvdHI+DQoJPC90aGVhZD4NCgk8dGJvZHk+DQoJe2lmICRpdGVtc3xAY291bnQgPiAwfQ0KCQl7YXNzaWduIHZhcj0iY291bnRlciIgdmFsdWU9IjEifQ0KCQl7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWl0ZW19DQoJCQk8dHIgY2xhc3M9InJvd3skY291bnRlcn0iPg0KCQkJCXtmb3JlYWNoIGZyb209JGZpZWxkcyBpdGVtPWZpZWxkfQkJCQkJDQoJCQkJCTx0ZD57aWYgJGZpZWxkID09ICJUaXRsZSJ9eyRpdGVtLmVkaXRUaXRsZX17ZWxzZX17JGl0ZW0uJGZpZWxkfHRydW5jYXRlOic3NSc6Jy4uJzp0cnVlfXsvaWZ9PC90ZD4NCgkJCQl7L2ZvcmVhY2h9DQoJCQkJPHRkPnskaXRlbS5hY3RpdmVsaW5rfTwvdGQ+DQoJCQkJPHRkPnskaXRlbS5lZGl0bGlua308L3RkPg0KCQkJCTx0ZD57JGl0ZW0uZGVsZXRlbGlua308L3RkPgkJCQkNCgkJCTwvdHI+DQoJCQl7aWYgJGNvdW50ZXIgPT0gMX0NCgkJCQl7YXNzaWduIHZhcj0iY291bnRlciIgdmFsdWU9IjIifQ0KCQkJe2Vsc2V9DQoJCQkJe2Fzc2lnbiB2YXI9ImNvdW50ZXIiIHZhbHVlPSIxIn0NCgkJCXsvaWZ9DQoJCXsvZm9yZWFjaH0NCgl7ZWxzZX0NCgkJPHRyPg0KCQkJPHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPnskbm9zb3VyY2VzfTwvdGQ+DQoJCTwvdHI+DQoJey9pZn0NCgk8L3Rib2R5Pg0KPC90YWJsZT4NCg0KDQo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+DQoJPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZGxpbmt9PC9wPg0KPC9kaXY+]]></data>
	</file>
	<file>
	  <filename>/templates/admin_templatestab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPg0KCTxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRhZGRsaW5rfTwvcD4NCjwvZGl2Pg0KDQo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPg0KCTx0aGVhZD4NCgkJPHRyPg0KCQkJe2ZvcmVhY2ggZnJvbT0kZmllbGRfaGVhZGVycyBpdGVtPWhlYWRlcn0NCgkJCTx0aD57JGhlYWRlcn08L3RoPg0KCQkJey9mb3JlYWNofQ0KCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4NCgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+DQoJCTwvdHI+DQoJPC90aGVhZD4NCgk8dGJvZHk+DQoJe2Fzc2lnbiB2YXI9ImNvdW50ZXIiIHZhbHVlPSIxIn0NCgl7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWl0ZW19DQoJCTx0ciBjbGFzcz0icm93eyRjb3VudGVyfSI+DQoJCQk8dGQ+eyRpdGVtLm5hbWV9PC90ZD4NCgkJCTx0ZD57JGl0ZW0uZGVmYXVsdH08L3RkPg0KCQkJPHRkPnskaXRlbS5lZGl0bGlua308L3RkPg0KCQkJPHRkPntpZiBpc3NldCgkaXRlbS5kZWxldGVsaW5rKX17JGl0ZW0uZGVsZXRlbGlua317L2lmfTwvdGQ+DQoJCTwvdHI+DQoJCXtpZiAkY291bnRlciA9PSAxfQ0KCQkJe2Fzc2lnbiB2YXI9ImNvdW50ZXIiIHZhbHVlPSIyIn0NCgkJe2Vsc2V9DQoJCQl7YXNzaWduIHZhcj0iY291bnRlciIgdmFsdWU9IjEifQ0KCQl7L2lmfQ0KCXsvZm9yZWFjaH0NCgk8L3Rib2R5Pg0KPC90YWJsZT4NCg0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPg0KCTxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRhZGRsaW5rfTwvcD4NCjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_userstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJzZWFyY2giIHZhbHVlPSJ7JHNlYXJjaHRleHR9IiAvPjxiciAvPg0KDQo8ZGl2IGNsYXNzPSJwb3N0dXJsIj57JHBvc3R1cmx9PC9kaXY+DQoNCjxkaXYgY2xhc3M9InRhYmNvbnRlbnQiPg0KCXtpZiAhZW1wdHkoJHBhZ2luZyl9CQkNCgkJPHVsIGNsYXNzPSJwYWdpbmciPg0KCQl7Zm9yZWFjaCBmcm9tPSRwYWdpbmcga2V5PXBhZ2UgaXRlbT1idXR0b259DQoJCQl7aWYgJGJ1dHRvbi5hY3RpdmV9DQoJCQkJPGxpIGNsYXNzPSJhY3RpdmUiPjxzcGFuPnskcGFnZX08L3NwYW4+PC9saT4NCgkJCXtlbHNlfQ0KCQkJCTxsaT48YSBocmVmPSJ7JGJ1dHRvbi5saW5rfSI+eyRwYWdlfTwvYT48L2xpPg0KCQkJey9pZn0NCgkJey9mb3JlYWNofQ0KCQk8L3VsPg0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+PC9kaXY+DQoJey9pZn0NCgkNCgk8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPg0KCQk8dGhlYWQ+DQoJCQk8dHI+DQoJCQkJe2ZvcmVhY2ggZnJvbT0kZmllbGRfaGVhZGVycyBpdGVtPWhlYWRlcn0NCgkJCQk8dGg+e2lmICRvcmRlcmJ5ID09ICRoZWFkZXIuMH08dT57L2lmfXskaGVhZGVyLjF9e2lmICRvcmRlcmJ5ID09ICRoZWFkZXIuMH08L3U+ey9pZn08L3RoPg0KCQkJCXsvZm9yZWFjaH0NCgkJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPgkJCQ0KCQkJPC90cj4NCgkJPC90aGVhZD4NCgkJPHRib2R5Pg0KCQl7aWYgJGl0ZW1zfEBjb3VudCA+IDB9DQoJCQl7YXNzaWduIHZhcj0iY291bnRlciIgdmFsdWU9IjEifQ0KCQkJe2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1pdGVtfQ0KCQkJCTx0ciBjbGFzcz0icm93eyRjb3VudGVyfSI+DQoJCQkJCXtmb3JlYWNoIGZyb209JGZpZWxkcyBpdGVtPWZpZWxkfQ0KCQkJCQkJPHRkPnskaXRlbS4kZmllbGR8dHJ1bmNhdGU6Jzc1JzonLi4nOnRydWV9PC90ZD4NCgkJCQkJey9mb3JlYWNofQ0KCQkJCQk8dGQ+eyRpdGVtLmFjdGl2ZWxpbmt9PC90ZD4JCQkJDQoJCQkJPC90cj4NCgkJCQl7aWYgJGNvdW50ZXIgPT0gMX0NCgkJCQkJe2Fzc2lnbiB2YXI9ImNvdW50ZXIiIHZhbHVlPSIyIn0NCgkJCQl7ZWxzZX0NCgkJCQkJe2Fzc2lnbiB2YXI9ImNvdW50ZXIiIHZhbHVlPSIxIn0NCgkJCQl7L2lmfQ0KCQkJey9mb3JlYWNofQ0KCQl7ZWxzZX0NCgkJCTx0cj4NCgkJCQk8dGQgY29sc3Bhbj0iMiIgYWxpZ249ImNlbnRlciI+eyRub3VzZXJzfTwvdGQ+DQoJCQk8L3RyPg0KCQl7L2lmfQ0KCQk8L3Rib2R5Pg0KCTwvdGFibGU+DQoJDQoJe2lmICFlbXB0eSgkcGFnaW5nKX0JCQ0KCQk8dWwgY2xhc3M9InBhZ2luZyI+DQoJCXtmb3JlYWNoIGZyb209JHBhZ2luZyBrZXk9cGFnZSBpdGVtPWJ1dHRvbn0NCgkJCXtpZiAkYnV0dG9uLmFjdGl2ZX0NCgkJCQk8bGkgY2xhc3M9ImFjdGl2ZSI+PHNwYW4+eyRwYWdlfTwvc3Bhbj48L2xpPg0KCQkJe2Vsc2V9DQoJCQkJPGxpPjxhIGhyZWY9InskYnV0dG9uLmxpbmt9Ij57JHBhZ2V9PC9hPjwvbGk+DQoJCQl7L2lmfQ0KCQl7L2ZvcmVhY2h9DQoJCTwvdWw+DQoJCTxkaXYgY2xhc3M9ImNsZWFyIj48L2Rpdj4NCgl7L2lmfQ0KPC9kaXY+]]></data>
	</file>
	<file>
	  <filename>/templates/default_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT10d2VldH0NCjxkaXYgY2xhc3M9InR3ZWV0Ij4NCiAgPGRpdiBjbGFzcz0iYXZhdGFyIj4NCiAgICA8YSBocmVmPSJodHRwOi8vdHdpdHRlci5jb20veyR0d2VldC5Vc2VyLlVzZXJuYW1lfSIgdGFyZ2V0PSJfYmxhbmsiPg0KICAgICAgPGltZyBzcmM9InskdHdlZXQuVXNlci5BdmF0YXJ9IiBhbHQ9InskdHdlZXQuVXNlci5Vc2VybmFtZX0iIC8+DQogICAgPC9hPgkJCQ0KICA8L2Rpdj4NCiAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+DQogICAgeyR0d2VldC5NZXNzYWdlX3BhcnNlZH08YnIgLz4NCiAgICB7JHR3ZWV0LkRhdGV8ZGF0ZV9mb3JtYXQ6JyVkLSVtLSVZICVIOiVNJ30NCiAgPC9kaXY+DQo8L2Rpdj4NCnsvZm9yZWFjaH0=]]></data>
	</file>
	<file>
	  <filename>/TweetMgr.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFR3ZWV0TWdyCiMgQXV0aG9yOiBSb2xmIFRqYXNzZW5zCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA0IC0gMjAxMSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDExIC0gMjAxNiBieSBUaGUgQ01TTVMgRGV2IFRlYW0KIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy90d2VldG1ncgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmNsYXNzIFR3ZWV0TWdyIGV4dGVuZHMgQ01TTW9kdWxlIHsKCQoJdmFyICR1c2VycyA9IGFycmF5KCk7Cgl2YXIgJGNvbm5lY3Rpb247CgkKCWZ1bmN0aW9uIF9fY29uc3RydWN0KCl7CQoJCXBhcmVudDo6X19jb25zdHJ1Y3QoKTsJCgkJLy8gQnVpbGQgVHdpdHRlck9BdXRoIG9iamVjdCB3aXRoIGNsaWVudCBjcmVkZW50aWFscwoJCXJlcXVpcmVfb25jZSgnbGliL3R3aXR0ZXJvYXV0aC5waHAnKTsKCQkKCQlpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ0V2ZXJ5TG9hZCcpKXsKCQkJJHRoaXMtPlJlZnJlc2hUd2VldHMoKTsKCQl9CQkJCQoJfQoJCglmdW5jdGlvbiBHZXROYW1lKCkgeyByZXR1cm4gJ1R3ZWV0TWdyJzsgfQoJZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcgKCAnZnJpZW5kbHluYW1lJyApOyB9CglmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsgcmV0dXJuIHRydWU7IH0KCWZ1bmN0aW9uIEhhc0FkbWluKCkgeyByZXR1cm4gdHJ1ZTsgfQoJZnVuY3Rpb24gR2V0VmVyc2lvbigpIHsgcmV0dXJuICcxLjAnOyB9CglmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpIHsgcmV0dXJuICcxLjEyLjInOyB9CglmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcgKCAnZGVzY3JpcHRpb24nICk7IH0KCWZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpIHsgcmV0dXJuICdjb250ZW50JzsgfQoJCglmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKSB7CgkJcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCAnVHdlZXRNZ3IgLSBVc2UnICkgfHwgJHRoaXMtPkNoZWNrUGVybWlzc2lvbiAoICdUd2VldE1nciAtIENoYW5nZSBTZXR0aW5ncycgKSB8fCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uICggJ1R3ZWV0TWdyIC0gQ2hhbmdlIFRlbXBsYXRlcycgKTsKCX0KCQoJZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcgKCAncG9zdGluc3RhbGwnICk7IH0JCglmdW5jdGlvbiBHZXRIZWxwKCkgeyByZXR1cm4gZmlsZV9nZXRfY29udGVudHMoZGlybmFtZShfX0ZJTEVfXykuJy9oZWxwX3RleHQuaW5jJyk7IH0KCWZ1bmN0aW9uIEdldEF1dGhvcigpIHsgcmV0dXJuICdSb2xmIFRqYXNzZW5zJzsgfQoJZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKSB7IHJldHVybiAnaW5mbyBbYXRdIGNtc2NhbmJlc2ltcGxlIFtkb3RdIG9yZyc7IH0KCWZ1bmN0aW9uIEdldENoYW5nZUxvZygpIHsgcmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKGRpcm5hbWUoX19GSUxFX18pLicvY2hhbmdlbG9nLmluYycpOyB9CgkKCWZ1bmN0aW9uIFNldFBhcmFtZXRlcnMoKSB7CgkJJHRoaXMtPlJlZ2lzdGVyTW9kdWxlUGx1Z2luKCk7CgkJJHRoaXMtPlJlc3RyaWN0VW5rbm93blBhcmFtcygpOwoJCQoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2dyb3VwJywnJywkdGhpcy0+TGFuZygncGFyYW1ldGVyX2dyb3VwJykpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdncm91cCcsQ0xFQU5fU1RSSU5HKTsKCQkKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdzb3VyY2UnLCcnLCR0aGlzLT5MYW5nKCdwYXJhbWV0ZXJfc291cmNlJykpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdzb3VyY2UnLENMRUFOX1NUUklORyk7CgkJCgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignbGltaXQnLCc1JywkdGhpcy0+TGFuZygncGFyYW1ldGVyX2xpbWl0JykpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdsaW1pdCcsQ0xFQU5fU1RSSU5HKTsKCQkKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd0ZW1wbGF0ZScsJ0RlZmF1bHQnLCR0aGlzLT5MYW5nKCdwYXJhbWV0ZXJfdGVtcGxhdGUnKSk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3RlbXBsYXRlJyxDTEVBTl9TVFJJTkcpOwoJfQoJCglmdW5jdGlvbiBHZXROb3RpZmljYXRpb25PdXRwdXQoJHByaW9yaXR5ID0gMikgewkKCQkKCQkkb3V0cHV0ID0gYXJyYXkoKTsKCQkvLyBJZiBhIFR3aXR0ZXIgYWNjb3VudCB3YXMgbm90IGF1dGhlbnRpY2F0ZWQsIHNob3cgbWVzc2FnZSBiZWNhdXNlIHdlIGNhbiBub3QgZmV0Y2ggdHdlZXRzCgkJaWYgKCEkdGhpcy0+R2V0UHJlZmVyZW5jZSgnb2F1dGhfdmFsaWQnLCcnKSl7CgkJCSRvYmogPSBuZXcgU3RkQ2xhc3M7CgkJCSRvYmotPnByaW9yaXR5ID0gMjsJCQkKCQkJJG9iai0+aHRtbCA9ICR0aGlzLT5MYW5nKCdtZXNzYWdlX25vdF9hdXRoZW50aWNhdGVkJyk7CgkJCSRvdXRwdXRbXSA9ICRvYmo7CgkJCSR0aGlzLT5HZXREYXNoYm9hcmRPdXRwdXQoJG9iai0+aHRtbCk7CgkJCXJldHVybiAkb3V0cHV0OwoJCX0KCQlyZXR1cm4gJyc7Cgl9CgkKCS8vIE1vZHVsZSBmdW5jdGlvbnMKCS8vIEdldE1lc3NhZ2VzOiBHZXRzIGFsbCB0d2VldHMKCS8vIEBwYWdlCQk6IHBhZ2UgbnVtYmVyCgkvLyBAcGVyX3BhZ2UJOiBOdW1iZXIgb2YgdHdlZXRzIHBlciBwYWdlCgkvLyBAb3JkZXJieQkJOiBPcmRlciBsaXN0IGJ5IHRoaXMgcGFyYW1ldGVyCgkvLyBAb3JkZXJ0eXBlCTogQVNDIG9yIERFU0MKCS8vIEBhY3RpdmUJCTogT25seSBhY3RpdmUgdHdlZXRzCgkvLyBAc2VhcmNoCQk6IHNlYXJjaCB0ZXJtCglmdW5jdGlvbiBHZXRNZXNzYWdlcygkaWQsICRyZXR1cm5pZCwgJHBhZ2UgPSAxLCAkcGVyX3BhZ2UgPSAxMDAsICRvcmRlcmJ5ID0gIkRhdGUiLCAkb3JkZXJ0eXBlID0gIkFTQyIsICRhY3RpdmUgPSB0cnVlLCAkc2VhcmNoID0gIiIpIHsKCQkkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCQkKCQkvLyBRdWVyeQoJCSR2YXJzID0gYXJyYXkoKTsKCQkkcXVlcnlTdHJpbmcgPSAnCgkJCVNFTEVDVCAqLCBtZXMuSUQgYXMgbWVzc2FnZUlELCBtZXMuQWN0aXZlIGFzIG1lc3NhZ2VBY3RpdmUsIHNyYy5UaXRsZSBhcyBTb3VyY2VUaXRsZSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdHdlZXRtZ3JfbWVzc2FnZXMgbWVzCgkJCUxFRlQgSk9JTiAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3R3ZWV0bWdyX3VzZXJzIHVzIE9OIHVzLklEID0gbWVzLlVzZXIKCQkJTEVGVCBKT0lOICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdHdlZXRtZ3Jfc291cmNlcyBzcmMgT04gc3JjLklEID0gbWVzLnNvdXJjZUlECgkJICc7CgkJLy8gRmlsdGVyIG9uIGFjdGl2ZSBzdGF0ZT8KCQlpZiAoJGFjdGl2ZSl7CgkJCSRxdWVyeVN0cmluZyAuPSAnCgkJCQlXSEVSRSBtZXMuQWN0aXZlPT8KCQkJCUFORCB1cy5BY3RpdmU9PwoJCQknOwoJCQkkdmFyc1tdID0gMTsKCQkJJHZhcnNbXSA9IDE7CgkJfQoJCS8vIFNlYXJjaAoJCWlmICghZW1wdHkoJHNlYXJjaCkpewoJCQkkcXVlcnlTdHJpbmcgLj0gJwoJCQkJV0hFUkUgKG1lcy5NZXNzYWdlIExJS0UgPyBPUiB1cy5Vc2VybmFtZSBMSUtFID8gT1Igc3JjLlRpdGxlIExJS0UgPykKCQkJJzsKCQkJJHZhcnNbXSA9ICclJy4kc2VhcmNoLiclJzsKCQkJJHZhcnNbXSA9ICclJy4kc2VhcmNoLiclJzsKCQkJJHZhcnNbXSA9ICclJy4kc2VhcmNoLiclJzsKCQl9CgkJLy8gT3JkZXIgYnkKCQlpZiAoIWVtcHR5KCRvcmRlcmJ5KSAmJiAhZW1wdHkoJG9yZGVydHlwZSkpewoJCQkkcXVlcnlTdHJpbmcgLj0gIgoJCQlPUkRFUiBCWSB7JG9yZGVyYnl9IHskb3JkZXJ0eXBlfSI7CgkJfQoJCS8vIExpbWl0CgkJaWYgKCFlbXB0eSgkcGFnZSkgJiYgIWVtcHR5KCRwZXJfcGFnZSkpewkJCQoJCQkkb2Zmc2V0ID0gKCRwYWdlLTEpKiRwZXJfcGFnZTsKCQkJJHF1ZXJ5U3RyaW5nIC49ICIgTElNSVQgeyRwZXJfcGFnZX0gT0ZGU0VUIHskb2Zmc2V0fSI7CgkJfQkJCQkKCQkvLyBFeGVjdXRlCgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeVN0cmluZywgJHZhcnMpOwkJCQkKCQkvLyBJZiB0aGVyZSB3ZXJlIG5vIGVycm9ycyBleGVjdXRpbmcKCQlpZiAoJGRicmVzdWx0KXsKCQkJJHJldHVybiA9IGFycmF5KCk7CgkJCS8vIExvb3AgdGhyb3VnaCByZXN1bHRzLCBhZGQgdGhlbSB0byBhcnJheQoJCQl3aGlsZSAoJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSl7CQkKCQkJCS8vIEFjdGl2ZSBidXR0b24KCQkJCQoJCQkJJGFkbWludGhlbWUgPSBjbXNfdXRpbHM6OmdldF90aGVtZV9vYmplY3QoKTsKCQkJCQoJCQkJaWYgKCRyb3dbJ21lc3NhZ2VBY3RpdmUnXSl7CgkJCQkJJHJvd1snYWN0aXZlbGluayddID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWN0aXZhdGUnLCAkcmV0dXJuaWQsICRhZG1pbnRoZW1lLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS90cnVlLmdpZicsJHRoaXMtPkxhbmcoJ2RlYWN0aXZhdGUnKS4nICcuJHRoaXMtPkxhbmcoJ2hlYWRlcl9NZXNzYWdlJyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoJ21lc3NhZ2VJRCc9PiRyb3dbJ21lc3NhZ2VJRCddKSk7CgkJCQl9IGVsc2UgewoJCQkJCSRyb3dbJ2FjdGl2ZWxpbmsnXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FjdGl2YXRlJywgJHJldHVybmlkLCAkYWRtaW50aGVtZS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZmFsc2UuZ2lmJywkdGhpcy0+TGFuZygnYWN0aXZhdGUnKS4nICcuJHRoaXMtPkxhbmcoJ2hlYWRlcl9NZXNzYWdlJyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoJ21lc3NhZ2VJRCc9PiRyb3dbJ21lc3NhZ2VJRCddKSk7CgkJCQl9CgkJCQkvLyBEYXRlIGZvcm1hdAoJCQkJJHJvd1snRGF0ZSddID0gZGF0ZSgkdGhpcy0+TGFuZygnZGF0ZWZvcm1hdCcpLHN0cnRvdGltZSgkcm93WydEYXRlJ10pKTsKCQkJCSRyZXR1cm5bXSA9ICRyb3c7CgkJCX0KCQkJcmV0dXJuICRyZXR1cm47CgkJfQoJCXJldHVybiBmYWxzZTsJCQoJfQoJCgkvLyBfR2V0TWVzc2FnZXNGcm9tU291cmNlCTogcmV0dXJucyBhbGwgbWVzc2FnZXMgZnJvbSBhIHNvdXJjZQoJLy8gQHNvdXJjZUlECQkJCTogSUQgb2YgdGhlIHNvdXJjZQoJLy8gQGxpbWl0CQkJCQk6IE51bWJlciBvZiBtZXNzYWdlcwoJZnVuY3Rpb24gX0dldE1lc3NhZ2VzRnJvbVNvdXJjZSgkc291cmNlSUQgPSAiIiwkbGltaXQgPSAiIil7CgkJJHJlc3VsdCA9IGFycmF5KCk7CgkJJGRiID0gJHRoaXMtPkdldERiKCk7CgkJJHF1ZXJ5U3RyaW5nID0gJwoJCQlTRUxFQ1QgTWVzc2FnZSwgdHdlZXRJRCBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdHdlZXRtZ3JfbWVzc2FnZXMgV0hFUkUgc291cmNlSUQgPSA/IE9SREVSIEJZIERhdGUgREVTQyBMSU1JVCAnLiRsaW1pdDsKCQkvLyBFeGVjdXRlCQkKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCBhcnJheSgkc291cmNlSUQpKTsKCQkvLyBMb29wIHRocm91Z2ggcmVzdWx0cywgYWRkIHRoZW0gdG8gYXJyYXkKCQl3aGlsZSAoJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSl7CgkJCSRyZXN1bHRbJHJvd1sndHdlZXRJRCddXSA9ICRyb3dbJ01lc3NhZ2UnXTsKCQl9CQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCQoJLy8gX0dldE1lc3NhZ2UJOiByZXR1cm5zIG9uZSBtZXNzYWdlCglmdW5jdGlvbiBfR2V0TWVzc2FnZSgkaWQsJHJldHVybmlkLCAkbWVzc2FnZUlEID0gIiIpewoJCSRkYiA9ICR0aGlzLT5HZXREYigpOwoJCQoJCSRyZXR1cm4gPSBmYWxzZTsKCQkvLyBJZiB0aGUgbWVzc2FnZSBJRCBoYXMgYmVlbiBnaXZlbgoJCWlmICghZW1wdHkoJG1lc3NhZ2VJRCkpewoJCQkkcXVlcnlTdHJpbmcgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX21lc3NhZ2VzIFdIRVJFIElEID0gPyBMSU1JVCAxIjsKCQkJLy8gRXhlY3V0ZQoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCBhcnJheSgkbWVzc2FnZUlEKSk7CgkJCS8vIElmIHRoZSBleGVjdXRpb24gd2FzIHN1Y2Nlc3NmdWwKCQkJaWYgKCRkYnJlc3VsdCl7CgkJCQkvLyBGZXRjaCB0aGUgcm93CgkJCQkkcmV0dXJuID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwoJCQl9CgkJfQoJCXJldHVybiAkcmV0dXJuOwoJfQkKCQoJLy8gR2V0VXNlcnM6IEdldHMgYWxsIHVzZXJzCgkvLyBAcGFnZQkJOiBwYWdlIG51bWJlcgoJLy8gQHBlcl9wYWdlCTogTnVtYmVyIG9mIHVzZXJzIHBlciBwYWdlCgkvLyBAb3JkZXJieQkJOiBPcmRlciBsaXN0IGJ5IHRoaXMgcGFyYW1ldGVyCgkvLyBAb3JkZXJ0eXBlCTogQVNDIG9yIERFU0MKCS8vIEBhY3RpdmUJCTogT25seSBhY3RpdmUgdXNlcnMKCS8vIEBzZWFyY2gJCTogU2VhcmNoIHRlcm0KCWZ1bmN0aW9uIEdldFVzZXJzKCRpZCwgJHJldHVybmlkLCAkcGFnZSA9IDEsICRwZXJfcGFnZSA9IDEwMCwgJG9yZGVyYnkgPSAiVXNlcm5hbWUiLCAkb3JkZXJ0eXBlID0gIkFTQyIsICRhY3RpdmUgPSB0cnVlLCAkc2VhcmNoID0gIiIpIHsKCQkkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCQkKCQkvLyBRdWVyeQoJCSR2YXJzID0gYXJyYXkoKTsKCQkkcXVlcnlTdHJpbmcgPSAnCgkJCVNFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV90d2VldG1ncl91c2VycwoJCSAnOwoJCS8vIEZpbHRlciBvbiBhY3RpdmUgc3RhdGU/CgkJaWYgKCRhY3RpdmUpewoJCQkkcXVlcnlTdHJpbmcgLj0gJwoJCQkJV0hFUkUgQWN0aXZlPT8JCQkJCgkJCSc7CQkJCgkJCSR2YXJzW10gPSAxOwoJCX0KCQkvLyBTZWFyY2gKCQlpZiAoIWVtcHR5KCRzZWFyY2gpKXsKCQkJJHF1ZXJ5U3RyaW5nIC49ICcKCQkJCVdIRVJFIFVzZXJuYW1lIExJS0UgPwoJCQknOwoJCQkkdmFyc1tdID0gJyUnLiRzZWFyY2guJyUnOwkJCQoJCX0JCQoJCS8vIE9yZGVyIGJ5CgkJaWYgKCFlbXB0eSgkb3JkZXJieSkgJiYgIWVtcHR5KCRvcmRlcnR5cGUpKXsKCQkJJHF1ZXJ5U3RyaW5nIC49ICIKCQkJT1JERVIgQlkgeyRvcmRlcmJ5fSB7JG9yZGVydHlwZX0iOwoJCX0JCQoJCS8vIExpbWl0CgkJaWYgKCFlbXB0eSgkcGFnZSkgJiYgIWVtcHR5KCRwZXJfcGFnZSkpewkJCQoJCQkkb2Zmc2V0ID0gKCRwYWdlLTEpKiRwZXJfcGFnZTsKCQkJJHF1ZXJ5U3RyaW5nIC49ICIgTElNSVQgeyRwZXJfcGFnZX0gT0ZGU0VUIHskb2Zmc2V0fSI7CgkJfQkJCgkJLy8gRXhlY3V0ZQoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsICR2YXJzKTsJCQoJCS8vIElmIHRoZXJlIHdlcmUgbm8gZXJyb3JzIGV4ZWN1dGluZwoJCWlmICgkZGJyZXN1bHQpewoJCQkkcmV0dXJuID0gYXJyYXkoKTsKCQkJLy8gTG9vcCB0aHJvdWdoIHJlc3VsdHMsIGFkZCB0aGVtIHRvIGFycmF5CgkJCXdoaWxlICgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKXsKCQkJCS8vIEFjdGl2ZSBidXR0b24KCQkJCQoJCQkJJGFkbWludGhlbWUgPSBjbXNfdXRpbHM6OmdldF90aGVtZV9vYmplY3QoKTsKCQkJCQoJCQkJaWYgKCRyb3dbJ0FjdGl2ZSddKXsKCQkJCQkkcm93WydhY3RpdmVsaW5rJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhY3RpdmF0ZScsICRyZXR1cm5pZCwgJGFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL3RydWUuZ2lmJywkdGhpcy0+TGFuZygnZGVhY3RpdmF0ZScpLicgJy4kdGhpcy0+TGFuZygnaGVhZGVyX1VzZXJuYW1lJyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoJ3VzZXJJRCc9PiRyb3dbJ0lEJ10pKTsKCQkJCX1lbHNlIHsKCQkJCQkkcm93WydhY3RpdmVsaW5rJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhY3RpdmF0ZScsICRyZXR1cm5pZCwgJGFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2ZhbHNlLmdpZicsJHRoaXMtPkxhbmcoJ2FjdGl2YXRlJykuJyAnLiR0aGlzLT5MYW5nKCdoZWFkZXJfVXNlcm5hbWUnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgndXNlcklEJz0+JHJvd1snSUQnXSkpOwoJCQkJfQoJCQkJLy8gRGF0ZSBmb3JtYXQKCQkJCSRyb3dbJ0xhc3RVcGRhdGUnXSA9IGRhdGUoJHRoaXMtPkxhbmcoJ2RhdGVmb3JtYXQnKSxzdHJ0b3RpbWUoJHJvd1snTGFzdFVwZGF0ZSddKSk7CgkJCQkkcmV0dXJuW10gPSAkcm93OwoJCQl9CgkJCXJldHVybiAkcmV0dXJuOwoJCX0KCQlyZXR1cm4gZmFsc2U7CQkKCX0KCQoJLy8gX0dldFVzZXIJOiByZXR1cm5zIG9uZSB1c2VyCgkvLyBAdXNlcklECTogSUQgb2YgdGhlIHVzZXIgd2Ugd2FudAoJLy8gQHVzZXJuYW1lOiBVc2VyIG5hbWUgb2YgdGhlIHVzZXIgd2Ugd2FudAoJZnVuY3Rpb24gX0dldFVzZXIoJGlkLCRyZXR1cm5pZCwgJHVzZXJJRCA9ICIiLCAkdXNlcm5hbWUgPSAiIil7CgkJJGRiID0gJHRoaXMtPkdldERiKCk7CgkJCgkJJHJldHVybiA9IGZhbHNlOwoJCS8vIElmIHRoZSB1c2VyIElEIGhhcyBiZWVuIGdpdmVuCgkJaWYgKCFlbXB0eSgkdXNlcklEKSl7CgkJCSRxdWVyeVN0cmluZyA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3JfdXNlcnMgV0hFUkUgSUQgPSA/IExJTUlUIDEiOwoJCQkvLyBFeGVjdXRlCgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsIGFycmF5KCR1c2VySUQpKTsJCQkKCQl9CgkJLy8gSWYgdGhlIHVzZXIgbmFtZSBoYXMgYmVlbiBnaXZlbgoJCWVsc2VpZiAoIWVtcHR5KCR1c2VybmFtZSkpewoJCQkkcXVlcnlTdHJpbmcgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX3VzZXJzIFdIRVJFIFVzZXJuYW1lID0gPyBMSU1JVCAxIjsKCQkJLy8gRXhlY3V0ZQoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCBhcnJheSgkdXNlcm5hbWUpKTsKCQl9CgkJLy8gSWYgdGhlIGV4ZWN1dGlvbiB3YXMgc3VjY2Vzc2Z1bAoJCWlmICgkZGJyZXN1bHQpewoJCQkvLyBGZXRjaCB0aGUgcm93CgkJCSRyZXR1cm4gPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CgkJfQoJCXJldHVybiAkcmV0dXJuOwoJfQkKCQoJLy8gR2V0U291cmNlcwk6IEdldHMgYWxsIHVzZXJzCgkvLyBAcGFnZQkJOiBwYWdlIG51bWJlcgoJLy8gQHBlcl9wYWdlCTogTnVtYmVyIG9mIHVzZXJzIHBlciBwYWdlCgkvLyBAb3JkZXJieQkJOiBPcmRlciBsaXN0IGJ5IHRoaXMgcGFyYW1ldGVyCgkvLyBAb3JkZXJ0eXBlCTogQVNDIG9yIERFU0MKCS8vIEBhY3RpdmUJCTogT25seSB1c2VycyB0d2VldHMKCWZ1bmN0aW9uIEdldFNvdXJjZXMoJGlkLCAkcmV0dXJuaWQsICRwYWdlID0gMSwgJHBlcl9wYWdlID0gMTAwLCAkb3JkZXJieSA9ICJUaXRsZSIsICRvcmRlcnR5cGUgPSAiQVNDIiwgJGFjdGl2ZSA9IHRydWUpIHsKCQkkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCQkKCQkvLyBRdWVyeQoJCSR2YXJzID0gYXJyYXkoKTsKCQkkcXVlcnlTdHJpbmcgPSAnCgkJCVNFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV90d2VldG1ncl9zb3VyY2VzCgkJICc7CgkJLy8gRmlsdGVyIG9uIGFjdGl2ZSBzdGF0ZT8KCQlpZiAoJGFjdGl2ZSl7CgkJCSRxdWVyeVN0cmluZyAuPSAnCgkJCQlXSEVSRSBBY3RpdmU9PwkJCQkKCQkJJzsJCQkKCQkJJHZhcnNbXSA9IDE7CgkJfQoJCS8vIE9yZGVyIGJ5CgkJaWYgKCFlbXB0eSgkb3JkZXJieSkgJiYgIWVtcHR5KCRvcmRlcnR5cGUpKXsKCQkJJHF1ZXJ5U3RyaW5nIC49ICIKCQkJT1JERVIgQlkgeyRvcmRlcmJ5fSB7JG9yZGVydHlwZX0iOwoJCX0JCQoJCS8vIExpbWl0CgkJaWYgKCFlbXB0eSgkcGFnZSkgJiYgIWVtcHR5KCRwZXJfcGFnZSkpewkJCQoJCQkkb2Zmc2V0ID0gKCRwYWdlLTEpKiRwZXJfcGFnZTsKCQkJJHF1ZXJ5U3RyaW5nIC49ICIgTElNSVQgeyRwZXJfcGFnZX0gT0ZGU0VUIHskb2Zmc2V0fSI7CgkJCQoJCX0KCQkKCQkvLyBFeGVjdXRlCgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeVN0cmluZywgJHZhcnMpOwkJCgkJLy8gSWYgdGhlcmUgd2VyZSBubyBlcnJvcnMgZXhlY3V0aW5nCgkJaWYgKCRkYnJlc3VsdCl7CgkJCSRyZXR1cm4gPSBhcnJheSgpOwoJCQkvLyBMb29wIHRocm91Z2ggcmVzdWx0cywgYWRkIHRoZW0gdG8gYXJyYXkKCQkJd2hpbGUgKCRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpewoJCQkJaWYgKCEkYWN0aXZlKXsKCQkJCQkvLyBBY3RpdmUgYnV0dG9uCgkJCQkJCgkJCQkJJGFkbWludGhlbWUgPSBjbXNfdXRpbHM6OmdldF90aGVtZV9vYmplY3QoKTsKCQkJCQkKCQkJCQlpZiAoJHJvd1snQWN0aXZlJ10pewoJCQkJCQkkcm93WydhY3RpdmVsaW5rJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhY3RpdmF0ZScsICRyZXR1cm5pZCwgJGFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL3RydWUuZ2lmJywkdGhpcy0+TGFuZygnZGVhY3RpdmF0ZScpLicgJy4kdGhpcy0+TGFuZygnaGVhZGVyX1NvdXJjZScpLCcnLCcnLCdzeXN0ZW1pY29uJyksIGFycmF5KCdzb3VyY2VJRCc9PiRyb3dbJ0lEJ10pKTsKCQkJCQl9IGVsc2UgewoJCQkJCQkkcm93WydhY3RpdmVsaW5rJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhY3RpdmF0ZScsICRyZXR1cm5pZCwgJGFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2ZhbHNlLmdpZicsJHRoaXMtPkxhbmcoJ2FjdGl2YXRlJykuJyAnLiR0aGlzLT5MYW5nKCdoZWFkZXJfU291cmNlJyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoJ3NvdXJjZUlEJz0+JHJvd1snSUQnXSkpOwoJCQkJCX0KCQkJCQkkcm93WydlZGl0bGluayddID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkX2VkaXRfc291cmNlJywgJHJldHVybmlkLCAkYWRtaW50aGVtZS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLCAkdGhpcy0+TGFuZygnZWRpdCcpLCcnLCcnLCdzeXN0ZW1pY29uJyksIGFycmF5KCdJRCc9PiRyb3dbJ0lEJ10pKTsKCQkJCQkkcm93WydlZGl0VGl0bGUnXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkZF9lZGl0X3NvdXJjZScsICRyZXR1cm5pZCwgJHJvd1snVGl0bGUnXSwgYXJyYXkoJ0lEJz0+JHJvd1snSUQnXSkpOwoJCQkJCSRyb3dbJ2RlbGV0ZWxpbmsnXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlbGV0ZScsICRyZXR1cm5pZCwgJGFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLCAkdGhpcy0+TGFuZygnZGVsZXRlJyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoJ3NvdXJjZUlEJz0+JHJvd1snSUQnXSksJHRoaXMtPkxhbmcoJ2RlbGV0ZXNvdXJjZWNvbmZpcm0nKSk7CgkJCQl9CgkJCQkKCQkJCS8vIERhdGUgZm9ybWF0CgkJCQkkcm93WydEYXRlQ3JlYXRlZCddID0gZGF0ZSgkdGhpcy0+TGFuZygnZGF0ZWZvcm1hdCcpLHN0cnRvdGltZSgkcm93WydEYXRlQ3JlYXRlZCddKSk7CgkJCQkkcmV0dXJuW10gPSAkcm93OwoJCQl9CgkJCXJldHVybiAkcmV0dXJuOwoJCX0KCQlyZXR1cm4gZmFsc2U7CQkKCX0KCQoJLy8gR2V0U291cmNlc0J5R3JvdXAJOiBHZXRzIGFsbCB0aGUgc291cmNlcyBsaW5rZWQgdG8gYSBncm91cAoJLy8gQGdyb3VwCQkJCTogSUQgb2YgdGhlIGdyb3VwIHdlIHdhbnQgdG8gZ2V0IHRoZSBzb3VyY2VzIG9mCglmdW5jdGlvbiBHZXRTb3VyY2VzQnlHcm91cCgkZ3JvdXAgPSAiIil7CgkJJGRiID0gJHRoaXMtPkdldERiKCk7CQkKCQkkcmV0dXJuID0gYXJyYXkoKTsKCQlpZiAoIWVtcHR5KCRncm91cCkpewoJCQkkcXVlcnlTdHJpbmcgPSAnCgkJCQlTRUxFQ1QgU291cmNlSUQgYXMgSUQgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3R3ZWV0bWdyX3NvdXJjZXNfc291cmNlZ3JvdXBzCQkJCSAKCQkJCVdIRVJFIFNvdXJjZWdyb3VwSUQgPSA/CgkJIAknOwkJCQoJCQkkdmFycyA9IGFycmF5KCRncm91cCk7CgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsICR2YXJzKTsJCQkKCQkJaWYgKCRkYnJlc3VsdCl7CgkJCQl3aGlsZSAoJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSl7CgkJCQkJJHJldHVybltdID0gJHJvd1snSUQnXTsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gJHJldHVybjsKCX0KCQoJLy8gX0dldFNvdXJjZQk6IHJldHVybnMgb25lIHNvdXJjZQoJZnVuY3Rpb24gX0dldFNvdXJjZSgkaWQsJHJldHVybmlkLCAkc291cmNlSUQgPSAiIil7CgkJJGRiID0gJHRoaXMtPkdldERiKCk7CgkJCgkJJHJldHVybiA9IGZhbHNlOwoJCS8vIElmIHRoZSBzb3VyY2UgSUQgaGFzIGJlZW4gZ2l2ZW4KCQlpZiAoIWVtcHR5KCRzb3VyY2VJRCkpewoJCQkkcXVlcnlTdHJpbmcgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX3NvdXJjZXMgV0hFUkUgSUQgPSA/IExJTUlUIDEiOwoJCQkvLyBFeGVjdXRlCgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsIGFycmF5KCRzb3VyY2VJRCkpOwoJCQkvLyBJZiB0aGUgZXhlY3V0aW9uIHdhcyBzdWNjZXNzZnVsCgkJCWlmICgkZGJyZXN1bHQpewoJCQkJLy8gRmV0Y2ggdGhlIHJvdwoJCQkJJHJldHVybiA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKCQkJfQoJCX0KCQlyZXR1cm4gJHJldHVybjsKCX0JCgkKCS8vIEdldEdyb3Vwcwk6IEdldHMgYWxsIGdyb3VwcwoJLy8gQHBhZ2UJCTogcGFnZSBudW1iZXIKCS8vIEBwZXJfcGFnZQk6IE51bWJlciBvZiBncm91cHMgcGVyIHBhZ2UKCS8vIEBvcmRlcmJ5CQk6IE9yZGVyIGxpc3QgYnkgdGhpcyBwYXJhbWV0ZXIKCS8vIEBvcmRlcnR5cGUJOiBBU0Mgb3IgREVTQwoJLy8gQGFjdGl2ZQkJOiBPbmx5IGFjdGl2ZSBncm91cHMKCWZ1bmN0aW9uIEdldEdyb3VwcygkaWQsICRyZXR1cm5pZCwgJHBhZ2UgPSAxLCAkcGVyX3BhZ2UgPSAxMDAsICRvcmRlcmJ5ID0gIlRpdGxlIiwgJG9yZGVydHlwZSA9ICJBU0MiLCAkYWN0aXZlID0gdHJ1ZSkgewoJCSRkYiA9ICR0aGlzLT5HZXREYigpOwoJCQoJCS8vIFF1ZXJ5CgkJJHZhcnMgPSBhcnJheSgpOwoJCSRxdWVyeVN0cmluZyA9ICcKCQkJU0VMRUNUICogRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3R3ZWV0bWdyX3NvdXJjZWdyb3VwcwkJCQoJCSc7CgkJLy8gRmlsdGVyIG9uIGFjdGl2ZSBzdGF0ZT8KCQlpZiAoJGFjdGl2ZSl7CgkJCSRxdWVyeVN0cmluZyAuPSAnCgkJCQlXSEVSRSBBY3RpdmU9PwkJCQkKCQkJJzsKCQkJJHZhcnNbXSA9IDE7CQkJCgkJfQoJCS8vIE9yZGVyIGJ5CgkJaWYgKCFlbXB0eSgkb3JkZXJieSkgJiYgIWVtcHR5KCRvcmRlcnR5cGUpKXsKCQkJJHF1ZXJ5U3RyaW5nIC49ICIKCQkJT1JERVIgQlkgeyRvcmRlcmJ5fSB7JG9yZGVydHlwZX0iOwoJCX0JCQoJCS8vIExpbWl0CgkJaWYgKCFlbXB0eSgkcGFnZSkgJiYgIWVtcHR5KCRwZXJfcGFnZSkpewkJCQoJCQkkb2Zmc2V0ID0gKCRwYWdlLTEpKiRwZXJfcGFnZTsKCQkJJHF1ZXJ5U3RyaW5nIC49ICIgTElNSVQgeyRwZXJfcGFnZX0gT0ZGU0VUIHskb2Zmc2V0fSI7CgkJfQkJCgkJLy8gRXhlY3V0ZQoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsICR2YXJzKTsJCQoJCS8vIElmIHRoZXJlIHdlcmUgbm8gZXJyb3JzIGV4ZWN1dGluZwoJCWlmICgkZGJyZXN1bHQpewoJCQkkcmV0dXJuID0gYXJyYXkoKTsKCQkJLy8gTG9vcCB0aHJvdWdoIHJlc3VsdHMsIGFkZCB0aGVtIHRvIGFycmF5CgkJCXdoaWxlICgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKXsKCQkJCSRhZG1pbnRoZW1lID0gY21zX3V0aWxzOjpnZXRfdGhlbWVfb2JqZWN0KCk7CgkJCQkKCQkJCSRyb3dbJ2VkaXRsaW5rJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRfZWRpdF9ncm91cCcsICRyZXR1cm5pZCwgJGFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgJHRoaXMtPkxhbmcoJ2VkaXQnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgnSUQnPT4kcm93WydJRCddKSk7CgkJCQkkcm93WydlZGl0VGl0bGUnXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkZF9lZGl0X2dyb3VwJywgJHJldHVybmlkLCAkcm93WydUaXRsZSddLCBhcnJheSgnSUQnPT4kcm93WydJRCddKSk7CgkJCQkkcm93WydkZWxldGVsaW5rJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWxldGUnLCAkcmV0dXJuaWQsICRhZG1pbnRoZW1lLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywgJHRoaXMtPkxhbmcoJ2RlbGV0ZScpLCcnLCcnLCdzeXN0ZW1pY29uJyksIGFycmF5KCdncm91cElEJz0+JHJvd1snSUQnXSksJHRoaXMtPkxhbmcoJ2RlbGV0ZWdyb3VwY29uZmlybScpKTsKCQkJCS8vIERhdGUgZm9ybWF0CgkJCQkkcm93WydEYXRlQ3JlYXRlZCddID0gZGF0ZSgkdGhpcy0+TGFuZygnZGF0ZWZvcm1hdCcpLHN0cnRvdGltZSgkcm93WydEYXRlQ3JlYXRlZCddKSk7CQkJCgkJCQkkcmV0dXJuW10gPSAkcm93OwoJCQl9CgkJCXJldHVybiAkcmV0dXJuOwoJCX0KCQlyZXR1cm4gZmFsc2U7CQkKCX0KCQoJLy8gX0dldEdyb3VwCTogcmV0dXJucyBvbmUgZ3JvdXAKCWZ1bmN0aW9uIF9HZXRHcm91cCgkaWQsJHJldHVybmlkLCAkc291cmNlSUQgPSAiIil7CgkJJGRiID0gJHRoaXMtPkdldERiKCk7CgkJCgkJJHJldHVybiA9IGZhbHNlOwoJCS8vIElmIHRoZSBzb3VyY2UgSUQgaGFzIGJlZW4gZ2l2ZW4KCQlpZiAoIWVtcHR5KCRzb3VyY2VJRCkpewoJCQkkcXVlcnlTdHJpbmcgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX3NvdXJjZWdyb3VwcyBXSEVSRSBJRCA9ID8gTElNSVQgMSI7CgkJCS8vIEV4ZWN1dGUKCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeVN0cmluZywgYXJyYXkoJHNvdXJjZUlEKSk7CgkJCS8vIElmIHRoZSBleGVjdXRpb24gd2FzIHN1Y2Nlc3NmdWwKCQkJaWYgKCRkYnJlc3VsdCl7CgkJCQkvLyBGZXRjaCB0aGUgcm93CgkJCQkkcmV0dXJuID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwoJCQl9CgkJfQoJCXJldHVybiAkcmV0dXJuOwoJfQkKCQoJLy8gR2V0VGVtcGxhdGVMaXN0CTogIEdldHMgYWxsIHRlbXBsYXRlcwkKCWZ1bmN0aW9uIEdldFRlbXBsYXRlTGlzdCgpewoJICAJJHRlbXBsYXRlcyA9ICR0aGlzLT5MaXN0VGVtcGxhdGVzKCk7CSAgCgkJJHJldHVybiA9IGFycmF5KCk7CQkJCQkKCSAgCQlmb3JlYWNoKCAkdGVtcGxhdGVzIGFzICR0ZW1wbGF0ZSApCgkJICAgIHsKCQkgICAgCSRpdGVtID0gYXJyYXkoKTsKCQkgICAgCSRpdGVtWyduYW1lJ10gPSAkdGVtcGxhdGU7CgkJICAJCSRpdGVtWydkZWZhdWx0J10gPSBmYWxzZTsKCQkJCWlmKCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY3VycmVudF90ZW1wbGF0ZScpID09ICRpdGVtWyduYW1lJ10gKXsKCQkJCQkkaXRlbVsnZGVmYXVsdCddID0gdHJ1ZTsKCQkJCX0KCQkJCSRyZXR1cm5bXSA9ICRpdGVtOwoJCSAgICB9CQkgICAKCQlyZXR1cm4gJHJldHVybjsKCX0KCQoJLy8gX0RlbGV0ZUdyb3VwQXNzaWdubWVudHMJOiBEZWxldGVzIGFsbCBncm91cCBhc3NpZ25tZW50cwoJLy8gQGdyb3VwSUQJOiBJRCBvZiB0aGUgZ3JvdXAgd2Ugd2FudCB0byByZW1vdmUgYXNzaWdubWVudHMgb2YKCS8vIEBzb3VyY2VJRDogSUQgb2YgdGhlIHNvdXJjZSB3ZSB3YW50IHRvIHJlbW92ZSBhc3NpZ25tZW50cyBvZgoJZnVuY3Rpb24gX0RlbGV0ZUdyb3VwQXNzaWdubWVudHMoJGdyb3VwSUQgPSAiIiwkc291cmNlSUQgPSAiIil7CgkJJGRiID0gJHRoaXMtPkdldERiKCk7CgkJCgkJLy8gUmVtb3ZpbmcgYmFzZWQgb24gZ3JvdXBJRAoJCWlmICghZW1wdHkoJGdyb3VwSUQpKXsKCQkJJHF1ZXJ5U3RyaW5nID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3Jfc291cmNlc19zb3VyY2Vncm91cHMgV0hFUkUgU291cmNlZ3JvdXBJRCA9ID8iOwoJCQkkdmFycyA9IGFycmF5KCRncm91cElEKTsJCQkKCQl9CgkJLy8gUmVtb3ZpbmcgYmFzZWQgb24gc291cmNlSUQKCQllbHNlaWYgKCFlbXB0eSgkc291cmNlSUQpKXsKCQkJJHF1ZXJ5U3RyaW5nID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3Jfc291cmNlc19zb3VyY2Vncm91cHMgV0hFUkUgU291cmNlSUQgPSA/IjsKCQkJJHZhcnMgPSBhcnJheSgkc291cmNlSUQpOwkKCQl9CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeVN0cmluZywgJHZhcnMpOwkJCgkJLy8gSWYgdGhlIGV4ZWN1dGlvbiB3YXMgc3VjY2Vzc2Z1bAoJCWlmICgkZGJyZXN1bHQpewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoJCgkvLyBfRGVsZXRlR3JvdXAJOiBEZWxldGVzIGEgZ3JvdXAKCS8vIEBncm91cElECTogSUQgb2YgdGhlIGdyb3VwIHdlIHdhbnQgdG8gcmVtb3ZlCglmdW5jdGlvbiBfRGVsZXRlR3JvdXAoJGdyb3VwSUQpewoJCSRkYiA9ICR0aGlzLT5HZXREYigpOwoJCQoJCSRxdWVyeVN0cmluZyA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX3NvdXJjZWdyb3VwcyBXSEVSRSBJRCA9ID8iOwoJCSR2YXJzID0gYXJyYXkoJGdyb3VwSUQpOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsICR2YXJzKTsJCQoJCS8vIElmIHRoZSBleGVjdXRpb24gd2FzIHN1Y2Nlc3NmdWwKCQlpZiAoJGRicmVzdWx0KXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCQoJLy8gX0RlbGV0ZVNvdXJjZTogCURlbGV0ZXMgYSBzb3VyY2UKCS8vIEBzb3VyY2VJRAk6CUlEIG9mIHRoZSBzb3VyY2Ugd2Ugd2FudCB0byByZW1vdmUKCWZ1bmN0aW9uIF9EZWxldGVTb3VyY2UoJHNvdXJjZUlEKXsKCQkkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCQkKCQkkcXVlcnlTdHJpbmcgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV90d2VldG1ncl9zb3VyY2VzIFdIRVJFIElEID0gPyI7CgkJJHZhcnMgPSBhcnJheSgkc291cmNlSUQpOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsICR2YXJzKTsJCQoJCS8vIElmIHRoZSBleGVjdXRpb24gd2FzIHN1Y2Nlc3NmdWwKCQlpZiAoJGRicmVzdWx0KXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCQoJLy8gX0RlbGV0ZU1lc3NhZ2VzCTogRGVsZXRlcyBtZXNzYWdlcyBmcm9tIGEgc291cmNlCglmdW5jdGlvbiBfRGVsZXRlTWVzc2FnZXMoJHNvdXJjZUlEKXsKCQkkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCQkKCQkkcXVlcnlTdHJpbmcgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV90d2VldG1ncl9tZXNzYWdlcyBXSEVSRSBzb3VyY2VJRCA9ID8iOwoJCSR2YXJzID0gYXJyYXkoJHNvdXJjZUlEKTsKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCAkdmFycyk7CQkKCQkvLyBJZiB0aGUgZXhlY3V0aW9uIHdhcyBzdWNjZXNzZnVsCgkJaWYgKCRkYnJlc3VsdCl7CgkJCXJldHVybiB0cnVlOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgkKCS8vIFJlZnJlc2hUd2VldHM6IFJlZnJlc2ggdGhlIGRhdGFiYXNlCQoJLy8gQGlkCQkJOglDTVNNUyBpZAoJLy8gQHJldHVybmlkCToJQ01TTVMgcmV0dXJuaWQKCS8vIEBncm91cAkJOglJRCBvZiB0aGUgZ3JvdXAgdG8gcmVmcmVzaAoJLy8gQHNvdXJjZQkJOglJRCBvZiB0aGUgc291cmNlIHRvIHJlZnJlc2gKCS8vIEBsaW1pdAkJOglOdW1iZXIgb2YgdHdlZXRzIHRvIGZldGNoCglmdW5jdGlvbiBSZWZyZXNoVHdlZXRzKCRpZCA9ICIiLCRyZXR1cm5pZCA9ICIiLCRncm91cCA9ICIiLCRzb3VyY2UgPSAiIiwkbGltaXQ9NSl7CgkJCgkJJGRiID0gJHRoaXMtPkdldERiKCk7CgkJCgkJLy8gQ3JlYXRlIFR3aXR0ZXJvQXV0aCBvYmplY3Qgd2l0aCBhcHAga2V5L3NlY3JldCBhbmQgdG9rZW4ga2V5L3NlY3JldCBmcm9tIGRlZmF1bHQgcGhhc2UKCQkkdGhpcy0+Y29ubmVjdGlvbiA9IG5ldyBUd2l0dGVyT0F1dGgoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NvbnN1bWVyX2tleScsJycpLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY29uc3VtZXJfc2VjcmV0JywnJyksICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdvYXV0aF90b2tlbicsJycpLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnb2F1dGhfdG9rZW5fc2VjcmV0JywnJykpOwoJCQkJCQkJCQkKCQkkcmVmcmVzaEludGVydmFsID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ1JlZnJlc2hJbnRlcnZhbCcpOwoJCSRjdXJyZW50RGF0ZSA9IHN0cnRvdGltZShkYXRlKCJZLW0tZCBIOmk6cyIpKTsJCQoJCSRzb3VyY2VzID0gYXJyYXkoKTsKCQkvLyBDaGVjayBpZiBhIGdyb3VwIHdhcyBnaXZlbgoJCWlmICghZW1wdHkoJGdyb3VwKSl7CQkJCgkJCSRzb3VyY2VzID0gJHRoaXMtPkdldFNvdXJjZXNCeUdyb3VwKCRncm91cCk7CQkJCgkJfSAKCQkvLyBDaGVjayBpZiBhIHNvdXJjZSB3YXMgZ2l2ZW4KCQllbHNlaWYgKCFlbXB0eSgkc291cmNlKSl7CgkJCS8vIFNwbGl0IGdpdmVuIHBhcmFtZXRlciBvbiBjb21tYQkJCQkJCgkJCSRzb3VyY2VzID0gZXhwbG9kZSgiLCIsJHNvdXJjZSk7CgkJCWZvcmVhY2ggKCRzb3VyY2VzIGFzICRrZXkgPT4gJHZhbHVlKXsKCQkJCSRzb3VyY2VzWyRrZXldID0gdHJpbSgkdmFsdWUpOwoJCQl9CgkJfQoJCS8vIElmIHNvdXJjZXMgYXJlIGVtcHR5LCBnZXQgYWxsIHNvdXJjZXMKCQlpZiAoZW1wdHkoJHNvdXJjZXMpKXsJCQkKCQkJJHNvdXJjZXMgPSAkdGhpcy0+R2V0U291cmNlcygkaWQsICRyZXR1cm5pZCwgIiIsICIiKTsKCQkJLy8gTG9vcCByZXN1bHRzLCB3ZSBqdXN0IHdhbnQgdGhlIElECgkJCWlmICghZW1wdHkoJHNvdXJjZXMpKXsKCQkJCWZvcmVhY2ggKCRzb3VyY2VzIGFzICRrZXkgPT4gJHZhbHVlKXsKCQkJCQkkc291cmNlc1ska2V5XSA9IHRyaW0oJHZhbHVlWydJRCddKTsKCQkJCX0JCgkJCX0JCQkJCQoJCX0JCgkJLy8gSWYgdGhlcmUgYXJlIGFueSBzb3VyY2UsIGFuZCBvdXIgY29ubmVjdGlvbiBpcyB2YWxpZAoJCWlmICghZW1wdHkoJHNvdXJjZXMpICYmICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdvYXV0aF92YWxpZCcpKXsKCQkJLy8gTG9vcCBzb3VyY2VzCgkJCSRtZXNzYWdlcyA9IGFycmF5KCk7CgkJCSRzb3VyY2VfbWVzc2FnZXMgPSBhcnJheSgpOwoJCQlmb3JlYWNoICgkc291cmNlcyBhcyAkc291cmNlKXsKCQkJCS8vIEdldCBTb3VyY2UKCQkJCSRzb3VyY2UgPSAkdGhpcy0+X0dldFNvdXJjZSgkaWQsJHJldHVybmlkLCAkc291cmNlKTsKCQkJCQoJCQkJLy8gSXMgdGhpcyBzb3VyY2UgYWN0aXZlPwoJCQkJaWYgKCRzb3VyY2VbJ0FjdGl2ZSddID09IDEpewoJCQkJCS8vIEhvdyBtdWNoIHRpbWUgaGFzIHBhc3NlZCBzaW5jZSB0aGUgbGFzdCB1cGRhdGU/CgkJCQkJJHRpbWVkaWZmZXJlbmNlID0gJGN1cnJlbnREYXRlIC0gc3RydG90aW1lKCRzb3VyY2VbJ0xhc3RVcGRhdGUnXSk7CgkJCQkJLy8gSWYgdGltZSBkaWZmZXJlbmNlIGlzIGJpZ2dlciB0aGFuIHRoZSBzZXQgUmVmcmVzaEludGVydmFsCgkJCQkJCgkJCQkJaWYgKCR0aW1lZGlmZmVyZW5jZSA+ICRyZWZyZXNoSW50ZXJ2YWwpewoJCQkJCQkKCQkJCQkJLy8gR2V0IGxhc3QgbWVzc2FnZXMgZnJvbSBTb3VyY2UKCQkJCQkJJHNvdXJjZV9tZXNzYWdlc1skc291cmNlWydJRCddXSA9ICR0aGlzLT5fR2V0TWVzc2FnZXNGcm9tU291cmNlKCRzb3VyY2VbJ0lEJ10sJGxpbWl0KzMwKTsJCgkJCQkJCS8vIExvYWQgdGhlIFhNTAkJCQkJCQoJCQkJCQkkeG1sID0gJHRoaXMtPmNvbm5lY3Rpb24tPmdldCgkc291cmNlWydYTUwnXS4nJmNvdW50PScuJGxpbWl0KTsKCQkJCQkJLy8gQ2hlY2sgaWYgd2UgZ290IGEgdmFsaWQgcmVzcG9uc2UKCQkJCQkJaWYgKGlzc2V0KCR4bWwtPmVycm9ycykpewoJCQkJCQkJLy8gU2V0IG9hdXRoIHRvIGludmFsaWQsIHVzZXIgbmVlZHMgdG8gcmUtYXV0aGVudGljYXRlIG9uIFR3aXR0ZXIKCQkJCQkJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdvYXV0aF92YWxpZCcsMCk7CgkJCQkJCQkvLyBTZW5kIG1haWwgdG8gQWRtaW4KCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJfQoJCQkJCQkJCQkJCQoJCQkJCQkvLyBJZiB3ZSdyZSBnZXR0aW5nIGEgVHdpdHRlciBwcm9maWxlCgkJCQkJCWlmICgkc291cmNlWydUeXBlJ10gPT0gImFjY291bnQiKXsKCQkJCQkJCSRpdGVtcyA9ICR4bWw7CQkJCQkJCQoJCQkJCQkJLy8gQ2hlY2sgaWYgd2UgZ290IHJlc3VsdHMKCQkJCQkJCWlmICghZW1wdHkoJGl0ZW1zKSl7CgkJCQkJCQkJLy8gTG9vcCB0aHJvdWdoIHRoZSBpdGVtcywgYWRkIHRoZW0gdG8gdGhlIG1lc3NhZ2VzIGFycmF5CgkJCQkJCQkJZm9yZWFjaCgkaXRlbXMgYXMgJGl0ZW0pewkJCQkJCQkKCQkJCQkJCQkJJG1lc3NhZ2UgPSBhcnJheSgpOwoJCQkJCQkJCQkkbWVzc2FnZVsnbWVzc2FnZSddID0gKHN0cmluZykgJGl0ZW0tPnRleHQ7CgkJCQkJCQkJCWlmICghZW1wdHkoJG1lc3NhZ2VbJ21lc3NhZ2UnXSkpewoJCQkJCQkJCQkJJG1lc3NhZ2VbJ1R3ZWV0SUQnXSA9ICRpdGVtLT5pZF9zdHI7CgkJCQkJCQkJCQkkbWVzc2FnZVsnRGF0ZSddID0gZGF0ZSgiWS1tLWQgSDppOnMiLCBzdHJ0b3RpbWUoJGl0ZW0tPmNyZWF0ZWRfYXQpKTsJCQkJCQkJCQkKCQkJCQkJCQkJCSRtZXNzYWdlWydzb3VyY2VJRCddID0gJHNvdXJjZVsnSUQnXTsKCQkJCQkJCQkJCS8vIEdldCB1c2VyIG5hbWUKCQkJCQkJCQkJCSRtZXNzYWdlWydVc2VybmFtZSddID0gJGl0ZW0tPnVzZXItPnNjcmVlbl9uYW1lOwoJCQkJCQkJCQkJJG1lc3NhZ2VbJ1VzZXJfYXZhdGFyJ10gPSAkaXRlbS0+dXNlci0+cHJvZmlsZV9pbWFnZV91cmxfaHR0cHM7CgkJCQkJCQkJCQkkbWVzc2FnZVsnTGluayddID0gKHN0cmluZykgJ2h0dHA6Ly90d2l0dGVyLmNvbS8nLiRtZXNzYWdlWydVc2VybmFtZSddLicvc3RhdHVzZXMvJy4kaXRlbS0+aWQ7CQkJCQkJCQkKCQkJCQkJCQkJCSRtZXNzYWdlc1tdID0gJG1lc3NhZ2U7CgkJCQkJCQkJCX0JCQkJCQkJCQkKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCX0gCgkJCQkJCS8vIElmIHdlJ3JlIGdldHRpbmcgYSBzZWFyY2ggcXVlcnkKCQkJCQkJZWxzZSB7CgkJCQkJCQkkaXRlbXMgPSAkeG1sLT5zdGF0dXNlczsKCQkJCQkJCS8vIENoZWNrIGlmIHdlIGdvdCByZXN1bHRzCgkJCQkJCQlpZiAoIWVtcHR5KCRpdGVtcykpewoJCQkJCQkJCS8vIExvb3AgdGhyb3VnaCB0aGUgaXRlbXMsIGFkZCB0aGVtIHRvIHRoZSBtZXNzYWdlcyBhcnJheQoJCQkJCQkJCWZvcmVhY2goJGl0ZW1zIGFzICRpdGVtKXsJCQkJCQkJCgkJCQkJCQkJCSRtZXNzYWdlID0gYXJyYXkoKTsKCQkJCQkJCQkJJG1lc3NhZ2VbJ21lc3NhZ2UnXSA9IChzdHJpbmcpICRpdGVtLT50ZXh0OwoJCQkJCQkJCQlpZiAoIWVtcHR5KCRtZXNzYWdlWydtZXNzYWdlJ10pKXsKCQkJCQkJCQkJCSRtZXNzYWdlWydUd2VldElEJ10gPSAkaXRlbS0+aWRfc3RyOwoJCQkJCQkJCQkJJG1lc3NhZ2VbJ0RhdGUnXSA9IGRhdGUoIlktbS1kIEg6aTpzIiwgc3RydG90aW1lKCRpdGVtLT5jcmVhdGVkX2F0KSk7CQkJCQkJCQkJCgkJCQkJCQkJCQkkbWVzc2FnZVsnc291cmNlSUQnXSA9ICRzb3VyY2VbJ0lEJ107CgkJCQkJCQkJCQkvLyBHZXQgdXNlcm5hbWUKCQkJCQkJCQkJCSRtZXNzYWdlWydVc2VybmFtZSddID0gJGl0ZW0tPnVzZXItPnNjcmVlbl9uYW1lOwoJCQkJCQkJCQkJJG1lc3NhZ2VbJ1VzZXJfYXZhdGFyJ10gPSAkaXRlbS0+dXNlci0+cHJvZmlsZV9pbWFnZV91cmxfaHR0cHM7CgkJCQkJCQkJCQkkbWVzc2FnZVsnTGluayddID0gKHN0cmluZykgJ2h0dHA6Ly90d2l0dGVyLmNvbS8nLiRtZXNzYWdlWydVc2VybmFtZSddLicvc3RhdHVzZXMvJy4kaXRlbS0+aWQ7CQkJCQkJCQkKCQkJCQkJCQkJCSRtZXNzYWdlc1tdID0gJG1lc3NhZ2U7CgkJCQkJCQkJCX0JCgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJCgkJCQkJCX0KCQkJCQkJLy8gVXBkYXRlIExhc3RVcGRhdGUgU291cmNlCgkJCQkJCSRxdWVyeVN0cmluZyA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV90d2VldG1ncl9zb3VyY2VzCgkJCQkJCQlTRVQJTGFzdFVwZGF0ZSA9ID8KCQkJCQkJCVdIRVJFIElEID0gPwoJCQkJCQkiOwoJCQkJCQkkdmFycyA9IGFycmF5KGRhdGUoIlktbS1kIEg6aTpzIiksJHNvdXJjZVsnSUQnXSk7CgkJCQkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsICR2YXJzKTsJCQkJCQkJCQkKCQkJCQl9CgkJCQl9CgkJCX0KCQkJLy8gUmVtb3ZlIGtleXMgZnJvbSBzb3VyY2VfbWVzc2FnZXMuIE1ha2Ugb25lIGxpc3Qgb2YgbWVzc2FnZXMKCQkJJGV4aXN0aW5nX21lc3NhZ2VzID0gYXJyYXkoKTsKCQkJZm9yZWFjaAkoJHNvdXJjZV9tZXNzYWdlcyBhcyAkc291cmNlKXsKCQkJCWZvcmVhY2ggKCRzb3VyY2UgYXMgJGtleSA9PiAkdmFsdWUpewoJCQkJCSRleGlzdGluZ19tZXNzYWdlc1ska2V5XSA9ICR2YWx1ZTsKCQkJCX0KCQkJfQoJCQoJCQkvLyBMb29wIHRocm91Z2ggbWVzc2FnZXMKCQkJZm9yZWFjaCAoJG1lc3NhZ2VzIGFzICRtZXNzYWdlKXsJCQoJCQkJLy8gQ2hlY2sgaWYgdXNlciBhbHJlYWR5IGV4aXN0cyBpbiBhcnJheQoJCQkJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRtZXNzYWdlWydVc2VybmFtZSddLCR0aGlzLT51c2VycykpewkJCQoJCQkJCS8vIENoZWNrIGlmIHVzZXIgZXhpc3RzIGluIGRhdGFiYXNlCgkJCQkJJHVzZXIgPSAkdGhpcy0+X0dldFVzZXIoJGlkLCRyZXR1cm5pZCwgIiIsICRtZXNzYWdlWydVc2VybmFtZSddKTsKCQkJCQkvLyBJZiB1c2VyIGV4aXN0cyBpbiBkYXRhYmFzZQoJCQkJCWlmICghZW1wdHkoJHVzZXIpKXsJCQkJCgkJCQkJCS8vIENoZWNrIGlmIHVzZXIgaGFzbid0IGJlZW4gZGlzYWJsZWQKCQkJCQkJaWYgKCR1c2VyWydBY3RpdmUnXSA9PSAxKXsKCQkJCQkJCS8vIENoZWNrIHdoZW4gdGhlIHVzZXIgd2FzIHVwZGF0ZWQgbGFzdCAoUmVmcmVzaCBvbmNlIGEgZGF5KQkJCQkJCQoJCQkJCQkJJHRpbWVkaWZmZXJlbmNlID0gJGN1cnJlbnREYXRlIC0gc3RydG90aW1lKCR1c2VyWydMYXN0VXBkYXRlJ10pOwkJCQkJCQoJCQkJCQkJLy8gSWYgZW5vdWdoIHRpbWUgaGFzIHBhc3NlZAoJCQkJCQkJaWYgKCR0aW1lZGlmZmVyZW5jZSA+IDM0NTYwKXsKCQkJCQkJCQkKCQkJCQkJCQkkdXNlclsnQXZhdGFyJ10gPSAkbWVzc2FnZVsnVXNlcl9hdmF0YXInXTsJCQkJCQkJCQkJCQkJCQoJCQkJCQkJCSR1c2VyWydMYXN0VXBkYXRlJ10gPSBkYXRlKCJZLW0tZCBIOmk6cyIpOwoJCQkJCQkJCS8vIFVwZGF0ZSB1c2VyIGluIGRhdGFiYXNlCgkJCQkJCQkJJHF1ZXJ5U3RyaW5nID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX3VzZXJzCgkJCQkJCQkJCVNFVCBBdmF0YXIgPSA/LAoJCQkJCQkJCQlMYXN0VXBkYXRlID0gPwoJCQkJCQkJCQlXSEVSRSBJRCA9ID8KCQkJCQkJCQkiOwoJCQkJCQkJCSR2YXJzID0gYXJyYXkoJHVzZXJbJ0F2YXRhciddLCR1c2VyWydMYXN0VXBkYXRlJ10sJHVzZXJbJ0lEJ10pOwoJCQkJCQkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsICR2YXJzKTsJCQkJCQkJCQkJCQkJCgkJCQkJCQl9CQkJCQkJCgkJCQkJCX0JCQkJCQkJCQoJCQkJCX0KCQkJCQkvLyBJZiB1c2VyIGRvZXNuJ3QgZXhpc3QgeWV0CgkJCQkJZWxzZSB7CQkJCQkKCQkJCQkJJHVzZXJbJ0lEJ10gPSAkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX3VzZXJzX3NlcSIpOwkJCQkJCgkJCQkJCSR1c2VyWydVc2VybmFtZSddID0gJG1lc3NhZ2VbJ1VzZXJuYW1lJ107CgkJCQkJCSR1c2VyWydBY3RpdmUnXSA9IDE7CgkJCQkJCSR1c2VyWydMYXN0VXBkYXRlJ10gPSBkYXRlKCJZLW0tZCBIOmk6cyIpOwoJCQkJCQkkdXNlclsnQXZhdGFyJ10gPSAkbWVzc2FnZVsnVXNlcl9hdmF0YXInXTsJCQkJCQkKCQkJCQkJCgkJCQkJCS8vIEluc2VydCB1c2VyIGludG8gZGF0YWJhc2UJCQkJCQoJCQkJCQkkcXVlcnlTdHJpbmcgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV90d2VldG1ncl91c2VycwoJCQkJCQkJKElELFVzZXJuYW1lLEF2YXRhcixBY3RpdmUsTGFzdFVwZGF0ZSkKCQkJCQkJCVZhbHVlcyg/LD8sPyw/LD8pCQkJCQkKCQkJCQkJIjsKCQkJCQkJJHZhcnMgPSBhcnJheSgkdXNlclsnSUQnXSwkdXNlclsnVXNlcm5hbWUnXSwkdXNlclsnQXZhdGFyJ10sJHVzZXJbJ0FjdGl2ZSddLCR1c2VyWydMYXN0VXBkYXRlJ10pOwoJCQkJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCAkdmFycyk7CQkJCQkJCQkJCgkJCQkJfQoJCQkJCS8vIEFkZCB1c2VyIHRvIGFycmF5CgkJCQkJJHRoaXMtPnVzZXJzWyRtZXNzYWdlWydVc2VybmFtZSddXSA9ICR1c2VyOwkJCQkKCQkJCX0KCQkJCS8vIENoZWNrIGlmIHVzZXIgaXMgbm90IG9uIHRoZSBibGFja2xpc3QKCQkJCWlmICgkdXNlclsnQWN0aXZlJ10gPT0gMSl7CgkJCQkJLy8gQ2hlY2sgaWYgbWVzc2FnZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0cwkJCQkKCQkJCQkvLyBJZiBtZXNzYWdlIHdhcyBub3QgZm91bmQKCQkJCQlpZiAoIWFycmF5X2tleV9leGlzdHMoJG1lc3NhZ2VbJ1R3ZWV0SUQnXSwkZXhpc3RpbmdfbWVzc2FnZXMpKXsJCQkJCQkJCQkJCQoJCQkJCQkvLyBJbnNlcnQgdGhlIG1lc3NhZ2UgaW50byB0aGUgZGF0YWJhc2UKCQkJCQkJJG1lc3NhZ2VJRCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3JfbWVzc2FnZXNfc2VxIik7CgkJCQkJCSRxdWVyeVN0cmluZyA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX21lc3NhZ2VzCgkJCQkJCQkoSUQsTWVzc2FnZSxVc2VyLEFjdGl2ZSxEYXRlLHNvdXJjZUlELExpbmssdHdlZXRJRCkKCQkJCQkJCVZBTFVFUyg/LD8sPyw/LD8sPyw/LD8pCgkJCQkJCSI7CQkJCQkJCgkJCQkJCSR2YXJzID0gYXJyYXkoJG1lc3NhZ2VJRCwkdGhpcy0+UmVtb3ZlQ2hhcnMoJG1lc3NhZ2VbJ21lc3NhZ2UnXSksJHVzZXJbJ0lEJ10sMSwkbWVzc2FnZVsnRGF0ZSddLCRtZXNzYWdlWydzb3VyY2VJRCddLCRtZXNzYWdlWydMaW5rJ10sJG1lc3NhZ2VbJ1R3ZWV0SUQnXSk7CgkJCQkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsICR2YXJzKTsJCQkJCQkJCQkKCQkJCQl9CgkJCQl9CQkJCgkJCX0KCQl9Cgl9CgkKCS8vIFJlbW92ZUNoYXJzCTogUmVtb3ZlcyBub24gVVRGIDggY2hhcmFjdGVycwoJLy8gQHN0cmluZwkJOiBTdHJpbmcgdG8gcmVtb3ZlIGNoYXJzIGZyb20KCWZ1bmN0aW9uIFJlbW92ZUNoYXJzKCRzdHJpbmcgPSAiIil7CgkJLy9yZWplY3Qgb3Zlcmx5IGxvbmcgMiBieXRlIHNlcXVlbmNlcywgYXMgd2VsbCBhcyBjaGFyYWN0ZXJzIGFib3ZlIFUrMTAwMDAgYW5kIHJlcGxhY2Ugd2l0aCA/CgkJJHN0cmluZyA9IHByZWdfcmVwbGFjZSgnL1tceDAwLVx4MDhceDEwXHgwQlx4MENceDBFLVx4MTlceDdGXScuCgkJICd8W1x4MDAtXHg3Rl1bXHg4MC1ceEJGXSsnLgoJCSAnfChbXHhDMFx4QzFdfFtceEYwLVx4RkZdKVtceDgwLVx4QkZdKicuCgkJICd8W1x4QzItXHhERl0oKD8hW1x4ODAtXHhCRl0pfFtceDgwLVx4QkZdezIsfSknLgoJCSAnfFtceEUwLVx4RUZdKChbXHg4MC1ceEJGXSg/IVtceDgwLVx4QkZdKSl8KD8hW1x4ODAtXHhCRl17Mn0pfFtceDgwLVx4QkZdezMsfSkvUycsCgkJICc/JywgJHN0cmluZyApOwoJCQoJCS8vcmVqZWN0IG92ZXJseSBsb25nIDMgYnl0ZSBzZXF1ZW5jZXMgYW5kIFVURi0xNiBzdXJyb2dhdGVzIGFuZCByZXBsYWNlIHdpdGggPwoJCSRzdHJpbmcgPSBwcmVnX3JlcGxhY2UoJy9ceEUwW1x4ODAtXHg5Rl1bXHg4MC1ceEJGXScuCgkJICd8XHhFRFtceEEwLVx4QkZdW1x4ODAtXHhCRl0vUycsJz8nLCAkc3RyaW5nICk7CgkJcmV0dXJuICRzdHJpbmc7CgkJCgl9CgkKCS8vIEdldFR3ZWV0cwk6IEZ1bmN0aW9uIHRvIGdldCB0d2VldHMKCS8vIEBpZAkJCTogQ01TTVMgaWQKCS8vIEByZXR1cm5pZAk6IENNU01TIHJldHVybmlkCgkvLyBAZ3JvdXAJCTogSUQgb2YgdGhlIGdyb3VwIHRvIGZldGNoCgkvLyBAc291cmNlCQk6IElEIG9mIHRoZSBzb3VyY2UgdG8gZmV0Y2gKCS8vIEBsaW1pdAkJOiBOdW1iZXIgb2YgbWVzc2FnZXMgdG8gZGlzcGxheQoJZnVuY3Rpb24gR2V0VHdlZXRzKCRpZCwkcmV0dXJuaWQsJGdyb3VwLCRzb3VyY2UsJGxpbWl0ID0gIjUiKXsKCQkkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCQkJCQoJCSRyZXR1cm4gPSBhcnJheSgpOwkJCgkJJHNvdXJjZXMgPSBhcnJheSgpOwoJCS8vIENoZWNrIGlmIGEgZ3JvdXAgd2FzIGdpdmVuCgkJaWYgKCFlbXB0eSgkZ3JvdXApKXsJCQkKCQkJJHNvdXJjZXMgPSAkdGhpcy0+R2V0U291cmNlc0J5R3JvdXAoJGdyb3VwKTsJCQkKCQl9IAoJCS8vIENoZWNrIGlmIGEgc291cmNlIHdhcyBnaXZlbgoJCWVsc2VpZiAoIWVtcHR5KCRzb3VyY2UpKXsKCQkJLy8gU3BsaXQgZ2l2ZW4gcGFyYW1ldGVyIG9uIGNvbW1hCQkJCQkKCQkJJHNvdXJjZXMgPSBleHBsb2RlKCIsIiwkc291cmNlKTsKCQkJZm9yZWFjaCAoJHNvdXJjZXMgYXMgJGtleSA9PiAkdmFsdWUpewoJCQkJJHNvdXJjZXNbJGtleV0gPSB0cmltKCR2YWx1ZSk7CgkJCX0KCQl9CgkJLy8gSWYgc291cmNlcyBhcmUgZW1wdHksIGdldCBhbGwgc291cmNlcwoJCWlmIChlbXB0eSgkc291cmNlcykpewkJCQoJCQkkc291cmNlcyA9ICR0aGlzLT5HZXRTb3VyY2VzKCRpZCwgJHJldHVybmlkLCAiIiwgIiIpOwoJCQkvLyBMb29wIHJlc3VsdHMsIHdlIGp1c3Qgd2FudCB0aGUgSUQKCQkJZm9yZWFjaCAoJHNvdXJjZXMgYXMgJGtleSA9PiAkdmFsdWUpewoJCQkJJHNvdXJjZXNbJGtleV0gPSB0cmltKCR2YWx1ZVsnSUQnXSk7CgkJCX0JCQkKCQl9CQkKCQkvLyBJZiB0aGVyZSBhcmUgYW55IHNvdXJjZQoJCWlmICghZW1wdHkoJHNvdXJjZXMpKXsKCQkJLy8gSm9pbiBzb3VyY2VzIGFycmF5CgkJCSRzb3VyY2VzX2pvaW5lZCA9ICIiOwoJCQlmb3JlYWNoICgkc291cmNlcyBhcyAkc291cmNlKXsKCQkJCWlmICghZW1wdHkoJHNvdXJjZXNfam9pbmVkKSl7CgkJCQkJJHNvdXJjZXNfam9pbmVkIC49ICIsIjsKCQkJCX0KCQkJCSRzb3VyY2VzX2pvaW5lZCAuPSAkc291cmNlOwoJCQl9CgkJCQoJCQkvLyBGZXRjaCB0d2VldHMKCQkJJHF1ZXJ5U3RyaW5nID0gIlNFTEVDVCBtZXMuKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHdlZXRtZ3JfbWVzc2FnZXMgbWVzCgkJCQlMRUZUIEpPSU4gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV90d2VldG1ncl9zb3VyY2VzIHNyYyBPTiBzcmMuSUQgPSBtZXMuc291cmNlSUQKCQkJCUxFRlQgSk9JTiAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3R3ZWV0bWdyX3VzZXJzIHVzciBPTiB1c3IuSUQgPSBtZXMuVXNlcgoJCQkJV0hFUkUgdXNyLkFjdGl2ZSA9ID8gQU5EIHNyYy5BY3RpdmUgPSA/IEFORCBtZXMuQWN0aXZlID0gPyBBTkQgbWVzLnNvdXJjZUlEIElOICh7JHNvdXJjZXNfam9pbmVkfSkKCQkJCU9SREVSIEJZIG1lcy5EYXRlIERFU0MKCQkJCUxJTUlUIHskbGltaXR9CgkJCSI7CgkJCSR2YXJzID0gYXJyYXkoMSwxLDEpOwoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCAkdmFycyk7CQkKCQkJd2hpbGUgKCRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpewoJCQkJLy8gVHdlZXRJRAoJCQkJJHJvd1snVHdlZXRJRCddID0gJHJvd1sndHdlZXRJRCddOwkJCQkKCQkJCS8vIEdldCBVc2VyIGluZm8KCQkJCSRyb3dbJ1VzZXInXSA9ICR0aGlzLT5fR2V0VXNlcigkaWQsJHJldHVybmlkLCRyb3dbJ1VzZXInXSk7CgkJCQkvLyBSZXBsYWNlIGxpbmtzIGluIG1lc3NhZ2UJCQkJCgkJCQkkcm93WydNZXNzYWdlX3BhcnNlZCddID0gJHRoaXMtPnR3aXR0ZXJpZnkoJHJvd1snTWVzc2FnZSddKTsJCQkJCgkJCQkKCQkJCS8vIFNob3cgcHVibGlzaCB0aW1lIGluIHRleHQKCQkJCSRyb3dbJ0RhdGVfcGFyc2VkJ10gPSAkdGhpcy0+U2Vjb25kc1RvVGV4dCgkdGhpcy0+R2V0VGltZURpZmZlcmVuY2UoJHJvd1snRGF0ZSddKSkuIiAiLiR0aGlzLT5MYW5nICgndGltZV9hZ28nKTsKCQkJCSRyZXR1cm5bXSA9ICRyb3c7CgkJCX0KCQl9CgkJcmV0dXJuICRyZXR1cm47Cgl9CgkKCWZ1bmN0aW9uIE1ha2VUb29sVGlwKCR0aGVfdGV4dCl7CgkJJGFkbWludGhlbWUgPSBjbXNfdXRpbHM6OmdldF90aGVtZV9vYmplY3QoKTsKCQkKCQkkY2xhc3MgPSAiaGVscCIucmFuZCgxMDAwLDk5OTkpOwoJICAJJGljb24gPSAnPGEgdGl0bGU9IicuJHRoZV90ZXh0LiciIGNsYXNzPSInLiRjbGFzcy4nIj4nLiRhZG1pbnRoZW1lLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9pbmZvLmdpZicsICcnLCcnLCcnLCdzeXN0ZW1pY29uJykuJzwvYT4nOwoJICAJJGljb24gLj0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4galF1ZXJ5KCJhLicuJGNsYXNzLiciKS50b29sdGlwKCkgPC9zY3JpcHQ+JzsKCSAgCQoJICAJJHJldHVybiA9ICRpY29uOwoJICAJCgkgIAlyZXR1cm4gJHJldHVybjsKCX0KCQoJZnVuY3Rpb24gTW9kdWxlUGF0aCgpewoJCSRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKCQkkc3RyID0gJGNvbmZpZ1sicm9vdF91cmwiXSAuICIvbW9kdWxlcy8iIC4gJHRoaXMtPkdldE5hbWUoKSAuICIvIjsKCQlyZXR1cm4gJHN0cjsKCX0KCQoJZnVuY3Rpb24gTG9hZEpTKCl7CgkgIAkkbGliZGlySlMgPSAkdGhpcy0+TW9kdWxlUGF0aCgpIC4gImxpYiIgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gImpzIiAuIERJUkVDVE9SWV9TRVBBUkFUT1I7CgkgIAkkbGliZGlyQ1NTID0gJHRoaXMtPk1vZHVsZVBhdGgoKSAuICJsaWIiIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICJjc3MiIC4gRElSRUNUT1JZX1NFUEFSQVRPUjsJICAJCgkgIAllY2hvICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRsaWJkaXJKUy4nVHdlZXRNZ3IuanMiID48L3NjcmlwdD4nOwoJICAJZWNobyAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kbGliZGlySlMuJ2pxdWVyeS50b29sdGlwLm1pbi5qcyIgPjwvc2NyaXB0Pic7CgkgIAllY2hvICc8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInLiRsaWJkaXJDU1MuJ1R3ZWV0TWdyLmNzcyI+JzsKCSAgCWVjaG8gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuJGxpYmRpckNTUy4nanF1ZXJ5LnRvb2x0aXAuY3NzIj4nOwoJfQoJCgkvLyBjdXJQYWdlVVJMCTogUmV0dXJucyB0aGUgY3VycmVudCBwYWdlIFVSTCwgbWFpbmx5IHVzZWQgZm9yIHRoZSBhdXRoZW50aWNhdGlvbiBjYWxsYmFjayAJCglmdW5jdGlvbiBjdXJQYWdlVVJMKCkgewoJCSRwYWdlVVJMID0gJ2h0dHAnOwoJCWlmIChpc3NldCgkX1NFUlZFUlsiSFRUUFMiXSkgJiYgJF9TRVJWRVJbIkhUVFBTIl0gPT0gIm9uIikgeyRwYWdlVVJMIC49ICJzIjt9CgkJCSRwYWdlVVJMIC49ICI6Ly8iOwoJCWlmICgkX1NFUlZFUlsiU0VSVkVSX1BPUlQiXSAhPSAiODAiKSB7CgkJCSRwYWdlVVJMIC49ICRfU0VSVkVSWyJTRVJWRVJfTkFNRSJdLiI6Ii4kX1NFUlZFUlsiU0VSVkVSX1BPUlQiXS4kX1NFUlZFUlsiUkVRVUVTVF9VUkkiXTsKCQl9IGVsc2UgewoJCQkkcGFnZVVSTCAuPSAkX1NFUlZFUlsiU0VSVkVSX05BTUUiXS4kX1NFUlZFUlsiUkVRVUVTVF9VUkkiXTsKCQl9CgkJcmV0dXJuICRwYWdlVVJMOwoJfQoJCgkvLyBHZXRUaW1lRGlmZmVyZW5jZQk6IEdldCB0aGUgZGlmZmVyZW5jZSBpbiB0aW1lIGJldHdlZW4gbm93IGFuZCBnaXZlbiBkYXRlCgkvLyBAVGltZVRvQ2hlY2sJCQk6IFRpbWUgdG8gY29tcGFyZSB0byBjdXJyZW50IHRpbWUKCWZ1bmN0aW9uIEdldFRpbWVEaWZmZXJlbmNlKCRUaW1lVG9DaGVjayl7CQkKCQkvLyBDdXJyZW50IHRpbWUgc3RhbXAKCQkkY3VycmVudF9zZWMgPSB0aW1lKCk7CgkJLy8gQ2FsY3VsYXRlZCB0aW1lIHN0YW1wIGdpdmVuIHRpbWUKCQkkZ2l2ZW5fc2VjID0gIHN0cnRvdGltZSgkVGltZVRvQ2hlY2spOwoJCQoJCS8vIElmIGdpdmVuIHRpbWUgc3RhbXAgY291bGRuJ3QgYmUgY2FsY3VsYXRlZAoJCWlmICgkZ2l2ZW5fc2VjID09PSBmYWxzZSl7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJLy8gQ2FsY3VsYXRlIGRpZmZlcmVuY2UKCQkkZGlmZmVyZW5jZSA9ICRjdXJyZW50X3NlYy0kZ2l2ZW5fc2VjOwoJCXJldHVybiAkZGlmZmVyZW5jZTsJCQoJfQoJCgkvLyBTZWNvbmRzVG9UZXh0CTogQnVpbGRzIGEgc3RyaW5nIGZyb20gZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMKCS8vIEBzZWNvbmRzCQkJOiBOdW1iZXIgb2Ygc2Vjb25kcwoJZnVuY3Rpb24gU2Vjb25kc1RvVGV4dCgkc2Vjb25kcyl7CgkJLy8gU3dpdGNoIG9uIGFtb3VudCBvZiBzZWNvbmRzCgkJc3dpdGNoKCRzZWNvbmRzKXsKCQkJLy8gTGVzcyB0aGF0IGFuIGhvdXIKCQkJY2FzZSAoJHNlY29uZHMgPD0gMzYwMCk6CgkJCQlyZXR1cm4gJHRoaXMtPkxhbmcgKCd0aW1lX2xlc3NfaG91cicpOwoJCQkJYnJlYWs7CgkJCS8vIE1vcmUgdGhhbiBhbiBob3VyLCBsZXNzIHRoYW4gMjQgaG91cnMKCQkJY2FzZSAoJHNlY29uZHMgPiAzNjAwICYmICRzZWNvbmRzIDw9ICgyNCozNjAwKSk6CgkJCQkkY291bnRfaG91cnMgPSBmbG9vcigkc2Vjb25kcy8zNjAwKTsKCQkJCWlmICgkY291bnRfaG91cnMgPiAxKXsKCQkJCQlyZXR1cm4gJGNvdW50X2hvdXJzLiIgIi4kdGhpcy0+TGFuZyAoJ3RpbWVfaG91cnMnKTsKCQkJCX0gZWxzZSB7CgkJCQkJcmV0dXJuICRjb3VudF9ob3Vycy4iICIuJHRoaXMtPkxhbmcgKCd0aW1lX2hvdXInKTsKCQkJCX0JCQkJCgkJCQlicmVhazsKCQkJLy8gTW9yZSB0aGFuIDI0IGhvdXJzLCBsZXNzIHRoYW4gMzAgZGF5cwoJCQljYXNlICgkc2Vjb25kcyA+ICgyNCozNjAwKSAmJiAkc2Vjb25kcyA8PSAoMzAqMjQqMzYwMCkpOgoJCQkJJGNvdW50X2RheXMgPSBmbG9vcigkc2Vjb25kcy8oMjQqMzYwMCkpOwoJCQkJaWYgKCRjb3VudF9kYXlzID4gMSl7CgkJCQkJcmV0dXJuICRjb3VudF9kYXlzLiIgIi4kdGhpcy0+TGFuZyAoJ3RpbWVfZGF5cycpOwoJCQkJfSBlbHNlIHsKCQkJCQlyZXR1cm4gJGNvdW50X2RheXMuIiAiLiR0aGlzLT5MYW5nICgndGltZV9kYXknKTsKCQkJCX0JCQkJCgkJCQlicmVhazsKCQkJLy8gTW9yZSB0aGFuIDMwIGRheXMsIGxlc3MgdGhhbiAxMiBtb250aHMKCQkJY2FzZSAoJHNlY29uZHMgPiAoMzAqMjQqMzYwMCkgJiYgJHNlY29uZHMgPD0gKDEyKjMwKjI0KjM2MDApKToKCQkJCSRjb3VudF9tb250aHMgPSBmbG9vcigkc2Vjb25kcy8oMzAqMjQqMzYwMCkpOwoJCQkJaWYgKCRjb3VudF9tb250aHMgPiAxKSB7CgkJCQkJcmV0dXJuICRjb3VudF9tb250aHMuIiAiLiR0aGlzLT5MYW5nICgndGltZV9tb250aHMnKTsKCQkJCX0gZWxzZSB7CgkJCQkJcmV0dXJuICRjb3VudF9tb250aHMuIiAiLiR0aGlzLT5MYW5nICgndGltZV9tb250aCcpOwoJCQkJfQoJCQkJYnJlYWs7CQkJCgkJfQoJfQoJCgkvLyBQYXJzZXMgbWVzc2FnZSBhbmQgcmV0dXJucyB0aGUgc2FtZSBtZXNzYWdlIHdpdGggbGlua3MKCS8vIEByZXQJOiBJbnB1dCBzdHJpbmcKCWZ1bmN0aW9uIHR3aXR0ZXJpZnkoJHJldCkgewoJCSRyZXQgPSBwcmVnX3JlcGxhY2UoIiMoXnxbXG4gXSkoW1x3XSs/Oi8vW1x3XStbXiBcIlxuXHJcdDwgXSopIyIsICJcXDE8YSBocmVmPVwiXFwyXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XFwyPC9hPiIsICRyZXQpOwoJCSRyZXQgPSBwcmVnX3JlcGxhY2UoIiMoXnxbXG4gXSkoKHd3d3xmdHApXC5bXiBcIlx0XG5ccjwgXSopIyIsICJcXDE8YSBocmVmPVwiaHR0cDovL1xcMlwiIHRhcmdldD1cIl9ibGFua1wiPlxcMjwvYT4iLCAkcmV0KTsKCQkkcmV0ID0gcHJlZ19yZXBsYWNlKCIvQChcdyspLyIsICI8YSBocmVmPVwiaHR0cHM6Ly93d3cudHdpdHRlci5jb20vXFwxXCIgdGFyZ2V0PVwiX2JsYW5rXCI+QFxcMTwvYT4iLCAkcmV0KTsKCQkkcmV0ID0gcHJlZ19yZXBsYWNlKCIvIyhcdyspLyIsICI8YSBocmVmPVwiaHR0cHM6Ly90d2l0dGVyLmNvbS9zZWFyY2g/cT0lMjNcXDFcIiB0YXJnZXQ9XCJfYmxhbmtcIj4jXFwxPC9hPiIsICRyZXQpOwoJCXJldHVybiAkcmV0OwoJfQp9Cgo/Pg==]]></data>
	</file>
</module>
