<?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>ThemesMadeSimple</name>
	<version>0.1</version>
  <mincmsversion>1.9.2</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIGhlbHBzIHlvdSB0byBleHBvcnQsIGltcG9ydCBhbmQgbWFuYWdlIDxzdHJvbmc+dGhlbWUgcGFja2FnZXM8L3N0cm9uZz4gdGhhdCBtYXkgaW5jbHVkZToKPHVsPgo8bGk+dGVtcGxhdGVzPC9saT4KPGxpPnN0eWxlc2hlZXRzPC9saT4KPGxpPnBhZ2VzPC9saT4KPGxpPm1vZHVsZSB0ZW1wbGF0ZXM8L2xpPgo8bGk+Z2xvYmFsIGNvbnRlbnQgYmxvY2tzPC9saT4KPGxpPnVzZXIgZGVmaW5lZCB0YWdzPC9saT4KPGxpPm1vZHVsZSBzZXR0aW5nczwvbGk+CjxsaT5hbmQgZmlsZXMuPC9saT4KPC91bD4KPGRpdiBjbGFzcz0icGFnZWVycm9yY29udGFpbmVyIj4KPHA+VGhpcyBpcyBhIHZlcnkgZWFybHkgYmV0YSB2ZXJzaW9uLiBQbGVhc2UgdXNlIHdpdGggY2F1dGlvbiBvbiB0ZXN0IGluc3RhbGxhdGlvbi4gRE8gTk9UIHVzZSBvbiBwcm9kdWN0aW9uIHNpdGVzIGFzIHRoaXMgbW9kdWxlIG92ZXJ3cml0ZXMgYW5kIHJlcGxhY2VzIHlvdXIgZGF0YS4gRE8gVEVTVCBhbmQgY29tbWl0IHRoZSBidWdzIHRvIHRoZSBmb3JnZSwgc28gdGhhdCBJIHdpbGwgYmUgYWJsZSB0byByZWxlYXNlIHN0YWJsZSB2ZXJzaW9uIHNvb24uPC9wPgo8L2Rpdj4KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+CjxwPlRoaXMgbW9kdWxlIGhhcyBubyBmcm9udCBlbmQgaW50ZXJmYWNlLCBvbmx5IGFuIGFkbWluIGludGVyZmFjZS4gSXQgYWxsb3dzIHlvdSB0byBzZWxlY3QgYW55IG9mIHRoZSBhYm92ZSBtZW50aW9uZWQgY29tcG9uZW50cywgZW50ZXIgcGFja2FnZSBpbmZvLCBhbmQgY2xpY2sgIkV4cG9ydCIuICBBbiBYTUwgZmlsZSBjb250YWluaW5nIGFsbCB0aGUgY29tcG9uZW50cyBvZiB0aGUgcGFja2FnZSB3aWxsIGJlIGNyZWF0ZWQuIFRoZSBmaWxlIGNhbiBiZSBkaXN0cmlidXRlZCB0byBpbXBvcnQgdGhlIHBhY2thZ2Ugb24gdGhlIHRhcmdldCBpbnN0YWxsYXRpb25zLjwvcD4KPGgzPlBlcm1pc3Npb25zPC9oMz4KPHA+VGhlIHBlcm1pc3Npb25zIG1vZGVsIGlzIHN0cmljdCBmb3IgdGhlIFRoZW1lIE1hbmFnZXIgdG8gZW5zdXJlIGRhdGFiYXNlIGludGVncml0eS4gIFRoZSBwZXJtaXNzaW9uICJNYW5hZ2UgVGhlbWVzIiBpcyByZXF1aXJlZCB0byBleHBvcnQgdGhlbWVzIGFuZCBpbXBvcnQgdGhlbWVzLjwvcD4KPHA+QXMgd2VsbCwgdGhlIG9wcG9zaXRlIGZ1bmN0aW9uYWxpdHkgZXhpc3RzLCB5b3UgbWF5IHVwbG9hZCBhIHBhY2thZ2UgZmlsZSAoeG1sIGZvcm1hdCkgYW5kIGhhdmUgdGhlIGVuY2xvc2VkIHRlbXBsYXRlcywgc3R5bGVzaGVldHMsIHBhZ2VzLCBtb2R1bGUgdGVtcGxhdGVzLCBnbG9iYWwgY29udGVudCBibG9ja3MsIHVzZXIgZGVmaW5lZCB0YWdzLCBtb2R1bGUgc2V0dGluZ3MgYW5kIGZpbGVzIGF1dG9tYXRpY2FsbHkgaW1wb3J0ZWQgaW50byB5b3VyIENNU01TIGluc3RhbGxhdGlvbi48L3A+CjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPgo8dWw+CjxsaT5Gb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlLCBGQVFzLCBvciB0byBmaWxlIGEgQnVnIFJlcG9ydCBvciBidXkgY29tbWVyY2lhbCBzdXBwb3J0LCBwbGVhc2UgdmlzaXQgdGhlIG1vZHVsZSBob21lcGFnZSBhdCA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RoZW1lc21zIj5kZXYuY21zbWFkZXNpbXBsZS5vcmc8L2E+LjwvbGk+CjxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZy92aWV3Zm9ydW0ucGhwP2Y9NyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uPC9saT4KPGxpPlBsZWFzZSBkbyBub3QgY29udGFjdCBtZSBieSBtYWlsIGRpcmVjdGx5LiBJIHdpbGwgbm90IGFuc3dlciB0byBhbnkgc3VwcG9ydCByZXF1ZXN0IGZvciBmcmVlLiBBZGRpdGlvbmFsbHksIG90aGVycyBtaWdodCBoYXZlIHRoZSBzYW1lIHF1ZXN0aW9ucyBhbmQgd2FudCB0byBrbm93IGFib3V0IHRoZSBzb2x1dGlvbiwgdGh1cyB1c2UgYm90aCBvcHBvcnR1bml0aWVzIG1lbnRpb25lZCBhYm92ZS48L2xpPiAgCjwvdWw+CjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dCBvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+Cgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDExLCBTb2ZpYSBIYXVzY2hpbGR0IDxhIGhyZWY9Im1haWx0bzpzb2ZpYUBoYXVzY2hpbGR0Lm5ldCI+Jmx0O3NvZmlhQGhhdXNjaGlsZHQubmV0Jmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4KPGgzPkRlcGVuZGVuY2llczwvaDM+PHVsPjxsaT5GaWxlTWFuYWdlciA9Jmd0OyAxLjAuMzwvbGk+PC91bD48aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIFBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgd2hhdCBsYW5ndWFnZSB0byB1c2UgZm9yIGRpc3BsYXkgb24gdGhlIGZyb250ZW5kLiBOb3QgYWxsIG1vZHVsZXMgc3VwcG9ydCBvciBuZWVkIHRoaXMuPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBTb2ZpYSBIYXVzY2hpbGR0ICZsdDtzb2ZpYUBoYXVzY2hpbGR0Lm5ldCZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAwLjE8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz48dWw+CjxsaT5WZXJzaW9uIDAuMSAtIDggSmFudWFyeSAyMDExLgoJPHVsPgoJPGxpPkludGl0aWFsIHJlbGVhc2UuPC9saT4KCTwvdWw+CjwvbGk+ICAgIAo8L3VsPjxiciAvPg==]]></about>
	<description><![CDATA[Export, import and manage theme packages.]]></description>
	<requires>
	  <requiredname>FileManager</requiredname>
	  <requiredversion>1.0.3</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJGdDbXMpKQogICAgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCkpIHsKICAgIHJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKfQoKJHRhYiA9ICcnOwppZiAoIWVtcHR5KCRwYXJhbXNbJ2FjdGl2ZV90YWInXSkpIHsKICAgICR0YWIgPSAkcGFyYW1zWydhY3RpdmVfdGFiJ107Cn0KCmlmIChpc3NldCgkcGFyYW1zWydtZXNzYWdlJ10pKSB7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCAkcGFyYW1zWydtZXNzYWdlJ10pOwp9CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RhYl9oZWFkZXJzJywgJHRoaXMtPlN0YXJ0VGFiSGVhZGVycygpIC4KICAgICAgICAkdGhpcy0+U2V0VGFiSGVhZGVyKCdleHBvcnQnLCAkdGhpcy0+TGFuZygndGl0bGVfZXhwb3J0JyksICgnZXhwb3J0JyA9PSAkdGFiKSA/IHRydWUgOiBmYWxzZSkgLgogICAgICAgICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2ltcG9ydCcsICR0aGlzLT5MYW5nKCd0aXRsZV9pbXBvcnQnKSwgKCdpbXBvcnQnID09ICR0YWIpID8gdHJ1ZSA6IGZhbHNlKSAuCiAgICAgICAgLy8kdGhpcy0+U2V0VGFiSGVhZGVyKCdvdmVydmlldycsICR0aGlzLT5MYW5nKCd0aXRsZV9vdmVydmlldycpLCAoJ292ZXJ2aWV3JyA9PSAkdGFiKSA/IHRydWUgOiBmYWxzZSkgLgogICAgICAgICR0aGlzLT5FbmRUYWJIZWFkZXJzKCkgLiAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCkpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydF9leHBvcnRfdGFiJywgJHRoaXMtPlN0YXJ0VGFiKCdleHBvcnQnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRfaW1wb3J0X3RhYicsICR0aGlzLT5TdGFydFRhYignaW1wb3J0JykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0X292ZXJ2aWV3X3RhYicsICR0aGlzLT5TdGFydFRhYignb3ZlcnZpZXcnKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2hlbHBfc2VjdGlvbicsICR0aGlzLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdleHBvcnRfZXhwbGFpbicsICR0aGlzLT5MYW5nKCdleHBvcnRfZXhwbGFpbicpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3JtZXhwb3J0JywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdleHBvcnQnLCAkcmV0dXJuaWQpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dHN0ZXAnLCAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAnc3RlcCcsIDEpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgJHRoaXMtPkxhbmcoJ3N0YXJ0X2V4cG9ydCcpKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kX3RhYicsICR0aGlzLT5FbmRUYWIoKSk7CgoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3JtaW1wb3J0JywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdpbXBvcnQnLCAkcmV0dXJuaWQsICdwb3N0JywgJ211bHRpcGFydC9mb3JtLWRhdGEnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignaW1wb3J0ZmlsZScsICR0aGlzLT5DcmVhdGVGaWxlVXBsb2FkSW5wdXQoJGlkLCAnaW1wb3J0ZmlsZScsICRyZXR1cm5pZCkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdGltcG9ydCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXRpbXBvcnQnLCAkdGhpcy0+TGFuZygnaW1wb3J0JykpKTsKCgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RhYl9mb290ZXJzJywgJHRoaXMtPkVuZFRhYkNvbnRlbnQoKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRfbGlzdF90YWInLCAkdGhpcy0+U3RhcnRUYWIoJ2xpc3QnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfc2VjdGlvbicsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21vZCcsICR0aGlzKTsKCgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWlucGFuZWwudHBsJyk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/action.export.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJGdDbXMpKQogICAgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCJNYW5hZ2UgVGhlbWVzIikpIHsKICAgIHJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKfQoKLyoKICogU3RlcHM6CiAqIDEuIFNlbGVjdCB0ZW1wbGF0ZXMKICogMi4gU2VsZWN0IHN0eWxlc2hlZXRzCiAqIDMuIFNlbGVjdCBwYWdlcwogKiA0LiBTZWxlY3QgbW9kdWxlIHRlbXBsYXRlcwogKiA1LiBTZWxlY3QgZ2xvYmFsIGNvbnRlbnQgYmxvY2tzCiAqIDYuIFNlbGVjdCB1c2VyIGRlZmluZWQgdGFncyAoVURUKQogKiA3LiBTZWxlY3QgZmlsZXMKICogOC4gU2VsZWN0IG1vZHVsZSBzZXR0aW5ncwogKiA5LiBFbnRlciBtb2R1bGUgaW5mb3JtYXRpb24gYW5kIHVzZXIgaW5zdHJ1Y3Rpb25zOiBESVkgc2VjdGlvbiAoZS4gZy4gbW9kdWxlIHBhcmFtYXRlcnMpCiAqIDEwLiBTZWUgb3ZlcnZpZXcKICogMTEuIERvIGV4cG9ydCAqLwoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgX2V4dHJhY3RUZW1wbGF0ZUZpbGVzCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgpmdW5jdGlvbiBfZXh0cmFjdFRlbXBsYXRlRmlsZXMoJGNvbnRlbnQpIHsKICAgICRyZXN1bHQgPSBhcnJheSgpOwogICAgJHVybHMgPSBnZXRfdXJscygkY29udGVudCk7CiAgICAvLyB3ZSdyZSBvbmx5IGNvbmNlcm5lZCBhYm91dCB0aGUgc3JjIHVybHMKICAgIGZvcmVhY2ggKCR1cmxzWydzcmMnXSBhcyAkc3JjKSB7CiAgICAgICAgLy8gaWYgaXQncyBhbiBleHRlcm5hbCBsaW5rIHdlIGlnbm9yZSBpdAogICAgICAgIC8vIGlmIGl0J3MgYW4gaW50ZXJuYWwgbGluaywgd2UgYWRkIGl0CiAgICAgICAgaWYgKCFwcmVnX21hdGNoKCcvXmh0dHBcOi8nLCAkc3JjKSkgewogICAgICAgICAgICAkcmVzdWx0W10gPSAkc3JjOwogICAgICAgIH0KICAgIH0KICAgIGZvcmVhY2ggKCR1cmxzWydocmVmJ10gYXMgJGhyZWYpIHsKICAgICAgICAvLyBpZiBpdCdzIGFuIGV4dGVybmFsIGxpbmsgd2UgaWdub3JlIGl0CiAgICAgICAgLy8gaWYgaXQncyBhbiBpbnRlcm5hbCBsaW5rLCB3ZSBhZGQgaXQKICAgICAgICBpZiAoIXByZWdfbWF0Y2goJy9eaHR0cFw6LycsICRocmVmKSkgewogICAgICAgICAgICAkcmVzdWx0W10gPSAkaHJlZjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCmZ1bmN0aW9uIF9leHRyYWN0U3R5bGVzaGVldEltYWdlcygkc3R5bGVzaGVldCkgewogICAgJHJlZ2V4ID0gJy91cmxccypcKFwiKiguKilcIipcKS9pJzsKICAgIHByZWdfbWF0Y2hfYWxsKCRyZWdleCwgJHN0eWxlc2hlZXQtPnZhbHVlLCAkbWF0Y2hlcyk7CiAgICAvLyAkbWF0Y2hlc1sxXSBpcyBhbGwgaW1tcG9ydGFudAogICAgLy8gbm93IHN0cmlwIG91dCBhbnkgdGhhdCBoYXZlIF5odHRwIGluIHRoZW0KICAgICRyZXN1bHQgPSBhcnJheSgpOwogICAgZm9yZWFjaCAoJG1hdGNoZXNbMV0gYXMgJG1hdGNoKSB7CiAgICAgICAgaWYgKCFwcmVnX21hdGNoKCcvXmh0dHBcOi8nLCAkbWF0Y2gpKSB7CiAgICAgICAgICAgICRyZXN1bHRbXSA9IHN0cl9yZXBsYWNlKCdbW3Jvb3RfdXJsXV0vJywgJycsICRtYXRjaCk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkcmVzdWx0Owp9CgpmdW5jdGlvbiBsaXN0X2RpcigkZGlyLCAkcGF0aD0nJykgewogICAgZ2xvYmFsICRnQ21zLCAkY29uZmlnOwogICAgJGxpc3REaXIgPSBhcnJheSgpOwogICAgaWYgKCRoYW5kbGVyID0gb3BlbmRpcigkZGlyKSkgewogICAgICAgIHdoaWxlICgoJHN1YiA9IHJlYWRkaXIoJGhhbmRsZXIpKSAhPT0gRkFMU0UpIHsKICAgICAgICAgICAgaWYgKCRzdWIgIT0gIi4iICYmICRzdWIgIT0gIi4uIiAmJiAkc3ViICE9ICJUaHVtYi5kYiIpIHsKICAgICAgICAgICAgICAgIGlmIChpc19maWxlKCRkaXIgLiAiLyIgLiAkc3ViKSkgewogICAgICAgICAgICAgICAgICAgICRmaWxlc2l6ZSA9IGZpbGVzaXplKCRkaXIgLiAiLyIgLiAkc3ViKTsKICAgICAgICAgICAgICAgICAgICAkZmlsZW1hbmFnZXIgPSAkZ0Ntcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0ZpbGVNYW5hZ2VyJyk7CiAgICAgICAgICAgICAgICAgICAgJGZpbGVzaXplID0gJGZpbGVtYW5hZ2VyLT5Gb3JtYXRGaWxlU2l6ZSgkZmlsZXNpemUpOwogICAgICAgICAgICAgICAgICAgICRmaWxlbGlzdFtdID0gc3RyX3JlcGxhY2UoJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10sICcnLCAkZGlyIC4gIi8iIC4gJHN1Yik7CiAgICAgICAgICAgICAgICAgICAgJHN1YiA9IGFycmF5KCRzdWIgPT4gYXJyYXkoJ2ZpbGVzaXplJyA9PiAkZmlsZXNpemVbJ3NpemUnXSAuICcgJyAuICRmaWxlc2l6ZVsndW5pdCddLCAncGF0aCcgPT4gc3RyX3JlcGxhY2UoJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10sICcnLCAkZGlyIC4gIi8iIC4gJHN1YikpKTsKICAgICAgICAgICAgICAgICAgICAkbGlzdERpcltdID0gJHN1YjsKICAgICAgICAgICAgICAgIH0gZWxzZWlmIChpc19kaXIoJGRpciAuICIvIiAuICRzdWIpKSB7CiAgICAgICAgICAgICAgICAgICAgJGZpbGVsaXN0W10gPSBsaXN0X2RpcigkZGlyIC4gIi8iIC4gJHN1Yik7CiAgICAgICAgICAgICAgICAgICAgLy8kbGlzdERpclskc3ViXSA9IGxpc3RfZGlyKCRkaXIgLiAiLyIgLiAkc3ViKTsgLy9kaXJlY3RvcmllcwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNsb3NlZGlyKCRoYW5kbGVyKTsKICAgIH0KICAgIHJldHVybiAkZmlsZWxpc3Q7Cn0KCmZ1bmN0aW9uIExpc3RGaWxlcygkZGlyKSB7CgogICAgaWYgKCRkaCA9IG9wZW5kaXIoJGRpcikpIHsKCiAgICAgICAgJGZpbGVzID0gQXJyYXkoKTsKICAgICAgICAkaW5uZXJfZmlsZXMgPSBBcnJheSgpOwoKICAgICAgICB3aGlsZSAoJGZpbGUgPSByZWFkZGlyKCRkaCkpIHsKICAgICAgICAgICAgaWYgKCRmaWxlICE9ICIuIiAmJiAkZmlsZSAhPSAiLi4iICYmICRmaWxlWzBdICE9ICcuJykgewogICAgICAgICAgICAgICAgaWYgKGlzX2RpcigkZGlyIC4gIi8iIC4gJGZpbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgJGlubmVyX2ZpbGVzID0gTGlzdEZpbGVzKCRkaXIgLiAiLyIgLiAkZmlsZSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCRpbm5lcl9maWxlcykpCiAgICAgICAgICAgICAgICAgICAgICAgICRmaWxlcyA9IGFycmF5X21lcmdlKCRmaWxlcywgJGlubmVyX2ZpbGVzKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkZmlsZXMsICRkaXIgLiAiLyIgLiAkZmlsZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGNsb3NlZGlyKCRkaCk7CiAgICAgICAgcmV0dXJuICRmaWxlczsKICAgIH0KfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNkZWJ1ZyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKJGRlYnVnID0gMDsKaWYgKCRkZWJ1ZykgewogICAgcHJpbnQgJzxwcmU+JzsKICAgIHByaW50X3IoJHBhcmFtcyk7CiAgICBwcmludCAnPC9wcmU+JzsKCiAgICBwcmludCAnPHByZT4nOwogICAgcHJpbnRfcigkX1NFU1NJT05bJ3RtcyddKTsKICAgIHByaW50ICc8L3ByZT4nOwp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjZGVidWcjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgppZiAoIWlzc2V0KCRfU0VTU0lPTlsndG1zJ10pKSB7CiAgICAkX1NFU1NJT05bJ3RtcyddID0gYXJyYXkoKTsKfQoKaWYgKCFpc3NldCgkcGFyYW1zWydzdGVwJ10pKSB7CiAgICAkc3RlcCA9IDE7Cn0gZWxzZSB7CiAgICAkc3RlcCA9ICRwYXJhbXNbJ3N0ZXAnXTsKfQoKCgokZm91bmRfdGVtcGxhdGVzID0gYXJyYXkoKTsKJGZvdW5kX3N0eWxlcyA9IGFycmF5KCk7CiRmb3VuZF9wYWdlcyA9IGFycmF5KCk7CiRmb3VuZF9tb2R1bGVzID0gYXJyYXkoKTsKJGZvdW5kX2Jsb2NrcyA9IGFycmF5KCk7CiRmb3VuZF91ZHRzID0gYXJyYXkoKTsKJGZvdW5kX2ZpbGVzID0gYXJyYXkoKTsKJGZvdW5kX3NldHRpbmdzID0gYXJyYXkoKTsKJHBhY2thZ2VfaW5mbyA9IGFycmF5KCk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lkdGV4dCcsICR0aGlzLT5MYW5nKCdpZCcpKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfc2VjdGlvbicsICR0aGlzLT5MYW5nKCd0aXRsZV9leHBvcnRfc3RlcCcgLiAkc3RlcCkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2hlbHBfc2VjdGlvbicsICR0aGlzLT5MYW5nKCdoZWxwX2V4cG9ydF9zdGVwJyAuICRzdGVwKSk7Cgpzd2l0Y2ggKCRzdGVwKSB7CiAgICBjYXNlIDE6CiAgICAgICAgJHJvd2NsYXNzID0gJ3JvdzEnOwogICAgICAgICRyb3dhcnJheSA9IGFycmF5KCk7CiAgICAgICAgJHRlbXBsYXRlb3BzID0gJiAkZ0Ntcy0+R2V0VGVtcGxhdGVPcGVyYXRpb25zKCk7CiAgICAgICAgJGFsbHRlbXBsYXRlcyA9ICR0ZW1wbGF0ZW9wcy0+TG9hZFRlbXBsYXRlcygpOwoKICAgICAgICBmb3JlYWNoICgkYWxsdGVtcGxhdGVzIGFzICR0ZW1wbCkgewogICAgICAgICAgICAkdG1wWydpZCddID0gJHRlbXBsLT5pZDsKICAgICAgICAgICAgJHRtcFsnbmFtZSddID0gJHRlbXBsLT5uYW1lOwogICAgICAgICAgICAkdG1wWydpbnB1dCddID0gJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAndGVtcGwnIC4gJHRlbXBsLT5pZCwgJHRlbXBsLT5pZCk7CiAgICAgICAgICAgICRmb3VuZF90ZW1wbHNbXSA9ICR0bXA7CiAgICAgICAgfQogICAgICAgICMgZXhwb3J0IHNtYXJ0eSB2YXJpYWJsZXMKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RhYmxlX2l0ZW1zJywgJGZvdW5kX3RlbXBscyk7CiAgICAgICAgYnJlYWs7CiAgICBjYXNlIDI6CiAgICAgICAgIyBnZXQgc2VsZWN0ZWQgaXRlbXMgZnJvbSB0aGUgcHJldmlvdXMgc3RlcAogICAgICAgICR0bXAgPSBhcnJheSgpOwogICAgICAgICR0ZW1wbGF0ZW9wcyA9ICYgJGdDbXMtPkdldFRlbXBsYXRlT3BlcmF0aW9ucygpOwogICAgICAgIGZvcmVhY2ggKCRwYXJhbXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgaWYgKCFwcmVnX21hdGNoKCcvXnRlbXBsL2knLCAka2V5KSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0ZW1wbGF0ZV9pZCA9IHN1YnN0cigka2V5LCBzdHJsZW4oJ3RlbXBsJykpOwogICAgICAgICAgICAkdGVtcGxhdGVzX2NvbnRlbnQgPSAkdGVtcGxhdGVvcHMtPkxvYWRUZW1wbGF0ZUJ5SUQoJHRlbXBsYXRlX2lkKTsKICAgICAgICAgICAgaWYgKCEkdGVtcGxhdGVzX2NvbnRlbnQpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnZXJyb3JfdGVtcGxhdGVub3Rmb3VuZCcpKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRtcFsnaWQnXSA9ICR0ZW1wbGF0ZV9pZDsKICAgICAgICAgICAgJHRtcFsnbmFtZSddID0gJHRlbXBsYXRlc19jb250ZW50LT5uYW1lOwogICAgICAgICAgICAkZm91bmRfdGVtcGxhdGVzW10gPSAkdG1wOwogICAgICAgIH0KICAgICAgICAjIHdyaXRlIGl0ZW1zIHRvIHNlc3Npb24KICAgICAgICAkX1NFU1NJT05bJ3RtcyddWydmb3VuZF90ZW1wbGF0ZXMnXSA9ICRmb3VuZF90ZW1wbGF0ZXM7CgogICAgICAgICNwcmVwYXJlIHRhYmxlIGZvciB0aGlzIHN0ZXAKICAgICAgICAkc3R5bGVvcHMgPSAmICRnQ21zLT5HZXRTdHlsZXNoZWV0T3BlcmF0aW9ucygpOwogICAgICAgICRzdHlsZXMgPSAkc3R5bGVvcHMtPkxvYWRTdHlsZXNoZWV0cygpOwogICAgICAgICMgZ2V0IHN0eWxlcycgbmFtZXMgYW5kIGNyZWF0ZSBjaGVja2JveCBpbnB1dAogICAgICAgICR0bXAgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKCRzdHlsZXMgYXMgJHN0eWxlKSB7CiAgICAgICAgICAgICR0bXBbJ2lkJ10gPSAkc3R5bGUtPmlkOwogICAgICAgICAgICAkdG1wWyduYW1lJ10gPSAkc3R5bGUtPm5hbWU7CiAgICAgICAgICAgICR0bXBbJ2lucHV0J10gPSAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdzdHlsZScgLiAkc3R5bGUtPmlkLCAkc3R5bGUtPmlkKTsKICAgICAgICAgICAgJGZvdW5kX3N0eWxlc1tdID0gJHRtcDsKICAgICAgICB9CgogICAgICAgICMgZXhwb3J0IHNtYXJ0eSB2YXJpYWJsZXMKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RhYmxlX2l0ZW1zJywgJGZvdW5kX3N0eWxlcyk7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSAzOgogICAgICAgICMgYXNzaWduIGFscmVhZHkgc2VsZWN0ZWQgaXRlbXMgdG8gc2Vzc2lvbgogICAgICAgICRmb3VuZF90ZW1wbGF0ZXMgPSAkX1NFU1NJT05bJ3RtcyddWydmb3VuZF90ZW1wbGF0ZXMnXTsKCiAgICAgICAgIyBnZXQgc2VsZWN0ZWQgaXRlbXMgZnJvbSB0aGUgcHJldmlvdXMgc3RlcAogICAgICAgICMgZ2V0IGRldGFpbHMgb2Ygc3R5bGVzaGVldChzKSBzZWxlY3RlZCBvbiB0aGUgcHJldmlvdXMgcGFnZQogICAgICAgICR0bXAgPSBhcnJheSgpOwogICAgICAgICRzdHlsZW9wcyA9ICYgJGdDbXMtPkdldFN0eWxlc2hlZXRPcGVyYXRpb25zKCk7CiAgICAgICAgZm9yZWFjaCAoJHBhcmFtcyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICBpZiAoIXByZWdfbWF0Y2goJy9ec3R5bGUvaScsICRrZXkpKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHN0eWxlX2lkID0gc3Vic3RyKCRrZXksIHN0cmxlbignc3R5bGUnKSk7CiAgICAgICAgICAgICRjc3MgPSAkc3R5bGVvcHMtPkxvYWRTdHlsZXNoZWV0QnlJRCgkc3R5bGVfaWQpOwogICAgICAgICAgICBpZiAoISRjc3MpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnZXJyb3JfY3Nzbm90Zm91bmQnKSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0bXBbJ2lkJ10gPSAkc3R5bGVfaWQ7CiAgICAgICAgICAgICR0bXBbJ25hbWUnXSA9ICRjc3MtPm5hbWU7CiAgICAgICAgICAgICRmb3VuZF9zdHlsZXNbXSA9ICR0bXA7CiAgICAgICAgfQogICAgICAgICMgd3JpdGUgaXRlbXMgdG8gc2Vzc2lvbgogICAgICAgICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX3N0eWxlcyddID0gJGZvdW5kX3N0eWxlczsKCiAgICAgICAgIyBwcmVwYXJlIHRhYmxlIGZvciB0aGlzIHN0ZXAKICAgICAgICAjIGdldCBwYWdlcwogICAgICAgICRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKICAgICAgICAkdG1wID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkZm91bmRfdGVtcGxhdGVzIGFzICR0ZW1wbGF0ZSkgewogICAgICAgICAgICAkcmVzdWx0ID0gYXJyYXkoKTsKICAgICAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCBjLmNvbnRlbnRfaWQsIGMuY29udGVudF9uYW1lLCBjLmhpZXJhcmNoeV9wYXRoIEZST00gIiAuIGNtc19kYl9wcmVmaXgoKSAuICJjb250ZW50IGMgV0hFUkUgYy50ZW1wbGF0ZV9pZCA9ID8gQU5EIGMudHlwZT0nY29udGVudCciOwogICAgICAgICAgICAkZGJyZXN1bHQgPSAmJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHRlbXBsYXRlWydpZCddKSk7CiAgICAgICAgICAgIHdoaWxlICgkZGJyZXN1bHQgJiYgISRkYnJlc3VsdC0+RU9GKSB7CiAgICAgICAgICAgICAgICAkdG1wWydpZCddID0gJGRicmVzdWx0LT5maWVsZHNbJ2NvbnRlbnRfaWQnXTsKICAgICAgICAgICAgICAgICR0bXBbJ25hbWUnXSA9ICRkYnJlc3VsdC0+ZmllbGRzWydjb250ZW50X25hbWUnXSAuICcgKCcgLiAkZGJyZXN1bHQtPmZpZWxkc1snaGllcmFyY2h5X3BhdGgnXSAuICcpJzsKICAgICAgICAgICAgICAgICR0bXBbJ2lucHV0J10gPSAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdwYWdlJyAuICRkYnJlc3VsdC0+ZmllbGRzWydjb250ZW50X2lkJ10sICRkYnJlc3VsdC0+ZmllbGRzWydjb250ZW50X2lkJ10pOwogICAgICAgICAgICAgICAgJGZvdW5kX3BhZ2VzW10gPSAkdG1wOwogICAgICAgICAgICAgICAgJGRicmVzdWx0LT5Nb3ZlTmV4dCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGV4cG9ydCBzbWFydHkgdmFyaWFibGVzCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJsZV9pdGVtcycsICRmb3VuZF9wYWdlcyk7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSA0OgogICAgICAgICMgYXNzaWduIGFscmVhZHkgc2VsZWN0ZWQgaXRlbXMgdG8gc2Vzc2lvbgogICAgICAgICRmb3VuZF90ZW1wbGF0ZXMgPSAkX1NFU1NJT05bJ3RtcyddWydmb3VuZF90ZW1wbGF0ZXMnXTsKICAgICAgICAkZm91bmRfc3R5bGVzID0gJF9TRVNTSU9OWyd0bXMnXVsnZm91bmRfc3R5bGVzJ107CgogICAgICAgICMgZ2V0IHNlbGVjdGVkIGl0ZW1zIGZyb20gdGhlIHByZXZpb3VzIHN0ZXAKICAgICAgICAjIGdldCBkZXRhaWxzIG9mIHBhZ2Uocykgc2VsZWN0ZWQgb24gdGhlIHByZXZpb3VzIHBhZ2UKICAgICAgICAkdG1wID0gYXJyYXkoKTsKICAgICAgICAkZGIgPSAmJGdDbXMtPkdldERiKCk7CiAgICAgICAgZm9yZWFjaCAoJHBhcmFtcyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICBpZiAoIXByZWdfbWF0Y2goJy9ecGFnZS9pJywgJGtleSkpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkcGFnZV9pZCA9IHN1YnN0cigka2V5LCBzdHJsZW4oJ3BhZ2UnKSk7CiAgICAgICAgICAgICRyZXN1bHQgPSBhcnJheSgpOwogICAgICAgICAgICAkcXVlcnkgPSAiU0VMRUNUIGMuY29udGVudF9pZCwgYy5jb250ZW50X25hbWUgRlJPTSAiIC4gY21zX2RiX3ByZWZpeCgpIC4gImNvbnRlbnQgYyBXSEVSRSBjLmNvbnRlbnRfaWQgPSA/IjsKICAgICAgICAgICAgJGRicmVzdWx0ID0gJiRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwYWdlX2lkKSk7CiAgICAgICAgICAgIHdoaWxlICgkZGJyZXN1bHQgJiYgISRkYnJlc3VsdC0+RU9GKSB7CiAgICAgICAgICAgICAgICAkdG1wWydpZCddID0gJGRicmVzdWx0LT5maWVsZHNbJ2NvbnRlbnRfaWQnXTsKICAgICAgICAgICAgICAgICR0bXBbJ25hbWUnXSA9ICRkYnJlc3VsdC0+ZmllbGRzWydjb250ZW50X25hbWUnXTsKICAgICAgICAgICAgICAgICRmb3VuZF9wYWdlc1tdID0gJHRtcDsKICAgICAgICAgICAgICAgICRkYnJlc3VsdC0+TW92ZU5leHQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAjIHdyaXRlIGl0ZW1zIHRvIHNlc3Npb24KICAgICAgICAkX1NFU1NJT05bJ3RtcyddWydmb3VuZF9wYWdlcyddID0gJGZvdW5kX3BhZ2VzOwoKICAgICAgICAjIHByZXBhcmUgdGFibGUgZm9yIHRoaXMgc3RlcAogICAgICAgICRhbGxfbW9kdWxlcyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJGdDbXMtPm1vZHVsZXMgYXMgJG1vZHVsZV9uYW1lID0+ICRkZXRhaWxzKSB7CiAgICAgICAgICAgICRhbGxfbW9kdWxlc1tdID0gJG1vZHVsZV9uYW1lOwogICAgICAgIH0KICAgICAgICAkdG1wID0gYXJyYXkoKTsKICAgICAgICAkaSA9IDE7CiAgICAgICAgZm9yZWFjaCAoJGFsbF9tb2R1bGVzIGFzICRtb2R1bGVfbmFtZSkgewogICAgICAgICAgICAkdGVzdCA9IENtc01vZHVsZTo6R2V0TW9kdWxlSW5zdGFuY2UoJG1vZHVsZV9uYW1lKTsKICAgICAgICAgICAgJHRlbXBzID0gJHRlc3QtPkxpc3RUZW1wbGF0ZXMoJG1vZHVsZV9uYW1lKTsKICAgICAgICAgICAgZm9yZWFjaCAoJHRlbXBzIGFzICR0ZW1wbGF0ZV9uYW1lKSB7CiAgICAgICAgICAgICAgICAkdG1wWydpZCddID0gJG1vZHVsZV9uYW1lOwogICAgICAgICAgICAgICAgJHRtcFsnbmFtZSddID0gJHRlbXBsYXRlX25hbWU7CiAgICAgICAgICAgICAgICAkdG1wWydpbnB1dCddID0gJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnbW9kdGVtcCcgLiAkaSwgJG1vZHVsZV9uYW1lIC4gJyMnIC4gJHRlbXBsYXRlX25hbWUpOwogICAgICAgICAgICAgICAgJGZvdW5kX21vZHVsZXNbXSA9ICR0bXA7CiAgICAgICAgICAgICAgICAkaSsrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGV4cG9ydCBzbWFydHkgdmFyaWFibGVzCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpZHRleHQnLCAkdGhpcy0+TGFuZygnbW9kdWxlbmFtZScpKTsKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RhYmxlX2l0ZW1zJywgJGZvdW5kX21vZHVsZXMpOwogICAgICAgIGJyZWFrOwoKICAgIGNhc2UgNToKICAgICAgICAjIGFzc2lnbiBhbHJlYWR5IHNlbGVjdGVkIGl0ZW1zIHRvIHNlc3Npb24KICAgICAgICAkZm91bmRfdGVtcGxhdGVzID0gJF9TRVNTSU9OWyd0bXMnXVsnZm91bmRfdGVtcGxhdGVzJ107CiAgICAgICAgJGZvdW5kX3N0eWxlcyA9ICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX3N0eWxlcyddOwogICAgICAgICRmb3VuZF9wYWdlcyA9ICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX3BhZ2VzJ107CgogICAgICAgICMgZ2V0IHNlbGVjdGVkIGl0ZW1zIGZyb20gdGhlIHByZXZpb3VzIHN0ZXAKICAgICAgICAjIGdldCBtb2R1bGUgdGVtcGxhdGVzCiAgICAgICAgZm9yZWFjaCAoJHBhcmFtcyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICBpZiAoIXByZWdfbWF0Y2goJy9ebW9kdGVtcC9pJywgJGtleSkpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGVzdCA9IGV4cGxvZGUoJyMnLCAkdmFsdWUpOwogICAgICAgICAgICAkdG1wWydpZCddID0gJHRlc3RbMF07CiAgICAgICAgICAgICR0bXBbJ25hbWUnXSA9ICR0ZXN0WzFdOwogICAgICAgICAgICAkZm91bmRfbW9kdWxlc1tdID0gJHRtcDsKICAgICAgICB9CiAgICAgICAgIyB3cml0ZSBpdGVtcyB0byBzZXNzaW9uCiAgICAgICAgJF9TRVNTSU9OWyd0bXMnXVsnZm91bmRfbW9kdWxlcyddID0gJGZvdW5kX21vZHVsZXM7CgogICAgICAgICMgcHJlcGFyZSB0YWJsZSBmb3IgdGhpcyBzdGVwCiAgICAgICAgJGJsb2Nrb3BzID0gJiAkZ0Ntcy0+R2V0R2xvYmFsQ29udGVudE9wZXJhdGlvbnMoKTsKICAgICAgICAkYWxsX2dibHMgPSAkYmxvY2tvcHMtPkxvYWRIdG1sQmxvYnMoKTsKICAgICAgICAkdG1wID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkYWxsX2dibHMgYXMgJGJsb2NrKSB7CiAgICAgICAgICAgICR0bXBbJ2lkJ10gPSAkYmxvY2stPmlkOwogICAgICAgICAgICAkdG1wWyduYW1lJ10gPSAkYmxvY2stPm5hbWU7CiAgICAgICAgICAgICR0bXBbJ2lucHV0J10gPSAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdibG9jaycgLiAkYmxvY2stPmlkLCAkYmxvY2stPmlkKTsKICAgICAgICAgICAgJGZvdW5kX2Jsb2Nrc1tdID0gJHRtcDsKICAgICAgICB9CgogICAgICAgICMgZXhwb3J0IHNtYXJ0eSB2YXJpYWJsZXMKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RhYmxlX2l0ZW1zJywgJGZvdW5kX2Jsb2Nrcyk7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSA2OgogICAgICAgICMgYXNzaWduIGFscmVhZHkgc2VsZWN0ZWQgaXRlbXMgdG8gc2Vzc2lvbgogICAgICAgICRmb3VuZF90ZW1wbGF0ZXMgPSAkX1NFU1NJT05bJ3RtcyddWydmb3VuZF90ZW1wbGF0ZXMnXTsKICAgICAgICAkZm91bmRfc3R5bGVzID0gJF9TRVNTSU9OWyd0bXMnXVsnZm91bmRfc3R5bGVzJ107CiAgICAgICAgJGZvdW5kX3BhZ2VzID0gJF9TRVNTSU9OWyd0bXMnXVsnZm91bmRfcGFnZXMnXTsKICAgICAgICAkZm91bmRfbW9kdWxlcyA9ICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX21vZHVsZXMnXTsKCiAgICAgICAgIyBnZXQgc2VsZWN0ZWQgaXRlbXMgZnJvbSB0aGUgcHJldmlvdXMgc3RlcAogICAgICAgICMgZ2V0IGNvbnRlbnQgYmxvY2tzCiAgICAgICAgJHRtcCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJHBhcmFtcyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICBpZiAoIXByZWdfbWF0Y2goJy9eYmxvY2svaScsICRrZXkpKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGJsb2NrX2lkID0gc3Vic3RyKCRrZXksIHN0cmxlbignYmxvY2snKSk7CiAgICAgICAgICAgICRibG9ja29wcyA9ICYgJGdDbXMtPkdldEdsb2JhbENvbnRlbnRPcGVyYXRpb25zKCk7CiAgICAgICAgICAgICRibG9jayA9ICRibG9ja29wcy0+TG9hZEh0bWxCbG9iQnlJRCgkYmxvY2tfaWQpOwogICAgICAgICAgICAkdG1wWydpZCddID0gJGJsb2NrX2lkOwogICAgICAgICAgICAkdG1wWyduYW1lJ10gPSAkYmxvY2stPm5hbWU7CiAgICAgICAgICAgICRmb3VuZF9ibG9ja3NbXSA9ICR0bXA7CiAgICAgICAgfQogICAgICAgICMgd3JpdGUgaXRlbXMgdG8gc2Vzc2lvbgogICAgICAgICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX2Jsb2NrcyddID0gJGZvdW5kX2Jsb2NrczsKCiAgICAgICAgIyBwcmVwYXJlIHRhYmxlIGZvciB0aGlzIHN0ZXAKICAgICAgICAjIGdldCBhbGwgdXNlciBkZWZpbmVkIHRhZ3MKICAgICAgICAkdG1wID0gYXJyYXkoKTsKICAgICAgICAkZGIgPSAmJGdDbXMtPkdldERiKCk7CiAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCB1LnVzZXJwbHVnaW5faWQsIHUudXNlcnBsdWdpbl9uYW1lIEZST00gIiAuIGNtc19kYl9wcmVmaXgoKSAuICJ1c2VycGx1Z2lucyB1IjsKICAgICAgICAkZGJyZXN1bHQgPSAmJGRiLT5FeGVjdXRlKCRxdWVyeSk7CiAgICAgICAgd2hpbGUgKCRkYnJlc3VsdCAmJiAhJGRicmVzdWx0LT5FT0YpIHsKICAgICAgICAgICAgJHRtcFsnaWQnXSA9ICRkYnJlc3VsdC0+ZmllbGRzWyd1c2VycGx1Z2luX2lkJ107CiAgICAgICAgICAgICR0bXBbJ25hbWUnXSA9ICRkYnJlc3VsdC0+ZmllbGRzWyd1c2VycGx1Z2luX25hbWUnXTsKICAgICAgICAgICAgJHRtcFsnaW5wdXQnXSA9ICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ3VkdCcgLiAkZGJyZXN1bHQtPmZpZWxkc1sndXNlcnBsdWdpbl9pZCddLCAkZGJyZXN1bHQtPmZpZWxkc1sndXNlcnBsdWdpbl9uYW1lJ10pOwogICAgICAgICAgICAkZm91bmRfdWR0c1tdID0gJHRtcDsKICAgICAgICAgICAgJGRicmVzdWx0LT5Nb3ZlTmV4dCgpOwogICAgICAgIH0KICAgICAgICAjIGV4cG9ydCBzbWFydHkgdmFyaWFibGVzCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJsZV9pdGVtcycsICRmb3VuZF91ZHRzKTsKICAgICAgICBicmVhazsKCiAgICBjYXNlIDc6CiAgICAgICAgIyBhc3NpZ24gYWxyZWFkeSBzZWxlY3RlZCBpdGVtcyB0byBzZXNzaW9uCiAgICAgICAgJGZvdW5kX3RlbXBsYXRlcyA9ICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX3RlbXBsYXRlcyddOwogICAgICAgICRmb3VuZF9zdHlsZXMgPSAkX1NFU1NJT05bJ3RtcyddWydmb3VuZF9zdHlsZXMnXTsKICAgICAgICAkZm91bmRfcGFnZXMgPSAkX1NFU1NJT05bJ3RtcyddWydmb3VuZF9wYWdlcyddOwogICAgICAgICRmb3VuZF9tb2R1bGVzID0gJF9TRVNTSU9OWyd0bXMnXVsnZm91bmRfbW9kdWxlcyddOwogICAgICAgICRmb3VuZF9ibG9ja3MgPSAkX1NFU1NJT05bJ3RtcyddWydmb3VuZF9ibG9ja3MnXTsKCiAgICAgICAgIyBnZXQgc2VsZWN0ZWQgaXRlbXMgZnJvbSB0aGUgcHJldmlvdXMgc3RlcAogICAgICAgICMgZ2V0IGNvbnRlbnQgYmxvY2tzCiAgICAgICAgJHRtcCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJHBhcmFtcyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICBpZiAoIXByZWdfbWF0Y2goJy9edWR0L2knLCAka2V5KSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR1ZHRfaWQgPSBzdWJzdHIoJGtleSwgc3RybGVuKCd1ZHQnKSk7CiAgICAgICAgICAgICR0bXBbJ2lkJ10gPSAkdWR0X2lkOwogICAgICAgICAgICAkdG1wWyduYW1lJ10gPSAkdmFsdWU7CiAgICAgICAgICAgICRmb3VuZF91ZHRzW10gPSAkdG1wOwogICAgICAgIH0KICAgICAgICAjIHdyaXRlIGl0ZW1zIHRvIHNlc3Npb24KICAgICAgICAkX1NFU1NJT05bJ3RtcyddWydmb3VuZF91ZHRzJ10gPSAkZm91bmRfdWR0czsKCiAgICAgICAgIyBwcmVwYXJlIHRhYmxlIGZvciB0aGlzIHN0ZXAKICAgICAgICAkdXJscyA9IExpc3RGaWxlcygkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSk7CgogICAgICAgICR0bXAgPSBhcnJheSgpOwogICAgICAgICRpID0gMTsKICAgICAgICAkZmlsZW1hbmFnZXIgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0ZpbGVNYW5hZ2VyJyk7CiAgICAgICAgZm9yZWFjaCAoJHVybHMgYXMgJHVybCkgewogICAgICAgICAgICAkdG1wWydpZCddID0gJGk7CiAgICAgICAgICAgICRmaWxlc2l6ZSA9ICRmaWxlbWFuYWdlci0+Rm9ybWF0RmlsZVNpemUoZmlsZXNpemUoJHVybCkpOwogICAgICAgICAgICAkdXJsID0gc3RyX3JlcGxhY2UoJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10sICcnLCAkdXJsKTsKICAgICAgICAgICAgJHRtcFsnaW5wdXQnXSA9ICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ2ZpbGUnIC4gJGksICR1cmwpOwogICAgICAgICAgICAkdG1wWyduYW1lJ10gPSAkdXJsIC4gJyAoJyAuIGltcGxvZGUoJyAnLCAkZmlsZXNpemUpIC4gJyknOwogICAgICAgICAgICAkZm91bmRfZmlsZXNbXSA9ICR0bXA7CiAgICAgICAgICAgICRpKys7CiAgICAgICAgfQoKICAgICAgICAjIGV4cG9ydCBzbWFydHkgdmFyaWFibGVzCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJsZV9pdGVtcycsICRmb3VuZF9maWxlcyk7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSA4OgogICAgICAgICMgYXNzaWduIGFscmVhZHkgc2VsZWN0ZWQgaXRlbXMgdG8gc2Vzc2lvbgogICAgICAgICRmb3VuZF90ZW1wbGF0ZXMgPSAkX1NFU1NJT05bJ3RtcyddWydmb3VuZF90ZW1wbGF0ZXMnXTsKICAgICAgICAkZm91bmRfc3R5bGVzID0gJF9TRVNTSU9OWyd0bXMnXVsnZm91bmRfc3R5bGVzJ107CiAgICAgICAgJGZvdW5kX3BhZ2VzID0gJF9TRVNTSU9OWyd0bXMnXVsnZm91bmRfcGFnZXMnXTsKICAgICAgICAkZm91bmRfbW9kdWxlcyA9ICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX21vZHVsZXMnXTsKICAgICAgICAkZm91bmRfYmxvY2tzID0gJF9TRVNTSU9OWyd0bXMnXVsnZm91bmRfYmxvY2tzJ107CiAgICAgICAgJGZvdW5kX3VkdHMgPSAkX1NFU1NJT05bJ3RtcyddWydmb3VuZF91ZHRzJ107CgogICAgICAgICMgZ2V0IHNlbGVjdGVkIGl0ZW1zIGZyb20gdGhlIHByZXZpb3VzIHN0ZXAKICAgICAgICAjIGdldCBmaWxlcwogICAgICAgICR0bXAgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKCRwYXJhbXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgaWYgKCFwcmVnX21hdGNoKCcvXmZpbGUvaScsICRrZXkpKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGZpbGVfaWQgPSBzdWJzdHIoJGtleSwgc3RybGVuKCdmaWxlJykpOwogICAgICAgICAgICAkdG1wWydpZCddID0gJGZpbGVfaWQ7CiAgICAgICAgICAgICR0bXBbJ25hbWUnXSA9ICR2YWx1ZTsKICAgICAgICAgICAgJGZvdW5kX2ZpbGVzW10gPSAkdG1wOwogICAgICAgIH0KICAgICAgICAjIHdyaXRlIGl0ZW1zIHRvIHNlc3Npb24KICAgICAgICAkX1NFU1NJT05bJ3RtcyddWydmb3VuZF9maWxlcyddID0gJGZvdW5kX2ZpbGVzOwoKICAgICAgICAjIHByZXBhcmUgdGFibGUgZm9yIHRoaXMgc3RlcAogICAgICAgICRhbGxfbW9kdWxlcyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJGdDbXMtPm1vZHVsZXMgYXMgJG1vZHVsZV9uYW1lID0+ICRkZXRhaWxzKSB7CiAgICAgICAgICAgICRhbGxfbW9kdWxlc1tdID0gJG1vZHVsZV9uYW1lOwogICAgICAgIH0KICAgICAgICAkdG1wID0gYXJyYXkoKTsKICAgICAgICAkaSA9IDE7CiAgICAgICAgZm9yZWFjaCAoJGFsbF9tb2R1bGVzIGFzICRtb2R1bGVfbmFtZSkgewogICAgICAgICAgICAkdG1wWydpZCddID0gJG1vZHVsZV9uYW1lOwogICAgICAgICAgICAkdG1wWyduYW1lJ10gPSAkbW9kdWxlX25hbWU7CiAgICAgICAgICAgICR0bXBbJ2lucHV0J10gPSAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdzZXR0aW5nJyAuICRpLCAkbW9kdWxlX25hbWUpOwogICAgICAgICAgICAkZm91bmRfc2V0dGluZ3NbXSA9ICR0bXA7CiAgICAgICAgICAgICRpKys7CiAgICAgICAgfQoKICAgICAgICAjIGV4cG9ydCBzbWFydHkgdmFyaWFibGVzCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJsZV9pdGVtcycsICRmb3VuZF9zZXR0aW5ncyk7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSA5OgoKICAgICAgICBpZiAoaXNzZXQoJHBhcmFtc1snbWVzc2FnZSddKSkgewogICAgICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCAkcGFyYW1zWydtZXNzYWdlJ10pOwogICAgICAgIH0KICAgICAgICAjIGFzc2lnbiBhbHJlYWR5IHNlbGVjdGVkIGl0ZW1zIHRvIHNlc3Npb24KICAgICAgICAkZm91bmRfdGVtcGxhdGVzID0gJF9TRVNTSU9OWyd0bXMnXVsnZm91bmRfdGVtcGxhdGVzJ107CiAgICAgICAgJGZvdW5kX3N0eWxlcyA9ICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX3N0eWxlcyddOwogICAgICAgICRmb3VuZF9wYWdlcyA9ICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX3BhZ2VzJ107CiAgICAgICAgJGZvdW5kX21vZHVsZXMgPSAkX1NFU1NJT05bJ3RtcyddWydmb3VuZF9tb2R1bGVzJ107CiAgICAgICAgJGZvdW5kX2Jsb2NrcyA9ICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX2Jsb2NrcyddOwogICAgICAgICRmb3VuZF91ZHRzID0gJF9TRVNTSU9OWyd0bXMnXVsnZm91bmRfdWR0cyddOwogICAgICAgICRmb3VuZF9maWxlcyA9ICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX2ZpbGVzJ107CgogICAgICAgICMgZ2V0IHNlbGVjdGVkIGl0ZW1zIGZyb20gdGhlIHByZXZpb3VzIHN0ZXAKICAgICAgICAkdG1wID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkcGFyYW1zIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmICghcHJlZ19tYXRjaCgnL15zZXR0aW5nL2knLCAka2V5KSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRzZXR0aW5nX2lkID0gc3Vic3RyKCRrZXksIHN0cmxlbignc2V0dGluZycpKTsKICAgICAgICAgICAgJHRtcFsnaWQnXSA9ICRzZXR0aW5nX2lkOwogICAgICAgICAgICAkdG1wWyduYW1lJ10gPSAkdmFsdWU7CiAgICAgICAgICAgICRmb3VuZF9zZXR0aW5nc1tdID0gJHRtcDsKICAgICAgICB9CgogICAgICAgICMgd3JpdGUgaXRlbXMgdG8gc2Vzc2lvbgogICAgICAgICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX3NldHRpbmdzJ10gPSAkZm91bmRfc2V0dGluZ3M7CgogICAgICAgICMgcHJlcGFyZSBpbnB1dCBmaWVsZHMKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9wYWNrYWdlbmFtZScsICR0aGlzLT5MYW5nKCdwcm9tcHRfcGFja2FnZW5hbWUnKSk7CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9wYWNrYWdlbmFtZScsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAncGFja2FnZW5hbWUnLCBpc3NldCgkcGFyYW1zWydwYWNrYWdlbmFtZSddKSA/ICRwYXJhbXNbJ3BhY2thZ2VuYW1lJ10gOiAnJywgMjAsIDIwKSk7CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbmZvX3BhY2thZ2VuYW1lJywgJHRoaXMtPkxhbmcoJ2luZm9fcGFja2FnZW5hbWUnKSk7CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfcGFja2FnZXZlcnNpb24nLCAkdGhpcy0+TGFuZygncHJvbXB0X3BhY2thZ2V2ZXJzaW9uJykpOwogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfcGFja2FnZXZlcnNpb24nLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ3BhY2thZ2V2ZXJzaW9uJywgaXNzZXQoJHBhcmFtc1sncGFja2FnZXZlcnNpb24nXSkgPyAkcGFyYW1zWydwYWNrYWdldmVyc2lvbiddIDogJycsIDIwLCAyMCkpOwogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5mb19wYWNrYWdldmVyc2lvbicsICR0aGlzLT5MYW5nKCdpbmZvX3BhY2thZ2V2ZXJzaW9uJykpOwogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X2F1dGhvcm5hbWUnLCAkdGhpcy0+TGFuZygncHJvbXB0X2F1dGhvcm5hbWUnKSk7CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9hdXRob3JuYW1lJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdhdXRob3JuYW1lJywgaXNzZXQoJHBhcmFtc1snYXV0aG9ybmFtZSddKSA/ICRwYXJhbXNbJ2F1dGhvcm5hbWUnXSA6ICcnLCAyMCkpOwogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5mb19hdXRob3JuYW1lJywgJHRoaXMtPkxhbmcoJ2luZm9fYXV0aG9ybmFtZScpKTsKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9ub3RlcycsICR0aGlzLT5MYW5nKCdwcm9tcHRfbm90ZXMnKSk7CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9ub3RlcycsICR0aGlzLT5DcmVhdGVUZXh0QXJlYSh0cnVlLCAkaWQsIGlzc2V0KCRwYXJhbXNbJ25vdGVzJ10pID8gJHBhcmFtc1snbm90ZXMnXSA6ICcnLCAnbm90ZXMnKSk7CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbmZvX25vdGVzJywgJHRoaXMtPkxhbmcoJ2luZm9fbm90ZXMnKSk7CgogICAgICAgICMgZXhwb3J0IHNtYXJ0eSB2YXJpYWJsZXMKICAgICAgICBicmVhazsKCiAgICBjYXNlIDEwOgogICAgICAgICNjaGVjayBwYWNrYWdlCiAgICAgICAgaWYgKGVtcHR5KCRwYXJhbXNbJ3BhY2thZ2VuYW1lJ10pKSB7CiAgICAgICAgICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICdlbXB0eXBhY2thZ2VuYW1lJzsKICAgICAgICAgICAgJHBhcmFtc1snc3RlcCddID0gOTsKICAgICAgICAgICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2V4cG9ydCcsICRyZXR1cm5pZCwgJHBhcmFtcyk7CiAgICAgICAgfQogICAgICAgIGlmIChlbXB0eSgkcGFyYW1zWydwYWNrYWdldmVyc2lvbiddKSkgewogICAgICAgICAgICAkcGFyYW1zWydtZXNzYWdlJ10gPSAnZW1wdHlwYWNrYWdldmVyc2lvbic7CiAgICAgICAgICAgICRwYXJhbXNbJ3N0ZXAnXSA9IDk7CiAgICAgICAgICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsICdleHBvcnQnLCAkcmV0dXJuaWQsICRwYXJhbXMpOwogICAgICAgIH0KCiAgICAgICAgIyBhc3NpZ24gYWxyZWFkeSBzZWxlY3RlZCBpdGVtcyB0byBzZXNzaW9uCiAgICAgICAgJGZvdW5kX3RlbXBsYXRlcyA9ICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX3RlbXBsYXRlcyddOwogICAgICAgICRmb3VuZF9zdHlsZXMgPSAkX1NFU1NJT05bJ3RtcyddWydmb3VuZF9zdHlsZXMnXTsKICAgICAgICAkZm91bmRfcGFnZXMgPSAkX1NFU1NJT05bJ3RtcyddWydmb3VuZF9wYWdlcyddOwogICAgICAgICRmb3VuZF9tb2R1bGVzID0gJF9TRVNTSU9OWyd0bXMnXVsnZm91bmRfbW9kdWxlcyddOwogICAgICAgICRmb3VuZF9ibG9ja3MgPSAkX1NFU1NJT05bJ3RtcyddWydmb3VuZF9ibG9ja3MnXTsKICAgICAgICAkZm91bmRfdWR0cyA9ICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX3VkdHMnXTsKICAgICAgICAkZm91bmRfZmlsZXMgPSAkX1NFU1NJT05bJ3RtcyddWydmb3VuZF9maWxlcyddOwogICAgICAgICRmb3VuZF9zZXR0aW5ncyA9ICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX3NldHRpbmdzJ107CgogICAgICAgICMgZ2V0IGZpZWxkcyBmcm9tIHRoZSBwcmV2aW91cyBwYWdlCiAgICAgICAgJHBhY2thZ2VfaW5mbyA9IGFycmF5KCdwYWNrYWdlbmFtZScgPT4gJHBhcmFtc1sncGFja2FnZW5hbWUnXSwKICAgICAgICAgICAgJ3BhY2thZ2V2ZXJzaW9uJyA9PiAkcGFyYW1zWydwYWNrYWdldmVyc2lvbiddLAogICAgICAgICAgICAnYXV0aG9ybmFtZScgPT4gJHBhcmFtc1snYXV0aG9ybmFtZSddLAogICAgICAgICAgICAnbm90ZXMnID0+ICRwYXJhbXNbJ25vdGVzJ10pOwogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignbW9kJywgJHRoaXMpOwogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5mbycsICRwYWNrYWdlX2luZm8pOwogICAgICAgICMgd3JpdGUgZmllbGRzIHRvIHNlc3Npb24KICAgICAgICAkX1NFU1NJT05bJ3RtcyddWydpbmZvJ10gPSAkcGFja2FnZV9pbmZvOwoKICAgICAgICAjIGV4cG9ydCBzbWFydHkgdmFyaWFibGVzCiAgICAgICAgYnJlYWs7CgogICAgY2FzZSAxMToKICAgICAgICAkZm91bmRfdGVtcGxhdGVzID0gJF9TRVNTSU9OWyd0bXMnXVsnZm91bmRfdGVtcGxhdGVzJ107CiAgICAgICAgJGZvdW5kX3N0eWxlcyA9ICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX3N0eWxlcyddOwogICAgICAgICRmb3VuZF9wYWdlcyA9ICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX3BhZ2VzJ107CiAgICAgICAgJGZvdW5kX21vZHVsZXMgPSAkX1NFU1NJT05bJ3RtcyddWydmb3VuZF9tb2R1bGVzJ107CiAgICAgICAgJGZvdW5kX2Jsb2NrcyA9ICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX2Jsb2NrcyddOwogICAgICAgICRmb3VuZF91ZHRzID0gJF9TRVNTSU9OWyd0bXMnXVsnZm91bmRfdWR0cyddOwogICAgICAgICRmb3VuZF9maWxlcyA9ICRfU0VTU0lPTlsndG1zJ11bJ2ZvdW5kX2ZpbGVzJ107CiAgICAgICAgJGZvdW5kX3NldHRpbmdzID0gJF9TRVNTSU9OWyd0bXMnXVsnZm91bmRfc2V0dGluZ3MnXTsKICAgICAgICAkcGFja2FnZV9pbmZvID0gJF9TRVNTSU9OWyd0bXMnXVsnaW5mbyddOwogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignbW9kJywgJHRoaXMpOyAvLyB0aGlzIGlzIG9ubHkgZm9yIGRlYnVnIQoKCiAgICAgICAgJGRvYyA9IG5ldyBEb21Eb2N1bWVudCgnMS4wJyk7CiAgICAgICAgJHBhY2thZ2UgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCdwYWNrYWdlJyk7CiAgICAgICAgJHBhY2thZ2UgPSAkZG9jLT5hcHBlbmRDaGlsZCgkcGFja2FnZSk7CgogICAgICAgICMgMC4gd3JpdGUgaW5mbyBwYXJ0IHRvIHRoZSBwYWNrYWdlCiAgICAgICAgJGluZm9zID0gJGRvYy0+Y3JlYXRlRWxlbWVudCgnaW5mb3MnKTsKICAgICAgICAkcGFja2FnZS0+YXBwZW5kQ2hpbGQoJGluZm9zKTsKICAgICAgICBmb3JlYWNoICgkcGFja2FnZV9pbmZvIGFzICRsID0+ICR2KSB7CiAgICAgICAgICAgICRpbmZvID0gJGRvYy0+Y3JlYXRlRWxlbWVudCgkbCk7CiAgICAgICAgICAgICRpbmZvcy0+YXBwZW5kQ2hpbGQoJGluZm8pOwogICAgICAgICAgICAkdGV4dCA9ICRkb2MtPmNyZWF0ZVRleHROb2RlKCR2KTsKICAgICAgICAgICAgJGluZm8tPmFwcGVuZENoaWxkKCR0ZXh0KTsKICAgICAgICB9CgogICAgICAgICMgcmVhZCBhbmQgd3JpdGUgQ01TTVMgdmVyc2lvbgogICAgICAgICRpbmZvID0gJGRvYy0+Y3JlYXRlRWxlbWVudCgnY21zbXN2ZXJzaW9uJyk7CiAgICAgICAgJGluZm9zLT5hcHBlbmRDaGlsZCgkaW5mbyk7CiAgICAgICAgJHRleHQgPSAkZG9jLT5jcmVhdGVUZXh0Tm9kZSgkR0xPQkFMU1snQ01TX1ZFUlNJT04nXSk7CiAgICAgICAgJGluZm8tPmFwcGVuZENoaWxkKCR0ZXh0KTsKICAgICAgICAKICAgICAgICAjIHJlYWQgYW5kIHdyaXRlIHRoZSB2ZXJzaW9uIG9mIFRoZW1lcyBNYWRlIFNpbXBsZSBtb2R1bGUKICAgICAgICAjIFhNTCBmaWxlcyBjYW4gZGlmZmVyIHdoaWxlIHRoZSBtb2R1bGUgdmVyc2lvbiBjaGFuZ2VzLgogICAgICAgICRpbmZvID0gJGRvYy0+Y3JlYXRlRWxlbWVudCgndG1zdmVyc2lvbicpOwogICAgICAgICRpbmZvcy0+YXBwZW5kQ2hpbGQoJGluZm8pOwogICAgICAgICR0ZXh0ID0gJGRvYy0+Y3JlYXRlVGV4dE5vZGUoJHRoaXMtPkdldFZlcnNpb24oKSk7CiAgICAgICAgJGluZm8tPmFwcGVuZENoaWxkKCR0ZXh0KTsKCiAgICAgICAgIyAwLiByZWFkIGFuZCB3cml0ZSBtb2R1bGVzIHZlcnNpb24KICAgICAgICAkbW9kdWxlcyA9IGFycmF5KCk7CiAgICAgICAgaWYgKHNpemVvZigkZm91bmRfbW9kdWxlcykgPiAwKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRmb3VuZF9tb2R1bGVzIGFzICRrZXkgPT4gJGRhdGEpIHsKICAgICAgICAgICAgICAgICRtb2R1bGVzW10gPSAkZGF0YVsnaWQnXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoc2l6ZW9mKCRmb3VuZF9zZXR0aW5ncykgPiAwKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRmb3VuZF9zZXR0aW5ncyBhcyAka2V5ID0+ICRkYXRhKSB7CiAgICAgICAgICAgICAgICAkbW9kdWxlc1tdID0gJGRhdGFbJ25hbWUnXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkbW9kdWxlcyA9IGFycmF5X3VuaXF1ZSgkbW9kdWxlcyk7CgogICAgICAgICRtb2R1bGV2ZXJzaW9ucyA9ICRkb2MtPmNyZWF0ZUVsZW1lbnQoJ21vZHVsZXZlcnNpb25zJyk7CiAgICAgICAgJHBhY2thZ2UtPmFwcGVuZENoaWxkKCRtb2R1bGV2ZXJzaW9ucyk7CgogICAgICAgIGZvcmVhY2ggKCRtb2R1bGVzIGFzICRtb2R1bGVuYW1lKSB7CiAgICAgICAgICAgICRtb2R1bGUgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCdtb2R1bGV2ZXJzaW9uJyk7CiAgICAgICAgICAgICRtb2R1bGV2ZXJzaW9ucy0+YXBwZW5kQ2hpbGQoJG1vZHVsZSk7CiAgICAgICAgICAgICRuYW1lID0gJGRvYy0+Y3JlYXRlRWxlbWVudCgnbmFtZScpOwogICAgICAgICAgICAkbW9kdWxlLT5hcHBlbmRDaGlsZCgkbmFtZSk7CiAgICAgICAgICAgICR0ZXh0ID0gJGRvYy0+Y3JlYXRlVGV4dE5vZGUoJG1vZHVsZW5hbWUpOwogICAgICAgICAgICAkbmFtZS0+YXBwZW5kQ2hpbGQoJHRleHQpOwogICAgICAgICAgICAkdmVyc2lvbiA9ICRkb2MtPmNyZWF0ZUVsZW1lbnQoJ3ZlcnNpb24nKTsKICAgICAgICAgICAgJG1vZHVsZS0+YXBwZW5kQ2hpbGQoJHZlcnNpb24pOwogICAgICAgICAgICAkdGVzdCA9IENtc01vZHVsZTo6R2V0TW9kdWxlSW5zdGFuY2UoJG1vZHVsZW5hbWUpOwogICAgICAgICAgICAkdGV4dCA9ICRkb2MtPkNyZWF0ZVRleHROb2RlKCR0ZXN0LT5HZXRWZXJzaW9uKCkpOwogICAgICAgICAgICAkdmVyc2lvbi0+YXBwZW5kQ2hpbGQoJHRleHQpOwogICAgICAgIH0KCiAgICAgICAgIyAxLiB3cml0ZSB0ZW1wbGF0ZXMKICAgICAgICBpZiAoc2l6ZW9mKCRmb3VuZF90ZW1wbGF0ZXMpID4gMCkgewogICAgICAgICAgICAkdGVtcGxhdGVzID0gJGRvYy0+Y3JlYXRlRWxlbWVudCgndGVtcGxhdGVzJyk7CiAgICAgICAgICAgICRwYWNrYWdlLT5hcHBlbmRDaGlsZCgkdGVtcGxhdGVzKTsKCiAgICAgICAgICAgICRpZHMgPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoICgkZm91bmRfdGVtcGxhdGVzIGFzICR0ZW1wbGF0ZSkgewogICAgICAgICAgICAgICAgJGlkc1tdID0gJHRlbXBsYXRlWydpZCddOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRxdWVyeSA9ICJTRUxFQ1QgdGVtcGxhdGVfbmFtZSwgdGVtcGxhdGVfY29udGVudCBGUk9NICIgLiBjbXNfZGJfcHJlZml4KCkgLiAidGVtcGxhdGVzIFdIRVJFIHRlbXBsYXRlX2lkIElOICgiIC4gaW1wbG9kZSgnLCcsICRpZHMpIC4gIikiOwogICAgICAgICAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKCiAgICAgICAgICAgIHdoaWxlICgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkgewogICAgICAgICAgICAgICAgJHRhYmxlID0gJGRvYy0+Y3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTsKICAgICAgICAgICAgICAgICR0ZW1wbGF0ZXMtPmFwcGVuZENoaWxkKCR0YWJsZSk7CiAgICAgICAgICAgICAgICAvLyBhZGQgYSBjaGlsZCBub2RlIGZvciBlYWNoIGZpZWxkCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcm93IGFzICRmaWVsZG5hbWUgPT4gJGZpZWxkdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAkY2hpbGQgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCRmaWVsZG5hbWUpOwogICAgICAgICAgICAgICAgICAgICR0YWJsZS0+YXBwZW5kQ2hpbGQoJGNoaWxkKTsKICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSAkZG9jLT5jcmVhdGVDREFUQVNlY3Rpb24oJGZpZWxkdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICRjaGlsZC0+YXBwZW5kQ2hpbGQoJHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyAyLiB3cml0ZSBzdHlsZXNoZWV0cwogICAgICAgIGlmIChzaXplb2YoJGZvdW5kX3N0eWxlcykgPiAwKSB7CiAgICAgICAgICAgICRzdHlsZXNoZWV0cyA9ICRkb2MtPmNyZWF0ZUVsZW1lbnQoJ3N0eWxlc2hlZXRzJyk7CiAgICAgICAgICAgICRwYWNrYWdlLT5hcHBlbmRDaGlsZCgkc3R5bGVzaGVldHMpOwoKICAgICAgICAgICAgJGlkcyA9IGFycmF5KCk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRmb3VuZF9zdHlsZXMgYXMgJHN0eWxlKSB7CiAgICAgICAgICAgICAgICAkaWRzW10gPSAkc3R5bGVbJ2lkJ107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCBjc3NfbmFtZSwgY3NzX3RleHQsIG1lZGlhX3R5cGUgRlJPTSAiIC4gY21zX2RiX3ByZWZpeCgpIC4gImNzcyBXSEVSRSBjc3NfaWQgSU4gKCIgLiBpbXBsb2RlKCcsJywgJGlkcykgLiAiKSI7CiAgICAgICAgICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKICAgICAgICAgICAgd2hpbGUgKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSB7CiAgICAgICAgICAgICAgICAkdGFibGUgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCdjc3MnKTsKICAgICAgICAgICAgICAgICRzdHlsZXNoZWV0cy0+YXBwZW5kQ2hpbGQoJHRhYmxlKTsKICAgICAgICAgICAgICAgIC8vIGFkZCBhIGNoaWxkIG5vZGUgZm9yIGVhY2ggZmllbGQKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRyb3cgYXMgJGZpZWxkbmFtZSA9PiAkZmllbGR2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICRjaGlsZCA9ICRkb2MtPmNyZWF0ZUVsZW1lbnQoJGZpZWxkbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgJHRhYmxlLT5hcHBlbmRDaGlsZCgkY2hpbGQpOwogICAgICAgICAgICAgICAgICAgICR2YWx1ZSA9ICRkb2MtPmNyZWF0ZUNEQVRBU2VjdGlvbigkZmllbGR2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgJGNoaWxkLT5hcHBlbmRDaGlsZCgkdmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIDJhLiB3cml0ZSBhc3NvY3MKICAgICAgICBpZiAoc2l6ZW9mKCRmb3VuZF90ZW1wbGF0ZXMpID4gMCAmJiBzaXplb2YoJGZvdW5kX3N0eWxlcykgPiAwKSB7CiAgICAgICAgICAgICRhc3NvY3MgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCdhc3NvY3MnKTsKICAgICAgICAgICAgJHBhY2thZ2UtPmFwcGVuZENoaWxkKCRhc3NvY3MpOwoKICAgICAgICAgICAgJGlkcyA9IGFycmF5KCk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRmb3VuZF90ZW1wbGF0ZXMgYXMgJHRlbXBsYXRlKSB7CiAgICAgICAgICAgICAgICAkdHBsX2lkc1tdID0gJHRlbXBsYXRlWydpZCddOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvcmVhY2ggKCRmb3VuZF9zdHlsZXMgYXMgJHN0eWxlKSB7CiAgICAgICAgICAgICAgICAkY3NzX2lkc1tdID0gJHN0eWxlWydpZCddOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRxdWVyeSA9ICJTRUxFQ1QgY3NzX25hbWUsIHRlbXBsYXRlX25hbWUgRlJPTSAiIC4gY21zX2RiX3ByZWZpeCgpIC4gImNzcywgIgogICAgICAgICAgICAgICAgICAgIC4gY21zX2RiX3ByZWZpeCgpIC4gInRlbXBsYXRlcywgIiAuIGNtc19kYl9wcmVmaXgoKSAuICJjc3NfYXNzb2MgIgogICAgICAgICAgICAgICAgICAgIC4gIiBXSEVSRSBjc3NfaWQ9YXNzb2NfY3NzX2lkIGFuZCB0ZW1wbGF0ZV9pZD1hc3NvY190b19pZCIKICAgICAgICAgICAgICAgICAgICAuICIgQU5EIHRlbXBsYXRlX2lkIElOICgiIC4gaW1wbG9kZSgnLCcsICR0cGxfaWRzKQogICAgICAgICAgICAgICAgICAgIC4gIikgQU5EIGNzc19pZCBJTiAoIiAuIGltcGxvZGUoJywnLCAkY3NzX2lkcykgLiAiKSI7CiAgICAgICAgICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKICAgICAgICAgICAgd2hpbGUgKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSB7CiAgICAgICAgICAgICAgICAkdGFibGUgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCdhc3NvYycpOwogICAgICAgICAgICAgICAgJGFzc29jcy0+YXBwZW5kQ2hpbGQoJHRhYmxlKTsKICAgICAgICAgICAgICAgIC8vIGFkZCBhIGNoaWxkIG5vZGUgZm9yIGVhY2ggZmllbGQKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRyb3cgYXMgJGZpZWxkbmFtZSA9PiAkZmllbGR2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICRjaGlsZCA9ICRkb2MtPmNyZWF0ZUVsZW1lbnQoJGZpZWxkbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgJHRhYmxlLT5hcHBlbmRDaGlsZCgkY2hpbGQpOwogICAgICAgICAgICAgICAgICAgICR2YWx1ZSA9ICRkb2MtPmNyZWF0ZUNEQVRBU2VjdGlvbigkZmllbGR2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgJGNoaWxkLT5hcHBlbmRDaGlsZCgkdmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIDMuIHdyaXRlIHBhZ2VzCiAgICAgICAgaWYgKHNpemVvZigkZm91bmRfcGFnZXMpID4gMCkgewogICAgICAgICAgICAkY29udGVudHMgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCdwYWdlcycpOwogICAgICAgICAgICAkcGFja2FnZS0+YXBwZW5kQ2hpbGQoJGNvbnRlbnRzKTsKCiAgICAgICAgICAgICRpZHMgPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoICgkZm91bmRfcGFnZXMgYXMgJHBhZ2UpIHsKICAgICAgICAgICAgICAgICRpZHNbXSA9ICRwYWdlWydpZCddOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRxdWVyeSA9ICJTRUxFQ1QgY29udGVudF9uYW1lLCB0eXBlLCB0LnRlbXBsYXRlX2lkLCB0ZW1wbGF0ZV9uYW1lLCBtZW51X3RleHQsIGNvbnRlbnRfYWxpYXMsIHNob3dfaW5fbWVudSwKICAgICAgICAgICAgICAgIG1hcmt1cCwgY2FjaGFibGUsIHByb3BfbmFtZXMsIG1ldGFkYXRhLCBoaWVyYXJjaHlfcGF0aCAgRlJPTSAiIC4gY21zX2RiX3ByZWZpeCgpIC4gImNvbnRlbnQgYywgIgogICAgICAgICAgICAgICAgICAgIC4gY21zX2RiX3ByZWZpeCgpIC4gInRlbXBsYXRlcyB0IFdIRVJFIHQudGVtcGxhdGVfaWQ9Yy50ZW1wbGF0ZV9pZCIKICAgICAgICAgICAgICAgICAgICAuICIgQU5EIGNvbnRlbnRfaWQgSU4gKCIgLiBpbXBsb2RlKCcsJywgJGlkcykgLiAiKSI7CiAgICAgICAgICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKICAgICAgICAgICAgd2hpbGUgKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSB7CiAgICAgICAgICAgICAgICAvLyBjaGVjayBsZXZlbAogICAgICAgICAgICAgICAgLy8kcm93WydsZXZlbCddID0gc3Vic3RyX2NvdW50KCRyb3dbJ2hpZXJhcmNoeV9wYXRoJ10sIi8iKTsKICAgICAgICAgICAgICAgICRjb250ZW50ID0gJGRvYy0+Y3JlYXRlRWxlbWVudCgncGFnZScpOwogICAgICAgICAgICAgICAgJGNvbnRlbnRzLT5hcHBlbmRDaGlsZCgkY29udGVudCk7CiAgICAgICAgICAgICAgICAvLyBhZGQgYSBjaGlsZCBub2RlIGZvciBlYWNoIGZpZWxkCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcm93IGFzICRmaWVsZG5hbWUgPT4gJGZpZWxkdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAkY2hpbGQgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCRmaWVsZG5hbWUpOwogICAgICAgICAgICAgICAgICAgICRjb250ZW50LT5hcHBlbmRDaGlsZCgkY2hpbGQpOwogICAgICAgICAgICAgICAgICAgICR2YWx1ZSA9ICRkb2MtPmNyZWF0ZUNEQVRBU2VjdGlvbigkZmllbGR2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgJGNoaWxkLT5hcHBlbmRDaGlsZCgkdmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGNvbnRlbnRfcHJvcHMgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCdjb250ZW50X3Byb3BzJyk7CiAgICAgICAgICAgICAgICAkY29udGVudC0+YXBwZW5kQ2hpbGQoJGNvbnRlbnRfcHJvcHMpOwogICAgICAgICAgICAgICAgLy8gZ2V0IGNvbnRlbnQgcHJvcGVydGllcwogICAgICAgICAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCBjLmNvbnRlbnRfYWxpYXMsIHAudHlwZSwgcC5wcm9wX25hbWUsIHAucGFyYW0xLCBwLnBhcmFtMiwgcC5wYXJhbTMsCiAgICAgICAgICAgICAgICAgICAgY29udGVudCBGUk9NICIgLiBjbXNfZGJfcHJlZml4KCkgLiAiY29udGVudF9wcm9wcyBwLCAiIC4gY21zX2RiX3ByZWZpeCgpIC4gImNvbnRlbnQgYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgYy5jb250ZW50X2lkID0gcC5jb250ZW50X2lkIgogICAgICAgICAgICAgICAgICAgICAgICAuICIgQU5EIGMuY29udGVudF9hbGlhcyA9ID8iOwogICAgICAgICAgICAgICAgJGRicmVzdWx0MiA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRyb3dbJ2NvbnRlbnRfYWxpYXMnXSkpOwoKICAgICAgICAgICAgICAgIHdoaWxlICgkZGJyZXN1bHQyICYmICRyb3cyID0gJGRicmVzdWx0Mi0+RmV0Y2hSb3coKSkgewogICAgICAgICAgICAgICAgICAgICRjb250ZW50X3Byb3AgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCdjb250ZW50X3Byb3AnKTsKICAgICAgICAgICAgICAgICAgICAkY29udGVudF9wcm9wcy0+YXBwZW5kQ2hpbGQoJGNvbnRlbnRfcHJvcCk7CiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGEgY2hpbGQgbm9kZSBmb3IgZWFjaCBmaWVsZAogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRyb3cyIGFzICRmaWVsZG5hbWUgPT4gJGZpZWxkdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNoaWxkID0gJGRvYy0+Y3JlYXRlRWxlbWVudCgkZmllbGRuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnRfcHJvcC0+YXBwZW5kQ2hpbGQoJGNoaWxkKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlID0gJGRvYy0+Y3JlYXRlQ0RBVEFTZWN0aW9uKCRmaWVsZHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNoaWxkLT5hcHBlbmRDaGlsZCgkdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyA0LiB3cml0ZSBtb2R1bGUgdGVtcGxhdGVzCiAgICAgICAgaWYgKHNpemVvZigkZm91bmRfbW9kdWxlcykgPiAwKSB7CgogICAgICAgICAgICAkbW9kdWxlX3RlbXBsYXRlcyA9ICRkb2MtPmNyZWF0ZUVsZW1lbnQoJ21vZHVsZV90ZW1wbGF0ZXMnKTsKICAgICAgICAgICAgJHBhY2thZ2UtPmFwcGVuZENoaWxkKCRtb2R1bGVfdGVtcGxhdGVzKTsKCiAgICAgICAgICAgIGZvcmVhY2ggKCRmb3VuZF9tb2R1bGVzIGFzICRmb3VuZF9tb2R1bGUpIHsKICAgICAgICAgICAgICAgICRtb2R1bGVfdGVtcGxhdGUgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCdtb2R1bGVfdGVtcGxhdGUnKTsKICAgICAgICAgICAgICAgICRtb2R1bGVfdGVtcGxhdGVzLT5hcHBlbmRDaGlsZCgkbW9kdWxlX3RlbXBsYXRlKTsKICAgICAgICAgICAgICAgICR0ZXN0ID0gQ21zTW9kdWxlOjpHZXRNb2R1bGVJbnN0YW5jZSgkZm91bmRfbW9kdWxlWydpZCddKTsKICAgICAgICAgICAgICAgICRjb250ZW50ID0gJHRlc3QtPkdldFRlbXBsYXRlKCRmb3VuZF9tb2R1bGVbJ25hbWUnXSwgJGZvdW5kX21vZHVsZVsnaWQnXSk7CiAgICAgICAgICAgICAgICAkY2hpbGQgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCdtb2R1bGVfbmFtZScpOwogICAgICAgICAgICAgICAgJG1vZHVsZV90ZW1wbGF0ZS0+YXBwZW5kQ2hpbGQoJGNoaWxkKTsKICAgICAgICAgICAgICAgICR2YWx1ZSA9ICRkb2MtPmNyZWF0ZUNEQVRBU2VjdGlvbigkZm91bmRfbW9kdWxlWydpZCddKTsKICAgICAgICAgICAgICAgICRjaGlsZC0+YXBwZW5kQ2hpbGQoJHZhbHVlKTsKICAgICAgICAgICAgICAgICRjaGlsZCA9ICRkb2MtPmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlX25hbWUnKTsKICAgICAgICAgICAgICAgICRtb2R1bGVfdGVtcGxhdGUtPmFwcGVuZENoaWxkKCRjaGlsZCk7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSAkZG9jLT5jcmVhdGVDREFUQVNlY3Rpb24oJGZvdW5kX21vZHVsZVsnbmFtZSddKTsKICAgICAgICAgICAgICAgICRjaGlsZC0+YXBwZW5kQ2hpbGQoJHZhbHVlKTsKICAgICAgICAgICAgICAgICRjaGlsZCA9ICRkb2MtPmNyZWF0ZUVsZW1lbnQoJ2NvbnRlbnQnKTsKICAgICAgICAgICAgICAgICRtb2R1bGVfdGVtcGxhdGUtPmFwcGVuZENoaWxkKCRjaGlsZCk7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSAkZG9jLT5jcmVhdGVDREFUQVNlY3Rpb24oJGNvbnRlbnQpOwogICAgICAgICAgICAgICAgJGNoaWxkLT5hcHBlbmRDaGlsZCgkdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIDUuIHdyaXRlIGdsb2JhbCBjb250ZW50cwogICAgICAgIGlmIChzaXplb2YoJGZvdW5kX2Jsb2NrcykgPiAwKSB7CgogICAgICAgICAgICAkaHRtbGJsb2JzID0gJGRvYy0+Y3JlYXRlRWxlbWVudCgnaHRtbGJsb2JzJyk7CiAgICAgICAgICAgICRwYWNrYWdlLT5hcHBlbmRDaGlsZCgkaHRtbGJsb2JzKTsKCiAgICAgICAgICAgICRibG9ja29wcyA9ICYgJGdDbXMtPkdldEdsb2JhbENvbnRlbnRPcGVyYXRpb25zKCk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRmb3VuZF9ibG9ja3MgYXMgJGJsb2NrKSB7CiAgICAgICAgICAgICAgICAkaHRtbGJsb2IgPSAkYmxvY2tvcHMtPkxvYWRIdG1sQmxvYkJ5TmFtZSgkYmxvY2tbJ25hbWUnXSk7CiAgICAgICAgICAgICAgICAkdGFibGUgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCdodG1sYmxvYicpOwogICAgICAgICAgICAgICAgJGh0bWxibG9icy0+YXBwZW5kQ2hpbGQoJHRhYmxlKTsKICAgICAgICAgICAgICAgICRjaGlsZCA9ICRkb2MtPmNyZWF0ZUVsZW1lbnQoJ2h0bWxibG9iX25hbWUnKTsKICAgICAgICAgICAgICAgICR0YWJsZS0+YXBwZW5kQ2hpbGQoJGNoaWxkKTsKICAgICAgICAgICAgICAgICR2YWx1ZSA9ICRkb2MtPmNyZWF0ZUNEQVRBU2VjdGlvbigkaHRtbGJsb2ItPm5hbWUpOwogICAgICAgICAgICAgICAgJGNoaWxkLT5hcHBlbmRDaGlsZCgkdmFsdWUpOwogICAgICAgICAgICAgICAgJGNoaWxkID0gJGRvYy0+Y3JlYXRlRWxlbWVudCgnaHRtbCcpOwogICAgICAgICAgICAgICAgJHRhYmxlLT5hcHBlbmRDaGlsZCgkY2hpbGQpOwogICAgICAgICAgICAgICAgJHZhbHVlID0gJGRvYy0+Y3JlYXRlQ0RBVEFTZWN0aW9uKCRodG1sYmxvYi0+Y29udGVudCk7CiAgICAgICAgICAgICAgICAkY2hpbGQtPmFwcGVuZENoaWxkKCR2YWx1ZSk7CiAgICAgICAgICAgICAgICAkY2hpbGQgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCd1c2Vfd3lzaXd5ZycpOwogICAgICAgICAgICAgICAgJHRhYmxlLT5hcHBlbmRDaGlsZCgkY2hpbGQpOwogICAgICAgICAgICAgICAgJHZhbHVlID0gJGRvYy0+Y3JlYXRlQ0RBVEFTZWN0aW9uKCRodG1sYmxvYi0+dXNlX3d5c2l3eWcpOwogICAgICAgICAgICAgICAgJGNoaWxkLT5hcHBlbmRDaGlsZCgkdmFsdWUpOwogICAgICAgICAgICAgICAgJGNoaWxkID0gJGRvYy0+Y3JlYXRlRWxlbWVudCgnZGVzY3JpcHRpb24nKTsKICAgICAgICAgICAgICAgICR0YWJsZS0+YXBwZW5kQ2hpbGQoJGNoaWxkKTsKICAgICAgICAgICAgICAgICR2YWx1ZSA9ICRkb2MtPmNyZWF0ZUNEQVRBU2VjdGlvbigkaHRtbGJsb2ItPmRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgICAgICRjaGlsZC0+YXBwZW5kQ2hpbGQoJHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyA2LiB3cml0ZSB1c2VyIGRlZmluZWQgdGFncwogICAgICAgIGlmIChzaXplb2YoJGZvdW5kX3VkdHMpID4gMCkgewogICAgICAgICAgICAkdXNlcnBsdWdpbnMgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCd1c2VycGx1Z2lucycpOwogICAgICAgICAgICAkcGFja2FnZS0+YXBwZW5kQ2hpbGQoJHVzZXJwbHVnaW5zKTsKCiAgICAgICAgICAgICR1ZHRvcHMgPSAmICRnQ21zLT5HZXRVc2VyVGFnT3BlcmF0aW9ucygpOwogICAgICAgICAgICBmb3JlYWNoICgkZm91bmRfdWR0cyBhcyAkdWR0KSB7CiAgICAgICAgICAgICAgICAkY29kZSA9ICR1ZHRvcHMtPkdldFVzZXJUYWcoJHVkdFsnbmFtZSddKTsKICAgICAgICAgICAgICAgICR1c2VycGx1Z2luID0gJGRvYy0+Y3JlYXRlRWxlbWVudCgndXNlcnBsdWdpbicpOwogICAgICAgICAgICAgICAgJHVzZXJwbHVnaW5zLT5hcHBlbmRDaGlsZCgkdXNlcnBsdWdpbik7CiAgICAgICAgICAgICAgICAkY2hpbGQgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCd1c2VycGx1Z2luX25hbWUnKTsKICAgICAgICAgICAgICAgICR1c2VycGx1Z2luLT5hcHBlbmRDaGlsZCgkY2hpbGQpOwogICAgICAgICAgICAgICAgJHZhbHVlID0gJGRvYy0+Y3JlYXRlQ0RBVEFTZWN0aW9uKCR1ZHRbJ25hbWUnXSk7CiAgICAgICAgICAgICAgICAkY2hpbGQtPmFwcGVuZENoaWxkKCR2YWx1ZSk7CiAgICAgICAgICAgICAgICAkY2hpbGQgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCdjb2RlJyk7CiAgICAgICAgICAgICAgICAkdXNlcnBsdWdpbi0+YXBwZW5kQ2hpbGQoJGNoaWxkKTsKICAgICAgICAgICAgICAgICR2YWx1ZSA9ICRkb2MtPmNyZWF0ZUNEQVRBU2VjdGlvbigkY29kZSk7CiAgICAgICAgICAgICAgICAkY2hpbGQtPmFwcGVuZENoaWxkKCR2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgNy4gd3JpdGUgZmlsZXMKICAgICAgICBpZiAoc2l6ZW9mKCRmb3VuZF9maWxlcykgPiAwKSB7CiAgICAgICAgICAgICRmaWxlcyA9ICRkb2MtPmNyZWF0ZUVsZW1lbnQoJ2ZpbGVzJyk7CiAgICAgICAgICAgICRwYWNrYWdlLT5hcHBlbmRDaGlsZCgkZmlsZXMpOwoKICAgICAgICAgICAgZm9yZWFjaCAoJGZvdW5kX2ZpbGVzIGFzICRyZWYpIHsKICAgICAgICAgICAgICAgICRjb250ZW50cyA9IEBmaWxlX2dldF9jb250ZW50cygkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSAuICRyZWZbJ25hbWUnXSk7CiAgICAgICAgICAgICAgICBpZiAoISRjb250ZW50cykgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGVuY29kZWQgPSBiYXNlNjRfZW5jb2RlKCRjb250ZW50cyk7CiAgICAgICAgICAgICAgICAkZmlsZSA9ICRkb2MtPmNyZWF0ZUVsZW1lbnQoJ2ZpbGUnKTsKICAgICAgICAgICAgICAgICRmaWxlcy0+YXBwZW5kQ2hpbGQoJGZpbGUpOwogICAgICAgICAgICAgICAgJGNoaWxkID0gJGRvYy0+Y3JlYXRlRWxlbWVudCgnbG9jYXRpb24nKTsKICAgICAgICAgICAgICAgICRmaWxlLT5hcHBlbmRDaGlsZCgkY2hpbGQpOwogICAgICAgICAgICAgICAgJHZhbHVlID0gJGRvYy0+Y3JlYXRlQ0RBVEFTZWN0aW9uKCRyZWZbJ25hbWUnXSk7CiAgICAgICAgICAgICAgICAkY2hpbGQtPmFwcGVuZENoaWxkKCR2YWx1ZSk7CiAgICAgICAgICAgICAgICAkY2hpbGQgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCdlbmNvZGVkJyk7CiAgICAgICAgICAgICAgICAkZmlsZS0+YXBwZW5kQ2hpbGQoJGNoaWxkKTsKICAgICAgICAgICAgICAgICR2YWx1ZSA9ICRkb2MtPmNyZWF0ZUNEQVRBU2VjdGlvbigkZW5jb2RlZCk7CiAgICAgICAgICAgICAgICAkY2hpbGQtPmFwcGVuZENoaWxkKCR2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgOC4gd3JpdGUgbW9kdWxlIHNldHRpbmdzIChwcmVmZXJlbmNlcykKICAgICAgICBpZiAoc2l6ZW9mKCRmb3VuZF9zZXR0aW5ncykgPiAwKSB7CgogICAgICAgICAgICAkc2V0dGluZ3MgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCdzZXR0aW5ncycpOwogICAgICAgICAgICAkcGFja2FnZS0+YXBwZW5kQ2hpbGQoJHNldHRpbmdzKTsKCiAgICAgICAgICAgIGZvcmVhY2ggKCRmb3VuZF9zZXR0aW5ncyBhcyAkbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAkcXVlcnkgPSAiU0VMRUNUIHNpdGVwcmVmX25hbWUsIHNpdGVwcmVmX3ZhbHVlIEZST00gIiAuIGNtc19kYl9wcmVmaXgoKSAuICJzaXRlcHJlZnMgIgogICAgICAgICAgICAgICAgICAgICAgICAuICIgV0hFUkUgc2l0ZXByZWZfbmFtZSBMSUtFICciIC4gJG1vZHVsZVsnbmFtZSddIC4gIl9tYXBpX3ByZWZfJSciOwogICAgICAgICAgICAgICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgogICAgICAgICAgICAgICAgJHNldHRpbmcgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCdzZXR0aW5nJyk7CiAgICAgICAgICAgICAgICAkc2V0dGluZ3MtPmFwcGVuZENoaWxkKCRzZXR0aW5nKTsKICAgICAgICAgICAgICAgICRtb2R1bGVuYW1lID0gJGRvYy0+Y3JlYXRlRWxlbWVudCgnbW9kdWxlbmFtZScpOwogICAgICAgICAgICAgICAgJHNldHRpbmctPmFwcGVuZENoaWxkKCRtb2R1bGVuYW1lKTsKICAgICAgICAgICAgICAgICR2YWx1ZSA9ICRkb2MtPmNyZWF0ZUNEQVRBU2VjdGlvbigkbW9kdWxlWyduYW1lJ10pOwogICAgICAgICAgICAgICAgJG1vZHVsZW5hbWUtPmFwcGVuZENoaWxkKCR2YWx1ZSk7CgogICAgICAgICAgICAgICAgd2hpbGUgKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGEgY2hpbGQgbm9kZSBmb3IgZWFjaCBmaWVsZAogICAgICAgICAgICAgICAgICAgICRzaXRlcHJlZiA9ICRkb2MtPmNyZWF0ZUVsZW1lbnQoJ3NpdGVwcmVmJyk7CiAgICAgICAgICAgICAgICAgICAgJHNldHRpbmctPmFwcGVuZENoaWxkKCRzaXRlcHJlZik7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHJvdyBhcyAkZmllbGRuYW1lID0+ICRmaWVsZHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjaGlsZCA9ICRkb2MtPmNyZWF0ZUVsZW1lbnQoJGZpZWxkbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRzaXRlcHJlZi0+YXBwZW5kQ2hpbGQoJGNoaWxkKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlID0gJGRvYy0+Y3JlYXRlQ0RBVEFTZWN0aW9uKCRmaWVsZHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNoaWxkLT5hcHBlbmRDaGlsZCgkdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHhtbF9zdHJpbmcgPSAkZG9jLT5zYXZlWE1MKCk7CgogICAgICAgIC8vIGFuZCB3cml0ZSBpdCB0byBmaWxlCiAgICAgICAgaGVhZGVyKCdDb250ZW50LURlc2NyaXB0aW9uOiBGaWxlIFRyYW5zZmVyJyk7CiAgICAgICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2ZvcmNlLWRvd25sb2FkJyk7CiAgICAgICAgaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0nIC4gbXVuZ2Vfc3RyaW5nX3RvX3VybCgkcGFja2FnZV9pbmZvWydwYWNrYWdlbmFtZSddIC4gJy4nIC4gJHBhY2thZ2VfaW5mb1sncGFja2FnZXZlcnNpb24nXSkgLiAnLnhtbCcpOwogICAgICAgIHdoaWxlIChAb2JfZW5kX2NsZWFuKCkpCiAgICAgICAgICAgIDsKICAgICAgICBlY2hvICR4bWxfc3RyaW5nOwogICAgICAgIGV4aXQoKTsKICAgICAgICAvKiAkZmlsZSA9ICRjb25maWdbJ3Jvb3RfcGF0aCddIC4gJ1xtb2R1bGVzXFRoZW1lc01hZGVTaW1wbGVcZXhhbXBsZXNcdGVzdDEueG1sJzsKICAgICAgICAgICRmaCA9IGZvcGVuKCRmaWxlLCAndycpIG9yIGRpZSgnbm90IGZpbGUnKTsKICAgICAgICAgIGZ3cml0ZSgkZmgsICR4bWxfc3RyaW5nKTsKICAgICAgICAgIGZjbG9zZSgkZmgpOyAqLwoKICAgICAgICBicmVhazsKfQoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3VuZF90ZW1wbGF0ZXMnLCAkZm91bmRfdGVtcGxhdGVzKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3VuZF9zdHlsZXMnLCAkZm91bmRfc3R5bGVzKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3VuZF9wYWdlcycsICRmb3VuZF9wYWdlcyk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignZm91bmRfbW9kdWxlcycsICRmb3VuZF9tb2R1bGVzKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3VuZF9ibG9ja3MnLCAkZm91bmRfYmxvY2tzKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3VuZF91ZHRzJywgJGZvdW5kX3VkdHMpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ZvdW5kX2ZpbGVzJywgJGZvdW5kX2ZpbGVzKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3VuZF9zZXR0aW5ncycsICRmb3VuZF9zZXR0aW5ncyk7CiR0aGlzLT5zbWFydHktPmFzc2lnbigncGFja2FnZV9pbmZvJywgJHBhY2thZ2VfaW5mbyk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ25hbWV0ZXh0JywgJHRoaXMtPkxhbmcoJ25hbWUnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignYWN0aW9udGV4dCcsICR0aGlzLT5MYW5nKCdhY3Rpb24nKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RlcCcsICRzdGVwKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCduZXh0c3RlcCcsICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsICdzdGVwJywgKCRzdGVwICsgMSkpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2V4cG9ydCcsICRyZXR1cm5pZCkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgJHRoaXMtPkxhbmcoJ2NvbnRpbnVlX2V4cG9ydCcpKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21vZCcsICR0aGlzKTsKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdleHBvcnQudHBsJyk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/action.import.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJGdDbXMpKQogICAgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCJNYW5hZ2UgVGhlbWVzIikpIHsKICAgIHJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKfQoKZnVuY3Rpb24geG1sX3BhcnNlX2ludG9fYXNzb2MoJGZpbGUpIHsKICAgICRkYXRhID0gaW1wbG9kZSgiIiwgZmlsZSgkZmlsZSkpOwogICAgJHAgPSB4bWxfcGFyc2VyX2NyZWF0ZSgpOwoKICAgIHhtbF9wYXJzZXJfc2V0X29wdGlvbigkcCwgWE1MX09QVElPTl9DQVNFX0ZPTERJTkcsIDApOwogICAgeG1sX3BhcnNlcl9zZXRfb3B0aW9uKCRwLCBYTUxfT1BUSU9OX1NLSVBfV0hJVEUsIDEpOwoKICAgIHhtbF9wYXJzZV9pbnRvX3N0cnVjdCgkcCwgJGRhdGEsICR2YWxzLCAkaW5kZXgpOwogICAgeG1sX3BhcnNlcl9mcmVlKCRwKTsKCiAgICAkbGV2ZWxzID0gYXJyYXkobnVsbCk7CgogICAgZm9yZWFjaCAoJHZhbHMgYXMgJHZhbCkgewogICAgICAgIGlmICgkdmFsWyd0eXBlJ10gPT0gJ29wZW4nIHx8ICR2YWxbJ3R5cGUnXSA9PSAnY29tcGxldGUnKSB7CiAgICAgICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygkdmFsWydsZXZlbCddLCAkbGV2ZWxzKSkgewogICAgICAgICAgICAgICAgJGxldmVsc1skdmFsWydsZXZlbCddXSA9IGFycmF5KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRwcmV2TGV2ZWwgPSAmICRsZXZlbHNbJHZhbFsnbGV2ZWwnXSAtIDFdOwogICAgICAgICRwYXJlbnQgPSAkcHJldkxldmVsW3NpemVvZigkcHJldkxldmVsKSAtIDFdOwoKICAgICAgICBpZiAoJHZhbFsndHlwZSddID09ICdvcGVuJykgewogICAgICAgICAgICAkdmFsWydjaGlsZHJlbiddID0gYXJyYXkoKTsKICAgICAgICAgICAgYXJyYXlfcHVzaCgmJGxldmVsc1skdmFsWydsZXZlbCddXSwgJHZhbCk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0gZWxzZSBpZiAoJHZhbFsndHlwZSddID09ICdjb21wbGV0ZScgJiYgaXNzZXQoJHZhbFsndmFsdWUnXSkpIHsKICAgICAgICAgICAgJHBhcmVudFsnY2hpbGRyZW4nXVskdmFsWyd0YWcnXV0gPSAkdmFsWyd2YWx1ZSddOwogICAgICAgIH0gZWxzZSBpZiAoJHZhbFsndHlwZSddID09ICdjbG9zZScpIHsKICAgICAgICAgICAgJHBvcCA9IGFycmF5X3BvcCgkbGV2ZWxzWyR2YWxbJ2xldmVsJ11dKTsKICAgICAgICAgICAgJHRhZyA9ICRwb3BbJ3RhZyddOwoKCiAgICAgICAgICAgIGlmICgkcGFyZW50KSB7CiAgICAgICAgICAgICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJHRhZywgJHBhcmVudFsnY2hpbGRyZW4nXSkpIHsKICAgICAgICAgICAgICAgICAgICAkcGFyZW50WydjaGlsZHJlbiddWyR0YWddID0gJHBvcFsnY2hpbGRyZW4nXTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNfYXJyYXkoJHBhcmVudFsnY2hpbGRyZW4nXVskdGFnXSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIWlzc2V0KCRwYXJlbnRbJ2NoaWxkcmVuJ11bJHRhZ11bMF0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRvbGRTaW5nbGUgPSAkcGFyZW50WydjaGlsZHJlbiddWyR0YWddOwogICAgICAgICAgICAgICAgICAgICAgICAkcGFyZW50WydjaGlsZHJlbiddWyR0YWddID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmVudFsnY2hpbGRyZW4nXVskdGFnXVtdID0gJG9sZFNpbmdsZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHBhcmVudFsnY2hpbGRyZW4nXVskdGFnXVtdID0gJHBvcFsnY2hpbGRyZW4nXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybihhcnJheSgkcG9wWyd0YWcnXSA9PiAkcG9wWydjaGlsZHJlbiddKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRwcmV2TGV2ZWxbc2l6ZW9mKCRwcmV2TGV2ZWwpIC0gMV0gPSAkcGFyZW50OwogICAgfQp9CgpmdW5jdGlvbiBnZXRUZW1wbGF0ZUlkQnlOYW1lKCRuYW1lKSB7CiAgICBnbG9iYWwgJGRiOwogICAgJHF1ZXJ5ID0gIlNFTEVDVCB0ZW1wbGF0ZV9pZCBGUk9NICIgLiBjbXNfZGJfcHJlZml4KCkgLiAidGVtcGxhdGVzIFdIRVJFIHRlbXBsYXRlX25hbWUgPSA/IjsKICAgICRyZXN1bHQgPSAkZGItPmdldE9uZSgkcXVlcnksIGFycmF5KCRuYW1lKSk7CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKZnVuY3Rpb24gaW5zZXJ0SW1wb3J0KCR0aGVtZV9pZCwgJHR5cGUsICRuYW1lLCAkc3lzdGVtX2lkID0gJycsICRtb2R1bGUgPSAnJywgJGxvY2F0aW9uID0gJycpIHsKICAgIGdsb2JhbCAkZGI7CiAgICAkaW5zZXJ0ID0gZmFsc2U7CiAgICBzd2l0Y2ggKCR0eXBlKSB7CiAgICAgICAgY2FzZSAndGVtcGxhdGUnOgogICAgICAgICAgICAkcXVlcnkgPSAiU0VMRUNUIGNvdW50KDEpIEZST00gIiAuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfdGhlbWVzbXNfY29tcCBXSEVSRSB0aGVtZV9pZCA9ID8gQU5EIHR5cGUgPT8gQU5EIG5hbWUgPSA/IjsKICAgICAgICAgICAgJGZvdW5kID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LCBhcnJheSgkdGhlbWVfaWQsICR0eXBlLCAkbmFtZSkpOwogICAgICAgICAgICBpZiAoISRmb3VuZCkgewogICAgICAgICAgICAgICAgJGluc2VydCA9IHRydWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcXVlcnkgPSAiVVBEQVRFICIgLiBjbXNfZGJfcHJlZml4KCkgLiAibW9kdWxlX3RoZW1lc21zX2NvbXAgU0VUIHN5c3RlbV9pZCA9ID8gV0hFUkUgV0hFUkUgdGhlbWVfaWQgPSA/IEFORCB0eXBlID0/IEFORCBuYW1lID0gPyI7CiAgICAgICAgICAgICAgICAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkc3lzdGVtX2lkLCAkdGhlbWVfaWQsICR0eXBlLCAkbmFtZSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3N0eWxlJzoKICAgICAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCBjb3VudCgxKSBGUk9NICIgLiBjbXNfZGJfcHJlZml4KCkgLiAibW9kdWxlX3RoZW1lc21zX2NvbXAgV0hFUkUgdGhlbWVfaWQgPSA/IEFORCB0eXBlID0/IEFORCBuYW1lID0gPyI7CiAgICAgICAgICAgICRmb3VuZCA9ICRkYi0+R2V0T25lKCRxdWVyeSwgYXJyYXkoJHRoZW1lX2lkLCAkdHlwZSwgJG5hbWUpKTsKICAgICAgICAgICAgaWYgKCEkZm91bmQpIHsKICAgICAgICAgICAgICAgICRpbnNlcnQgPSB0cnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHF1ZXJ5ID0gIlVQREFURSAiIC4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV90aGVtZXNtc19jb21wIFNFVCBzeXN0ZW1faWQgPSA/IFdIRVJFIFdIRVJFIHRoZW1lX2lkID0gPyBBTkQgdHlwZSA9PyBBTkQgbmFtZSA9ID8iOwogICAgICAgICAgICAgICAgJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHN5c3RlbV9pZCwgJHRoZW1lX2lkLCAkdHlwZSwgJG5hbWUpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdwYWdlJzoKICAgICAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCBjb3VudCgxKSBGUk9NICIgLiBjbXNfZGJfcHJlZml4KCkgLiAibW9kdWxlX3RoZW1lc21zX2NvbXAgV0hFUkUgdGhlbWVfaWQgPSA/IEFORCB0eXBlID0/IEFORCBuYW1lID0gPyI7CiAgICAgICAgICAgICRmb3VuZCA9ICRkYi0+R2V0T25lKCRxdWVyeSwgYXJyYXkoJHRoZW1lX2lkLCAkdHlwZSwgJG5hbWUpKTsKICAgICAgICAgICAgaWYgKCEkZm91bmQpIHsKICAgICAgICAgICAgICAgICRpbnNlcnQgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ21vZHVsZSc6CiAgICAgICAgICAgICRxdWVyeSA9ICJTRUxFQ1QgY291bnQoMSkgRlJPTSAiIC4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV90aGVtZXNtc19jb21wIFdIRVJFIHRoZW1lX2lkID0gPyBBTkQgdHlwZSA9PyBBTkQgbmFtZSA9ID8gYW5kIG1vZHVsZSA9ID8iOwogICAgICAgICAgICAkZm91bmQgPSAkZGItPkdldE9uZSgkcXVlcnksIGFycmF5KCR0aGVtZV9pZCwgJHR5cGUsICRuYW1lLCAkbW9kdWxlKSk7CiAgICAgICAgICAgIGlmICghJGZvdW5kKSB7CiAgICAgICAgICAgICAgICAkaW5zZXJ0ID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICd1ZHQnOgogICAgICAgICAgICAkcXVlcnkgPSAiU0VMRUNUIGNvdW50KDEpIEZST00gIiAuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfdGhlbWVzbXNfY29tcCBXSEVSRSB0aGVtZV9pZCA9ID8gQU5EIHR5cGUgPT8gQU5EIG5hbWUgPSA/IjsKICAgICAgICAgICAgJGZvdW5kID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LCBhcnJheSgkdGhlbWVfaWQsICR0eXBlLCAkbmFtZSkpOwogICAgICAgICAgICBpZiAoISRmb3VuZCkgewogICAgICAgICAgICAgICAgJGluc2VydCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnZmlsZSc6CiAgICAgICAgICAgICRxdWVyeSA9ICJTRUxFQ1QgY291bnQoMSkgRlJPTSAiIC4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV90aGVtZXNtc19jb21wIFdIRVJFIHRoZW1lX2lkID0gPyBBTkQgdHlwZSA9PyBBTkQgbmFtZSA9ID8gQU5EIGxvY2F0aW9uID0gPyI7CiAgICAgICAgICAgICRmb3VuZCA9ICRkYi0+R2V0T25lKCRxdWVyeSwgYXJyYXkoJHRoZW1lX2lkLCAkdHlwZSwgJG5hbWUsICRsb2NhdGlvbikpOwogICAgICAgICAgICBpZiAoISRmb3VuZCkgewogICAgICAgICAgICAgICAgJGluc2VydCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoJGluc2VydCkgewogICAgICAgICRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiIC4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV90aGVtZXNtc19jb21wICh0aGVtZV9pZCwgdHlwZSwgc3lzdGVtX2lkLCBuYW1lLCBtb2R1bGUsIGxvY2F0aW9uKSBWQUxVRVMgKD8sPyw/LD8sPyw/KSI7CiAgICAgICAgJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHRoZW1lX2lkLCAkdHlwZSwgJHN5c3RlbV9pZCwgJG5hbWUsICRtb2R1bGUsICRsb2NhdGlvbikpOwogICAgfQp9CgpmdW5jdGlvbiBzYXZlRW5jb2RlZEZpbGUoJG9iaiwgJHByZWZpeCwgJG5hbWUsICYkbG9jYXRpb24sICRlbmNvZGVkLCAkZGF0YSkgewogICAgLy8gY2xlYW4gdXAgdGhlIGxvY2F0aW9uCiAgICBpZiAoc3Vic3RyKCRsb2NhdGlvbiwgMCwgMSkgPT0gJy8nKSB7CiAgICAgICAgJGxvY2F0aW9uID0gc3Vic3RyKCRsb2NhdGlvbiwgMSk7CiAgICB9CgogICAgaWYgKCRlbmNvZGVkKSB7CiAgICAgICAgJGRhdGEgPSBiYXNlNjRfZGVjb2RlKCRkYXRhKTsKICAgIH0KCiAgICAvLyB0cmFuc2xhdGUgc2xhc2hlcyBpZiB3ZSBoYXZlIHRvCiAgICAkbmV3bG9jID0gcHJlZ19yZXBsYWNlKCd8XC98JywgRElSRUNUT1JZX1NFUEFSQVRPUiwgJGxvY2F0aW9uKTsKCiAgICAkZGlyID0gJHByZWZpeCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiBkaXJuYW1lKCRsb2NhdGlvbik7CiAgICBpZiAoIWZpbGVfZXhpc3RzKCRkaXIpKSB7CiAgICAgICAgJG9iai0+bWtkaXJyKCRkaXIpOwogICAgICAgIGlmICghZmlsZV9leGlzdHMoJGRpcikpIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgfQoKICAgIC8vIGFuZCBwdXQgaXQgb3V0IHRoZXJlCiAgICBnbG9iYWwgJGdDbXM7CiAgICAkZm4gPSAkcHJlZml4IC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRuZXdsb2M7CiAgICAkZnAgPSBmb3BlbigkZm4sICJ3Iik7CiAgICBpZiAoISRmcCkgewogICAgICAgIHJldHVybiAwOwogICAgfQogICAgZndyaXRlKCRmcCwgJGRhdGEpOwogICAgZmNsb3NlKCRmcCk7CiAgICByZXR1cm4gMTsKfQoKZnVuY3Rpb24gY2hlY2tQYWdlKCRwYWdlX2hpZXJhcmNoeSwgJGZvdW5kX3BhZ2VzKSB7CiAgICBnbG9iYWwgJGRiLCAkZ0NtczsKICAgICRwYXRocyA9IGFycmF5KCk7CiAgICAvKiAkcGFyZW50cyA9IGFycmF5KCk7CiAgICAgIGZvcmVhY2ggKCRmb3VuZF9wYWdlcyBhcyAkcGFnZSkgewogICAgICAkcGFyZW50c1tdID0gJHBhZ2VbJ2hpZXJhcmNoeV9wYXRoJ107CiAgICAgIH0gKi8KICAgICRxdWVyeSA9ICJTRUxFQ1QgaGllcmFyY2h5X3BhdGggRlJPTSAiIC4gY21zX2RiX3ByZWZpeCgpIC4gImNvbnRlbnQiOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7CiAgICB3aGlsZSAoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpIHsKICAgICAgICAkcGF0aHNbXSA9ICRyb3dbJ2hpZXJhcmNoeV9wYXRoJ107CiAgICAgICAgLy8kcGFyZW50c1tdID0gc3Vic3RyKCRyb3dbJ2hpZXJhcmNoeV9wYXRoJ10sIDAsIHN0cnJwb3MoJHJvd1snaGllcmFyY2h5X3BhdGgnXSwgJy8nLCAtMikpOwogICAgfQogICAgJHBhdGhzID0gYXJyYXlfdW5pcXVlKCRwYXRocyk7CiAgICAvLyRwYXJlbnRzID0gYXJyYXlfdW5pcXVlKCRwYXJlbnRzKTsKICAgICRwYXJlbnQgPSBzdWJzdHIoJHBhZ2VfaGllcmFyY2h5LCAwLCBzdHJycG9zKCRwYWdlX2hpZXJhcmNoeSwgJy8nLCAtMikpOwogICAgaWYgKGluX2FycmF5KCRwYWdlX2hpZXJhcmNoeSwgJHBhdGhzKSkgewogICAgICAgIC8vIHBhZ2UgZXhpc3RzIGluIHRoZSBoaWVyYXJjaHksIHBhZ2UgY2FuIGJlIG92ZXJ3cml0dGVuIQogICAgICAgIHJldHVybiAnY2F1dGlvbic7CiAgICB9IGVsc2UgaWYgKGluX2FycmF5KCRwYXJlbnQsICRwYXRocykgfHwgZW1wdHkoJHBhcmVudCkpIHsKICAgICAgICAvLyBwYWdlIGRvZXMgbm90IGV4aXN0LCBidXQgaGllcmFyY2h5IGV4aXN0cywgcGFnZSBjYW4gYmUgY3JlYXRlZAogICAgICAgIHJldHVybiAnbmV3JzsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gaGllcmFyY2h5IHBhdGggbm90IGZvdW5kLCBwYWdlIHdpbGwgbm90IGJlIGNyZWF0ZWQKICAgICAgICByZXR1cm4gJ2ZhbHNlJzsKICAgIH0KfQoKaWYgKCFpc3NldCgkcGFyYW1zWydzdGVwJ10pKSB7CiAgICAkc3RlcCA9IDE7Cn0gZWxzZSB7CiAgICAkc3RlcCA9ICRwYXJhbXNbJ3N0ZXAnXTsKfQoKaWYgKCRzdGVwID09IDEgJiYgZW1wdHkoJF9GSUxFU1skaWQgLiAnaW1wb3J0ZmlsZSddKSkgewogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoJ21lc3NhZ2UnID0+ICdub2ZpbGUnLCAnYWN0aXZlX3RhYicgPT4gJ2ltcG9ydCcpKTsKfSBlbHNlaWYgKCRzdGVwID09IDEgJiYgIWVtcHR5KCRfRklMRVNbJGlkIC4gJ2ltcG9ydGZpbGUnXSkpIHsKICAgIC8vIFRPRE86IGNoZWNrIGZpbGUsIFhNTD8sIHJvb3QgaXMgcGFja2FnZSwgcGFja2FnZW5hbWU/CiAgICAkdG1wX25hbWUgPSAkX0ZJTEVTWyRpZCAuICdpbXBvcnRmaWxlJ11bJ3RtcF9uYW1lJ107CiAgICAkeG1sX2ZpbGUgPSAkY29uZmlnWydwcmV2aWV3c19wYXRoJ10gLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJF9GSUxFU1skaWQgLiAnaW1wb3J0ZmlsZSddWyduYW1lJ107CiAgICBpZiAoIW1vdmVfdXBsb2FkZWRfZmlsZSgkdG1wX25hbWUsICR4bWxfZmlsZSkpIHsKICAgICAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCBhcnJheSgnbWVzc2FnZScgPT4gJ3VwbG9hZGZhaWxlZCcsICdhY3RpdmVfdGFiJyA9PiAnaW1wb3J0JykpOwogICAgfQogICAgJF9TRVNTSU9OWyd4bWxfZmlsZSddID0gJHhtbF9maWxlOwp9IGVsc2UgewogICAgJHhtbF9maWxlID0gJF9TRVNTSU9OWyd4bWxfZmlsZSddOwp9CgokeG1sX2FycmF5ID0geG1sX3BhcnNlX2ludG9fYXNzb2MoJHhtbF9maWxlKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfc2VjdGlvbicsICR0aGlzLT5MYW5nKCd0aXRsZV9pbXBvcnRfc3RlcCcgLiAkc3RlcCkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2hlbHBfc2VjdGlvbicsICR0aGlzLT5MYW5nKCdoZWxwX2ltcG9ydF9zdGVwJyAuICRzdGVwKSk7CgoKLyoKICBwcmludCAnPHByZT4nOwogIHByaW50X3IoJHhtbF9hcnJheSk7CiAgcHJpbnQgJzwvcHJlPic7CiAgZXhpdDsKICovCgokcGFja2FnZV9pbmZvID0gJHhtbF9hcnJheVsicGFja2FnZSJdWyJpbmZvcyJdOwppZiAoIWlzc2V0KCRwYWNrYWdlX2luZm9bJ2F1dGhvcm5hbWUnXSkpIHsKICAgICRwYWNrYWdlX2luZm9bJ2F1dGhvcm5hbWUnXSA9ICIiOwp9CmlmICghaXNzZXQoJHBhY2thZ2VfaW5mb1snbm90ZXMnXSkpIHsKICAgICRwYWNrYWdlX2luZm9bJ25vdGVzJ10gPSAiIjsKfQoKLy8gdGhpcyBpcyB2ZXJ5IGFrd2FyZCBkdWUgdG8gdGhlIGZ1bmN0aW9uIHhtbF9wYXJzZV9pbnRvX2Fzc29jKCkgY3JlYXRpbmcgbm8gYXJyYXkgZm9yIHNpbmdsZSBjaGlsZCwgc3VnZ2VzdGlvbnMgd2VsY29tZSA6KQppZiAoaXNzZXQoJHhtbF9hcnJheVsicGFja2FnZSJdWyJ0ZW1wbGF0ZXMiXSkpIHsKICAgICRmb3VuZF90ZW1wbGF0ZXMgPSBpc3NldCgkeG1sX2FycmF5WyJwYWNrYWdlIl1bInRlbXBsYXRlcyJdWyJ0ZW1wbGF0ZSJdWzBdKSA/ICR4bWxfYXJyYXlbInBhY2thZ2UiXVsidGVtcGxhdGVzIl1bInRlbXBsYXRlIl0gOiAkeG1sX2FycmF5WyJwYWNrYWdlIl1bInRlbXBsYXRlcyJdOwp9IGVsc2UgewogICAgJGZvdW5kX3RlbXBsYXRlcyA9IGFycmF5KCk7Cn0KaWYgKGlzc2V0KCR4bWxfYXJyYXlbInBhY2thZ2UiXVsic3R5bGVzaGVldHMiXSkpIHsKICAgICRmb3VuZF9zdHlsZXMgPSBpc3NldCgkeG1sX2FycmF5WyJwYWNrYWdlIl1bInN0eWxlc2hlZXRzIl1bImNzcyJdWzBdKSA/ICR4bWxfYXJyYXlbInBhY2thZ2UiXVsic3R5bGVzaGVldHMiXVsiY3NzIl0gOiAkeG1sX2FycmF5WyJwYWNrYWdlIl1bInN0eWxlc2hlZXRzIl07Cn0gZWxzZSB7CiAgICAkZm91bmRfc3R5bGVzID0gYXJyYXkoKTsKfQppZiAoaXNzZXQoJHhtbF9hcnJheVsicGFja2FnZSJdWyJhc3NvY3MiXSkpIHsKICAgICRmb3VuZF9hc3NvY3MgPSBpc3NldCgkeG1sX2FycmF5WyJwYWNrYWdlIl1bImFzc29jcyJdWyJhc3NvYyJdWzBdKSA/ICR4bWxfYXJyYXlbInBhY2thZ2UiXVsiYXNzb2NzIl1bImFzc29jIl0gOiAkeG1sX2FycmF5WyJwYWNrYWdlIl1bImFzc29jcyJdOwp9IGVsc2UgewogICAgJGZvdW5kX2Fzc29jcyA9IGFycmF5KCk7Cn0KaWYgKGlzc2V0KCR4bWxfYXJyYXlbInBhY2thZ2UiXVsicGFnZXMiXSkpIHsKICAgICRmb3VuZF9wYWdlcyA9IGlzc2V0KCR4bWxfYXJyYXlbInBhY2thZ2UiXVsicGFnZXMiXVsicGFnZSJdWzBdKSA/ICR4bWxfYXJyYXlbInBhY2thZ2UiXVsicGFnZXMiXVsicGFnZSJdIDogJHhtbF9hcnJheVsicGFja2FnZSJdWyJwYWdlcyJdOwp9IGVsc2UgewogICAgJGZvdW5kX3BhZ2VzID0gYXJyYXkoKTsKfQppZiAoaXNzZXQoJHhtbF9hcnJheVsicGFja2FnZSJdWyJtb2R1bGVfdGVtcGxhdGVzIl0pKSB7CiAgICAkZm91bmRfbW9kdWxlX3RwbHMgPSBpc3NldCgkeG1sX2FycmF5WyJwYWNrYWdlIl1bIm1vZHVsZV90ZW1wbGF0ZXMiXVsibW9kdWxlX3RlbXBsYXRlIl1bMF0pID8gJHhtbF9hcnJheVsicGFja2FnZSJdWyJtb2R1bGVfdGVtcGxhdGVzIl1bIm1vZHVsZV90ZW1wbGF0ZSJdIDogJHhtbF9hcnJheVsicGFja2FnZSJdWyJtb2R1bGVfdGVtcGxhdGVzIl07Cn0gZWxzZSB7CiAgICAkZm91bmRfbW9kdWxlX3RwbHMgPSBhcnJheSgpOwp9CmlmIChpc3NldCgkeG1sX2FycmF5WyJwYWNrYWdlIl1bImh0bWxibG9icyJdKSkgewogICAgJGZvdW5kX2Jsb2NrcyA9IGlzc2V0KCR4bWxfYXJyYXlbInBhY2thZ2UiXVsiaHRtbGJsb2JzIl1bImh0bWxibG9iIl1bMF0pID8gJHhtbF9hcnJheVsicGFja2FnZSJdWyJodG1sYmxvYnMiXVsiaHRtbGJsb2IiXSA6ICR4bWxfYXJyYXlbInBhY2thZ2UiXVsiaHRtbGJsb2JzIl07Cn0gZWxzZSB7CiAgICAkZm91bmRfYmxvY2tzID0gYXJyYXkoKTsKfQppZiAoaXNzZXQoJHhtbF9hcnJheVsicGFja2FnZSJdWyJ1c2VycGx1Z2lucyJdKSkgewogICAgJGZvdW5kX3VkdHMgPSBpc3NldCgkeG1sX2FycmF5WyJwYWNrYWdlIl1bInVzZXJwbHVnaW5zIl1bInVzZXJwbHVnaW4iXVswXSkgPyAkeG1sX2FycmF5WyJwYWNrYWdlIl1bInVzZXJwbHVnaW5zIl1bInVzZXJwbHVnaW4iXSA6ICR4bWxfYXJyYXlbInBhY2thZ2UiXVsidXNlcnBsdWdpbnMiXTsKfSBlbHNlIHsKICAgICRmb3VuZF91ZHRzID0gYXJyYXkoKTsKfQppZiAoaXNzZXQoJHhtbF9hcnJheVsicGFja2FnZSJdWyJmaWxlcyJdKSkgewogICAgJGZvdW5kX2ZpbGVzID0gaXNzZXQoJHhtbF9hcnJheVsicGFja2FnZSJdWyJmaWxlcyJdWyJmaWxlIl1bMF0pID8gJHhtbF9hcnJheVsicGFja2FnZSJdWyJmaWxlcyJdWyJmaWxlIl0gOiAkeG1sX2FycmF5WyJwYWNrYWdlIl1bImZpbGVzIl07Cn0gZWxzZSB7CiAgICAkZm91bmRfZmlsZXMgPSBhcnJheSgpOwp9CmlmIChpc3NldCgkeG1sX2FycmF5WyJwYWNrYWdlIl1bInNldHRpbmdzIl0pKSB7CiAgICAkZm91bmRfc2V0dGluZ3MgPSBpc3NldCgkeG1sX2FycmF5WyJwYWNrYWdlIl1bInNldHRpbmdzIl1bInNldHRpbmciXVswXSkgPyAkeG1sX2FycmF5WyJwYWNrYWdlIl1bInNldHRpbmdzIl1bInNldHRpbmciXSA6ICR4bWxfYXJyYXlbInBhY2thZ2UiXVsic2V0dGluZ3MiXTsKfSBlbHNlIHsKICAgICRmb3VuZF9zZXR0aW5ncyA9IGFycmF5KCk7Cn0KaWYgKGlzc2V0KCR4bWxfYXJyYXlbInBhY2thZ2UiXVsibW9kdWxldmVyc2lvbnMiXSkpIHsKICAgICRmb3VuZF9tb2R1bGVzID0gaXNzZXQoJHhtbF9hcnJheVsicGFja2FnZSJdWyJtb2R1bGV2ZXJzaW9ucyJdWyJtb2R1bGV2ZXJzaW9uIl1bMF0pID8gJHhtbF9hcnJheVsicGFja2FnZSJdWyJtb2R1bGV2ZXJzaW9ucyJdWyJtb2R1bGV2ZXJzaW9uIl0gOiAkeG1sX2FycmF5WyJwYWNrYWdlIl1bIm1vZHVsZXZlcnNpb25zIl07Cn0gZWxzZSB7CiAgICAkZm91bmRfbW9kdWxlcyA9IGFycmF5KCk7Cn0KCnN3aXRjaCAoJHN0ZXApIHsKICAgIGNhc2UgMToKICAgICAgICAvLyBnZXQgcGFja2FnZSBpbmZvCiAgICAgICAgZm9yZWFjaCAoJHBhY2thZ2VfaW5mbyBhcyAkbGFiZWwgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0XycgLiAkbGFiZWwsICR0aGlzLT5MYW5nKCdwcm9tcHRfJyAuICRsYWJlbCkpOwogICAgICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0XycgLiAkbGFiZWwsIGlzc2V0KCR2YWx1ZSkgPyAkdmFsdWUgOiAnJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21vZHVsZV92ZXJzaW9ucycsICRmb3VuZF9tb2R1bGVzKTsKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ZvdW5kX3RlbXBsYXRlcycsICRmb3VuZF90ZW1wbGF0ZXMpOwogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZm91bmRfc3R5bGVzJywgJGZvdW5kX3N0eWxlcyk7CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3VuZF9wYWdlcycsICRmb3VuZF9wYWdlcyk7CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3VuZF9tb2R1bGVzJywgJGZvdW5kX21vZHVsZV90cGxzKTsKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ZvdW5kX2Jsb2NrcycsICRmb3VuZF9ibG9ja3MpOwogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZm91bmRfdWR0cycsICRmb3VuZF91ZHRzKTsKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ZvdW5kX2ZpbGVzJywgJGZvdW5kX2ZpbGVzKTsKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ZvdW5kX3NldHRpbmdzJywgJGZvdW5kX3NldHRpbmdzKTsKCiAgICAgICAgYnJlYWs7CiAgICBjYXNlIDI6CiAgICAgICAgLy8gY2hlY2sgY21zbXN2ZXJzaW9uCiAgICAgICAgaWYgKCRHTE9CQUxTWydDTVNfVkVSU0lPTiddICE9ICRwYWNrYWdlX2luZm9bJ2Ntc21zdmVyc2lvbiddKSB7CiAgICAgICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignY2hlY2tfY21zbXN2ZXJzaW9uJywgJEdMT0JBTFNbJ0NNU19WRVJTSU9OJ10gLiAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL3dhcm5pbmcuZ2lmJykgLiR0aGlzLT5MYW5nKCdyZWNvbW1lbmRlZCcsICRwYWNrYWdlX2luZm9bJ2Ntc21zdmVyc2lvbiddKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjaGVja19jbXNtc3ZlcnNpb24nLCAkcGFja2FnZV9pbmZvWydjbXNtc3ZlcnNpb24nXSAuICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vdHJ1ZS5naWYnLCBsYW5nKCdPSycpKSk7CiAgICAgICAgfQoKICAgICAgICAvLyBjaGVjayBUaGVtZXMgTWFkZSBTaW1wbGUgdmVyc2lvbgogICAgICAgIGlmICgkdGhpcy0+R2V0VmVyc2lvbigpICE9ICRwYWNrYWdlX2luZm9bJ3Rtc3ZlcnNpb24nXSkgewogICAgICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NoZWNrX3Rtc3ZlcnNpb24nLCAkdGhpcy0+R2V0VmVyc2lvbigpIC4gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS93YXJuaW5nLmdpZicpLiR0aGlzLT5MYW5nKCdyZWNvbW1lbmRlZCcsICRwYWNrYWdlX2luZm9bJ3Rtc3ZlcnNpb24nXSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignY2hlY2tfdG1zdmVyc2lvbicsICRwYWNrYWdlX2luZm9bJ3Rtc3ZlcnNpb24nXSAuICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vdHJ1ZS5naWYnLCBsYW5nKCdPSycpKSk7CiAgICAgICAgfQoKCiAgICAgICAgJGZvbyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJGZvdW5kX21vZHVsZXMgYXMgJG1vZHVsZSkgewogICAgICAgICAgICAvLyBjaGVjayBpZiBtb2R1bGUgaW5zdGFsbGVkCiAgICAgICAgICAgICR0ZXN0ID0gQ21zTW9kdWxlOjpHZXRNb2R1bGVJbnN0YW5jZSgkbW9kdWxlWyduYW1lJ10pOwogICAgICAgICAgICBpZiAoISR0ZXN0KSB7CiAgICAgICAgICAgICAgICAkbW9kdWxlWydpbmZvJ10gPSAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2ZhbHNlLmdpZicpLiR0aGlzLT5MYW5nKCdyZXF1aXJlZCcsICRtb2R1bGVbJ3ZlcnNpb24nXSk7CiAgICAgICAgICAgIH0gZWxzZWlmICgkbW9kdWxlWyd2ZXJzaW9uJ10gIT0gJHRlc3QtPkdldFZlcnNpb24oJG1vZHVsZVsnbmFtZSddKSkgewogICAgICAgICAgICAgICAgJG1vZHVsZVsnaW5mbyddID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS93YXJuaW5nLmdpZicpIC4kdGhpcy0+TGFuZygncmVjb21tZW5kZWQnLCAkbW9kdWxlWyd2ZXJzaW9uJ10pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJG1vZHVsZVsnaW5mbyddID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS90cnVlLmdpZicsICAkdGhpcy0+TGFuZygnc3VjY2VzcycpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhcnJheV9wdXNoKCRmb28sICRtb2R1bGUpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21vZHVsZV92ZXJzaW9ucycsICRmb28pOwoKICAgICAgICBicmVhazsKICAgIGNhc2UgMzoKICAgICAgICAvLyBUT0RPOiBDaGVjayBwYWNrYWdlIG5hbWUgZm9yIGR1cGxpY2F0ZXMsIHVwZ3JhZGU/CiAgICAgICAgLy8gY2hlY2sgbmFtZSBjb25mbGljdHMKICAgICAgICAkdGVtcGxhdGVvcHMgPSAmICRnQ21zLT5HZXRUZW1wbGF0ZU9wZXJhdGlvbnMoKTsKICAgICAgICAkZm9vID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkZm91bmRfdGVtcGxhdGVzIGFzICR0ZW1wbGF0ZSkgewogICAgICAgICAgICBpZiAoJHRlbXBsYXRlb3BzLT5DaGVja0V4aXN0aW5nVGVtcGxhdGVOYW1lKCR0ZW1wbGF0ZVsndGVtcGxhdGVfbmFtZSddKSkgewogICAgICAgICAgICAgICAgJHRlbXBsYXRlWydpbmZvJ10gPSAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL3dhcm5pbmcuZ2lmJywgJHRoaXMtPkxhbmcoJ3dhcm5pbmcnKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGVtcGxhdGVbJ2luZm8nXSA9ICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vdHJ1ZS5naWYnLCAgJHRoaXMtPkxhbmcoJ3N1Y2Nlc3MnKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXJyYXlfcHVzaCgkZm9vLCAkdGVtcGxhdGUpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ZvdW5kX3RlbXBsYXRlcycsICRmb28pOwoKICAgICAgICAkc3R5bGVvcHMgPSAmICRnQ21zLT5HZXRTdHlsZXNoZWV0T3BlcmF0aW9ucygpOwogICAgICAgICRmb28gPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKCRmb3VuZF9zdHlsZXMgYXMgJHN0eWxlKSB7CiAgICAgICAgICAgIGlmICgkc3R5bGVvcHMtPkNoZWNrRXhpc3RpbmdTdHlsZXNoZWV0TmFtZSgkc3R5bGVbJ2Nzc19uYW1lJ10pKSB7CiAgICAgICAgICAgICAgICAkc3R5bGVbJ2luZm8nXSA9ICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vd2FybmluZy5naWYnLCAkdGhpcy0+TGFuZygnd2FybmluZycpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRzdHlsZVsnaW5mbyddID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS90cnVlLmdpZicsICR0aGlzLT5MYW5nKCdzdWNjZXNzJykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGFycmF5X3B1c2goJGZvbywgJHN0eWxlKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3VuZF9zdHlsZXMnLCAkZm9vKTsKCiAgICAgICAgLy8gY2hlY2sgcGFnZXMKICAgICAgICAkZm9vID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkZm91bmRfcGFnZXMgYXMgJHBhZ2UpIHsKICAgICAgICAgICAgJGNoZWNrID0gY2hlY2tQYWdlKCRwYWdlWydoaWVyYXJjaHlfcGF0aCddLCAkZm91bmRfcGFnZXMpOwogICAgICAgICAgICBzd2l0Y2ggKCRjaGVjaykgewogICAgICAgICAgICAgICAgY2FzZSAnbmV3JzoKICAgICAgICAgICAgICAgICAgICAkcGFnZVsnaW5mbyddID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS90cnVlLmdpZicsICR0aGlzLT5MYW5nKCdzdWNjZXNzJykpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnY2F1dGlvbic6CiAgICAgICAgICAgICAgICAgICAgJHBhZ2VbJ2luZm8nXSA9ICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vd2FybmluZy5naWYnLCAkdGhpcy0+TGFuZygnd2FybmluZycpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2ZhbHNlJzoKICAgICAgICAgICAgICAgICAgICAkcGFnZVsnaW5mbyddID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9mYWxzZS5naWYnLCAkdGhpcy0+TGFuZygnZXJyb3InKSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXJyYXlfcHVzaCgkZm9vLCAkcGFnZSk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZm91bmRfcGFnZXMnLCAkZm9vKTsKCiAgICAgICAgJGZvbyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJGZvdW5kX21vZHVsZV90cGxzIGFzICRtb2R1bGUpIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5HZXRUZW1wbGF0ZSgkbW9kdWxlWyd0ZW1wbGF0ZV9uYW1lJ10sICRtb2R1bGVbJ21vZHVsZV9uYW1lJ10pKSB7CiAgICAgICAgICAgICAgICAkbW9kdWxlWydpbmZvJ10gPSAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL3dhcm5pbmcuZ2lmJywgJHRoaXMtPkxhbmcoJ3dhcm5pbmcnKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkbW9kdWxlWydpbmZvJ10gPSAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL3RydWUuZ2lmJywgJHRoaXMtPkxhbmcoJ3N1Y2Nlc3MnKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXJyYXlfcHVzaCgkZm9vLCAkbW9kdWxlKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3VuZF9tb2R1bGVzJywgJGZvbyk7CgogICAgICAgIC8vIGNoZWNrIGJsb2NrcwogICAgICAgICRibG9ja29wcyA9ICYgJGdDbXMtPkdldEdsb2JhbENvbnRlbnRPcGVyYXRpb25zKCk7CiAgICAgICAgJGZvbyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJGZvdW5kX2Jsb2NrcyBhcyAkYmxvY2spIHsKICAgICAgICAgICAgaWYgKCRibG9ja29wcy0+Q2hlY2tFeGlzdGluZ0h0bWxCbG9iTmFtZSgkYmxvY2tbJ2h0bWxibG9iX25hbWUnXSkpIHsKICAgICAgICAgICAgICAgICRibG9ja1snaW5mbyddID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS93YXJuaW5nLmdpZicsICR0aGlzLT5MYW5nKCd3YXJuaW5nJykpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGJsb2NrWydpbmZvJ10gPSAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL3RydWUuZ2lmJywgJHRoaXMtPkxhbmcoJ3N1Y2Nlc3MnKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXJyYXlfcHVzaCgkZm9vLCAkYmxvY2spOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ZvdW5kX2Jsb2NrcycsICRmb28pOwoKICAgICAgICAkdWR0b3BzID0gJiAkZ0Ntcy0+R2V0VXNlclRhZ09wZXJhdGlvbnMoKTsKICAgICAgICAkZm9vID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkZm91bmRfdWR0cyBhcyAkdWR0KSB7CiAgICAgICAgICAgIGlmICgkdWR0b3BzLT5HZXRVc2VyVGFnKCR1ZHRbJ3VzZXJwbHVnaW5fbmFtZSddKSkgewogICAgICAgICAgICAgICAgJHVkdFsnaW5mbyddID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS93YXJuaW5nLmdpZicsICR0aGlzLT5MYW5nKCd3YXJuaW5nJykpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHVkdFsnaW5mbyddID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS90cnVlLmdpZicsICR0aGlzLT5MYW5nKCdzdWNjZXNzJykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGFycmF5X3B1c2goJGZvbywgJHVkdCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZm91bmRfdWR0cycsICRmb28pOwoKICAgICAgICAkZm9vID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkZm91bmRfZmlsZXMgYXMgJGZpbGUpIHsKICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRjb25maWdbJ3VwbG9hZHNfcGF0aCddIC4gJGZpbGVbJ2xvY2F0aW9uJ10pKSB7CiAgICAgICAgICAgICAgICAkZmlsZVsnaW5mbyddID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS93YXJuaW5nLmdpZicsICR0aGlzLT5MYW5nKCd3YXJuaW5nJykpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGZpbGVbJ2luZm8nXSA9ICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vdHJ1ZS5naWYnLCAkdGhpcy0+TGFuZygnc3VjY2VzcycpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhcnJheV9wdXNoKCRmb28sICRmaWxlKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3VuZF9maWxlcycsICRmb28pOwogICAgICAgIGJyZWFrOwogICAgY2FzZSA0OgogICAgICAgIC8vIHN0YXJ0IHRvIGxvZyBwYWNrYWdlIGluZm8KICAgICAgICAkcXVlcnkgPSAiU0VMRUNUIGlkIEZST00gIiAuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfdGhlbWVzbXMgV0hFUkUgbmFtZT0/IjsKICAgICAgICAkcGFja2FnZV9pZCA9ICRkYi0+R2V0T25lKCRxdWVyeSwgYXJyYXkoJHBhY2thZ2VfaW5mb1sncGFja2FnZW5hbWUnXSkpOwogICAgICAgIGlmICghJHBhY2thZ2VfaWQpIHsKICAgICAgICAgICAgJHBhY2thZ2VfaWQgPSAkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfdGhlbWVzbXNfc2VxIik7CiAgICAgICAgICAgICRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiIC4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV90aGVtZXNtcyAoaWQsIG5hbWUsIG5vdGVzLCB2ZXJzaW9uLCBhdXRob3IpIHZhbHVlcyAoPyw/LD8sPyw/KSI7CiAgICAgICAgICAgICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwYWNrYWdlX2lkLCAkcGFja2FnZV9pbmZvWydwYWNrYWdlbmFtZSddLCAkcGFja2FnZV9pbmZvWydub3RlcyddLAogICAgICAgICAgICAgICAgJHBhY2thZ2VfaW5mb1sncGFja2FnZXZlcnNpb24nXSwgJHBhY2thZ2VfaW5mb1snYXV0aG9ybmFtZSddKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHF1ZXJ5ID0gIlVQREFURSAiIC4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV90aGVtZXNtcyBTRVQgbm90ZXMgPSA/LCB2ZXJzaW9uID0gPywgYXV0aG9yID0gPyBXSEVSRSBpZCA9ID8iOwogICAgICAgICAgICAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkcGFja2FnZV9pbmZvWydub3RlcyddLAogICAgICAgICAgICAgICAgJHBhY2thZ2VfaW5mb1sncGFja2FnZXZlcnNpb24nXSwgJHBhY2thZ2VfaW5mb1snYXV0aG9ybmFtZSddLCAkcGFja2FnZV9pZCkpOwogICAgICAgIH0KCiAgICAgICAgLy8gaW1wb3J0IHRlbXBsYXRlcwogICAgICAgICR0ZW1wbGF0ZW9wcyA9ICYgJGdDbXMtPkdldFRlbXBsYXRlT3BlcmF0aW9ucygpOwogICAgICAgIGZvcmVhY2ggKCRmb3VuZF90ZW1wbGF0ZXMgYXMgJHRlbXBsYXRlKSB7CiAgICAgICAgICAgICR0cGwgPSBuZXcgVGVtcGxhdGUoKTsKICAgICAgICAgICAgJHRwbC0+bmFtZSA9ICR0ZW1wbGF0ZVsndGVtcGxhdGVfbmFtZSddOwogICAgICAgICAgICAkdHBsLT5jb250ZW50ID0gJHRlbXBsYXRlWyd0ZW1wbGF0ZV9jb250ZW50J107CiAgICAgICAgICAgICR0cGwtPmFjdGl2ZSA9IDE7CiAgICAgICAgICAgIGlmICgkdGVtcGxhdGVvcHMtPkNoZWNrRXhpc3RpbmdUZW1wbGF0ZU5hbWUoJHRlbXBsYXRlWyd0ZW1wbGF0ZV9uYW1lJ10pKSB7CiAgICAgICAgICAgICAgICAkdGVtcGxhdGVvcHMtPlVwZGF0ZVRlbXBsYXRlKCR0cGwpOwogICAgICAgICAgICAgICAgJHRwbF9pZCA9IGdldFRlbXBsYXRlSWRCeU5hbWUoJHRlbXBsYXRlWyd0ZW1wbGF0ZV9uYW1lJ10pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRwbF9pZCA9ICR0ZW1wbGF0ZW9wcy0+SW5zZXJ0VGVtcGxhdGUoJHRwbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5zZXJ0SW1wb3J0KCRwYWNrYWdlX2lkLCAndGVtcGxhdGUnLCAkdGVtcGxhdGVbJ3RlbXBsYXRlX25hbWUnXSwgJHRwbF9pZCk7CiAgICAgICAgfQoKICAgICAgICAvLyBpbXBvcnQgc3R5bGVzaGVldHMKICAgICAgICAkc3R5bGVvcHMgPSAmICRnQ21zLT5HZXRTdHlsZXNoZWV0T3BlcmF0aW9ucygpOwogICAgICAgIGZvcmVhY2ggKCRmb3VuZF9zdHlsZXMgYXMgJHN0eWxlKSB7CiAgICAgICAgICAgICRzdGwgPSBuZXcgU3R5bGVzaGVldCgpOwogICAgICAgICAgICAkc3RsLT5uYW1lID0gJHN0eWxlWydjc3NfbmFtZSddOwogICAgICAgICAgICAkc3RsLT52YWx1ZSA9ICRzdHlsZVsnY3NzX3RleHQnXTsKICAgICAgICAgICAgJHN0bC0+bWVkaWFfdHlwZSA9IGlzc2V0KCRzdHlsZVsnbWVkaWFfdHlwZSddKSA/ICRzdHlsZVsnbWVkaWFfdHlwZSddIDogJyc7CgogICAgICAgICAgICBpZiAoJHN0eWxlb3BzLT5DaGVja0V4aXN0aW5nU3R5bGVzaGVldE5hbWUoJHN0eWxlWydjc3NfbmFtZSddKSkgewogICAgICAgICAgICAgICAgJHN0eWxlb3BzLT5VcGRhdGVTdHlsZXNoZWV0KCRzdGwpOwogICAgICAgICAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCBjc3NfaWQgRlJPTSAiIC4gY21zX2RiX3ByZWZpeCgpIC4gImNzcyBXSEVSRSBjc3NfbmFtZSA9ID8iOwogICAgICAgICAgICAgICAgJGNzc19pZCA9ICRkYi0+Z2V0T25lKCRxdWVyeSwgYXJyYXkoJHN0eWxlWydjc3NfbmFtZSddKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkY3NzX2lkID0gJHN0eWxlb3BzLT5JbnNlcnRTdHlsZXNoZWV0KCRzdGwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGluc2VydEltcG9ydCgkcGFja2FnZV9pZCwgJ3N0eWxlJywgJHN0eWxlWydjc3NfbmFtZSddLCAkY3NzX2lkKTsKICAgICAgICB9CgogICAgICAgIC8vIGFzc29jaWF0ZSBzdHlsZXNoZWV0IHRvIHRlbXBsYXRlCiAgICAgICAgZm9yZWFjaCAoJGZvdW5kX2Fzc29jcyBhcyAkYXNzb2MpIHsKICAgICAgICAgICAgJHRwbF9pZCA9IGdldFRlbXBsYXRlSWRCeU5hbWUoJGFzc29jWyd0ZW1wbGF0ZV9uYW1lJ10pOwogICAgICAgICAgICAvLyBBUEkgZG9lcyBub3QgY2hlY2sgaWYgYXNzb2MgYWxyZWFkeSBleGlzdHMKICAgICAgICAgICAgJGNzc19pZHMgPSAkc3R5bGVvcHMtPkdldFRlbXBsYXRlQXNzb2NpYXRlZFN0eWxlc2hlZXRzKCR0cGxfaWQpOwogICAgICAgICAgICAkcXVlcnkgPSAiU0VMRUNUIGNzc19pZCBGUk9NICIgLiBjbXNfZGJfcHJlZml4KCkgLiAiY3NzIFdIRVJFIGNzc19uYW1lID0gPyBhbmQgY3NzX2lkIE5PVCBJTiAoIiAuIGltcGxvZGUoJywnLCAkY3NzX2lkcykgLiAiKSI7CiAgICAgICAgICAgICRjc3NfaWQgPSAkZGItPmdldE9uZSgkcXVlcnksIGFycmF5KCRzdHlsZVsnY3NzX25hbWUnXSkpOwogICAgICAgICAgICBpZiAoJGNzc19pZCkgewogICAgICAgICAgICAgICAgJHN0eWxlb3BzLT5Bc3NvY2lhdGVTdHlsZXNoZWV0VG9UZW1wbGF0ZSgkY3NzX2lkLCAkdHBsX2lkKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gaW1wb3J0IG1vZHVsZSB0ZW1wbGF0ZXMKICAgICAgICBmb3JlYWNoICgkZm91bmRfbW9kdWxlX3RwbHMgYXMgJG1vZHVsZSkgewogICAgICAgICAgICBpZiAoQ21zTW9kdWxlOjpHZXRNb2R1bGVJbnN0YW5jZSgkbW9kdWxlWydtb2R1bGVfbmFtZSddKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPlNldFRlbXBsYXRlKCRtb2R1bGVbJ3RlbXBsYXRlX25hbWUnXSwgJG1vZHVsZVsnY29udGVudCddLCAkbW9kdWxlWydtb2R1bGVfbmFtZSddKTsKICAgICAgICAgICAgICAgIGluc2VydEltcG9ydCgkcGFja2FnZV9pZCwgJ21vZHVsZScsICRtb2R1bGVbJ3RlbXBsYXRlX25hbWUnXSwgJycsICRtb2R1bGVbJ21vZHVsZV9uYW1lJ10pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBpbXBvcnQgcGFnZXMKICAgICAgICAkY29udGVudG9wcyA9ICYgJGdDbXMtPkdldENvbnRlbnRPcGVyYXRpb25zKCk7CiAgICAgICAgJHVzZXJpZCA9IGdldF91c2VyaWQoKTsKICAgICAgICBmb3JlYWNoICgkZm91bmRfcGFnZXMgYXMgJHBhZ2UpIHsKICAgICAgICAgICAgJHN0YXR1cyA9IGNoZWNrUGFnZSgkcGFnZVsnaGllcmFyY2h5X3BhdGgnXSwgJGZvdW5kX3BhZ2VzKTsKICAgICAgICAgICAgaWYgKCRzdGF0dXMgIT0gJ2ZhbHNlJykgewogICAgICAgICAgICAgICAgJGNvbnRlbnRvYmogPSAkY29udGVudG9wcy0+TG9hZENvbnRlbnRGcm9tQWxpYXMoJHBhZ2VbJ2NvbnRlbnRfYWxpYXMnXSk7CiAgICAgICAgICAgICAgICBpZiAoISRjb250ZW50b2JqKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnRvYmogPSAkY29udGVudG9wcy0+Q3JlYXRlTmV3Q29udGVudCgkcGFnZVsndHlwZSddKTsKICAgICAgICAgICAgICAgICAgICAkY29udGVudG9iai0+U2V0UGFyZW50SWQoLTEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGNvbnRlbnRvYmotPlNldE1lbnVUZXh0KCRwYWdlWydtZW51X3RleHQnXSk7CiAgICAgICAgICAgICAgICAkY29udGVudG9iai0+U2V0TmFtZSgkcGFnZVsnY29udGVudF9uYW1lJ10pOwogICAgICAgICAgICAgICAgJGNvbnRlbnRvYmotPlNldEFsaWFzKCRwYWdlWydjb250ZW50X2FsaWFzJ10pOwogICAgICAgICAgICAgICAgJGNvbnRlbnRvYmotPlNldE93bmVyKCR1c2VyaWQpOwogICAgICAgICAgICAgICAgJGNvbnRlbnRvYmotPlNldENhY2hhYmxlKCRwYWdlWydjYWNoYWJsZSddKTsKICAgICAgICAgICAgICAgICRjb250ZW50b2JqLT5TZXRBY3RpdmUoMSk7CiAgICAgICAgICAgICAgICAkY29udGVudG9iai0+U2V0U2hvd0luTWVudSgkcGFnZVsnc2hvd19pbl9tZW51J10pOwogICAgICAgICAgICAgICAgJGNvbnRlbnRvYmotPlNldExhc3RNb2RpZmllZEJ5KCR1c2VyaWQpOwogICAgICAgICAgICAgICAgJGNvbnRlbnRvYmotPlNldE1ldGFkYXRhKGlzc2V0KCRwYWdlWydtZXRhZGF0YSddKSA/ICRwYWdlWydtZXRhZGF0YSddIDogJycpOwogICAgICAgICAgICAgICAgJGNvbnRlbnRvYmotPlNldFRlbXBsYXRlSWQoZ2V0VGVtcGxhdGVJZEJ5TmFtZSgkcGFnZVsndGVtcGxhdGVfbmFtZSddKSk7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcGFnZVsnY29udGVudF9wcm9wcyddWydjb250ZW50X3Byb3AnXSBhcyAkcHJvcCkgewogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkcHJvcFsnY29udGVudCddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudG9iai0+U2V0UHJvcGVydHlWYWx1ZSgkcHJvcFsncHJvcF9uYW1lJ10sICRwcm9wWydjb250ZW50J10pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRjb250ZW50b2JqLT5TYXZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIHNldCBoaWVyYXJjaHkKICAgICAgICBmb3JlYWNoICgkZm91bmRfcGFnZXMgYXMgJHBhZ2UpIHsKICAgICAgICAgICAgJHN0YXR1cyA9IGNoZWNrUGFnZSgkcGFnZVsnaGllcmFyY2h5X3BhdGgnXSwgJGZvdW5kX3BhZ2VzKTsKICAgICAgICAgICAgaWYgKCRzdGF0dXMgIT0gJ2ZhbHNlJykgewogICAgICAgICAgICAgICAgJGNvbnRlbnRvYmogPSAkY29udGVudG9wcy0+TG9hZENvbnRlbnRGcm9tQWxpYXMoJHBhZ2VbJ2NvbnRlbnRfYWxpYXMnXSk7CiAgICAgICAgICAgICAgICBpZiAoJGNvbnRlbnRvYmopIHsKICAgICAgICAgICAgICAgICAgICAkcGFyZW50ID0gYmFzZW5hbWUoc3RyX3JlcGxhY2UoJHBhZ2VbJ2NvbnRlbnRfYWxpYXMnXSwgJycsICRwYWdlWydoaWVyYXJjaHlfcGF0aCddKSk7CiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnRvYmotPlNldE9sZFBhcmVudElkKCRjb250ZW50b2JqLT5tUGFyZW50SWQpOwogICAgICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHBhcmVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnRvYmotPlNldFBhcmVudElkKCRjb250ZW50b3BzLT5HZXRQYWdlSURGcm9tQWxpYXMoJHBhcmVudCkpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50b2JqLT5TZXRQYXJlbnRJZCgtMSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICgkY29udGVudG9iai0+bVBhcmVudElkIDw+ICRjb250ZW50b2JqLT5tT2xkUGFyZW50SWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnRvYmotPlNldEl0ZW1PcmRlcigtMSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRjb250ZW50b2JqLT5TZXRIaWVyYXJjaHlQYXRoKCRwYWdlWydoaWVyYXJjaHlfcGF0aCddKTsKICAgICAgICAgICAgICAgICAgICAkY29udGVudG9iai0+U2F2ZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5zZXJ0SW1wb3J0KCRwYWNrYWdlX2lkLCAncGFnZScsICRwYWdlWydjb250ZW50X2FsaWFzJ10sICRjb250ZW50b2JqLT5tSWQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRjb250ZW50b3BzLT5TZXRBbGxIaWVyYXJjaHlQb3NpdGlvbnMoKTsgLy8gVGhpcyBkb2VzIG5vdCBzZXQgdGhlIHBvc2l0aW9uIGhpZXJhcmNoeSBjb3JyZWN0bHkKICAgICAgICAvLyBpbXBvcnQgYmxvY2tzCiAgICAgICAgJGJsb2Nrb3BzID0gJiAkZ0Ntcy0+R2V0R2xvYmFsQ29udGVudE9wZXJhdGlvbnMoKTsKICAgICAgICBmb3JlYWNoICgkZm91bmRfYmxvY2tzIGFzICRibG9jaykgewogICAgICAgICAgICBpZiAoJGJsb2Nrb3BzLT5DaGVja0V4aXN0aW5nSHRtbEJsb2JOYW1lKCRibG9ja1snaHRtbGJsb2JfbmFtZSddKSkgewogICAgICAgICAgICAgICAgJGJsayA9ICRibG9ja29wcy0+TG9hZEhUTUxCbG9iQnlOYW1lKCRibG9ja1snaHRtbGJsb2JfbmFtZSddKTsKICAgICAgICAgICAgICAgICRibGstPmNvbnRlbnQgPSAkYmxvY2tbJ2h0bWwnXTsKICAgICAgICAgICAgICAgICRibGstPnVzZV93eXNpd3lnID0gJGJsb2NrWyd1c2Vfd3lzaXd5ZyddOwogICAgICAgICAgICAgICAgJGJsay0+ZGVzY3JpcHRpb24gPSAkYmxvY2tbJ2Rlc2NyaXB0aW9uJ107CiAgICAgICAgICAgICAgICAkYmxvY2tvcHMtPlVwZGF0ZUh0bWxCbG9iKCRibGspOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGJsayA9IG5ldyBHbG9iYWxDb250ZW50KCk7CiAgICAgICAgICAgICAgICAkYmxrLT5uYW1lID0gJGJsb2NrWydodG1sYmxvYl9uYW1lJ107CiAgICAgICAgICAgICAgICAkYmxrLT5jb250ZW50ID0gJGJsb2NrWydodG1sJ107CiAgICAgICAgICAgICAgICAkYmxrLT5vd25lciA9ICR1c2VyaWQ7CiAgICAgICAgICAgICAgICAkYmxrLT5kZXNjcmlwdGlvbiA9ICRibG9ja1snZGVzY3JpcHRpb24nXTsKICAgICAgICAgICAgICAgICRibG9ja29wcy0+SW5zZXJ0SHRtbEJsb2IoJGJsayk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIGltcG9ydCB1ZHRzCiAgICAgICAgJHVkdG9wcyA9ICYgJGdDbXMtPkdldFVzZXJUYWdPcGVyYXRpb25zKCk7CiAgICAgICAgZm9yZWFjaCAoJGZvdW5kX3VkdHMgYXMgJHVkdCkgewogICAgICAgICAgICAkdWR0b3BzLT5TZXRVc2VyVGFnKCR1ZHRbJ3VzZXJwbHVnaW5fbmFtZSddLCAkdWR0Wydjb2RlJ10pOwogICAgICAgICAgICBpbnNlcnRJbXBvcnQoJHBhY2thZ2VfaWQsICd1ZHQnLCAkdWR0Wyd1c2VycGx1Z2luX25hbWUnXSk7CiAgICAgICAgfQoKICAgICAgICAvLyB3cml0ZSBmaWxlcwogICAgICAgIGZvcmVhY2ggKCRmb3VuZF9maWxlcyBhcyAkZmlsZSkgewogICAgICAgICAgICBzYXZlRW5jb2RlZEZpbGUoJHRoaXMsICRjb25maWdbJ3VwbG9hZHNfcGF0aCddLCBiYXNlbmFtZSgkZmlsZVsnbG9jYXRpb24nXSksICRmaWxlWydsb2NhdGlvbiddLCB0cnVlLCAkZmlsZVsnZW5jb2RlZCddKTsKICAgICAgICAgICAgaW5zZXJ0SW1wb3J0KCRwYWNrYWdlX2lkLCAnZmlsZScsIGJhc2VuYW1lKCRmaWxlWydsb2NhdGlvbiddKSwgJycsICcnLCAkZmlsZVsnbG9jYXRpb24nXSk7CiAgICAgICAgfQoKICAgICAgICAvLyB1cGRhdGUgbW9kdWxlIHNldHRpbmdzCiAgICAgICAgZm9yZWFjaCAoJGZvdW5kX3NldHRpbmdzIGFzICRzZXR0aW5nKSB7CiAgICAgICAgICAgICRtb2QgPSBDbXNNb2R1bGU6OkdldE1vZHVsZUluc3RhbmNlKCRzZXR0aW5nWydtb2R1bGVuYW1lJ10pOwogICAgICAgICAgICBpZiAoJG1vZCkgewogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHNldHRpbmdbJ3NpdGVwcmVmJ10gYXMgJHNpdGVwcmVmKSB7CiAgICAgICAgICAgICAgICAgICAgJHByZWYgPSBzdHJfcmVwbGFjZSgkc2V0dGluZ1snbW9kdWxlbmFtZSddLidfbWFwaV9wcmVmXycsJycsJHNpdGVwcmVmWydzaXRlcHJlZl9uYW1lJ10pOwogICAgICAgICAgICAgICAgICAgICRtb2QtPlNldFByZWZlcmVuY2UoJHByZWYsIGlzc2V0KCRzaXRlcHJlZlsnc2l0ZXByZWZfdmFsdWUnXSk/JHNpdGVwcmVmWydzaXRlcHJlZl92YWx1ZSddOicnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2hlbHBfc2VjdGlvbicsICRwYWNrYWdlX2luZm9bJ25vdGVzJ10pOwoKICAgICAgICBicmVhazsKfQoKCiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RlcCcsICRzdGVwKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCduZXh0c3RlcCcsICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsICdzdGVwJywgKCRzdGVwICsgMSkpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2ltcG9ydCcsICRyZXR1cm5pZCkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgJHRoaXMtPkxhbmcoJ2NvbnRpbnVlX2ltcG9ydCcpKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21vZCcsICR0aGlzKTsKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdpbXBvcnQudHBsJyk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/action.list.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgppZiAoISAkdGhpcy0+Q2hlY2tBY2Nlc3MoIiIpKQoJewoJcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7Cgl9CgovKiAtPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQoKICAgQ29kZSBmb3IgdGhlbWVtcyAibGlzdCIgYWRtaW4gYWN0aW9uCiAgIAogICAtPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQogICAKICAgVHlwaWNhbGx5LCB0aGlzIHdpbGwgZGlzcGxheSBzb21ldGhpbmcgZnJvbSBhIHRlbXBsYXRlCiAgIG9yIGRvIHNvbWUgb3RoZXIgdGFzay4KICAgCiovCgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1RoZW1lcyBNYWRlIFNpbXBsZSc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ1RoaXMgbW9kdWxlIGhlbHBzIHlvdSB0byBleHBvcnQsIGltcG9ydCBhbmQgbWFuYWdlIHRoZW1lIHBhY2thZ2VzIGluY2x1ZGluZyBtb2R1bGUgdGVtcGxhdGVzLCBnbG9iYWwgY29udGVudCBibG9ja3MsIHVzZXIgZGVmaW5lZCB0YWdzLCBzZXR0aW5ncyBhbmQgbW9yZS4nOwokbGFuZ1snYWRtaW5kZXNjcmlwdGlvbiddID0gJ0V4cG9ydCwgaW1wb3J0IGFuZCBtYW5hZ2UgdGhlbWUgcGFja2FnZXMuJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnQmUgc3VyZSB0byBzZXQgIk1hbmFnZSBUaGVtZXMiIHBlcm1pc3Npb25zIHRvIHVzZSB0aGlzIG1vZHVsZSEnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1RoZW1lcyBNYWRlIFNpbXBsZSBpcyB1bmluc3RhbGxlZC4nOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ1JlYWxseT8gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuc2luc3RhbGwgdGhpcyBmaW5lIG1vZHVsZT8nOwokbGFuZ1sndGl0bGVfb3ZlcnZpZXcnXSA9ICdPdmVydmlldyc7CiRsYW5nWyd0aXRsZV9leHBvcnQnXSA9ICdFeHBvcnQnOwokbGFuZ1sndGl0bGVfaW1wb3J0J10gPSAnSW1wb3J0JzsKJGxhbmdbJ2V4cG9ydF9leHBsYWluJ10gPSAnPHA+TWFrZSBzb21lIGNoZWNrcyBhbmQgcHJlcGFyYXRpb25zIGJlZm9yZSB5b3Ugc3RhcnQgdG8gZXhwb3J0IHlvdXIgc2V0dGluZ3MuPC9wPiA8dWw+PGxpPjEuIEZpcnN0IG9mIGFsbCBpbnZlbnQgYSA8c3Ryb25nPnVuaXF1ZSBuYW1lPC9zdHJvbmc+IGZvciB5b3VyIHBhY2thZ2UuIERvIG5vdCBjaG9vc2UgPHN0cm9uZz5NeSBQYWNrYWdlPC9zdHJvbmc+LiBUaGUgYmV0dGVyIGV4YW1wbGUgZm9yIHRoZSBwYWNrYWdlIG5hbWUgY2FuIGJlIDxzdHJvbmc+aUNNUyBUcnVlIENvbG9yPC9zdHJvbmc+IHdoZXJlIDxzdHJvbmc+aUNNUzwvc3Ryb25nPiBpcyBzb21ldGhpbmcgdGhhdCBpcyB1bmlxdWUgdG8geW91IGFuZCBjYW5ub3QgYmUgb2NjYXNpb25hbGx5IHVzZWQgYnkgb3RoZXIgZGVzaWduZXJzLjwvbGk+PGxpPjIuIENoZWNrIHRoYXQgYWxsIGZpbGVzIGluY2x1ZGVkIGluIHBhY2thZ2UgYXJlIHBsYWNlZCBpbiB0aGUgc3ViLWZvbGRlciBvZiB0aGUgZm9sZGVyIDxzdHJvbmc+L3VwbG9hZHM8L3N0cm9uZz4uIFlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGV4cG9ydCBmaWxlcyB0aGF0IGFyZSBzdG9yZWQgaW4gb3RoZXIgZm9sZGVycy4gSXQgaXMgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBvcmdhbml6ZSB5b3VyIGZpbGVzIHRoaXMgd2F5LiBEbyBub3Qgc3ByZWFkIHlvdXIgY3VzdG9tIGZpbGVzIHRocm91Z2hvdXQgaW5zdGFsbGF0aW9uIG1ha2luZyBpdCBhbHNtb3N0IGltcG9zc2libGUgdG8gYmFja3VwIGN1c3RvbSBjaGFuZ2VzLjwvbGk+PGxpPjMuIENoZWNrIHRoZSBuYW1lIG9mIGFsbCBlbGVtZW50cyBpbnRlbmRlZCBmb3IgdGhlIHBhY2thZ2U6IHRlbXBsYXRlcywgc3R5bGVzaGVldHMsIHBhZ2VzLCBnbG9iYWwgY29udGVudCBibG9ja3MsIHVzZXIgZGVmaW5lZCB0YWdzLCBtb2R1bGUgdGVtcGxhdGVzLiBNYWtlIHN1cmUgdGhhdCA8c3Ryb25nPmFsbCB0aGVtIGhhdmUgdW5pcXVlIG5hbWVzPC9zdHJvbmc+IGhlbHBpbmcgdG8gaWRlbnRpZnkgdGhlIHBhY2thZ2UgdGhleSBiZWxvbmcgdG8uIEUuIGcuIGJhZCBuYW1lIGZvciBhIHN0eWxlc2hlZXQgd291bGQgYmUgPHN0cm9uZz5MYXlvdXQ8L3N0cm9uZz4sIGJldHRlciA8c3Ryb25nPmlDTVMgTGF5b3V0PC9zdHJvbmc+IHdoZXJlIDxzdHJvbmc+aUNNUzwvc3Ryb25nPiBpcyBzb21ldGhpbmcgdW5pcXVlIHRvIHlvdXIgYW5kL29yIHRvIHRoZSBwYWNrYWdlIHlvdSBjcmVhdGUuPC9saT48bGk+NC4gV2hlbiB5b3UgYXJlIHJlYWR5IHN0YXJ0IHRoZSBleHBvcnQgYnkgY2xpY2tpbmcgb24gdGhlIGJ1dHRvbiBiZWxvdy48L2xpPjwvdWw+JzsKJGxhbmdbJ2ltcG9ydF9leHBsYWluJ10gPSAnU2VsZWN0IFhNTCBmaWxlIGNvbnRhaW5pbmcgcGFja2FnZSBmb3IgaW1wb3J0IGJlbG93Lic7CiRsYW5nWydzdGFydF9leHBvcnQnXSA9ICdDcmVhdGUgbmV3IHBhY2thZ2UnOwokbGFuZ1snY29udGludWVfZXhwb3J0J10gPSAnQ29udGludWUnOwokbGFuZ1snY29udGludWVfaW1wb3J0J10gPSAnQ29udGludWUnOwokbGFuZ1snaW1wb3J0J10gPSAnSW1wb3J0JzsKJGxhbmdbJ2Zvb3Rlcl9ub3RpY2UnXSA9ICc8aDI+QXR0ZW50aW9uISBQbGVhc2UgdXNlIHRoaXMgYmV0YSBwYWNrYWdlIHdpdGggY2F1dGlvbiB1bnRpbCB0aGUgc3RhYmxlIHJlbGVhc2UgaXMgdGhlcmUuIFRoaXMgcGFja2FnZSB3aWxsIG92ZXJ3cml0ZSBmaWxlcyBhbmQgY2FuIGRhbWFnZSB0YXJnZXQgZGF0YWJhc2UhPC9oMj4nOwokbGFuZ1sndGl0bGVfZXhwb3J0X3N0ZXAxJ10gPSAnU3RlcCAxOiBTZWxlY3QgdGVtcGxhdGVzJzsKJGxhbmdbJ2hlbHBfZXhwb3J0X3N0ZXAxJ10gPSAnU2VsZWN0IHRlbXBsYXRlcyB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIGluY2x1ZGUgaW4geW91ciBwYWNrYWdlLiBCZSBzdXJlIHRoYXQgYmFzZWQgb24gdGhlc2Ugc2VsZWN0aW9ucyB0aGUgbGlzdHMgb2YgZWxlbWVudHMgaW4gdGhlIG5leHQgc3RlcHMgd2lsbCBiZSBsaW1pdGVkIHRvIHRob3NlIHJlbGV2YW50IGZvciB0aGUgdGVtcGxhdGUuIEUuIGcuIHlvdSBjYW4gb25seSBpbmNsdWRlIHBhZ2VzIHRoYXQgdXNlIHRoZSB0ZW1wbGF0ZXMgc2VsZWN0ZWQgaW4gdGhpcyBzdGVwLic7CiRsYW5nWyd0aXRsZV9leHBvcnRfc3RlcDInXSA9ICdTdGVwIDI6IFNlbGVjdCBzdHlsZXNoZWV0cyc7CiRsYW5nWydoZWxwX2V4cG9ydF9zdGVwMiddID0gJ1NlbGVjdCBzdHlsZXNoZWV0cyB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIGluY2x1ZGUgaW4geW91ciBwYWNrYWdlLiBJZiBzdHlsZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0ZW1wbGF0ZXMgc2VsZWN0ZWQgaW4gdGhlIGxhc3Qgc3RlcCwgdGhpcyBhc3NvY2lhdGlvbiB3aWxsIGJlIGNyZWF0ZWQgb24gdGhlIHRhcmdldCBpbnN0YWxsYXRpb24gYXMgd2VsbC4nOwokbGFuZ1sndGl0bGVfZXhwb3J0X3N0ZXAzJ10gPSAnU3RlcCAzOiBTZWxlY3QgcGFnZXMnOwokbGFuZ1snaGVscF9leHBvcnRfc3RlcDMnXSA9ICdTZWxlY3QgcGFnZXMgdGhhdCB5b3Ugd291bGQgbGlrZSB0byBpbmNsdWRlIGluIHlvdXIgcGFja2FnZS4gPHN0cm9uZz5UaGlzIGxpc3QgaXMgbGltaXRlZCB0byB0aGUgcGFnZXMgdGhhdCB1c2UgdGVtcGxhdGVzIHNlbGVjdGVkIGluIHRoZSBzdGVwIDE8L3N0cm9uZz4uIE1lYW5zIHRoYXQgeW91IGNhbm5vdCBleHBvcnQgcGFnZXMgd2l0aG91dCBzZWxlY3RpbmcgdGhlIHRlbXBsYXRlcyB0aGV5IGFyZSBiYXNlZCBvbi4gVGhlIHBhZ2VzIHdpbGwgYmUgaW1wb3J0ZWQgaW50byB0YXJnZXQgaW5zdGFsbGF0aW9uIHdpdGggaGllcmFyY2h5IHBhdGhzIHByZXNlcnZlZC4gVGhlcmUgYXJlIDMgY2FzZXM6IDx1bD48bGk+MS4gVGhlIHBhZ2Ugd2lsbCBiZSBjcmVhdGVkIGlmIHRoZSBleGFjdCBoaWVyYXJjaHkgcGF0aCBleGlzdHMgb24gdGhlIHRhcmdldCBpbnN0YWxsYXRpb24gb3IgeW91IGluY2x1ZGUgdGhlIHBhZ2VzIGZyb20gdGhlIGhpZXJhcmNoeSBpbnRvIHlvdXIgcGFja2FnZS48L2xpPjxsaT4yLiBUaGUgcGFnZSB3aWxsIGJlIG92ZXJ3cml0dGVuIG9uIHRoZSB0YXJnZXQgc3lzdGVtIGlmIGl0IGlzIGFscmVhZHkgZXhpc3RzIGluIHRoZSBoaWVyYXJjaHkgcGF0aCBvbiB0aGUgdGFyZ2V0IHN5c3RlbS48L2xpPjxsaT4zLiBUaGUgcGFnZSB3aWxsIE5PVCBiZSBpbXBvcnRlZCBpZiB0aGVyZSBpcyBubyBzdWNoIGhpZXJhcmNoeSBwYXRoIG9uIHRoZSB0YXJnZXQgaW5zdGFsbGF0aW9uLiBUaGUgdXNlciB3aWxsIHN0aWxsIGJlIGFibGUgdG8gY3JlYXRlIHRoZSByZXF1aXJlZCBoaWVyYXJjaHkgcHJpb3IgdG8gaW1wcm90aW5nIHRoZSBwYWNrYWdlLjwvbGk+PC91bD4nOwokbGFuZ1sndGl0bGVfZXhwb3J0X3N0ZXA0J10gPSAnU3RlcCA0OiBTZWxlY3QgbW9kdWxlIHRlbXBsYXRlcyc7CiRsYW5nWydoZWxwX2V4cG9ydF9zdGVwNCddID0gJ1NlbGVjdCBtb2R1bGUgdGVtcGxhdGVzIHRoYXQgeW91IHdvdWxkIGxpa2UgdG8gaW5jbHVkZSBpbiB0aGUgcGFja2FnZS4gSWYgdGhlIG1vZHVsZXMgYXJlIG5vdCBpbnN0YWxsZWQgaW4gdGFyZ2V0IGluc3RhbGxhdGlvbiBvciB0aGUgdmVyc2lvbiBkZXZpYXRlcyBmcm9tIG9uZSB5b3UgdXNlIGhlcmUsIHRoZSB1c2VyIHdpbGwgYmUgcHJvdmlkZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbWVzc2FnZSB3aGF0IG1vZHVsZSBpcyBtaXNzaW5nIGFuZCB0aGUgdmVyc2lvbiBvZiB0aGUgbW9kdWxlIHlvdSB1c2UgaGVyZS4nOwokbGFuZ1sndGl0bGVfZXhwb3J0X3N0ZXA1J10gPSAnU3RlcCA1OiBTZWxlY3QgZ2xvYmFsIGNvbnRlbnQgYmxvY2tzJzsKJGxhbmdbJ2hlbHBfZXhwb3J0X3N0ZXA1J10gPSAnU2VsZWN0IGdsb2JhbCBjb250ZW50IGJsb2NrcyB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIGluY2x1ZGUgaW4gdGhlIHBhY2thZ2UuIElmIHRoZSBnbG9iYWwgY29udGVudCBibG9ja3Mgd2l0aCB0aGF0IG5hbWUgYWxyZWFkeSBleGlzdHMgb24gdGhlIHRhcmdldCBzeXN0ZW0gaXQgd2lsbCBiZSBvdmVyd3JpdHRlbi4nOwokbGFuZ1sndGl0bGVfZXhwb3J0X3N0ZXA2J10gPSAnU3RlcCA2OiBTZWxlY3QgdXNlciBkZWZpbmVkIHRhZ3MgKFVEVCknOwokbGFuZ1snaGVscF9leHBvcnRfc3RlcDYnXSA9ICdTZWxlY3QgdXNlciBkZWZpbmVkIHRhZ3MgdGhhdCB5b3Ugd291bGQgbGlrZSB0byBpbmNsdWRlIGluIHRoZSBwYWNrYWdlLiBJZiB0aGUgdXNlciBkZWZpbmVkIHRhZyB3aXRoIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgdGFyZ2V0IHN5c3RlbSBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLic7CiRsYW5nWyd0aXRsZV9leHBvcnRfc3RlcDcnXSA9ICdTdGVwIDc6IFNlbGVjdCBmaWxlcyc7CiRsYW5nWydoZWxwX2V4cG9ydF9zdGVwNyddID0gJ1NlbGVjdCBmaWxlcyB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIGluY2x1ZGUgaW4gdGhlIHBhY2thZ2UuIFRoaXMgbGlzdCBpcyBsaW1pdGVkIHRvIHRoZSBmaWxlcyBpbiB0aGUgZm9sZGVyIDxzdHJvbmc+L3VwbG9hZHM8L3N0cm9uZz4uIFlvdSBzaG91bGQgcGxhY2UgeW91ciBmaWxlcyBpbnRvIHRoZSBzdWItZm9sZGVyIHdpdGggdGhlIHVuaXF1ZSBuYW1lIHRoZXJlLiBEbyBub3Qgc3ByZWFkIHlvdXIgZmlsZXMgdGhyb3VnaCB0aGUgd2hvbGUgaW5zdGFsbGF0aW9uLiBJZiB5b3UgY2hvb3NlIGEgbG90IG9mIGxhcmdlIGZpbGVzLCB5b3VyIGV4cG9ydCBmaWxlIHdpbGwgYmUgdmVyeSBsYXJnZS4gVGhpcyBjYW4gY2F1c2UgIm91dCBvZiBtZW1vcnkiIG1lc3NhZ2UgZWl0aGVyIGR1cmluZyBleHBvcnQgb3IgZHVyaW5nIGltcG9ydCBvbiB0aGUgdGFyZ2V0IGluc3RhbGxhdGlvbi4gUGxlYXNlIGludmVzdCB5b3VyIHRpbWUgYW5kIHVzZSB5b3VyIGJyYWluIHRvIGZpZ3VyZSBvdXQgcmVxdWlyZWQgZmlsZXMgYW5kIGxpbWl0IHlvdXIgc2VsZWN0aW9uLic7CiRsYW5nWyd0aXRsZV9leHBvcnRfc3RlcDgnXSA9ICdTdGVwIDg6IFNlbGVjdCBtb2R1bGVzXCcgc2V0dGluZ3MnOwokbGFuZ1snaGVscF9leHBvcnRfc3RlcDgnXSA9ICdTZWxlY3QgdGhlIG1vZHVsZXMgZm9yIHdoaWNoIHlvdSB3b3VsZCBsaWtlIHRvIGluY2x1ZGUgc2V0dGluZ3MuIFVzZSB3aXRoIGNhdXRpb24gYXMgYWxsIG1vZHVsZSBzZXR0aW5ncyB3aWxsIGJlIG92ZXJ3cml0dGVuIGluIHRoZSB0YXJnZXQgaW5zdGFsbGF0aW9uLiBEbyBleHBvcnQgbW9kdWxlIHNldHRpbmdzIG9ubHkgaWYgeW91ciBkZXNpZ24gcmVsaWVzIG9uIGNlcnRhaW4gc2V0dGluZyBhbmQgd2lsbCBmYWlsIGlmIGl0IGlzIG5vdCBzZXQgYXMgcmVxdWlyZWQuJzsKJGxhbmdbJ3RpdGxlX2V4cG9ydF9zdGVwOSddID0gJ1N0ZXAgOTogUGFja2FnZSBpbmZvcm1hdGlvbiBhbmQgaW5zdHJ1Y3Rpb25zJzsKJGxhbmdbJ2hlbHBfZXhwb3J0X3N0ZXA5J10gPSAnVGhlIGZpbmFsIHN0ZXAuIEVudGVyIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgcGFja2FnZS4gPHN0cm9uZz5QYWNrYWdlIG5hbWUgYW5kIHBhY2thZ2UgdmVyc2lvbiBhcmUgcmVxdWlyZWQgZmllbGRzITwvc3Ryb25nPiBVc2Ugbm90ZXMgdG8gZ2l2ZSB1c2VyIGluc3RydWN0aW9ucyBvbiBlLmcuIGhvdyB0byB3b3JrIHdpdGggeW91ciBwYWNrYWdlIG9yIHdoZXJlIGhlIGNhbiBnZXQgc3VwcG9ydC4nOwokbGFuZ1sndGl0bGVfZXhwb3J0X3N0ZXAxMCddID0gJ1N0ZXAgMTA6IE92ZXJ2aWV3IG9mIHBhY2thZ2UgaW5mb3JtYXRpb24gYW5kIGNvbXBvbmVudHMgJzsKJGxhbmdbJ2hlbHBfZXhwb3J0X3N0ZXAxMCddID0gJ1JlYWR5LiBTZWUgYmVsb3cgdGhlIGluZm9ybWF0aW9uIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbnRvIHRoZSBwYWNrYWdlLiBDbGljayBvbiAiQ29udGludWUiIHRvIGNyZWF0ZSBhIGZpbGUuJzsKJGxhbmdbJ3RpdGxlX2ltcG9ydF9zdGVwMSddID0gJ1N0ZXAgMTogUGFja2FnZSBvdmVydmlldyc7CiRsYW5nWydoZWxwX2ltcG9ydF9zdGVwMSddID0gJ1RoZSBzZWxlY3RlZCBmaWxlIGNvbnRhaW5zIGZvbGxvd2luZyBwYWNrYWdlOic7CiRsYW5nWyd0aXRsZV9pbXBvcnRfc3RlcDInXSA9ICdTdGVwIDI6IENoZWNrIGNvbXBhdGliaWxpdHknOwokbGFuZ1snaGVscF9pbXBvcnRfc3RlcDInXSA9ICdCZWxvdyB5b3UgY2FuIHNlZSB0aGUgdmVyc2lvbnMgb2YgQ01TTVMgYW5kIHRoZSBtb2R1bGVzIHRoYXQgdGhlIHBhY2thZ2UgcmVxdWlyZXMuIElmIG9uZSBvciBtb3JlIG1vZHVsZXMgYXJlIG5vdCBpbnN0YWxsZWQgdGhlbiB0aGVpciBtb2R1bGUgdGVtcGxhdGVzIGFuZCBtb2R1bGUgc2V0dGluZ3Mgd2lsbCBub3QgYmUgaW1wb3J0ZWQuIElmIHZlcnNpb25zIG9mIHRoZSBtb2R1bGUgZGlmZmVyIHRoZXJlIGlzIG5vIHdhcnJhbnR5IHRoYXQgaW1wb3J0IHN1Y2NlZWRzLiA8c3Ryb25nPkNhdXRpb24hPC9zdHJvbmc+IElmIHRoZXJlIGFyZSB3YXJuaW5ncyBvbiB0aGlzIHBhZ2UgeW91IGFyZSA8c3Ryb25nPnN0cm9uZ2x5PC9zdHJvbmc+IHJlY29tbWVuZGVkIHRvIGJhY2t1cCB5b3VyIGZpbGUgc3lzdGVtIEFORCBkYXRhYmFzZSBCRUZPUkUgeW91IHN0YXJ0IHBhY2thZ2UgaW1wb3J0Lic7CiRsYW5nWyd0aXRsZV9pbXBvcnRfc3RlcDMnXSA9ICdTdGVwIDM6IENoZWNrIG5hbWUgY29uZmxpY3RzJzsKJGxhbmdbJ2hlbHBfaW1wb3J0X3N0ZXAzJ10gPSAnQmVsb3cgeW91IGNhbiBzZWUgYWxsIGNvbXBvbmVudHMgaW5jbHVkZWQgaW4gdGhlIHBhY2thZ2UuIElmIHlvdSBzZWUgYSB3YXJuaW5nIHNpZ24gYmVzaWRlIHRoZSBjb21wb25lbnQsIGl0IG1lYW5zIHRoYXQgeW91IGFscmVhZHkgaGF2ZSBhIGNvbXBvbmVudCB3aXRoIHRoaXMgbmFtZSBpbiB5b3VyIGluc3RhbGxhdGlvbi4gSWYgeW91IHByb2NlZWQgeW91ciBjb21wb25lbnQgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIHRoZSBwYWNrYWdlIHZlcnNpb24uIENhdXRpb24hIFlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHJlc3RvcmUgeW91ciBjb21wb25lbnRzLiBQbGVhc2UgY3JlYXRlIGEgZmlsZSBBTkQgZGF0YWJhc2UgYmFja3VwIGlmIHlvdSBhcmUgbm90IHN1cmUuJzsKJGxhbmdbJ3RpdGxlX2ltcG9ydF9zdGVwNCddID0gJ0ltcG9ydCBjb21wbGV0ZWQhJzsKJGxhbmdbJ2hlbHBfaW1wb3J0X3N0ZXA0J10gPSAnJzsKJGxhbmdbJ2lkJ10gPSAnSUQnOwokbGFuZ1snbmFtZSddID0gJ05hbWUnOwokbGFuZ1snYWN0aW9uJ10gPSAnU2VsZWN0IEFsbCc7CiRsYW5nWydsaXN0J10gPSAnVGhlIGxpc3Qgb2YgY29tcG9uZW50cyBzZWxlY3RlZCBmb3IgZXhwb3J0JzsKJGxhbmdbJ25vX2NvbXBvbmVudHMnXSA9ICc8aDMgYWxpZ249ImNlbnRlciI+Tm90aGluZyBoYXMgYmVlbiBmb3VuZC48L2gzPjxwIGFsaWduPSJjZW50ZXIiPk5vdGU6IHRoaXMgbGlzdCBjYW4gYmUgbGltaXRlZCBiYXNlZCBvbiB0aGUgcHJldmlvdXMgc2VsZWN0aW9ucy48YnIvPkNsaWNrIG9uICJDb250aW51ZSIgdG8gZ2V0IHRvIHRoZSBuZXh0IHN0ZXAuPC9wPic7CiRsYW5nWyd0ZW1wbGF0ZXMnXSA9ICdUZW1wbGF0ZXMnOwokbGFuZ1snc3R5bGVzaGVldHMnXSA9ICdTdHlsZXNoZWV0cyc7CiRsYW5nWydwYWdlcyddID0gJ1BhZ2VzJzsKJGxhbmdbJ21vZHVsZXRlbXBsYXRlcyddID0gJ01vZHVsZSB0ZW1wbGF0ZXMnOwokbGFuZ1snZ2JscyddID0gJ0dsb2JhbCBDb250ZW50IEJsb2Nrcyc7CiRsYW5nWyd1ZHRzJ10gPSAnVXNlciBEZWZpbmVkIFRhZ3MgKFVEVCknOwokbGFuZ1snZmlsZXMnXSA9ICdGaWxlcyc7CiRsYW5nWydtb2R1bGVzZXR0aW5ncyddID0gJ1NldHRpbmdzIGZvciBtb2R1bGVzJzsKJGxhbmdbJ21vZHVsZW5hbWUnXSA9ICdNb2R1bGUgTmFtZSc7CiRsYW5nWydtb2R1bGUnXSA9ICdNb2R1bGUnOwokbGFuZ1snbm9zZWxlY3Rpb24nXSA9ICcqIE5vdGhpbmcgaGFzIGJlZW4gc2VsZWN0ZWQuJzsKJGxhbmdbJ3Byb21wdF9wYWNrYWdlbmFtZSddID0gJ1BhY2thZ2UgTmFtZTonOwokbGFuZ1snaW5mb19wYWNrYWdlbmFtZSddID0gJ0JlIHN1cmUgdGhhdCB5b3UgdXNlIHZlcnkgdW5pcXVlIHBhY2thZ2UgbmFtZSB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBwYWNrYWdlcyBvZiBvdGhlciBkZXNpZ25lcnMuJzsKJGxhbmdbJ3Byb21wdF9wYWNrYWdldmVyc2lvbiddID0gJ1BhY2thZ2UgVmVyc2lvbjonOwokbGFuZ1snaW5mb19wYWNrYWdldmVyc2lvbiddID0gJ0VudGVyIHRoZSB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlLiBUaGlzIHdpbGwgaGVscCB0byB0cmFjayBpc3N1ZXMgb3IgaGFuZGxlIHVwZ3JhZGVzLic7CiRsYW5nWydwcm9tcHRfYXV0aG9ybmFtZSddID0gJ0F1dGhvciBOYW1lOic7CiRsYW5nWydpbmZvX2F1dGhvcm5hbWUnXSA9ICdFbnRlciB5b3VyIG5hbWUgYW5kIGNvcHlyaWdodC4gRS5nIDxpPkpvaG4gRG9lIFtteXdlYnNpdGUuY29tXTwvaT4nOwokbGFuZ1sncHJvbXB0X25vdGVzJ10gPSAnTm90ZXM6JzsKJGxhbmdbJ2luZm9fbm90ZXMnXSA9ICdFbnRlciBhbnkgYWRkaXRpb25hbCBpbnN0cnVjdGlvbnMuIEUuIGcuIGlmIHlvdSBkZWxpdmVyIHRlbXBsYXRlcyBmb3Igc3BlY2lhbCBtb2R1bGUsIHRlbGwgdGhlIHVzZXIgaG93IHRvIGNvbmZpZ3VyZSBpdC4gT3IgdGVsbCB0aGUgdXNlciB3aGVyZSBoZSBjYW4gZ2V0IGhlbHAgZm9yIHRoZSB0aGVtZS4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIHNob3duIG9uIHRoZSBkYXNoYm9hcmQgYWZ0ZXIgdGhlIHRoZW1lIGlzIGluc3RhbGxlZC4nOwokbGFuZ1snYWN0aXZlJ10gPSAnQWN0aXZlJzsKJGxhbmdbJ2VtcHR5cGFja2FnZW5hbWUnXSA9ICdQbGVhc2UgZW50ZXIgcGFja2FnZSBuYW1lISc7CiRsYW5nWydlbXB0eXBhY2thZ2V2ZXJzaW9uJ10gPSAnUGxlYXNlIGVudGVyIHBhY2thZ2UgdmVyc2lvbiEnOwokbGFuZ1snbm9maWxlJ10gPSAnUGxlYXNlIHNlbGVjdCBhIHZhbGlkIFhNTCBQYWNrYWdlIGZpbGUhJzsKJGxhbmdbJ25vZmlsZSddID0gJ1RoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgdXBsb2FkISc7CiRsYW5nWydwYWNrYWdlaW5jbHVkZXMnXSA9ICdUaGlzIHBhY2thZ2UgaW5jbHVkZXMnOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnVGhlIGZvbGRlciB0bXAvY2FjaGUgaXMgbm90IHdyaXRhYmxlLiBQbGVhc2UgY2hlY2sgeW91ciBwZXJtaXNzaW9ucyEnOwokbGFuZ1snd2FybmluZyddID0gJ0NhdXRpb24hJzsKJGxhbmdbJ3N1Y2Nlc3MnXSA9ICdPSyc7CiRsYW5nWydlcnJvciddID0gJ0ZhaWxlZCEnOwokbGFuZ1sncHJvbXB0X2Ntc21zdmVyc2lvbiddID0gJ0NNUyBNYWRlIFNpbXBsZTonOwokbGFuZ1sncHJvbXB0X3Rtc3ZlcnNpb24nXSA9ICdUaGVtZXMgTWFkZSBTaW1wbGU6JzsKJGxhbmdbJ21vZHVsZXZlcnNpb25zJ10gPSAnUmVxdWlyZWQgbW9kdWxlcyBhbmQgdmVyc2lvbnMnOwokbGFuZ1sncmVjb21tZW5kZWQnXSA9ICI8aT5QYWNrYWdlIHdhcyBjcmVhdGVkIHdpdGggdmVyc2lvbiAlczwvaT4iOwokbGFuZ1sncmVxdWlyZWQnXSA9ICI8aT5QYWNrYWdlIHJlcXVpcmVzIHRoZSBtb2R1bGUgdmVyc2lvbiAlczwvaT4iOwoKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4KPHA+VGhpcyBtb2R1bGUgaGVscHMgeW91IHRvIGV4cG9ydCwgaW1wb3J0IGFuZCBtYW5hZ2UgPHN0cm9uZz50aGVtZSBwYWNrYWdlczwvc3Ryb25nPiB0aGF0IG1heSBpbmNsdWRlOgo8dWw+CjxsaT50ZW1wbGF0ZXM8L2xpPgo8bGk+c3R5bGVzaGVldHM8L2xpPgo8bGk+cGFnZXM8L2xpPgo8bGk+bW9kdWxlIHRlbXBsYXRlczwvbGk+CjxsaT5nbG9iYWwgY29udGVudCBibG9ja3M8L2xpPgo8bGk+dXNlciBkZWZpbmVkIHRhZ3M8L2xpPgo8bGk+bW9kdWxlIHNldHRpbmdzPC9saT4KPGxpPmFuZCBmaWxlcy48L2xpPgo8L3VsPgo8ZGl2IGNsYXNzPSJwYWdlZXJyb3Jjb250YWluZXIiPgo8cD5UaGlzIGlzIGEgdmVyeSBlYXJseSBiZXRhIHZlcnNpb24uIFBsZWFzZSB1c2Ugd2l0aCBjYXV0aW9uIG9uIHRlc3QgaW5zdGFsbGF0aW9uLiBETyBOT1QgdXNlIG9uIHByb2R1Y3Rpb24gc2l0ZXMgYXMgdGhpcyBtb2R1bGUgb3ZlcndyaXRlcyBhbmQgcmVwbGFjZXMgeW91ciBkYXRhLiBETyBURVNUIGFuZCBjb21taXQgdGhlIGJ1Z3MgdG8gdGhlIGZvcmdlLCBzbyB0aGF0IEkgd2lsbCBiZSBhYmxlIHRvIHJlbGVhc2Ugc3RhYmxlIHZlcnNpb24gc29vbi48L3A+CjwvZGl2Pgo8aDM+SG93IERvIEkgVXNlIEl0PC9oMz4KPHA+VGhpcyBtb2R1bGUgaGFzIG5vIGZyb250IGVuZCBpbnRlcmZhY2UsIG9ubHkgYW4gYWRtaW4gaW50ZXJmYWNlLiBJdCBhbGxvd3MgeW91IHRvIHNlbGVjdCBhbnkgb2YgdGhlIGFib3ZlIG1lbnRpb25lZCBjb21wb25lbnRzLCBlbnRlciBwYWNrYWdlIGluZm8sIGFuZCBjbGljayAiRXhwb3J0Ii4gIEFuIFhNTCBmaWxlIGNvbnRhaW5pbmcgYWxsIHRoZSBjb21wb25lbnRzIG9mIHRoZSBwYWNrYWdlIHdpbGwgYmUgY3JlYXRlZC4gVGhlIGZpbGUgY2FuIGJlIGRpc3RyaWJ1dGVkIHRvIGltcG9ydCB0aGUgcGFja2FnZSBvbiB0aGUgdGFyZ2V0IGluc3RhbGxhdGlvbnMuPC9wPgo8aDM+UGVybWlzc2lvbnM8L2gzPgo8cD5UaGUgcGVybWlzc2lvbnMgbW9kZWwgaXMgc3RyaWN0IGZvciB0aGUgVGhlbWUgTWFuYWdlciB0byBlbnN1cmUgZGF0YWJhc2UgaW50ZWdyaXR5LiAgVGhlIHBlcm1pc3Npb24gIk1hbmFnZSBUaGVtZXMiIGlzIHJlcXVpcmVkIHRvIGV4cG9ydCB0aGVtZXMgYW5kIGltcG9ydCB0aGVtZXMuPC9wPgo8cD5BcyB3ZWxsLCB0aGUgb3Bwb3NpdGUgZnVuY3Rpb25hbGl0eSBleGlzdHMsIHlvdSBtYXkgdXBsb2FkIGEgcGFja2FnZSBmaWxlICh4bWwgZm9ybWF0KSBhbmQgaGF2ZSB0aGUgZW5jbG9zZWQgdGVtcGxhdGVzLCBzdHlsZXNoZWV0cywgcGFnZXMsIG1vZHVsZSB0ZW1wbGF0ZXMsIGdsb2JhbCBjb250ZW50IGJsb2NrcywgdXNlciBkZWZpbmVkIHRhZ3MsIG1vZHVsZSBzZXR0aW5ncyBhbmQgZmlsZXMgYXV0b21hdGljYWxseSBpbXBvcnRlZCBpbnRvIHlvdXIgQ01TTVMgaW5zdGFsbGF0aW9uLjwvcD4KPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUsIEZBUXMsIG9yIHRvIGZpbGUgYSBCdWcgUmVwb3J0IG9yIGJ1eSBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSB2aXNpdCB0aGUgbW9kdWxlIGhvbWVwYWdlIGF0IDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdGhlbWVzbXMiPmRldi5jbXNtYWRlc2ltcGxlLm9yZzwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnL3ZpZXdmb3J1bS5waHA/Zj03Ij5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPgo8bGk+UGxlYXNlIGRvIG5vdCBjb250YWN0IG1lIGJ5IG1haWwgZGlyZWN0bHkuIEkgd2lsbCBub3QgYW5zd2VyIHRvIGFueSBzdXBwb3J0IHJlcXVlc3QgZm9yIGZyZWUuIEFkZGl0aW9uYWxseSwgb3RoZXJzIG1pZ2h0IGhhdmUgdGhlIHNhbWUgcXVlc3Rpb25zIGFuZCB3YW50IHRvIGtub3cgYWJvdXQgdGhlIHNvbHV0aW9uLCB0aHVzIHVzZSBib3RoIG9wcG9ydHVuaXRpZXMgbWVudGlvbmVkIGFib3ZlLjwvbGk+ICAKPC91bD4KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0IG9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4KCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMTEsIFNvZmlhIEhhdXNjaGlsZHQgPGEgaHJlZj0ibWFpbHRvOnNvZmlhQGhhdXNjaGlsZHQubmV0Ij4mbHQ7c29maWFAaGF1c2NoaWxkdC5uZXQmZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPgonOwokbGFuZ1snY2hhbmdlbG9nJ10gPSAnPHVsPgo8bGk+VmVyc2lvbiAwLjEgLSA4IEphbnVhcnkgMjAxMS4KCTx1bD4KCTxsaT5JbnRpdGlhbCByZWxlYXNlLjwvbGk+Cgk8L3VsPgo8L2xpPiAgICAKPC91bD4nOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJGdDbXMpKQogICAgZXhpdDsKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEluc3RhbGwoKQogIFdoZW4geW91ciBtb2R1bGUgaXMgaW5zdGFsbGVkLCB5b3UgbWF5IG5lZWQgdG8gZG8gc29tZQogIHNldHVwLiBUeXBpY2FsIHRoaW5ncyB0aGF0IGhhcHBlbiBoZXJlIGFyZSB0aGUgY3JlYXRpb24KICBhbmQgcHJlcG9wdWxhdGlvbiBvZiBkYXRhYmFzZSB0YWJsZXMsIGRhdGFiYXNlIHNlcXVlbmNlcywKICBwZXJtaXNzaW9ucywgcHJlZmVyZW5jZXMsIGV0Yy4KCiAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBjcmVhdGlvbiBvZiBkYXRhYmFzZSB0YWJsZXMsCiAgY2hlY2sgb3V0IHRoZSBBRE9EQiBEYXRhIERpY3Rpb25hcnkgcGFnZSBhdAogIGh0dHA6Ly9waHBsZW5zLmNvbS9sZW5zL2Fkb2RiL2RvY3MtZGF0YWRpY3QuaHRtCgogIFRoaXMgZnVuY3Rpb24gY2FuIHJldHVybiBhIHN0cmluZyBpbiBjYXNlIG9mIGFueSBlcnJvciwKICBhbmQgQ01TIHdpbGwgbm90IGNvbnNpZGVyIHRoZSBtb2R1bGUgaW5zdGFsbGVkLgogIFN1Y2Nlc3NmdWwgaW5zdGFsbHMgc2hvdWxkIHJldHVybiBGQUxTRSBvciBub3RoaW5nIGF0IGFsbC4KICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCi8vIFR5cGljYWwgRGF0YWJhc2UgSW5pdGlhbGl6YXRpb24KJGRiID0gJiAkZ0Ntcy0+R2V0RGIoKTsKCi8vIG15c3FsLXNwZWNpZmljLCBidXQgaWdub3JlZCBieSBvdGhlciBkYXRhYmFzZQokdGFib3B0YXJyYXkgPSBhcnJheSgnbXlzcWwnID0+ICdUWVBFPU15SVNBTScpOwokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgovLyB0YWJsZSBzY2hlbWEgZGVzY3JpcHRpb24KJGZsZHMgPSAiCiAgaWQgSSgxMSkgTk9UTlVMTCBLRVksCiAgbmFtZSBDKDE2MCkgTk9UTlVMTCwKICBub3RlcyBYLAogIHZlcnNpb24gQygyNTUpLAogIGF1dGhvciBDKDI1NSkKICAiOwoKLy8gY3JlYXRlIGl0LiBUaGlzIHNob3VsZCBkbyBlcnJvciBjaGVja2luZywgYnV0IEknbSBhIGxhenkgc29kLgokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV90aGVtZXNtcyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgovLyBjcmVhdGUgYSBzZXF1ZW5jZQokZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfdGhlbWVzbXNfc2VxIik7CgogIC8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbgogICRmbGRzID0gIgogIHRoZW1lX2lkIEkoMTEpIE5PVE5VTEwsCiAgdHlwZSBDKDI1NSkgTk9UTlVMTCwKICBzeXN0ZW1faWQgSSwKICBuYW1lIEMoMjU1KSBOT1ROVUxMLAogIG1vZHVsZSBDKDE2MCksCiAgbG9jYXRpb24gWAogICI7CgogIC8vIGNyZWF0ZSBpdC4gVGhpcyBzaG91bGQgZG8gZXJyb3IgY2hlY2tpbmcsIGJ1dCBJJ20gYSBsYXp5IHNvZC4KICAkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdGhlbWVzbXNfY29tcCIsCiAgJGZsZHMsICR0YWJvcHRhcnJheSk7CiAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogCgovLyBwZXJtaXNzaW9ucwokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignTWFuYWdlIFRoZW1lcycsICdNYW5hZ2UgVGhlbWVzJyk7CgoKLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCiR0aGlzLT5BdWRpdCgwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCdpbnN0YWxsZWQnLCAkdGhpcy0+R2V0VmVyc2lvbigpKSk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIFVuaW5zdGFsbCgpCgkgICBTb21ldGltZXMsIGFuIGV4Y2VwdGlvbmFsbHkgdW5lbmxpZ2h0ZW5lZCBvciBpZ25vcmFudAoJICAgYWRtaW4gd2lsbCB3aXNoIHRvIHVuaW5zdGFsbCB5b3VyIG1vZHVsZS4gV2hpbGUgaXQKCSAgIHdvdWxkIGJlIGJlc3QgdG8gbGF5IGludG8gdGhlc2UgaWRpb3RzIHdpdGggYSBjbHVlc3RpY2ssCgkgICB3ZSB3aWxsIGRvIHRoZSBtYWduYW5pbW91cyB0aGluZyBhbmQgcmVtb3ZlIHRoZSBtb2R1bGUKCSAgIGFuZCBjbGVhbiB1cCB0aGUgZGF0YWJhc2UsIHBlcm1pc3Npb25zLCBhbmQgcHJlZmVyZW5jZXMKCSAgIHRoYXQgYXJlIHNwZWNpZmljIHRvIGl0LgoJICAgVGhpcyBpcyB0aGUgbWV0aG9kIHdoZXJlIHdlIGRvIHRoaXMuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgoKCQkvLyBUeXBpY2FsIERhdGFiYXNlIFJlbW92YWwKCQkkZGIgPSYgJGdDbXMtPkdldERiKCk7CgkJCgkJLy8gcmVtb3ZlIHRoZSBkYXRhYmFzZSB0YWJsZQoJCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOwoJCSRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3RoZW1lc21zIiApOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCQkkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV90aGVtZXNtc19jb21wIiApOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsgICAgICAgICAgICAgICAgCgoJCS8vIHJlbW92ZSB0aGUgc2VxdWVuY2UKCQkkZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdGhlbWVtc19zZXEiICk7CgoJCQoJCS8vIHJlbW92ZSB0aGUgcGVybWlzc2lvbnMKCQkkdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignTWFuYWdlIFRoZW1lcycpOwoKCQkKCQkvLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKCQkkdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ3VuaW5zdGFsbGVkJykpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIFVwZ3JhZGUoKQoJICAgSWYgeW91ciBtb2R1bGUgdmVyc2lvbiBudW1iZXIgZG9lcyBub3QgbWF0Y2ggdGhlIHZlcnNpb24KCSAgIG51bWJlciBvZiB0aGUgaW5zdGFsbGVkIG1vZHVsZSwgdGhlIENNUyBBZG1pbiB3aWxsIGdpdmUKCSAgIHlvdSBhIGNoYW5jZSB0byB1cGdyYWRlIHRoZSBtb2R1bGUuIFRoaXMgaXMgdGhlIGZ1bmN0aW9uCgkgICB0aGF0IGFjdHVhbGx5IGhhbmRsZXMgdGhlIHVwZ3JhZGUuCgkgICBJZGVhbGx5LCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYW5kbGUgdXBncmFkZXMgaW5jcmVtZW50YWxseSwKCSAgIHNvIHlvdSBjb3VsZCB1cGdyYWRlIGZyb20gdmVyc2lvbiAwLjAuMSB0byAxMC41Ljcgd2l0aAoJICAgYSBzaW5nbGUgY2FsbC4gRm9yIGEgZ3JlYXQgZXhhbXBsZSBvZiB0aGlzLCBzZWUgdGhlIE5ld3MKCSAgIG1vZHVsZSBpbiB0aGUgc3RhbmRhcmQgQ01TIGluc3RhbGwuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgkJJGN1cnJlbnRfdmVyc2lvbiA9ICRvbGR2ZXJzaW9uOwoJCXN3aXRjaCgkY3VycmVudF92ZXJzaW9uKQoJCXsKCQkJY2FzZSAiMS4wIjoKCQkJICAgICBicmVhazsKCQkJY2FzZSAiMS4xIjoKCQkJICAgICBicmVhazsKCQl9CgkJCgkJLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCgkJJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1cGdyYWRlZCcsJHRoaXMtPkdldFZlcnNpb24oKSkpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/adminpanel.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPgo8cD57JGhlbHBfc2VjdGlvbn08L3A+CnskdGFiX2hlYWRlcnN9Cgp7JHN0YXJ0X2V4cG9ydF90YWJ9CnskZm9ybWV4cG9ydH0KeyRleHBvcnRfZXhwbGFpbn0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdH08L3A+CjwvZGl2Pgp7JGlucHV0c3RlcH0KeyRlbmRmb3JtfQp7JGVuZF90YWJ9Cgp7JHN0YXJ0X2ltcG9ydF90YWJ9CntpZiBpc3NldCgkbWVzc2FnZSkgJiYgJG1lc3NhZ2UgIT0nJ30KPGRpdiBjbGFzcz0icGFnZWVycm9yY29udGFpbmVyIj4KeyRtb2QtPkxhbmcoJG1lc3NhZ2UpfQo8L2Rpdj4Key9pZn0KPHA+eyRtb2QtPkxhbmcoJ2ltcG9ydF9leHBsYWluJyl9PC9wPgp7JGZvcm1pbXBvcnR9CjxwPnskaW1wb3J0ZmlsZX08L3A+Cnskc3VibWl0aW1wb3J0fQp7JGVuZGZvcm19CnskZW5kX3RhYn0KCnsqIHskc3RhcnRfb3ZlcnZpZXdfdGFifQo8cD5UaGlzIGlzIHRoZSBjb250ZW50cyBvZiBvdmVydmlldyB0YWIgaW4gdGhlIGFkbWluIHBhbmVsLjwvcD4KCnskZW5kX3RhYn0gKn0KCgp7JHRhYl9mb290ZXJzfQoKPGRpdiBjbGFzcz0icGFnZWVycm9yY29udGFpbmVyIj4KPHA+eyRtb2QtPkxhbmcoJ2Zvb3Rlcl9ub3RpY2UnKX08L3A+CjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfZXJyb3J9PC9oMz4Ke2lmIGlzc2V0KCRhZG1pbl9uYXYpfTxwPnskYWRtaW5fbmF2fTwvcD57L2lmfQp7aWYgJG1lc3NhZ2UhPScnfTxwPnskbWVzc2FnZX08L3A+ey9pZn0=]]></data>
	</file>
	<file>
	  <filename>/templates/export.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPgp7JHN0YXJ0Zm9ybX0Ke2lmIGlzc2V0KCRtZXNzYWdlKSAmJiAkbWVzc2FnZSAhPScnfQo8ZGl2IGNsYXNzPSJwYWdlZXJyb3Jjb250YWluZXIiPgp7JG1vZC0+TGFuZygkbWVzc2FnZSl9CjwvZGl2Pgp7L2lmfQoKPHA+eyRoZWxwX3NlY3Rpb259PC9wPgoKe2lmICRzdGVwIDwgOX0KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KICAgIDx0aGVhZD4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD57JGlkdGV4dH08L3RoPgogICAgICAgICAgICA8dGg+eyRuYW1ldGV4dH08L3RoPgogICAgICAgICAgICA8dGg+PGlucHV0IGlkPSJzZWxlY3RhbGwiIHR5cGU9ImNoZWNrYm94IiBvbmNsaWNrPSJzZWxlY3RfYWxsKCk7IiAvPiB7JGFjdGlvbnRleHR9PC90aD4KICAgICAgICA8L3RyPgogICAgPC90aGVhZD4KICAgIDx0Ym9keT4KICAgICAgICB7aWYgJHRhYmxlX2l0ZW1zfEBzaXplb2YgPiAwfQoJe2ZvcmVhY2ggZnJvbT0kdGFibGVfaXRlbXMgaXRlbT1lbnRyeX0KICAgICAgICA8dHIgY2xhc3M9IntjeWNsZSB2YWx1ZXM9InJvdzEscm93MiJ9Ij4KICAgICAgICAgICAgPHRkPnskZW50cnkuaWR9PC90ZD4KICAgICAgICAgICAgPHRkPnskZW50cnkubmFtZX08L3RkPgogICAgICAgICAgICA8dGQ+eyRlbnRyeS5pbnB1dH08L3RkPgogICAgICAgIDwvdHI+Cgl7L2ZvcmVhY2h9CiAgICAgICAge2Vsc2V9CiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+eyRtb2QtPkxhbmcoJ25vX2NvbXBvbmVudHMnKX08L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgey9pZn0KICAgIDwvdGJvZHk+CjwvdGFibGU+CnsvaWZ9Cgp7aWYgJHN0ZXAgPT0gOX0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfcGFja2FnZW5hbWV9ICo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3BhY2thZ2VuYW1lfSZuYnNwO3skaW5mb19wYWNrYWdlbmFtZX08L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9wYWNrYWdldmVyc2lvbn0gKjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfcGFja2FnZXZlcnNpb259Jm5ic3A7eyRpbmZvX3BhY2thZ2V2ZXJzaW9ufTwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X2F1dGhvcm5hbWV9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9hdXRob3JuYW1lfSZuYnNwO3skaW5mb19hdXRob3JuYW1lfTwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X25vdGVzfSB7JGluZm9fbm90ZXN9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9ub3Rlc308L3A+CjwvZGl2Pgp7L2lmfQoKe2lmICRzdGVwID49IDEwfQp7Zm9yZWFjaCBmcm9tPSRwYWNrYWdlX2luZm8ga2V5PWxhYmVsIGl0ZW09ZmllbGR9Cnthc3NpZ24gdmFyPSJ0ciIgdmFsdWU9cHJvbXB0XyRsYWJlbH0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJHRyKX08L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGZpZWxkfTwvcD4KPC9kaXY+CnsvZm9yZWFjaH0Key9pZn0KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskbmV4dHN0ZXB9eyRzdWJtaXR9PC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9ImluZm8iPgogICAgPHRhYmxlIGNsYXNzPSJwYWdldGFibGUiPgogICAgICAgIDx0cj48dGg+eyRtb2QtPkxhbmcoJ2xpc3QnKX08L3RoPjwvdHI+CiAgICA8L3RhYmxlPgogICAge2lmICRzdGVwID49IDJ9CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCd0ZW1wbGF0ZXMnKX08L3A+CiAgICA8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgIHtpZiAkZm91bmRfdGVtcGxhdGVzfEBzaXplb2YgPiAwfQogICAgICAgIDx1bD4KICAgICAgICAgICAge2ZvcmVhY2ggZnJvbT0kZm91bmRfdGVtcGxhdGVzIGl0ZW09dGVtcGxhdGV9CiAgICAgICAgICAgIDxsaT57JHRlbXBsYXRlLm5hbWV9ICh7JG1vZC0+TGFuZygnaWQnKX06IHskdGVtcGxhdGUuaWR9KTwvbGk+CiAgICAgICAgICAgIHsvZm9yZWFjaH0KICAgICAgICA8L3VsPgogICAgICAgIHtlbHNlfQogICAgICAgIDxwPnskbW9kLT5MYW5nKCdub3NlbGVjdGlvbicpfTwvcD4KICAgICAgICB7L2lmfQogICAgPC9kaXY+CiAgICB7L2lmfQoKICAgIHtpZiAkc3RlcCA+PSAzfQogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygnc3R5bGVzaGVldHMnKX08L3A+CiAgICA8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgIHtpZiAkZm91bmRfc3R5bGVzfEBzaXplb2YgPiAwfQogICAgICAgIDx1bD4KICAgICAgICAgICAge2ZvcmVhY2ggZnJvbT0kZm91bmRfc3R5bGVzIGl0ZW09c3R5bGV9CiAgICAgICAgICAgIDxsaT57JHN0eWxlLm5hbWV9ICh7JG1vZC0+TGFuZygnaWQnKX06IHskc3R5bGUuaWR9KTwvbGk+CiAgICAgICAgICAgIHsvZm9yZWFjaH0KICAgICAgICA8L3VsPgogICAgICAgIHtlbHNlfQogICAgICAgIDxwPnskbW9kLT5MYW5nKCdub3NlbGVjdGlvbicpfTwvcD4KICAgICAgICB7L2lmfQogICAgPC9kaXY+CiAgICB7L2lmfQoKICAgIHtpZiAkc3RlcCA+PSA0fQogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncGFnZXMnKX08L3A+CiAgICA8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgIHtpZiAkZm91bmRfcGFnZXN8QHNpemVvZiA+IDB9CiAgICAgICAgPHVsPgogICAgICAgICAgICB7Zm9yZWFjaCBmcm9tPSRmb3VuZF9wYWdlcyBpdGVtPXBhZ2V9CiAgICAgICAgICAgIDxsaT57JHBhZ2UubmFtZX0gKHskbW9kLT5MYW5nKCdpZCcpfTogeyRwYWdlLmlkfSk8L2xpPgogICAgICAgICAgICB7L2ZvcmVhY2h9CiAgICAgICAgPC91bD4KICAgICAgICB7ZWxzZX0KICAgICAgICA8cD57JG1vZC0+TGFuZygnbm9zZWxlY3Rpb24nKX08L3A+CiAgICAgICAgey9pZn0KICAgIDwvZGl2PgogICAgey9pZn0KCiAgICB7aWYgJHN0ZXAgPj0gNX0KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ21vZHVsZXRlbXBsYXRlcycpfTwvcD4KICAgIDxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAge2lmICRmb3VuZF9tb2R1bGVzfEBzaXplb2YgPiAwfQogICAgICAgIDx1bD4KICAgICAgICAgICAge2ZvcmVhY2ggZnJvbT0kZm91bmRfbW9kdWxlcyBpdGVtPW1vZHVsZX0KICAgICAgICAgICAgPGxpPnskbW9kdWxlLm5hbWV9ICh7JG1vZC0+TGFuZygnbW9kdWxlJyl9OiB7JG1vZHVsZS5pZH0pPC9saT4KICAgICAgICAgICAgey9mb3JlYWNofQogICAgICAgIDwvdWw+CiAgICAgICAge2Vsc2V9CiAgICAgICAgPHA+eyRtb2QtPkxhbmcoJ25vc2VsZWN0aW9uJyl9PC9wPgogICAgICAgIHsvaWZ9CiAgICA8L2Rpdj4KICAgIHsvaWZ9CgogICAge2lmICRzdGVwID49IDZ9CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdnYmxzJyl9PC9wPgogICAgPGRpdiBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICB7aWYgJGZvdW5kX2Jsb2Nrc3xAc2l6ZW9mID4gMH0KICAgICAgICA8dWw+CiAgICAgICAgICAgIHtmb3JlYWNoIGZyb209JGZvdW5kX2Jsb2NrcyBpdGVtPWJsb2NrfQogICAgICAgICAgICA8bGk+eyRibG9jay5uYW1lfSAoKHskbW9kLT5MYW5nKCdpZCcpfTogeyRibG9jay5pZH0pPC9saT4KICAgICAgICAgICAgey9mb3JlYWNofQogICAgICAgIDwvdWw+CiAgICAgICAge2Vsc2V9CiAgICAgICAgPHA+eyRtb2QtPkxhbmcoJ25vc2VsZWN0aW9uJyl9PC9wPgogICAgICAgIHsvaWZ9CiAgICA8L2Rpdj4KICAgIHsvaWZ9CgogICAge2lmICRzdGVwID49IDd9CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCd1ZHRzJyl9PC9wPgogICAgPGRpdiBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICB7aWYgJGZvdW5kX3VkdHN8QHNpemVvZiA+IDB9CiAgICAgICAgPHVsPgogICAgICAgICAgICB7Zm9yZWFjaCBmcm9tPSRmb3VuZF91ZHRzIGl0ZW09dWR0fQogICAgICAgICAgICA8bGk+eyR1ZHQubmFtZX0gKCh7JG1vZC0+TGFuZygnaWQnKX06IHskdWR0LmlkfSk8L2xpPgogICAgICAgICAgICB7L2ZvcmVhY2h9CiAgICAgICAgPC91bD4KICAgICAgICB7ZWxzZX0KICAgICAgICA8cD57JG1vZC0+TGFuZygnbm9zZWxlY3Rpb24nKX08L3A+CiAgICAgICAgey9pZn0KICAgIDwvZGl2PgogICAgey9pZn0KCiAgICB7aWYgJHN0ZXAgPj0gOH0KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2ZpbGVzJyl9PC9wPgogICAgPGRpdiBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICB7aWYgJGZvdW5kX2ZpbGVzfEBzaXplb2YgPiAwfQogICAgICAgIDx1bD4KICAgICAgICAgICAge2ZvcmVhY2ggZnJvbT0kZm91bmRfZmlsZXMgaXRlbT1maWxlfQogICAgICAgICAgICA8bGk+eyRmaWxlLm5hbWV9PC9saT4KICAgICAgICAgICAgey9mb3JlYWNofQogICAgICAgIDwvdWw+CiAgICAgICAge2Vsc2V9CiAgICAgICAgPHA+eyRtb2QtPkxhbmcoJ25vc2VsZWN0aW9uJyl9PC9wPgogICAgICAgIHsvaWZ9CiAgICA8L2Rpdj4KICAgIHsvaWZ9CgogICAge2lmICRzdGVwID49IDl9CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdtb2R1bGVzZXR0aW5ncycpfTwvcD4KICAgIDxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAge2lmICRmb3VuZF9zZXR0aW5nc3xAc2l6ZW9mID4gMH0KICAgICAgICA8dWw+CiAgICAgICAgICAgIHtmb3JlYWNoIGZyb209JGZvdW5kX3NldHRpbmdzIGl0ZW09bW9kdWxlfQogICAgICAgICAgICA8bGk+eyRtb2R1bGUubmFtZX08L2xpPgogICAgICAgICAgICB7L2ZvcmVhY2h9CiAgICAgICAgPC91bD4KICAgICAgICB7ZWxzZX0KICAgICAgICA8cD57JG1vZC0+TGFuZygnbm9zZWxlY3Rpb24nKX08L3A+CiAgICAgICAgey9pZn0KICAgIDwvZGl2PgogICAgey9pZn0KCjwvZGl2PgoKeyRlbmRmb3JtfQoKe2xpdGVyYWx9CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgIC8vPCFbQ0RBVEFbCiAgICBmdW5jdGlvbiBzZWxlY3RfYWxsKCkKICAgIHsKICAgICAgICBjaGVja2JveGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7CiAgICAgICAgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3RhbGwnKTsKICAgICAgICBzdGF0ZSA9IGVsZW0uY2hlY2tlZDsKICAgICAgICBmb3IgKGk9MDsgaTxjaGVja2JveGVzLmxlbmd0aCA7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGlmIChjaGVja2JveGVzW2ldLnR5cGUgPT0gImNoZWNrYm94IikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2hlY2tib3hlc1tpXS5jaGVja2VkPXN0YXRlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgLy9dXT4KPC9zY3JpcHQ+CnsvbGl0ZXJhbH0=]]></data>
	</file>
	<file>
	  <filename>/templates/import.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPgp7JHN0YXJ0Zm9ybX0KCjxwPnskaGVscF9zZWN0aW9ufTwvcD4KCntpZiAkc3RlcCA9PSAxfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+PHN0cm9uZz57JHByb21wdF9wYWNrYWdlbmFtZX08L3N0cm9uZz4mbmJzcDt7JGlucHV0X3BhY2thZ2VuYW1lfTwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij48c3Ryb25nPnskcHJvbXB0X3BhY2thZ2V2ZXJzaW9ufTwvc3Ryb25nPiZuYnNwO3skaW5wdXRfcGFja2FnZXZlcnNpb259PC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPjxzdHJvbmc+eyRwcm9tcHRfYXV0aG9ybmFtZX08L3N0cm9uZz4mbmJzcDt7JGlucHV0X2F1dGhvcm5hbWV9PC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfbm90ZXN9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9ub3Rlc308L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij48aDM+eyRtb2QtPkxhbmcoJ3BhY2thZ2VpbmNsdWRlcycpfTo8L2gzPjwvcD4KPC9kaXY+Cgp7aWYgJGZvdW5kX3RlbXBsYXRlc3xAc2l6ZW9mID4gMH0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCd0ZW1wbGF0ZXMnKX08L3A+CiAgICB7Zm9yZWFjaCBmcm9tPSRmb3VuZF90ZW1wbGF0ZXMgaXRlbT10ZW1wbGF0ZX0KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGVtcGxhdGUudGVtcGxhdGVfbmFtZX08L3A+CiAgICB7L2ZvcmVhY2h9CjwvZGl2Pgp7L2lmfQoKe2lmICRmb3VuZF9zdHlsZXN8QHNpemVvZiA+IDB9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdzdHlsZXNoZWV0cycpfTwvcD4KICAgIHtmb3JlYWNoIGZyb209JGZvdW5kX3N0eWxlcyBpdGVtPXN0eWxlfQogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdHlsZS5jc3NfbmFtZX08L3A+CiAgICB7L2ZvcmVhY2h9CjwvZGl2Pgp7L2lmfQoKe2lmICRmb3VuZF9wYWdlc3xAc2l6ZW9mID4gMH0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3BhZ2VzJyl9PC9wPgogICAge2ZvcmVhY2ggZnJvbT0kZm91bmRfcGFnZXMgaXRlbT1wYWdlfQogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRwYWdlLmNvbnRlbnRfbmFtZX0gKHskcGFnZS5oaWVyYXJjaHlfcGF0aH0pPC9wPgogICAgey9mb3JlYWNofQo8L2Rpdj4Key9pZn0KCntpZiAkZm91bmRfbW9kdWxlc3xAc2l6ZW9mID4gMH0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ21vZHVsZXRlbXBsYXRlcycpfTwvcD4KICAgIHtmb3JlYWNoIGZyb209JGZvdW5kX21vZHVsZXMgaXRlbT1tb2R1bGVfdGVtcGxhdGV9CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JG1vZHVsZV90ZW1wbGF0ZS50ZW1wbGF0ZV9uYW1lfSAoeyRtb2R1bGVfdGVtcGxhdGUubW9kdWxlX25hbWV9KTwvcD4KICAgIHsvZm9yZWFjaH0KPC9kaXY+CnsvaWZ9Cgp7aWYgJGZvdW5kX2Jsb2Nrc3xAc2l6ZW9mID4gMH0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2dibHMnKX08L3A+CiAgICB7Zm9yZWFjaCBmcm9tPSRmb3VuZF9ibG9ja3MgaXRlbT1ibG9ja30KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskYmxvY2suaHRtbGJsb2JfbmFtZX08L3A+CiAgICB7L2ZvcmVhY2h9CjwvZGl2Pgp7L2lmfQoKe2lmICRmb3VuZF91ZHRzfEBzaXplb2YgPiAwfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygndWR0cycpfTwvcD4KICAgIHtmb3JlYWNoIGZyb209JGZvdW5kX3VkdHMgaXRlbT11ZHR9CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHVkdC51c2VycGx1Z2luX25hbWV9PC9wPgogICAgey9mb3JlYWNofQo8L2Rpdj4Key9pZn0KCntpZiAkZm91bmRfZmlsZXN8QHNpemVvZiA+IDB9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdmaWxlcycpfTwvcD4KICAgIHtmb3JlYWNoIGZyb209JGZvdW5kX2ZpbGVzIGl0ZW09ZmlsZX0KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskZmlsZS5sb2NhdGlvbn08L3A+CiAgICB7L2ZvcmVhY2h9CjwvZGl2Pgp7L2lmfQoKe2lmICRmb3VuZF9zZXR0aW5nc3xAc2l6ZW9mID4gMH0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ21vZHVsZXNldHRpbmdzJyl9PC9wPgogICAge2ZvcmVhY2ggZnJvbT0kZm91bmRfc2V0dGluZ3MgaXRlbT1zZXR0aW5nfQogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzZXR0aW5nLm1vZHVsZW5hbWV9PC9wPgogICAgey9mb3JlYWNofQo8L2Rpdj4Key9pZn0KCnsvaWZ9Cgp7aWYgJHN0ZXAgPT0gMn0KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JG1vZC0+TGFuZygncHJvbXB0X2Ntc21zdmVyc2lvbicpfSB7JGNoZWNrX2Ntc21zdmVyc2lvbn08L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF90bXN2ZXJzaW9uJyl9IHskY2hlY2tfdG1zdmVyc2lvbn08L3A+CjwvZGl2Pgp7aWYgJG1vZHVsZV92ZXJzaW9uc3xAc2l6ZW9mID4gMH0gCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8aDM+eyRtb2QtPkxhbmcoJ21vZHVsZXZlcnNpb25zJyl9PC9oMz4KCjwvZGl2Pgp7Zm9yZWFjaCBmcm9tPSRtb2R1bGVfdmVyc2lvbnMgaXRlbT1tb2R1bGV9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JG1vZHVsZS5uYW1lfSB7JG1vZHVsZS52ZXJzaW9ufSB7JG1vZHVsZS5pbmZvfTwvcD4KPC9kaXY+CnsvZm9yZWFjaH0Key9pZn0KCnsvaWZ9CgoKe2lmICRzdGVwID09IDN9Cgp7aWYgJGZvdW5kX3RlbXBsYXRlc3xAc2l6ZW9mID4gMH0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+VGVtcGxhdGVzPC9wPgogICAge2ZvcmVhY2ggZnJvbT0kZm91bmRfdGVtcGxhdGVzIGl0ZW09dGVtcGxhdGV9CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHRlbXBsYXRlLmluZm99IHskdGVtcGxhdGUudGVtcGxhdGVfbmFtZX08L3A+CiAgICB7L2ZvcmVhY2h9CjwvZGl2Pgp7L2lmfQoKe2lmICRmb3VuZF9zdHlsZXN8QHNpemVvZiA+IDB9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPlN0eWxlczwvcD4KICAgIHtmb3JlYWNoIGZyb209JGZvdW5kX3N0eWxlcyBpdGVtPXN0eWxlfQogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdHlsZS5pbmZvfSB7JHN0eWxlLmNzc19uYW1lfTwvcD4KICAgIHsvZm9yZWFjaH0KPC9kaXY+CnsvaWZ9Cgp7aWYgJGZvdW5kX3BhZ2VzfEBzaXplb2YgPiAwfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5QYWdlczwvcD4KICAgIHtmb3JlYWNoIGZyb209JGZvdW5kX3BhZ2VzIGl0ZW09cGFnZX0KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPiB7JHBhZ2UuaW5mb30geyRwYWdlLmNvbnRlbnRfbmFtZX0gKHskcGFnZS5oaWVyYXJjaHlfcGF0aH0pPC9wPgogICAgey9mb3JlYWNofQo8L2Rpdj4Key9pZn0KCntpZiAkZm91bmRfbW9kdWxlc3xAc2l6ZW9mID4gMH0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+TW9kdWxlIFRlbXBsYXRlczwvcD4KICAgIHtmb3JlYWNoIGZyb209JGZvdW5kX21vZHVsZXMgaXRlbT1tb2R1bGV9CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JG1vZHVsZS5pbmZvfSB7JG1vZHVsZS50ZW1wbGF0ZV9uYW1lfSAoeyRtb2R1bGUubW9kdWxlX25hbWV9KTwvcD4KICAgIHsvZm9yZWFjaH0KPC9kaXY+CnsvaWZ9Cgp7aWYgJGZvdW5kX2Jsb2Nrc3xAc2l6ZW9mID4gMH0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+R2xvYmFsIENvbnRlbnQgQmxvY2tzPC9wPgogICAge2ZvcmVhY2ggZnJvbT0kZm91bmRfYmxvY2tzIGl0ZW09YmxvY2t9CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGJsb2NrLmluZm99IHskYmxvY2suaHRtbGJsb2JfbmFtZX08L3A+CiAgICB7L2ZvcmVhY2h9CjwvZGl2Pgp7L2lmfQoKe2lmICRmb3VuZF91ZHRzfEBzaXplb2YgPiAwfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Vc2VyIERlZmluZWQgVGFnczwvcD4KICAgIHtmb3JlYWNoIGZyb209JGZvdW5kX3VkdHMgaXRlbT11ZHR9CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHVkdC5pbmZvfSB7JHVkdC51c2VycGx1Z2luX25hbWV9PC9wPgogICAgey9mb3JlYWNofQo8L2Rpdj4Key9pZn0KCntpZiAkZm91bmRfZmlsZXN8QHNpemVvZiA+IDB9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPkZpbGVzPC9wPgogICAge2ZvcmVhY2ggZnJvbT0kZm91bmRfZmlsZXMgaXRlbT1maWxlfQogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+IHskZmlsZS5pbmZvfSB7JGZpbGUubG9jYXRpb259PC9wPgogICAgey9mb3JlYWNofQo8L2Rpdj4Key9pZn0KCgp7L2lmfQoKCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskbmV4dHN0ZXB9eyRzdWJtaXR9PC9wPgo8L2Rpdj4KeyRlbmRmb3JtfQ==]]></data>
	</file>
	<file>
	  <filename>/ThemesMadeSimple.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTW9kdWxlOiBUaGVtZXNNYWRlU2ltcGxlIC0gTW9kdWxlIGRlc2NyaXB0aW9uIGZvbGxvd3MKIyBWZXJzaW9uOiAwLjEsIFNvZmlhIEhhdXNjaGlsZHQKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAxMCBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojIFRoaXMgZmlsZSBvcmlnaW5hbGx5IGNyZWF0ZWQgYnkgTW9kdWxlTWFrZXIgbW9kdWxlLCB2ZXJzaW9uIDAuMy4yCiMgQ29weXJpZ2h0IChjKSAyMDEwIGJ5IFNhbXVlbCBHb2xkc3RlaW4gKHNqZ0BjbXNtYWRlc2ltcGxlLm9yZykgCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKY2xhc3MgVGhlbWVzTWFkZVNpbXBsZSBleHRlbmRzIENNU01vZHVsZSB7CgogICAgZnVuY3Rpb24gR2V0TmFtZSgpIHsKICAgICAgICByZXR1cm4gJ1RoZW1lc01hZGVTaW1wbGUnOwogICAgfQoKICAgIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOwogICAgfQoKICAgIGZ1bmN0aW9uIEdldFZlcnNpb24oKSB7CiAgICAgICAgcmV0dXJuICcwLjEnOwogICAgfQoKICAgIGZ1bmN0aW9uIEdldEhlbHAoKSB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5MYW5nKCdoZWxwJyk7CiAgICB9CgogICAgZnVuY3Rpb24gR2V0QXV0aG9yKCkgewogICAgICAgIHJldHVybiAnU29maWEgSGF1c2NoaWxkdCc7CiAgICB9CgogICAgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKSB7CiAgICAgICAgcmV0dXJuICdzb2ZpYUBoYXVzY2hpbGR0Lm5ldCc7CiAgICB9CgogICAgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkgewogICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7CiAgICB9CgogICAgZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGZ1bmN0aW9uIEhhc0FkbWluKCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKCiAgICBmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICdsYXlvdXQnOwogICAgfQoKICAgIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKSB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5MYW5nKCdhZG1pbmRlc2NyaXB0aW9uJyk7CiAgICB9CgogICAgZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkgewogICAgICAgIHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgVGhlbWVzJyk7CiAgICB9CgogICAgZnVuY3Rpb24gQ2hlY2tBY2Nlc3MoJHBlcm0gPSAnTWFuYWdlIFRoZW1lcycpIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbigkcGVybSk7CiAgICB9CgogICAgZnVuY3Rpb24gRGlzcGxheUVycm9yUGFnZSgkaWQsICYkcGFyYW1zLCAkcmV0dXJuX2lkLCAkbWVzc2FnZT0nJykgewogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfZXJyb3InLCAkdGhpcy0+TGFuZygnZXJyb3InKSk7CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignbWVzc2FnZScsICRtZXNzYWdlKTsKCiAgICAgICAgLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCiAgICAgICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlcnJvci50cGwnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKSB7CiAgICAgICAgcmV0dXJuIGFycmF5KCdGaWxlTWFuYWdlcicgPT4gJzEuMC4zJyk7CiAgICB9CgogICAgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKSB7CiAgICAgICAgcmV0dXJuICIxLjkuMiI7CiAgICB9CgogICAgZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkgewogICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3R1bmluc3RhbGwnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkgewogICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygncmVhbGx5X3VuaW5zdGFsbCcpOwogICAgfQoKICAgIGZ1bmN0aW9uIG1rZGlycigkcGF0aG5hbWUsICRtb2RlID0gMDc3NykgewoKICAgICAgICBpZiAoaXNfZGlyKCRwYXRobmFtZSkgfHwgZW1wdHkoJHBhdGhuYW1lKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIGlmIChpc19maWxlKCRwYXRobmFtZSkpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDcmF3bCB1cCB0aGUgZGlyZWN0b3J5IHRyZWUKICAgICAgICAkbmV4dF9wYXRobmFtZSA9CiAgICAgICAgICAgICAgICBzdWJzdHIoJHBhdGhuYW1lLCAwLCBzdHJycG9zKCRwYXRobmFtZSwgRElSRUNUT1JZX1NFUEFSQVRPUikpOwogICAgICAgIGlmICgkdGhpcy0+bWtkaXJyKCRuZXh0X3BhdGhuYW1lLCAkbW9kZSkpIHsKICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkcGF0aG5hbWUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gQG1rZGlyKCRwYXRobmFtZSwgJG1vZGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cgp9Cgo/Pgo=]]></data>
	</file>
</module>
