<?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>CMSForms</name>
	<version>0.0.20</version>
  <mincmsversion>1.9</mincmsversion>
	<help><![CDATA[PGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgbGFuZ3VhZ2UgdG8gdXNlIGZvciBkaXNwbGF5IG9uIHRoZSBmcm9udGVuZC4gTm90IGFsbCBtb2R1bGVzIHN1cHBvcnQgb3IgbmVlZCB0aGlzLjwvbGk+PC91bD4=]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgJmx0O2N5YmVydG90b3BoZUBnbWFpbC5jb20mZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMC4wLjIwPGJyIC8+]]></about>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/CMSForms.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCglNb2R1bGU6IENNUyBGb3JtcyAtIFRoaXMgbW9kdWxlIGhlbHBzIGRldmVsb3BlcnMgdG8gaGFuZGxlIGZvcm1zIGZvciB0aGVpciBmcm9udGVuZCBvciBiYWNrZW5kIGFwcGxpY2F0aW9ucwoJCglDb3B5cmlnaHRzOiBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgLSBNb3JyaXMgJiBDaGFwbWFuIEJlbGdpdW0gLSAyMDEwIMKpCiovCgpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL2xpYi9jbGFzc2VzL0NNU0Zvcm0uY2xhc3MucGhwJzsKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9saWIvY2xhc3Nlcy9DTVNGb3JtV2lkZ2V0LmNsYXNzLnBocCc7CnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvbGliL2NsYXNzZXMvQ01TRm9ybVZhbGlkYXRvci5jbGFzcy5waHAnOwoKY2xhc3MgQ01TRm9ybXMgZXh0ZW5kcyBDTVNNb2R1bGUKewoJcHVibGljIGZ1bmN0aW9uIEdldE5hbWUoKQkJCQl7CXJldHVybiAnQ01TRm9ybXMnOwkgfQoJcHVibGljIGZ1bmN0aW9uIEdldFZlcnNpb24oKSAgICAgICAgICAgCXsgcmV0dXJuICcwLjAuMjAnOyB9CglwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yKCkgICAgICAgICAgICAJeyByZXR1cm4gJ0plYW4tQ2hyaXN0b3BoZSBDdXZlbGllcic7IH0KCXB1YmxpYyBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpICAgICAgIAl7IHJldHVybiAnY3liZXJ0b3RvcGhlQGdtYWlsLmNvbSc7IH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRsYW5nID0gYXJyYXkoCgkKCQoJCgkKCQovLyBFeGNlcHRpb25zCgonZmllbGRfaXNfZW1wdHknID0+ICdUaGUgZmllbGQgJXMgaXMgZW1wdHkuJywJCidmaWVsZF9jYW5ub3RfYmVfZW1wdHknID0+ICdUaGUgZmllbGQgIiVzIiBjYW5ub3QgYmUgZW1wdHkuJywJCid1bmtub3duIGZpZWxkJyA9PiAnVW5rbm93biBmaWVsZCAiJXMiJywKJ2ZpZWxkcyBub3QgZXF1YWwnID0+ICdUaGUgIiVzIiBhbmQgIiVzIiBoYXZlIHRvIGJlIHRoZSBzYW1lLicsCidpbnZhbGlkIGVtYWlsJyA9PiAnVGhlIGVtYWlsICZsYXF1bzslcyZyYXF1bzsgaXMgbm90IHZhbGlkLicsCidmaWVsZCBub3QgdW5pcXVlJyA9PiAnJXMgYWxyZWFkeSBleGlzdHMuJywKJ3NlbGVjdCBvbmUnID0+ICdTZWxlY3Qgb25lJywKCQoJCgkKCQoJCgkKKTs=]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/classes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/classes/CMSForm.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgkvKgoJCVRoaXMgY2xhc3MgYWltIHRvIGhhbmRsZSBDTVMgRm9ybXMgdmVyeSBkaWZmZXJlbnRseS4KCQkKCQlBdXRob3I6IEplYW4tQ2hyaXN0b3BoZSBDdXZlbGllciA8Y3liZXJ0b3RvcGhlQGdtYWlsLmNvbT4KCQlDb3B5cmlnaHRzOiBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgLSBNb3JyaXMgJiBDaGFwbWFuIEJlbGdpdW0gLSAyMDEwCgkJTGljZW5jZTogR1BMCQkKCQoJKi8KCmNsYXNzIENNU0Zvcm0JZXh0ZW5kcwlDbXNPYmplY3QKewoJCglwcm90ZWN0ZWQgJG1vZHVsZV9uYW1lOwoJcHJvdGVjdGVkICRpZDsgLy8gVGhlIGZvcm0gSUQKCXByb3RlY3RlZCAkcmV0dXJuaWQ7Cglwcm90ZWN0ZWQgJGFjdGlvbjsJCglwcm90ZWN0ZWQgJG1ldGhvZCA9ICdnZXQnOwoJcHJvdGVjdGVkICRlbmN0eXBlOwoJCglwcm90ZWN0ZWQgJHdpZGdldHMgPSBhcnJheSgpOyAvLyBUaGUgZm9ybSB3aWRnZXRzCglwcm90ZWN0ZWQgJGhpZGRlbl93aWRnZXRzID0gYXJyYXkoKTsgLy8gU3BlY2lmaWMgd2lkZ2V0cyBzaG93biBvbiB0aGUgYmVnaW47Cglwcm90ZWN0ZWQgJGZpZWxkc2V0cyA9IGFycmF5KCk7IC8vIFN1YiBmb3JtcyBmb3IgZmllbGRzZXRzCgkKCXByb3RlY3RlZCAkbGFiZWxzID0gYXJyYXkoCgkJJ3N1Ym1pdCcgPT4gJ1N1Ym1pdCcsCgkJJ2FwcGx5JyA9PiAnQXBwbHknLAoJCSdjYW5jZWwnID0+ICdDYW5jZWwnLAoJCSduZXh0JyA9PiAnTmV4dCcsCgkJJ3ByZXZpb3VzJyA9PiAnUHJldmlvdXMnCgkJKTsKCQkKCXByb3RlY3RlZCAkYWN0aXZlX2J1dHRvbnMgPSBhcnJheSgnc3VibWl0JywnY2FuY2VsJyk7Cglwcm90ZWN0ZWQgJGZvcm1fZXJyb3JzID0gYXJyYXkoKTsgCglwcm90ZWN0ZWQgJHNob3dfcHJpb3JpdHkgPSBmYWxzZTsKCQoJcHJvdGVjdGVkICR0ZW1wbGF0ZXMgPSBhcnJheSgKCQknd2lkZ2V0JyA9PiAnPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJPGRpdiBjbGFzcz0icGFnZXRleHQiPiVMQUJFTCU6PC9kaXY+CgkJCTxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+JUlOUFVUJSA8ZW0+JVRJUFMlPC9lbT48L2Rpdj4KCQkJPGRpdiBjbGFzcz0icGFnZWlucHV0IiBzdHlsZT0iY29sb3I6IHJlZDsiPiVFUlJPUlMlPC9kaXY+CgkJPC9kaXY+JywKCQknZXJyb3JzJyA9PiAnPGRpdiBzdHlsZT0iY29sb3I6IHJlZDsiPiVFUlJPUlMlPC9kaXY+JywKCQknYnV0dG9ucycgPT4gJzxwPiVCVVRUT05TJTwvcD4nCgkJKTsKCQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtb2R1bGVfbmFtZSwgJGlkLCAkYWN0aW9uLCAkcmV0dXJuaWQpCgl7CgkJJHRoaXMtPm1vZHVsZV9uYW1lID0gJG1vZHVsZV9uYW1lOwoJCSR0aGlzLT5pZCA9ICRpZDsKCQkkdGhpcy0+cmV0dXJuaWQgPSAkcmV0dXJuaWQ7CgkJJHRoaXMtPmFjdGlvbiA9ICRhY3Rpb247Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBzZXRNZXRob2QoJG1ldGhvZCA9ICdnZXQnKQoJewoJCWlmICgkbWV0aG9kID09ICdwb3N0JykKCQl7CgkJCSR0aGlzLT5tZXRob2QgPSAncG9zdCc7CgkJfQoJfQoJCglwdWJsaWMgZnVuY3Rpb24gc2V0TXVsdGlwYXJ0Rm9ybSgpCgl7CgkJJHRoaXMtPm1ldGhvZCA9ICdwb3N0JzsKCQkkdGhpcy0+ZW5jdHlwZSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhJzsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIHByb2Nlc3MoKQoJewoJCWZvcmVhY2goJHRoaXMtPndpZGdldHMgYXMgJHdpZGdldCkKCQl7CgkJCSR3aWRnZXQtPnByb2Nlc3MoKTsKCQl9CgkJCgkJZm9yZWFjaCgkdGhpcy0+aGlkZGVuX3dpZGdldHMgYXMgJHdpZGdldCkKCQl7CgkJCSR3aWRnZXQtPnByb2Nlc3MoKTsKCQl9CQkKCQkKCQlmb3JlYWNoKCR0aGlzLT5maWVsZHNldHMgYXMgJGZpZWxkc2V0KQoJCXsKCQkJJGZpZWxkc2V0LT5wcm9jZXNzKCk7CgkJfQoJfQoJCglwdWJsaWMgZnVuY3Rpb24gcmVuZGVyKCkKCXsJCgkJLy8gVE9ETzogTE9BRCBURU1QTEFURSBGUk9NIEZJTEUuLi4KCQkkdGVtcGxhdGUgPSBmaWxlX2dldF9jb250ZW50cyhkaXJuYW1lKGRpcm5hbWUoZGlybmFtZShfX0ZJTEVfXykpKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAndGVtcGxhdGVzJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnYWRtaW4uZm9ybS50cGwnKTsKCQkKCQkkc21hcnR5ID0gbmV3IFNtYXJ0eSgpOwoJCSRzbWFydHktPmFzc2lnbignZm9ybScsICR0aGlzKTsJCQoJCSRzbWFydHktPl9jb21waWxlX3NvdXJjZSgndGVtcG9yYXJ5IHRlbXBsYXRlJywgJHRlbXBsYXRlLCAkX2NvbXBpbGVkICk7CgkJQG9iX3N0YXJ0KCk7CgkJJHNtYXJ0eS0+X2V2YWwoJz8+JyAuICRfY29tcGlsZWQpOwoJCSRfY29udGVudHMgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7CgkJQG9iX2VuZF9jbGVhbigpOwoJCXJldHVybiAkX2NvbnRlbnRzOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gc2V0VGVtcGxhdGUoJHRlbXBsYXRlX25hbWUsICR0ZW1wbGF0ZSkKCXsKCQkkdGhpcy0+dGVtcGxhdGVzWyR0ZW1wbGF0ZV9uYW1lXSA9ICR0ZW1wbGF0ZTsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGdldEhlYWRlcnMoKQoJewoJCWdsb2JhbCAkZ0NtczsKCQlpZiAoaXNzZXQoJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10pKQoJCXsJCQkKCQkJJGh0bWwgPSAkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXS0+Q3JlYXRlRm9ybVN0YXJ0KCR0aGlzLT5pZCwgJHRoaXMtPmFjdGlvbiwgJHRoaXMtPnJldHVybmlkLCAkdGhpcy0+bWV0aG9kLCAkdGhpcy0+ZW5jdHlwZSk7CgkJCWZvcmVhY2goJHRoaXMtPmhpZGRlbl93aWRnZXRzIGFzICR3aWRnZXQpCgkJCXsKCQkJCSRodG1sIC49ICR3aWRnZXQtPmdldElucHV0KCk7CgkJCX0JCQkKCQkJcmV0dXJuICRodG1sOwoJCX0KCQlyZXR1cm4gbnVsbDsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGdldEZvb3RlcnMoKQoJewoJCWdsb2JhbCAkZ0NtczsKCQlpZiAoaXNzZXQoJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10pKQoJCXsJCQkKCQkJJGh0bWwgPSAkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXS0+Q3JlYXRlRm9ybUVuZCgpOwoJCQlyZXR1cm4gJGh0bWw7CgkJfQoJCXJldHVybiBudWxsOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gc2V0TGFiZWwoJGxhYmVsLCAkdGl0bGUpCgl7CgkJJHRoaXMtPmxhYmVsc1skbGFiZWxdID0gJHRpdGxlOwoJfQoJCgkKCXB1YmxpYyBmdW5jdGlvbiBzZXRCdXR0b25zKCRidXR0b25zID0gYXJyYXkoKSkKCXsKCQlpZiAoaXNfYXJyYXkoJGJ1dHRvbnMpKQkkdGhpcy0+YWN0aXZlX2J1dHRvbnMgPSAkYnV0dG9uczsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGdldEJ1dHRvbnMoKQoJewoJCWdsb2JhbCAkZ0NtczsKCQkkaHRtbCA9ICcnOwoJCWZvcmVhY2goJHRoaXMtPmFjdGl2ZV9idXR0b25zIGFzICRidXR0b24pCgkJewoJCQkkaHRtbCAuPSAkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXS0+Q3JlYXRlSW5wdXRTdWJtaXQoJHRoaXMtPmlkLCAkYnV0dG9uLCAkdGhpcy0+bGFiZWxzWyRidXR0b25dKTsKCQl9CgkJCgkJcmV0dXJuICRodG1sOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gc2V0V2lkZ2V0KCRuYW1lLCR0eXBlLCRzZXR0aW5ncyA9IGFycmF5KCkpCgl7CgkJJHdpZGdldCA9IG5ldyBDTVNGb3JtV2lkZ2V0KCR0aGlzLCR0aGlzLT5pZCwkdGhpcy0+bW9kdWxlX25hbWUsJG5hbWUsJHR5cGUsJHNldHRpbmdzKTsKCQlpZiAoJHR5cGUgPT0gJ2hpZGRlbicpCgkJewoJCQkkdGhpcy0+aGlkZGVuX3dpZGdldHNbJG5hbWVdID0gJHdpZGdldDsKCQl9CgkJZWxzZWlmICgkdHlwZSA9PSAnZmlsZScpCgkJewoJCQkkdGhpcy0+c2V0TXVsdGlwYXJ0Rm9ybSgpOyAvLyBJZiB3ZSBhZGQgZmlsZXMsIHdlIGhhdmUgdG8gYmUgcG9zdGVkIG11bHRpcGFydCBmb3Jtcy4uLgoJCQkkdGhpcy0+d2lkZ2V0c1skbmFtZV0gPSAkd2lkZ2V0OwoJCX0JCQoJCWVsc2VpZiAoJHR5cGUgPT0gJ3Bhc3N3b3JkJykKCQl7CgkJCSR0aGlzLT5zZXRNZXRob2QoJ3Bvc3QnKTsgLy8gSWYgd2UgYXNrIHBhc3N3b3JkLCB3ZSBzaG91bGQgYWx3YXlzIHBvc3QgdGhlIGZvcm0gZm9yIHNlY3VyaXR5IHJlYXNvbiAhCgkJCSR0aGlzLT53aWRnZXRzWyRuYW1lXSA9ICR3aWRnZXQ7CgkJfQkJCgkJZWxzZWlmICgoJHR5cGUgPT0gJ3RleHRhcmVhJykgfHwgKCR0eXBlID09ICdjb2RlYXJlYScpKQoJCXsgCgkJCSR0aGlzLT5zZXRNZXRob2QoJ3Bvc3QnKTsgLy8gSWYgd2UgYXNrIHBhc3N3b3JkLCB3ZSBzaG91bGQgYWx3YXlzIHBvc3QgdGhlIGZvcm0gZm9yIHNlY3VyaXR5IHJlYXNvbiAhCgkJCSR0aGlzLT53aWRnZXRzWyRuYW1lXSA9ICR3aWRnZXQ7CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT53aWRnZXRzWyRuYW1lXSA9ICR3aWRnZXQ7CgkJfQoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0V2lkZ2V0cygpCgl7CgkJcmV0dXJuICR0aGlzLT53aWRnZXRzOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0V2lkZ2V0KCRuYW1lKQoJewoJCWlmIChpc3NldCgkdGhpcy0+d2lkZ2V0c1skbmFtZV0pKQoJCXsKCQkJcmV0dXJuICR0aGlzLT53aWRnZXRzWyRuYW1lXTsKCQl9CgkJZWxzZWlmIChpc3NldCgkdGhpcy0+aGlkZGVuX3dpZGdldHNbJG5hbWVdKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+aGlkZGVuX3dpZGdldHNbJG5hbWVdOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gbnVsbDsKCQl9Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBzaG93V2lkZ2V0cygkdGVtcGxhdGU9bnVsbCkKCXsKCQkkaHRtbCA9ICcnOwkKCQlmb3JlYWNoKCR0aGlzLT53aWRnZXRzIGFzICR3aWRnZXQpCgkJewoJCQkkaHRtbCAuPSAkd2lkZ2V0LT5zaG93KCR0ZW1wbGF0ZSk7CgkJfQoJCXJldHVybiAkaHRtbDsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGhhc0Vycm9ycygpCgl7CgkJJGhhc19lcnJvcnMgPSBmYWxzZTsKCQkKCQlmb3JlYWNoKCR0aGlzLT53aWRnZXRzIGFzICR3aWRnZXQpCgkJewoJCQlpZigkd2lkZ2V0LT5oYXNFcnJvcnMoKSkKCQkJewoJCQkJJGhhc19lcnJvcnMgPSB0cnVlOwoJCQl9CgkJfQoJCQoJCWZvcmVhY2goJHRoaXMtPmhpZGRlbl93aWRnZXRzIGFzICR3aWRnZXQpCgkJewoJCQlpZigkd2lkZ2V0LT5oYXNFcnJvcnMoKSkKCQkJewoJCQkJJGhhc19lcnJvcnMgPSB0cnVlOwoJCQl9CgkJfQoJCQoJCWZvcmVhY2goJHRoaXMtPmZpZWxkc2V0cyBhcyAkZmllbGRzZXQpCgkJewoJCQlpZigkZmllbGRzZXQtPmhhc0Vycm9ycygpKQoJCQl7CgkJCQkkaGFzX2Vycm9ycyA9IHRydWU7CgkJCX0KCQl9CgkJCgkJaWYgKGNvdW50KCR0aGlzLT5mb3JtX2Vycm9ycykgIT0gMCkKCQl7CgkJCSRoYXNfZXJyb3JzID0gdHJ1ZTsKCQl9CgkJCgkJcmV0dXJuICRoYXNfZXJyb3JzOyAKCX0KCQoJcHVibGljIGZ1bmN0aW9uIG5vRXJyb3IoKQoJewoJCXJldHVybiAhJHRoaXMtPmhhc0Vycm9ycygpOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JzKCkKCXsKCQlyZXR1cm4gJHRoaXMtPmZvcm1fZXJyb3JzOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gc2hvd0Vycm9ycygpCgl7CgkJJGh0bWwgPSAnJzsKCQlpZihjb3VudCgkdGhpcy0+Zm9ybV9lcnJvcnMpID4gMCkKCQl7CgkJCSRodG1sIC49ICc8dWwgY2xhc3M9ImVycm9ycyI+JzsKCQkJZm9yZWFjaCgkdGhpcy0+Zm9ybV9lcnJvcnMgYXMgJHByaW9yaXR5ID0+ICRlcnJvcnMpCgkJCXsKCQkJCSRodG1sIC49ICc8bGk+JzsKCQkJCWlmICgkdGhpcy0+c2hvd19wcmlvcml0eSkJJGh0bWwgLj0gJzxlbSBjbGFzcz0iZm9ybV9lcnJvcl9wcmlvcml0eSI+Jy4kcHJpb3JpdHkuJzwvZW0+JzsKCQkJCSRodG1sIC49ICc8dWw+JzsKCQkJCWZvcmVhY2goJGVycm9ycyBhcyAkZXJyb3IpCgkJCQl7CgkJCQkJJGh0bWwgLj0gJzxsaT4nLiRlcnJvci4nPC9saT4nOwoJCQkJfQkJCQkKCQkJCSRodG1sIC49ICc8L3VsPjwvbGk+JzsKCQkJfQoJCQkkaHRtbCAuPSAnPC91bD4nOwoJCX0KCQlyZXR1cm4gJGh0bWw7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBzZXRFcnJvcigkbWVzc2FnZSwkcHJpb3JpdHk9J2RlZmF1bHQnKQoJewoJCSR0aGlzLT5mb3JtX2Vycm9yc1skcHJpb3JpdHldW10gPSAkbWVzc2FnZTsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGlzU3VibWl0dGVkKCkKCXsKCQlpZiAoaXNzZXQoJF9SRVFVRVNUWyR0aGlzLT5pZC4nc3VibWl0J10pKQoJCXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGlzQXBwbGllZCgpCgl7CgkJaWYgKGlzc2V0KCRfUkVRVUVTVFskdGhpcy0+aWQuJ2FwcGx5J10pKQoJCXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0JCgkKCXB1YmxpYyBmdW5jdGlvbiBpc0NhbmNlbGxlZCgpCgl7CgkJaWYgKGlzc2V0KCRfUkVRVUVTVFskdGhpcy0+aWQuJ2NhbmNlbCddKSkKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGlzUG9zdGVkKCkKCXsKCQkvLyBBZGQgY2hlY2sgZm9yIG5leHQgYW5kIHByZXZpb3VzCgkJaWYgKCR0aGlzLT5pc1N1Ym1pdHRlZCgpIHx8ICR0aGlzLT5pc0FwcGxpZWQoKSkKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBpc1B1c2hlZCgkYnV0dG9uKQoJewoJCWlmIChpc3NldCgkX1JFUVVFU1RbJHRoaXMtPmlkLiRidXR0b25dKSkKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBpc1NlbnQoKQoJewoJCQlmb3JlYWNoKCR0aGlzLT5hY3RpdmVfYnV0dG9ucyBhcyAkYnV0dG9uKQoJCQl7CgkJCQkJaWYgKGlzc2V0KCRfUkVRVUVTVFskdGhpcy0+aWQuJGJ1dHRvbl0pKQoJCQkJCXsKCQkJCQkJcmV0dXJuIHRydWU7CgkJCQkJfQoJCQl9CgkJCQoJCQlyZXR1cm4gZmFsc2U7Cgl9CgkKCQoJCglwdWJsaWMgZnVuY3Rpb24gc2V0RmllbGRzZXQoJGxlZ2VuZCkKCXsKCQkkdGhpcy0+ZmllbGRzZXRzWyRsZWdlbmRdID0gbmV3IENNU0Zvcm1GaWVsZHNldCgkdGhpcywkbGVnZW5kKTsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGdldEZpZWxkc2V0KCRsZWdlbmQpCgl7CgkJaWYgKGlzc2V0KCR0aGlzLT5maWVsZHNldHNbJGxlZ2VuZF0pKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5maWVsZHNldHNbJGxlZ2VuZF07CgkJfQoJCXJldHVybiBudWxsOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gcmVuZGVyRmllbGRzZXRzKCR3aWRnZXRfdGVtcGxhdGUgPSBudWxsKQoJewoJCSRodG1sID0gJyc7CgkJZm9yZWFjaCgkdGhpcy0+ZmllbGRzZXRzIGFzICRmaWVsZHNldCkKCQl7CgkJCSRodG1sIC49ICRmaWVsZHNldC0+cmVuZGVyKCR3aWRnZXRfdGVtcGxhdGUpOwoJCX0KCQlyZXR1cm4gJGh0bWw7Cgl9CgkKfQoKY2xhc3MgQ01TRm9ybUZpZWxkc2V0IGV4dGVuZHMgQ01TRm9ybQp7Cglwcm90ZWN0ZWQgJHBhcmVudF9mb3JtOwoJcHJvdGVjdGVkICRsZWdlbmQ7CgkKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZm9ybSwgJGxlZ2VuZCkKCXsKCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCRmb3JtLT5tb2R1bGVfbmFtZSwgJGZvcm0tPmlkLCAkZm9ybS0+YWN0aW9uLCAkZm9ybS0+cmV0dXJuaWQpOwoJCSR0aGlzLT5sZWdlbmQgPSAkbGVnZW5kOwoJCSR0aGlzLT5wYXJlbnRfZm9ybSA9JiAkZm9ybTsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIHJlbmRlcigkd2lkZ2V0X3RlbXBsYXRlPW51bGwpCgl7CgkJJGh0bWwgPSAnPGZpZWxkc2V0PjxsZWdlbmQ+Jy4kdGhpcy0+bGVnZW5kLic8L2xlZ2VuZD4nOwoJCSRodG1sIC49ICR0aGlzLT5zaG93V2lkZ2V0cygkd2lkZ2V0X3RlbXBsYXRlKTsKCQkkaHRtbCAuPSAnPC9maWVsZHNldD4nOwoJCXJldHVybiAkaHRtbDsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIHNldFdpZGdldCgkbmFtZSwkdHlwZSwkc2V0dGluZ3MgPSBhcnJheSgpKQoJewoJCWlmICgkdHlwZSA9PSAnZmlsZScpCgkJewoJCQkkdGhpcy0+cGFyZW50X2Zvcm0tPnNldE11bHRpcGFydEZvcm0oKTsKCQl9CgkJcGFyZW50OjpzZXRXaWRnZXQoJG5hbWUsJHR5cGUsJHNldHRpbmdzKTsKCX0KCQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/classes/CMSFormValidator.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgkvKgoJCVRoaXMgY2xhc3MgYWltIHRvIGhhbmRsZSBDTVMgRm9ybXMgdmVyeSBkaWZmZXJlbnRseS4KCQkKCQlBdXRob3I6IEplYW4tQ2hyaXN0b3BoZSBDdXZlbGllciA8Y3liZXJ0b3RvcGhlQGdtYWlsLmNvbT4KCQlDb3B5cmlnaHRzOiBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgLSBNb3JyaXMgJiBDaGFwbWFuIEJlbGdpdW0gLSAyMDEwCgkJTGljZW5jZTogR1BMCQkKCQoJKi8KCQpjbGFzcyBDTVNGb3JtVmFsaWRhdG9yCnsKCXByb3RlY3RlZCAkd2lkZ2V0OwoJcHJvdGVjdGVkICR2YWxpZGF0b3I7Cglwcm90ZWN0ZWQgJHBhcmFtczsKCQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCYkd2lkZ2V0LCR2YWxpZGF0b3IsJHBhcmFtcykKCXsKCQkkdGhpcy0+d2lkZ2V0ID0gJHdpZGdldDsKCQkkdGhpcy0+dmFsaWRhdG9yID0gJHZhbGlkYXRvcjsKCQkkdGhpcy0+cGFyYW1zID0gJHBhcmFtczsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGNoZWNrKCkKCXsKCQlzd2l0Y2goJHRoaXMtPnZhbGlkYXRvcikKCQl7CgkJCWNhc2UgJ25vdF9lbXB0eSc6CgkJCQlyZXR1cm4gJHRoaXMtPkNoZWNrTm90RW1wdHkoKTsKCQkJY2FzZSAnZXF1YWxfZmllbGQnOgoJCQkJcmV0dXJuICR0aGlzLT5DaGVja0VxdWFsRmllbGQoKTsKCQkJY2FzZSAnZW1haWwnOgoJCQkJcmV0dXJuICR0aGlzLT5DaGVja0VtYWlsKCk7CgkJCWNhc2UgJ3VuaXF1ZSc6CgkJCQlyZXR1cm4gJHRoaXMtPkNoZWNrVW5pcXVlKCk7CgkJCWRlZmF1bHQ6CgkJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIGZvcm0gdmFsaWRhdG9yICInLiR0aGlzLT52YWxpZGF0b3IgLiciLicpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCQoJcHJvdGVjdGVkIGZ1bmN0aW9uIENoZWNrVW5pcXVlKCkKCXsKCQkkdmFsdWUgPSAkdGhpcy0+d2lkZ2V0LT5nZXRWYWx1ZSgpOwoJCWlmIChjYWxsX3VzZXJfZnVuYygkdGhpcy0+cGFyYW1zLCAkdmFsdWUpICE9PSBudWxsKQoJCXsKCQkJZ2xvYmFsICRnQ21zOwoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCRnQ21zLT5tb2R1bGVzWydDTVNGb3JtcyddWydvYmplY3QnXS0+bGFuZygnZmllbGQgbm90IHVuaXF1ZScsICR2YWx1ZSkpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCQoJcHJvdGVjdGVkIGZ1bmN0aW9uIENoZWNrTm90RW1wdHkoKQoJewkKCQlnbG9iYWwgJGdDbXM7CgkJJHZhbHVlcyA9ICR0aGlzLT53aWRnZXQtPmdldFZhbHVlcygpOwoJCSR2YWx1ZSA9ICR0aGlzLT53aWRnZXQtPmdldFZhbHVlKCk7CgkJaWYgKGlzX2FycmF5KCR2YWx1ZXMpICYmIGNvdW50KCR2YWx1ZXMpID09IDApCgkJewoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCRnQ21zLT5tb2R1bGVzWydDTVNGb3JtcyddWydvYmplY3QnXS0+bGFuZygnZmllbGRfY2Fubm90X2JlX2VtcHR5JywgJHRoaXMtPndpZGdldC0+Z2V0RnJpZW5kbHlOYW1lKCkpKTsKCQl9CgkJZWxzZWlmKGVtcHR5KCR2YWx1ZXMpKQoJCXsKCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigkZ0Ntcy0+bW9kdWxlc1snQ01TRm9ybXMnXVsnb2JqZWN0J10tPmxhbmcoJ2ZpZWxkX2Nhbm5vdF9iZV9lbXB0eScsICR0aGlzLT53aWRnZXQtPmdldEZyaWVuZGx5TmFtZSgpKSk7CgkJfQoJCWVsc2VpZihlbXB0eSgkdmFsdWUpKQoJCXsKCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigkZ0Ntcy0+bW9kdWxlc1snQ01TRm9ybXMnXVsnb2JqZWN0J10tPmxhbmcoJ2ZpZWxkX2Nhbm5vdF9iZV9lbXB0eScsICR0aGlzLT53aWRnZXQtPmdldEZyaWVuZGx5TmFtZSgpKSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoJCglwcm90ZWN0ZWQgZnVuY3Rpb24gQ2hlY2tFcXVhbEZpZWxkKCkKCXsKCQlnbG9iYWwgJGdDbXM7CgkJCSR2YWx1ZTEgPSBzZXJpYWxpemUoJHRoaXMtPndpZGdldC0+Z2V0VmFsdWVzKCkpOwoJCQkKCQkJdHJ5CgkJCXsKCQkJCSR2YWx1ZTIgPSBzZXJpYWxpemUoJHRoaXMtPndpZGdldC0+Z2V0Rm9ybSgpLT5nZXRXaWRnZXQoJHRoaXMtPnBhcmFtcyktPmdldFZhbHVlcygpKTsKCQkJfQoJCQljYXRjaChFeGNlcHRpb24gJGUpCgkJCXsKCQkJCXRocm93IG5ldyBFeGNlcHRpb24oJGdDbXMtPm1vZHVsZXNbJ0NNU0Zvcm1zJ11bJ29iamVjdCddLT5sYW5nKCd1bmtub3duIGZpZWxkJywgJHRoaXMtPnBhcmFtcykpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCQoJCQlpZiAoJHZhbHVlMSAhPSAkdmFsdWUyKQoJCQl7CgkJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCRnQ21zLT5tb2R1bGVzWydDTVNGb3JtcyddWydvYmplY3QnXS0+bGFuZygnZmllbGRzIG5vdCBlcXVhbCcsICR0aGlzLT53aWRnZXQtPmdldEZyaWVuZGx5TmFtZSgpLCAkdGhpcy0+d2lkZ2V0LT5nZXRGb3JtKCktPmdldFdpZGdldCgkdGhpcy0+cGFyYW1zKS0+Z2V0RnJpZW5kbHlOYW1lKCkpKTsKCQkJfQoJCQkKCQkJcmV0dXJuIHRydWU7CgkJCgl9CgkKCXByb3RlY3RlZCBmdW5jdGlvbiBDaGVja0VtYWlsKCkKCXsKCQkkZW1haWwgPSBpbXBsb2RlKCd8JywgJHRoaXMtPndpZGdldC0+Z2V0VmFsdWVzKCkpOwoJCWlmICghc2VsZjo6dmFsaWRFbWFpbCgkZW1haWwpKQoJCXsKCQkJZ2xvYmFsICRnQ21zOwoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCRnQ21zLT5tb2R1bGVzWydDTVNGb3JtcyddWydvYmplY3QnXS0+bGFuZygnaW52YWxpZCBlbWFpbCcsICRlbWFpbCkpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCS8vIEV4dGVybmFsIGZ1bmN0aW9ucwoJLyoqCglWYWxpZGF0ZSBhbiBlbWFpbCBhZGRyZXNzLgoJUHJvdmlkZSBlbWFpbCBhZGRyZXNzIChyYXcgaW5wdXQpCglSZXR1cm5zIHRydWUgaWYgdGhlIGVtYWlsIGFkZHJlc3MgaGFzIHRoZSBlbWFpbCAKCWFkZHJlc3MgZm9ybWF0IGFuZCB0aGUgZG9tYWluIGV4aXN0cy4KCSovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHZhbGlkRW1haWwoJGVtYWlsKQoJewoJICAgJGlzVmFsaWQgPSB0cnVlOwoJICAgJGF0SW5kZXggPSBzdHJycG9zKCRlbWFpbCwgIkAiKTsKCSAgIGlmIChpc19ib29sKCRhdEluZGV4KSAmJiAhJGF0SW5kZXgpCgkgICB7CgkgICAgICAkaXNWYWxpZCA9IGZhbHNlOwoJICAgfQoJICAgZWxzZQoJICAgewoJICAgICAgJGRvbWFpbiA9IHN1YnN0cigkZW1haWwsICRhdEluZGV4KzEpOwoJICAgICAgJGxvY2FsID0gc3Vic3RyKCRlbWFpbCwgMCwgJGF0SW5kZXgpOwoJICAgICAgJGxvY2FsTGVuID0gc3RybGVuKCRsb2NhbCk7CgkgICAgICAkZG9tYWluTGVuID0gc3RybGVuKCRkb21haW4pOwoJICAgICAgaWYgKCRsb2NhbExlbiA8IDEgfHwgJGxvY2FsTGVuID4gNjQpCgkgICAgICB7CgkgICAgICAgICAvLyBsb2NhbCBwYXJ0IGxlbmd0aCBleGNlZWRlZAoJICAgICAgICAgJGlzVmFsaWQgPSBmYWxzZTsKCSAgICAgIH0KCSAgICAgIGVsc2UgaWYgKCRkb21haW5MZW4gPCAxIHx8ICRkb21haW5MZW4gPiAyNTUpCgkgICAgICB7CgkgICAgICAgICAvLyBkb21haW4gcGFydCBsZW5ndGggZXhjZWVkZWQKCSAgICAgICAgICRpc1ZhbGlkID0gZmFsc2U7CgkgICAgICB9CgkgICAgICBlbHNlIGlmICgkbG9jYWxbMF0gPT0gJy4nIHx8ICRsb2NhbFskbG9jYWxMZW4tMV0gPT0gJy4nKQoJICAgICAgewoJICAgICAgICAgLy8gbG9jYWwgcGFydCBzdGFydHMgb3IgZW5kcyB3aXRoICcuJwoJICAgICAgICAgJGlzVmFsaWQgPSBmYWxzZTsKCSAgICAgIH0KCSAgICAgIGVsc2UgaWYgKHByZWdfbWF0Y2goJy9cXC5cXC4vJywgJGxvY2FsKSkKCSAgICAgIHsKCSAgICAgICAgIC8vIGxvY2FsIHBhcnQgaGFzIHR3byBjb25zZWN1dGl2ZSBkb3RzCgkgICAgICAgICAkaXNWYWxpZCA9IGZhbHNlOwoJICAgICAgfQoJICAgICAgZWxzZSBpZiAoIXByZWdfbWF0Y2goJy9eW0EtWmEtejAtOVxcLVxcLl0rJC8nLCAkZG9tYWluKSkKCSAgICAgIHsKCSAgICAgICAgIC8vIGNoYXJhY3RlciBub3QgdmFsaWQgaW4gZG9tYWluIHBhcnQKCSAgICAgICAgICRpc1ZhbGlkID0gZmFsc2U7CgkgICAgICB9CgkgICAgICBlbHNlIGlmIChwcmVnX21hdGNoKCcvXFwuXFwuLycsICRkb21haW4pKQoJICAgICAgewoJICAgICAgICAgLy8gZG9tYWluIHBhcnQgaGFzIHR3byBjb25zZWN1dGl2ZSBkb3RzCgkgICAgICAgICAkaXNWYWxpZCA9IGZhbHNlOwoJICAgICAgfQoJICAgICAgZWxzZSBpZgoJKCFwcmVnX21hdGNoKCcvXihcXFxcLnxbQS1aYS16MC05ISMlJmBfPVxcLyRcJyorP157fXx+Li1dKSskLycsCgkgICAgICAgICAgICAgICAgIHN0cl9yZXBsYWNlKCJcXFxcIiwiIiwkbG9jYWwpKSkKCSAgICAgIHsKCSAgICAgICAgIC8vIGNoYXJhY3RlciBub3QgdmFsaWQgaW4gbG9jYWwgcGFydCB1bmxlc3MgCgkgICAgICAgICAvLyBsb2NhbCBwYXJ0IGlzIHF1b3RlZAoJICAgICAgICAgaWYgKCFwcmVnX21hdGNoKCcvXiIoXFxcXCJ8W14iXSkrIiQvJywKCSAgICAgICAgICAgICBzdHJfcmVwbGFjZSgiXFxcXCIsIiIsJGxvY2FsKSkpCgkgICAgICAgICB7CgkgICAgICAgICAgICAkaXNWYWxpZCA9IGZhbHNlOwoJICAgICAgICAgfQoJICAgICAgfQoJICAgICAgaWYgKCRpc1ZhbGlkICYmICEoY2hlY2tkbnNycigkZG9tYWluLCJNWCIpIHx8IAoJIGNoZWNrZG5zcnIoJGRvbWFpbiwiQSIpKSkKCSAgICAgIHsKCSAgICAgICAgIC8vIGRvbWFpbiBub3QgZm91bmQgaW4gRE5TCgkgICAgICAgICAkaXNWYWxpZCA9IGZhbHNlOwoJICAgICAgfQoJICAgfQoJICAgcmV0dXJuICRpc1ZhbGlkOwoJfQp9]]></data>
	</file>
	<file>
	  <filename>/lib/classes/CMSFormWidget.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgkvKgoJCVRoaXMgY2xhc3MgYWltIHRvIGhhbmRsZSBDTVMgRm9ybXMgdmVyeSBkaWZmZXJlbnRseS4KCQkKCQlBdXRob3I6IEplYW4tQ2hyaXN0b3BoZSBDdXZlbGllciA8Y3liZXJ0b3RvcGhlQGdtYWlsLmNvbT4KCQlDb3B5cmlnaHRzOiBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgLSBNb3JyaXMgJiBDaGFwbWFuIEJlbGdpdW0gLSAyMDEwCgkJTGljZW5jZTogR1BMCQkKCQoJKi8KCmNsYXNzIENNU0Zvcm1XaWRnZXQJZXh0ZW5kcyBDbXNPYmplY3QKewoJLy8gU2V0dGluZ3MKCXByb3RlY3RlZCAkaWQ7IC8vIFRoZSBmb3JtIElECglwcm90ZWN0ZWQgJG1vZHVsZV9uYW1lOwoJcHJvdGVjdGVkICRuYW1lOyAvLyBUaGUgaW5wdXQgbmFtZQoJcHJvdGVjdGVkICR0eXBlOwoJcHJvdGVjdGVkICRpbnB1dDsKCXByb3RlY3RlZCAkdmFsdWVzID0gYXJyYXkoKTsKCXByb3RlY3RlZCAkc2V0dGluZ3MgPSBhcnJheSgpOwoJcHJvdGVjdGVkICRmb3JtX2Vycm9yczsKCXByb3RlY3RlZCAkc2hvd19wcmlvcml0eSA9IGZhbHNlOwovLwlwcm90ZWN0ZWQgJHZhbGlkYXRpb25zID0gYXJyYXkoKTsKCXByb3RlY3RlZCAkc2hvd25lZCA9IGZhbHNlOwoJcHJvdGVjdGVkICRmb3JtOwoJCglwcm90ZWN0ZWQgJGlzX3ZhbGlkID0gdHJ1ZTsKCQoJcHVibGljIHN0YXRpYyAkZmllbGRzID0gYXJyYXkoCgkJJ3RleHQnIAkJCT0+IGFycmF5KCd0aXRsZScgPT4gJ1RleHQgZmllbGQnLCAnYWRvJyA9PiAnQygyNTUpJyksCgkJJ3RleHRhcmVhJyAJPT4gYXJyYXkoJ3RpdGxlJyA9PiAnVGV4dCBhcmVhJywgCSdhZG8nID0+ICdYTCcpLAoJCSdjaGVja2JveCcgCT0+IGFycmF5KCd0aXRsZScgPT4gJ0NoZWNrYm94JywgCSdhZG8nID0+ICdJJyksCgkJJ3NlbGVjdCcgCQk9PiBhcnJheSgndGl0bGUnID0+ICdTZWxlY3QnLCAJCSdhZG8nID0+ICdDKDI1NSknKSwKCQkncGFzc3dvcmQnICA9PiBhcnJheSgndGl0bGUnID0+ICdQYXNzd29yZCcsIAknYWRvJyA9PiAnQygyNTUpJyksCgkJJ2RhdGUnIAkJCT0+IGFycmF5KCd0aXRsZScgPT4gJ0RhdGUnLCAJCQknYWRvJyA9PiAnRFQnKSwKCQkndGltZScgCQkJPT4gYXJyYXkoJ3RpdGxlJyA9PiAnVGltZScsIAkJCSdhZG8nID0+ICdEVCcpLAoJCSdmaWxlJyAJCQk9PiBhcnJheSgndGl0bGUnID0+ICdGaWxlJywgCQkJJ2FkbycgPT4gJ0MoMjU1KScpCgkJKTsKCQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRmb3JtLCAkaWQsICRtb2R1bGVfbmFtZSwgJG5hbWUsICR0eXBlLCRzZXR0aW5ncz1hcnJheSgpKQoJewoJCSR0aGlzLT5mb3JtID0gJiRmb3JtOwoJCSR0aGlzLT5pZCA9ICRpZDsKCQkkdGhpcy0+bW9kdWxlX25hbWUgPSAkbW9kdWxlX25hbWU7CgkJJHRoaXMtPm5hbWUgPSBpc3NldCgkc2V0dGluZ3NbJ25hbWUnXSk/JHNldHRpbmdzWyduYW1lJ106JG5hbWU7CgkJJHRoaXMtPnR5cGUgPSAkdHlwZTsKCQkkdGhpcy0+c2V0dGluZ3MgPSAkc2V0dGluZ3M7CgkJJHRoaXMtPmluaXQoKTsKCX0KCQoJLy8gU0VUVVAKCQoJLy8gRklMTAoJCglwcm90ZWN0ZWQgZnVuY3Rpb24gaW5pdCgpCgl7CgkJJHRoaXMtPmluaXRWYWx1ZXMoKTsKCX0KCQoJCXByb3RlY3RlZCBmdW5jdGlvbiBpbml0VmFsdWVzKCkKCQl7CQoJCQlnbG9iYWwgJGdDbXM7CgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkKCQkJewoJCQkJY2FzZSAnY2hlY2tib3gnOgoJCQkJCWlmKAoJCQkJCQkhaXNzZXQoJF9SRVFVRVNUWyR0aGlzLT5pZC4kdGhpcy0+bmFtZV0pCgkJCQkJCSYmCgkJCQkJCSgKCQkJCQkJCWlzc2V0KCRfUkVRVUVTVFskdGhpcy0+aWQuJ3N1Ym1pdCddKQoJCQkJCQkJfHwKCQkJCQkJCWlzc2V0KCRfUkVRVUVTVFskdGhpcy0+aWQuJ2FwcGx5J10pCgkJCQkJCSkKCgkJCQkJKQoJCQkJCXsKCQkJCQkJLy8gQ2FzZSB3aGVuIGNoZWNrYm94IGlzIHVuY2hlY2tlZCBhbmQgZm9ybSBpcyBzdWJtaXR0ZWQsIHdlIHNob3VsZCBlbXB0eSB0aGUgdmFsdWUKCQkJCQkJJHRoaXMtPnNldFZhbHVlcygpOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQlkZWZhdWx0OgoJCQkJCWlmIChpc3NldCgkX1JFUVVFU1RbJHRoaXMtPmlkLiR0aGlzLT5uYW1lXSkpCgkJCQkJewoJCQkJCQlpZiAoaXNfYXJyYXkoJF9SRVFVRVNUWyR0aGlzLT5pZC4kdGhpcy0+bmFtZV0pKQoJCQkJCQl7CgkJCQkJCQkkdGhpcy0+c2V0VmFsdWVzKCRfUkVRVUVTVFskdGhpcy0+aWQuJHRoaXMtPm5hbWVdKTsKCQkJCQkJfSAKCQkJCQkJZWxzZQoJCQkJCQl7CgkJCQkJCQkkdGhpcy0+c2V0VmFsdWVzKGh0bWxfZW50aXR5X2RlY29kZSgkX1JFUVVFU1RbJHRoaXMtPmlkLiR0aGlzLT5uYW1lXSkpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWVsc2VpZihpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ3ZhbHVlJ10pKQoJCQkJCXsKCQkJCQkJJHRoaXMtPnNldFZhbHVlcygkdGhpcy0+c2V0dGluZ3NbJ3ZhbHVlJ10pOwoJCQkJCX0KCQkJCQllbHNlaWYoCgkJCQkJCWlzc2V0KCR0aGlzLT5zZXR0aW5nc1snb2JqZWN0J10pICYmICFpc3NldCgkX1JFUVVFU1RbJHRoaXMtPmlkLidzdWJtaXQnXSkgJiYgIWlzc2V0KCRfUkVRVUVTVFskdGhpcy0+aWQuJ2FwcGx5J10pKQoJCQkJCXsKCQkJCQkJJHRoaXMtPnNldFZhbHVlcygkdGhpcy0+ZmV0Y2hWYWx1ZXMoKSk7CgkJCQkJfQoJCQkJCWVsc2VpZihpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ3ByZWZlcmVuY2UnXSkgJiYgJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10tPmdldFByZWZlcmVuY2UoJHRoaXMtPnNldHRpbmdzWydwcmVmZXJlbmNlJ10pICE9ICcnKQoJCQkJCXsKCQkJCQkJJHRoaXMtPnNldFZhbHVlcygkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXS0+Z2V0UHJlZmVyZW5jZSgkdGhpcy0+c2V0dGluZ3NbJ3ByZWZlcmVuY2UnXSkpOwoJCQkJCX0KCgkJCQkJaWYoaXNzZXQoJHRoaXMtPnNldHRpbmdzWydkZWZhdWx0X3ZhbHVlJ10pICYmICEkdGhpcy0+Zm9ybS0+aXNQb3N0ZWQoKSkgCgkJCQkJewoJCQkJCQlpZiAoJHRoaXMtPmlzRW1wdHkoKSkKCQkJCQkJewoJCQkJCQkJJHRoaXMtPnNldFZhbHVlcygkdGhpcy0+c2V0dGluZ3NbJ2RlZmF1bHRfdmFsdWUnXSk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJYnJlYWs7CgkJCX0KCQl9CgoKCgkJcHJvdGVjdGVkIGZ1bmN0aW9uIGZldGNoVmFsdWVzKCkKCQl7CgkJCWlmKGlzc2V0KCR0aGlzLT5zZXR0aW5nc1snb2JqZWN0J10pICYmIGlzX29iamVjdCgkdGhpcy0+c2V0dGluZ3NbJ29iamVjdCddKSkKCQkJewoJCQkJaWYgKGlzc2V0KCR0aGlzLT5zZXR0aW5nc1snZ2V0X21ldGhvZCddKSkKCQkJCXsKCQkJCQlyZXR1cm4gJHRoaXMtPnNldHRpbmdzWydvYmplY3QnXS0+eyR0aGlzLT5zZXR0aW5nc1snZ2V0X21ldGhvZCddfSgpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCSRuYW1lID0gaXNzZXQoJHRoaXMtPnNldHRpbmdzWydmaWVsZF9uYW1lJ10pPyR0aGlzLT5zZXR0aW5nc1snZmllbGRfbmFtZSddOiR0aGlzLT5uYW1lOwoJCQoJCQkJCWlmKG1ldGhvZF9leGlzdHMoJHRoaXMtPnNldHRpbmdzWydvYmplY3QnXSwgJ2dldCcpKQoJCQkJCXsKCQkJCQkJcmV0dXJuICR0aGlzLT5zZXR0aW5nc1snb2JqZWN0J10tPmdldCgkbmFtZSk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCQl0cnkKCQkJCQkJCXsKCQkJCQkJCQlyZXR1cm4gJHRoaXMtPnNldHRpbmdzWydvYmplY3QnXS0+JG5hbWU7CgkJCQkJCQl9CgkJCQkJCQljYXRjaChFeGNlcHRpb24gJGUpCgkJCQkJCQl7CgkJCQkJCQkvLwlkaWUoJ3VuYWJsZSB0byBkbycpOyAvLyBUT0RPOiBUcmVhdGggZXJyb3IKCQkJCQkJCX0KCQkJCQl9CgkJCQl9CQkJCgkJCX0KCQl9CgkKCS8vIFJFTkRFUgoJCglwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCgl7CgkJLy8gVE9ETzogUkVGQUNUT1JJTkcKCQlpZiAoJHRoaXMtPnR5cGUgPT0gJ2hpZGRlbicpCgkJewoJCQlyZXR1cm4gJHRoaXMtPmdldElucHV0KCk7CgkJfQoJCWVsc2UKCQl7CgkJCSRodG1sID0gJwoJCQk8ZGl2IGNsYXNzPSJmb3JtX3dpZGdldCI+CgkJCQk8ZGl2IGNsYXNzPSJmb3JtX2xhYmVsIj48bGFiZWwgZm9yPSInLiR0aGlzLT5pZC4kdGhpcy0+bmFtZS4nIj4nLiR0aGlzLT5nZXRMYWJlbCgpLic8L2xhYmVsPjwvZGl2Pic7CQkJCQkJCgkJCWlmIChjb3VudCgkdGhpcy0+Zm9ybV9lcnJvcnMpKQoJCQl7CgkJCQkkaHRtbCAuPSAnPGRpdiBjbGFzcz0iZm9ybV9lcnJvcnMiPicgLiAkdGhpcy0+c2hvd0Vycm9ycygpIC4gJzwvZGl2Pic7CgkJCX0JCQkJCgkJCSRodG1sIC49ICcKCQkJCTxkaXYgY2xhc3M9ImZvcm1faW5wdXQiPicuJHRoaXMtPmdldElucHV0KCkuJzwvZGl2PgoJCQk8L2Rpdj4nOwoJCQlyZXR1cm4gJGh0bWw7CgkJfQoJfQoJCglwdWJsaWMgZnVuY3Rpb24gc2hvdygkdGVtcGxhdGUgPSBudWxsLCAkZm9yY2UgPSBmYWxzZSkKCXsKCQkvLyBUT0RPOiBSRUZBQ1RPUklORwoJCQoJCWlmICghJHRoaXMtPnNob3duZWQgfHwgJGZvcmNlKQoJCXsKCQkJJGh0bWwgPSAnJzsKCQkJaWYgKCFpc19udWxsKCR0ZW1wbGF0ZSkpCgkJCXsKCQkJCSR0ZXh0ID0gc3RyX3JlcGxhY2UoJyVMQUJFTCUnLCAkdGhpcy0+Z2V0TGFiZWwoKSwgJHRlbXBsYXRlKTsKCQkJCSR0ZXh0ID0gc3RyX3JlcGxhY2UoJyVJTlBVVCUnLCAkdGhpcy0+Z2V0SW5wdXQoKSwgJHRleHQpOwoJCQkJJHRleHQgPSBzdHJfcmVwbGFjZSgnJUVSUk9SUyUnLCAkdGhpcy0+c2hvd0Vycm9ycygpLCAkdGV4dCk7CgkJCQkkdGV4dCA9IHN0cl9yZXBsYWNlKCclVElQUyUnLCAkdGhpcy0+Z2V0VGlwcygpLCAkdGV4dCk7CgkJCQkkaHRtbCAuPSAkdGV4dDsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRodG1sIC49ICR0aGlzOwkJCQkKCQkJfQkJCgkJCSR0aGlzLT5zaG93bmVkID0gdHJ1ZTsKCQkJcmV0dXJuICRodG1sOwoJCX0KCQlyZXR1cm4gbnVsbDsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoKQoJewoJCXJldHVybiAkdGhpcy0+bmFtZTsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGdldEZvcm0oKQoJewoJCWlmKCFpc19vYmplY3QoJHRoaXMtPmZvcm0pKQoJCXsKCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbignQW4gZXJyb3Igb2NjdXJlZCByZXRyaWV2aW5nIHRoZSBmb3JtIG9iamVjdC4nKTsKCQl9CgkJcmV0dXJuICR0aGlzLT5mb3JtOwoJfQoJCgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRGcmllbmRseU5hbWUoKQoJewoJCWlmIChpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ2xhYmVsJ10pKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zZXR0aW5nc1snbGFiZWwnXTsKCQl9CgkJLy8gVHJ5IHRvIGdldCBpdCBmcm9tIGxhbmd1YWdlIGZpbGUKCQlnbG9iYWwgJGdDbXM7CgkJaWYgKGlzc2V0KCRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddKSkKCQl7CgkJCXJldHVybiAkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXS0+bGFuZygnZm9ybV8nLiR0aGlzLT5uYW1lKTsKCQl9CgkJcmV0dXJuIG51bGw7Cgl9CgkJCglwdWJsaWMgZnVuY3Rpb24gZ2V0TGFiZWwoKQoJewoJCXJldHVybiAkdGhpcy0+Z2V0RnJpZW5kbHlOYW1lKCk7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRUaXBzKCkKCXsKCQlpZiAoaXNzZXQoJHRoaXMtPnNldHRpbmdzWyd0aXBzJ10pKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zZXR0aW5nc1sndGlwcyddOwoJCX0KCQkvLyBUcnkgdG8gZ2V0IGl0IGZyb20gbGFuZ3VhZ2UgZmlsZQoJCWdsb2JhbCAkZ0NtczsKCQlpZiAoaXNzZXQoJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10pKQoJCXsKCQkJLy8gVE9ETzogVGhpcyBzaG91bGQgYmUgc2hvd24gb25seSBpdCB0aGUgbGFuZyBrZXkgZXhpc3RzLi4uCgkJCS8vcmV0dXJuICRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddLT5sYW5nKCd0aXBzXycuJHRoaXMtPm5hbWUpOwoJCX0KCQlyZXR1cm4gbnVsbDsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGdldElucHV0KCkKCXsJCgkJaWYgKCFlbXB0eSgkdGhpcy0+aW5wdXQpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5pbnB1dDsKCQl9CgkJCgkJZ2xvYmFsICRnQ21zOwoJCWlmIChpc3NldCgkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXSkpCgkJewoJCQlzd2l0Y2goJHRoaXMtPnR5cGUpCgkJCXsKCQkJCWNhc2UgJ3RleHQnOgoJCQkJCXJldHVybiAkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXS0+Q3JlYXRlSW5wdXRUZXh0KCR0aGlzLT5pZCwgJHRoaXMtPm5hbWUsICR0aGlzLT5nZXRWYWx1ZSgpLCBpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ3NpemUnXSk/JHRoaXMtPnNldHRpbmdzWydzaXplJ106ODApOwkJCQkKCQkJCWNhc2UgJ2hpZGRlbic6CgkJCQkJcmV0dXJuICRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddLT5DcmVhdGVJbnB1dEhpZGRlbigkdGhpcy0+aWQsICR0aGlzLT5uYW1lLCAkdGhpcy0+Z2V0VmFsdWUoKSk7CgkJCQljYXNlICdzZWxlY3QnOgoJCQkJCXJldHVybiBzZWxmOjpDcmVhdGVTZWxlY3RvcigkdGhpcy0+aWQsICR0aGlzLT5uYW1lLCAkdGhpcy0+Z2V0VmFsdWVzKCksICR0aGlzLT5zZXR0aW5ncyk7CgkJCQljYXNlICdjaGVja2JveCc6CgkJCQkJcmV0dXJuICRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddLT5DcmVhdGVJbnB1dENoZWNrYm94KCR0aGlzLT5pZCwgJHRoaXMtPm5hbWUsICcxJywgKGludGVnZXIpJHRoaXMtPmdldFZhbHVlKCkpOwoJCQkJY2FzZSAndGV4dGFyZWEnOgoJCQkJCWlmIChpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ3Nob3dfd3lzaXd5ZyddKSAmJiAkdGhpcy0+c2V0dGluZ3NbJ3Nob3dfd3lzaXd5ZyddID09IHRydWUpCgkJCQkJewoJCQkJCQlyZXR1cm4gJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10tPkNyZWF0ZVRleHRBcmVhKHRydWUsICR0aGlzLT5pZCwgJHRoaXMtPmdldFZhbHVlKCksICR0aGlzLT5uYW1lKTsJCQkJCQkKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJcmV0dXJuICRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwgJHRoaXMtPmlkLCAkdGhpcy0+Z2V0VmFsdWUoKSwgJHRoaXMtPm5hbWUpOwoJCQkJCX0KCQkJCWNhc2UgJ2NvZGVhcmVhJzoKCQkJCQlyZXR1cm4gJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10tPkNyZWF0ZVRleHRBcmVhKHRydWUsICR0aGlzLT5pZCwgJHRoaXMtPmdldFZhbHVlKCksICR0aGlzLT5uYW1lLCdwYWdlYmlndGV4dGFyZWEnLCAnJywnJywgJycsIDkwLCAxNSwgJ0VkaXRBcmVhJyk7CgkJCQljYXNlICd0aW1lJzoKCQkJCQlyZXR1cm4gc2VsZjo6Q3JlYXRlVGltZVNlbGVjdCgkdGhpcy0+aWQsJHRoaXMtPm5hbWUsJHRoaXMtPmdldFZhbHVlcygpKTsKCQkJCWNhc2UgJ2RhdGUnOgoJCQkJCXJldHVybiBzZWxmOjpDcmVhdGVEYXRlU2VsZWN0KCR0aGlzLT5pZCwkdGhpcy0+bmFtZSwkdGhpcy0+Z2V0VmFsdWVzKCksICR0aGlzLT5zZXR0aW5ncyk7CgkJCQljYXNlICdwYWdlcyc6CgkJCQkJJHRoaXMtPnNldHRpbmdzWyd2YWx1ZXMnXSA9IGFycmF5KDAgPT4gJyZsYXF1bzsgJyAuICRnQ21zLT5tb2R1bGVzWydDTVNGb3JtcyddWydvYmplY3QnXS0+bGFuZygnc2VsZWN0IG9uZScpIC4gJyAmcmFxdW87JykgKyBzZWxmOjpnZXRQYWdlc0xpc3QoJHRoaXMtPmlkLCAkdGhpcy0+bmFtZSwkdGhpcy0+Z2V0VmFsdWUoKSwgJHRoaXMtPnNldHRpbmdzKTs7CgkJCQkJcmV0dXJuIHNlbGY6OkNyZWF0ZVNlbGVjdG9yKCR0aGlzLT5pZCwgJHRoaXMtPm5hbWUsICR0aGlzLT5nZXRWYWx1ZXMoKSwgJHRoaXMtPnNldHRpbmdzKTsKCgkJCQljYXNlICdzdGF0aWMnOgoJCQkJCXJldHVybiAkdGhpcy0+Z2V0VmFsdWUoKTsKCQkJCWNhc2UgJ2ZpbGUnOgoJCQkJCXJldHVybiAkdGhpcy0+Z2V0VXBsb2FkRmllbGQoKTsKCQkJCWNhc2UgJ3Bhc3N3b3JkJzoKCQkJCQlyZXR1cm4gJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10tPkNyZWF0ZUlucHV0UGFzc3dvcmQoJHRoaXMtPmlkLCAkdGhpcy0+bmFtZSwgJHRoaXMtPmdldFZhbHVlKCkKCQkJCQksaXNzZXQoJHRoaXMtPnNldHRpbmdzWydzaXplJ10pPyR0aGlzLT5zZXR0aW5nc1snc2l6ZSddOjIwKTsKCQkJCWRlZmF1bHQ6CgkJCQkJcmV0dXJuIG51bGw7CgkJCX0KCQl9CgkJcmV0dXJuIG51bGw7CgkJCgl9CgkKCS8vIFBST0NFU1MKCQoJcHVibGljIGZ1bmN0aW9uIHByb2Nlc3MoJHNhdmUgPSB0cnVlKQoJewoJCS8vIFZhbGlkYXRlCgkJJHRoaXMtPnZhbGlkYXRlKCk7CgkJCgkJLy8gU2F2ZSB2YWx1ZXMKCQlpZiAoJHNhdmUgPT0gdHJ1ZSkKCQl7CgkJCSR0aGlzLT5zYXZlKCk7CgkJfQoJfQoJCgkvLyBWQUxJREFUSU9OCgkKCXByb3RlY3RlZCBmdW5jdGlvbiB2YWxpZGF0ZSgpCgl7CgkJaWYgKGlzc2V0KCR0aGlzLT5zZXR0aW5nc1sndmFsaWRhdG9ycyddKSAmJiBpc19hcnJheSgkdGhpcy0+c2V0dGluZ3NbJ3ZhbGlkYXRvcnMnXSkpCgkJewoJCQkvL3Zhcl9kdW1wKCR0aGlzLT5zZXR0aW5nc1sndmFsaWRhdG9ycyddKTsKCQkJLy8gQ0hBTkdFIFRIQVQKCQkJCgkJCWZvcmVhY2ggKCR0aGlzLT5zZXR0aW5nc1sndmFsaWRhdG9ycyddIGFzICR2YWxpZGF0b3IgPT4gJHZhbHVlKQoJCQl7CgkJCQkkdmFsaWRhdGUgPSBuZXcgQ01TRm9ybVZhbGlkYXRvcigkdGhpcywkdmFsaWRhdG9yLCR2YWx1ZSk7CgkJCQl0cnkKCQkJCXsKCQkJCQlpZigkdmFsaWRhdGUtPmNoZWNrKCkgPT09IGZhbHNlKSAkdGhpcy0+aXNfdmFsaWQgPSBmYWxzZTsKCQkJCX0KCQkJCWNhdGNoKEV4Y2VwdGlvbiAkZSkKCQkJCXsKCQkJCQkkdGhpcy0+c2V0RXJyb3IoJGUtPmdldE1lc3NhZ2UoKSwgJ2Zvcm0gZXJyb3InKTsKCQkJCX0KCQkJCQoJCQl9CgkJfQoJfQoJCglwdWJsaWMgZnVuY3Rpb24gaXNWYWxpZCgpCgl7CgkJaWYgKCgkdGhpcy0+aXNfdmFsaWQgPT0gZmFsc2UgKSB8fCAkdGhpcy0+aGFzRXJyb3JzKCkpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gYWRkVmFsaWRhdG9yKCR2YWxpZGF0b3IsICRwYXJhbXMgPSBhcnJheSgpKQoJewoJCSR0aGlzLT5zZXR0aW5nc1sndmFsaWRhdG9ycyddWyR2YWxpZGF0b3JdID0gJHBhcmFtczsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIHJlbW92ZVZhbGlkYXRvcigkdmFsaWRhdG9yKQoJewoJCXVuc2V0KCR0aGlzLT5zZXR0aW5nc1sndmFsaWRhdG9ycyddWyR2YWxpZGF0b3JdKTsKCX0KCQoJLy8gU0FWRQoJCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2F2ZSgpCgl7CgkJaWYoJHRoaXMtPmlzVmFsaWQoKSA9PSB0cnVlKQoJCXsKCQkJaWYgKGlzc2V0KCR0aGlzLT5zZXR0aW5nc1snb2JqZWN0J10pKQoJCQl7CgkJCQkkdGhpcy0+c2F2ZU9iamVjdCgpOwoJCQl9CgkJCWlmIChpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ3ByZWZlcmVuY2UnXSkpCgkJCXsKCQkJCSR0aGlzLT5zYXZlUHJlZmVyZW5jZSgpOwoJCQl9CgkJfQoJfQoJCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2F2ZU9iamVjdCgpCgl7CgkJaWYoaXNfb2JqZWN0KCR0aGlzLT5zZXR0aW5nc1snb2JqZWN0J10pICYmICR0aGlzLT50eXBlICE9ICdmaWxlJykKCQl7CgkJCS8vIFRoaXMgZG8gbm90IHNhdmUgdGhlIG9iamVjdCBzdGF0ZSwgc28gd2UgaGF2ZSB0byBkbyBpdCBvdXRzaWRlIHRoZSBmb3JtCgoJCQlpZiAoJHRoaXMtPnR5cGUgPT0gJ2RhdGUnKQoJCQl7CgkJCQkvLyR2YWx1ZXMgPSAkdGhpcy0+dmFsdWVzOyBBbHdheXMgc2F2ZSBpdCBhcyBhIHN0cmluZwoJCQkJaWYgKGNvdW50KCR0aGlzLT52YWx1ZXMpID4gMSkKCQkJCXsJCQkJCQoJCQkJCSR2YWx1ZXMgPSAkdGhpcy0+dmFsdWVzWycwJ10gLiAnLScgLiAkdGhpcy0+dmFsdWVzWycxJ10gLiAnLScgLiAkdGhpcy0+dmFsdWVzWycyJ107CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHZhbHVlcyA9ICR0aGlzLT5nZXRWYWx1ZSgpOwoJCQkJfQoJCQl9CgkJCWVsc2VpZiAoJHRoaXMtPnR5cGUgPT0gJ3RpbWUnKQoJCQl7CgkJCQkvLyR2YWx1ZXMgPSAkdGhpcy0+dmFsdWVzOyBBbHdheXMgc2F2ZSBpdCBhcyBhIHN0cmluZwoJCQkJaWYgKGNvdW50KCR0aGlzLT52YWx1ZXMpID4gMSkKCQkJCXsJCQkJCQoJCQkJCSR2YWx1ZXMgPSAkdGhpcy0+dmFsdWVzWycwJ10gLiAnOicgLiAkdGhpcy0+dmFsdWVzWycxJ10gLiAnOicgLiAkdGhpcy0+dmFsdWVzWycyJ107CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHZhbHVlcyA9ICR0aGlzLT5nZXRWYWx1ZSgpOwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHZhbHVlcyA9ICR0aGlzLT5nZXRWYWx1ZSgpOwoJCQl9CQkKCQkKCQkJaWYgKGlzc2V0KCR0aGlzLT5zZXR0aW5nc1snc2V0X21ldGhvZCddKSkKCQkJewoJCQkJJHRoaXMtPnNldHRpbmdzWydvYmplY3QnXS0+eyR0aGlzLT5zZXR0aW5nc1snc2V0X21ldGhvZCddfSgkdmFsdWVzKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWlmIChpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ2ZpZWxkX25hbWUnXSkpCgkJCQl7CgkJCQkJJG5hbWUgPSAkdGhpcy0+c2V0dGluZ3NbJ2ZpZWxkX25hbWUnXTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkbmFtZSA9ICR0aGlzLT5uYW1lOwoJCQkJfQoJCQkJCgkJCQlpZihtZXRob2RfZXhpc3RzKCR0aGlzLT5zZXR0aW5nc1snb2JqZWN0J10sICdzZXQnKSkKCQkJCXsJCQoJCQkJCSR0aGlzLT5zZXR0aW5nc1snb2JqZWN0J10tPnNldCgkbmFtZSwgJHZhbHVlcyk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJdHJ5CgkJCQkJewoJCQkJCQkkdGhpcy0+c2V0dGluZ3NbJ29iamVjdCddLT4kbmFtZSA9ICR2YWx1ZXM7CgkJCQkJfQoJCQkJCWNhdGNoKEV4Y2VwdGlvbiAkZSkKCQkJCQl7CgkJCQkJCWRpZSgndW5hYmxlIHRvIGRvJyk7CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQkKCQkJfQoJCX0KCX0KCQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNhdmVQcmVmZXJlbmNlKCkKCXsKCQlpZihpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ3ByZWZlcmVuY2UnXSkgJiYgIWlzc2V0KCRfUkVRVUVTVFskdGhpcy0+aWQuJ2NhbmNlbCddKSkKCQl7CgkJCS8vIENoZWNrIGlmIHRoZXJlIGlzIG5vIGNhbmNlbCBidXR0b24gZmlyc3QgYmVjYXVzZSB3ZSBzYXZlIHRoZSB2YWx1ZSBkaXJlY3RseSAhCgkJCWdsb2JhbCAkZ0NtczsKCQkJJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10tPnNldFByZWZlcmVuY2UoJHRoaXMtPnNldHRpbmdzWydwcmVmZXJlbmNlJ10sICR0aGlzLT5nZXRWYWx1ZSgpKTsKCQl9Cgl9CgkKCS8vIEFDQ0VTUwoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWUoKQoJewoJCWlmICgoJHRoaXMtPnR5cGUgPT0gJ2RhdGUnKSAmJiAgKGNvdW50KCR0aGlzLT52YWx1ZXMpID4gMSkpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnZhbHVlc1snMCddIC4gJy0nIC4gJHRoaXMtPnZhbHVlc1snMSddIC4gJy0nIC4gJHRoaXMtPnZhbHVlc1snMiddOwoJCX0JCgkJZWxzZWlmICgoJHRoaXMtPnR5cGUgPT0gJ3RpbWUnKSAmJiAgKGNvdW50KCR0aGlzLT52YWx1ZXMpID4gMSkpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnZhbHVlc1snMCddIC4gJzonIC4gJHRoaXMtPnZhbHVlc1snMSddIC4gJzonIC4gJHRoaXMtPnZhbHVlc1snMiddOwoJCX0KCQllbHNlaWYgKGNvdW50KCR0aGlzLT52YWx1ZXMpID09IDEpCgkJewoJCQlyZXNldCgkdGhpcy0+dmFsdWVzKTsKCQkJcmV0dXJuIChzdHJpbmcpIGN1cnJlbnQoJHRoaXMtPnZhbHVlcyk7CgkJfQoJCWVsc2UKCQl7CgkJCXJldHVybiAoc3RyaW5nKSBpbXBsb2RlKCd8fHwnLCR0aGlzLT52YWx1ZXMpOwoJCX0JCQoJfQoJCglwdWJsaWMgZnVuY3Rpb24gc2V0VmFsdWUoJHZhbHVlLCAka2V5ID0gMCkKCXsKCQkkdGhpcy0+dmFsdWVzWyRrZXldID0gKHN0cmluZykkdmFsdWU7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRWYWx1ZXMoKQoJewoJCXJldHVybiAkdGhpcy0+dmFsdWVzOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gc2V0VmFsdWVzKCR2YWx1ZXMgPSBhcnJheSgpKQoJewoJCWlmIChpc19hcnJheSgkdmFsdWVzKSkKCQl7CgkJCSR0aGlzLT52YWx1ZXMgPSAkdmFsdWVzOwoJCX0KCQllbHNlaWYgKHN0cnBvcygkdmFsdWVzLCAnfHx8JykgIT09IGZhbHNlKQoJCXsKCQkJJHRoaXMtPnZhbHVlcyA9IGV4cGxvZGUoJ3x8fCcsICR2YWx1ZXMpOwoJCX0KCQllbHNlCgkJewoJCQkkdGhpcy0+dmFsdWVzWzBdID0gJHZhbHVlczsKCQl9CQkKCX0JCgkKCXB1YmxpYyBmdW5jdGlvbiBzZXREZWZhdWx0VmFsdWVzKCR2YWx1ZXMpCgl7CgkJaWYgKGlzX2FycmF5KCR2YWx1ZXMpKQoJCXsKCQkJJHRoaXMtPnZhbHVlcyA9ICR2YWx1ZXM7CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT52YWx1ZXMgPSBhcnJheSgkdmFsdWVzKTsKCQl9Cgl9CgkJCglwdWJsaWMgZnVuY3Rpb24gaXNFbXB0eSgpCgl7CgkJaWYgKChjb3VudCgkdGhpcy0+dmFsdWVzKSA9PSAxKSAmJiAoZW1wdHkoJHRoaXMtPnZhbHVlc1swXSkpIHx8IChjb3VudCgkdGhpcy0+dmFsdWVzKSA9PSAwKSkKCQkJcmV0dXJuIHRydWU7CgkJCXJldHVybiBmYWxzZTsKCX0KCQkKCXB1YmxpYyBmdW5jdGlvbiBnZXRTdHJpbmdWYWx1ZSgpCgl7CgkJLy9ERVBSRUNBVEVECgkJcmV0dXJuICR0aGlzLT5nZXRWYWx1ZSgpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRWYWx1ZXNUb1N0cmluZygpCgl7CgkJLy8gREVQUkVDQVRFRAoJCXJldHVybiAoc3RyaW5nKSR0aGlzLT5nZXRWYWx1ZSgpOwoJfQoJCgkKCXB1YmxpYyBmdW5jdGlvbiBpc0VtcHR5VmFsdWVzKCkKCXsKCQkvL0RFUFJFQ0FURUQKCQkKCQlpZiAoaXNfYXJyYXkoJHRoaXMtPnZhbHVlcykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPmlzRW1wdHkoKTsKCQl9CgkJZWxzZWlmKGVtcHR5KCR0aGlzLT52YWx1ZXMpKQoJCXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCQoJCgkvLyBESVZFUlMKCQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRGaWVsZHNMaXN0KCkKCXsKCQkkbGlzdCA9IGFycmF5KCk7CgkJZm9yZWFjaChzZWxmOjokZmllbGRzIGFzICR0eXBlID0+ICRmaWVsZCkKCQl7CgkJCSRsaXN0WyR0eXBlXSA9ICRmaWVsZFsndGl0bGUnXTsKCQl9CgkJcmV0dXJuICRsaXN0OwoJfQoJCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEFkb1R5cGUoJHR5cGUpCgl7CgkJaWYgKGlzc2V0KHNlbGY6OiRmaWVsZHNbJHR5cGVdWydhZG8nXSkpCgkJewoJCQlyZXR1cm4gc2VsZjo6JGZpZWxkc1skdHlwZV1bJ2FkbyddOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gJ0MoMjU1KSc7IC8vIEJldHRlciB0aGFuIG5vdGhpbmcuLi4KCQl9Cgl9CgkJCQkKCXB1YmxpYyBmdW5jdGlvbiBnZXRVcGxvYWRGaWVsZCgpCgl7CgkJZ2xvYmFsICRnQ21zOwoJCSRmaWVsZCA9ICRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddLT5DcmVhdGVJbnB1dEZpbGUoJHRoaXMtPmlkLCAkdGhpcy0+bmFtZSwgJycsIGlzc2V0KCR0aGlzLT5zZXR0aW5nc1snc2l6ZSddKT8kdGhpcy0+c2V0dGluZ3NbJ3NpemUnXTozMCk7CgkJJGh0bWwgPSAnPHNwYW4+JzsKCQlpZiAoY291bnQoJHRoaXMtPnZhbHVlcykpCgkJewoJCQkkZmlsZV91cmwgPSBpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ2Jhc2VfdXJsJ10pPyR0aGlzLT5zZXR0aW5nc1snYmFzZV91cmwnXTonJzsKCQkJaWYgKChzdWJzdHIoJGZpbGVfdXJsLCAtMSkgIT0gJy8nKSAmJiAoc3Vic3RyKCR0aGlzLT5nZXRWYWx1ZSgpLDAsMSkgIT0gJy8nKSkgJGZpbGVfdXJsIC4nLyc7CgkJCSRmaWxlX3VybCAuPSAkdGhpcy0+Z2V0VmFsdWUoKTsKCQkJCgkJCWlmIChzZWxmOjppc0ltYWdlKCR0aGlzLT5nZXRWYWx1ZSgpKSkKCQkJewoJCQkJJHRleHQgPSAnPGltZyBzcmM9IicuJGZpbGVfdXJsLiciIC8+JzsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSR0ZXh0ID0gYmFzZW5hbWUoJHRoaXMtPnZhbHVlc1swXSk7CgkJCX0KCQkJCgkJCSRodG1sIC49ICc8c3BhbiBzdHlsZT0iZGlzcGxheTpibG9jazsgbWFyZ2luLWJvdHRvbTogN3B4OyI+PGEgaHJlZj0iJy4kZmlsZV91cmwuICciIHJlbD0iZXh0ZXJuYWwiID4nLiAkdGV4dCAuJzwvYT48L3NwYW4+ICc7CgkJfQoJCQoJCWlmIChpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ2RlbGV0ZV9jaGVja2JveCddKSkKCQl7CgkJCSRmaWVsZCAuPSAnICcgLiAgJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10tPkNyZWF0ZUlucHV0Q2hlY2tib3goJHRoaXMtPmlkLCAkdGhpcy0+c2V0dGluZ3NbJ2RlbGV0ZV9jaGVja2JveCddLCAnMScpIC4gJyAnIC4gICRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddLT5sYW5nKCdkZWxldGUnKTsKCQl9CgkJCgkJJGh0bWwgLj0gJGZpZWxkIC4gJzwvc3Bhbj4nOwoJCXJldHVybiAkaHRtbDsKCX0KCQoJLy8gVG9vbHMKCQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQYWdlc0xpc3QoJGlkLCRuYW1lLCR2YWx1ZSwkc2V0dGluZ3MgPSBhcnJheSgpKQoJewoJCWdsb2JhbCAkZ0NtczsKCQkkcGFnZXMgPSAkZ0Ntcy0+R2V0Q29udGVudE9wZXJhdGlvbnMoKS0+R2V0QWxsQ29udGVudCgpOwoJCSRhcnJheSA9IGFycmF5KCk7CgkJCgkJaWYgKGlzc2V0KCRzZXR0aW5nc1snY2hpbGRyZW5vZiddKSkKCQl7CgkJCSRjaGlsZHJlbm9mID0gc2VsZjo6Z2V0UGFnZUlkKCRzZXR0aW5nc1snY2hpbGRyZW5vZiddKTsKCQl9CgkKCQlpZiAoaXNzZXQoJHNldHRpbmdzWydzdGFydF9wYWdlJ10pKQoJCXsKCQkJJHN0YXJ0X3BhZ2UgPSBzZWxmOjpnZXRQYWdlSWQoJHNldHRpbmdzWydzdGFydF9wYWdlJ10pOwoJCX0KCQkKCQlmb3JlYWNoKCRwYWdlcyBhcyAkcGFnZSkKCQl7CgkJCWlmICgKCQkJCSghaXNzZXQoJHN0YXJ0X3BhZ2UpICYmICFpc3NldCgkY2hpbGRyZW5vZikpIAoJCQkJfHwKCQkJCShpc3NldCgkY2hpbGRyZW5vZikgJiYgKCRwYWdlLT5QYXJlbnRJZCgpID09ICRjaGlsZHJlbm9mKSkgLy8gTGlzdCBvZiBhbGwgY2hpbGRyZW5zCgkJCQl8fAoJCQkJKGlzc2V0KCRzdGFydF9wYWdlKSAmJiAoc3RycG9zKCRwYWdlLT5JZEhpZXJhcmNoeSgpLCAkc3RhcnRfcGFnZS4nLicpID09PSAwKSkgLy8gTGlzdCBvZiBhbGwgZGVzY2VuZGFudHMKCQkJCSkKCQkJewoJCQkJJGFycmF5WyRwYWdlLT5JZCgpXSA9ICRwYWdlLT5IaWVyYXJjaHkoKS4nLiAtICcuJHBhZ2UtPk5hbWUoKTsKCQkJfQoJCQkKCQl9CgkJCQkKCQlyZXR1cm4gJGFycmF5OwoJfQoJCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFBhZ2VJZCgkYWxpYXMpCgl7CgkJZ2xvYmFsICRnQ21zOwoJCSRtYW5hZ2VyID0gJGdDbXMtPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsKICAgICRub2RlID0gJG1hbmFnZXItPnN1cmVHZXROb2RlQnlBbGlhcygkYWxpYXMpOwogICAgaWYgKCRub2RlKSB7CiAgICAgICAgJGNvbnRlbnQgPSAkbm9kZS0+R2V0Q29udGVudCgpOwogICAgICAgIGlmICgkY29udGVudCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkY29udGVudC0+SWQoKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgICRub2RlID0gJG1hbmFnZXItPnN1cmVHZXROb2RlQnlJZCgkYWxpYXMpOwogICAgICAgIGlmICgkbm9kZSkgewoJCQkJCXJldHVybiAkYWxpYXM7CiAgICAgICAgfQogICAgfQoJCXJldHVybiBudWxsOwoJfQoJCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZVBhZ2VTZWxlY3QoJGlkLCRuYW1lLCR2YWx1ZSwkc2V0dGluZ3MgPSBhcnJheSgpKQoJewoJCWdsb2JhbCAkZ0NtczsKCQkkcGFnZXMgPSAkZ0Ntcy0+R2V0Q29udGVudE9wZXJhdGlvbnMoKS0+R2V0QWxsQ29udGVudCgpOwoJCQoJCSRodG1sID0gJzxzZWxlY3QgbmFtZT0iJy4kaWQuJG5hbWUuJyI+PG9wdGlvbj4nLiRnQ21zLT5tb2R1bGVzWydDTVNGb3JtcyddWydvYmplY3QnXS0+bGFuZygnc2VsZWN0IG9uZScpLic8L29wdGlvbj4nOwoJCQoJCWZvcmVhY2goJHBhZ2VzIGFzICRwYWdlKQoJCXsKCQkJJGh0bWwgLj0gJzxvcHRpb24gdmFsdWU9IicgLiAkcGFnZS0+SWQoKSAuICciJzsKCQkJCgkJCWlmKCR2YWx1ZSA9PSAkcGFnZS0+SWQoKSkKCQkJewoJCQkJJGh0bWwgLj0gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzsKCQkJfQkJCQoJCQkKCQkJJGh0bWwgLj0gJz4nIC4gJHBhZ2UtPkhpZXJhcmNoeSgpLicuIC0gJy4kcGFnZS0+TmFtZSgpIC4gJzwvb3B0aW9uPic7CgkJfQoJCQoJCSRodG1sIC49ICc8L3NlbGVjdD4nOwkJCgkJCgkJcmV0dXJuICRodG1sOwoJfQoJCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZURhdGVTZWxlY3QoJGlkLCRuYW1lLCR2YWx1ZXMsJHNldHRpbmdzKQoJewoJCWlmIChjb3VudCgkdmFsdWVzKSA9PSAxKQoJCXsKCQkJaWYgKHN0cnBvcygkdmFsdWVzWzBdLCAnLScpICE9PSBmYWxzZSkgJHZhbHVlcyA9IGV4cGxvZGUoJy0nLCR2YWx1ZXNbMF0pOwoJCX0KCQkkc3RhcnRfeWVhciA9IGlzc2V0KCRzZXR0aW5nc1snc3RhcnRfeWVhciddKT8kc2V0dGluZ3NbJ3N0YXJ0X3llYXInXTpkYXRlKCdZJyk7CgkJJG51bWJlcl95ZWFycyA9IGlzc2V0KCRzZXR0aW5nc1snbnVtYmVyX3llYXJzJ10pPyRzZXR0aW5nc1snbnVtYmVyX3llYXJzJ106MjA7CgkJJGVuZF95ZWFyID0gJHN0YXJ0X3llYXIgKyAkbnVtYmVyX3llYXJzOwoJCQoJCSR5ZWFyID0gc2VsZjo6Q3JlYXRlSW5wdXRTZWxlY3RMaXN0KCRpZCwkbmFtZS4nWzBdJyxzZWxmOjpDcmVhdGVOdW1iZXJMaXN0KCRlbmRfeWVhciwkc3RhcnRfeWVhciksYXJyYXkoJHZhbHVlc1swXSksMSwnJyxmYWxzZSk7CgkJJG1vbnRoID0gc2VsZjo6Q3JlYXRlSW5wdXRTZWxlY3RMaXN0KCRpZCwkbmFtZS4nWzFdJyxzZWxmOjpDcmVhdGVNb250aHNMaXN0KCksYXJyYXkoJHZhbHVlc1sxXSksMSwnJyxmYWxzZSk7CgkJJGRheSA9IHNlbGY6OkNyZWF0ZUlucHV0U2VsZWN0TGlzdCgkaWQsJG5hbWUuJ1syXScsc2VsZjo6Q3JlYXRlTnVtYmVyTGlzdCgzMSwxKSxhcnJheSgkdmFsdWVzWzJdKSwxLCcnLGZhbHNlKTsKCQlpZiAoaXNzZXQoJHNldHRpbmdzWydldXJvcGVhbl9kYXRlJ10pKQoJCXsKCQkJcmV0dXJuICRkYXkgLiAkbW9udGggLiAkeWVhcjsKCQl9CgkJcmV0dXJuICR5ZWFyIC4gJG1vbnRoIC4gJGRheTsKCX0KCQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBDcmVhdGVUaW1lU2VsZWN0KCRpZCwkbmFtZSwkdmFsdWVzKQoJewoJCWlmIChjb3VudCgkdmFsdWVzKSA9PSAxKQoJCXsKCQkJaWYgKHN0cnBvcygkdmFsdWVzWzBdLCAnOicpICE9PSBmYWxzZSkgJHZhbHVlcyA9IGV4cGxvZGUoJzonLCR2YWx1ZXNbMF0pOwoJCX0KCQkkaG91cnMgPSBzZWxmOjpDcmVhdGVJbnB1dFNlbGVjdExpc3QoJGlkLCRuYW1lLidbMF0nLHNlbGY6OkNyZWF0ZU51bWJlckxpc3QoMjMpLGFycmF5KCR2YWx1ZXNbMF0pLDEsJycsZmFsc2UpOwoJCSRtaW51dGVzID0gc2VsZjo6Q3JlYXRlSW5wdXRTZWxlY3RMaXN0KCRpZCwkbmFtZS4nWzFdJyxzZWxmOjpDcmVhdGVOdW1iZXJMaXN0KDU5KSxhcnJheSgkdmFsdWVzWzFdKSwxLCcnLGZhbHNlKTsKCQkkc2Vjb25kcyA9IHNlbGY6OkNyZWF0ZUlucHV0U2VsZWN0TGlzdCgkaWQsJG5hbWUuJ1syXScsc2VsZjo6Q3JlYXRlTnVtYmVyTGlzdCg1OSksYXJyYXkoJHZhbHVlc1syXSksMSwnJyxmYWxzZSk7CgkJcmV0dXJuICRob3VycyAuICcgOiAnIC4gJG1pbnV0ZXMgLiAnIDogJyAuICRzZWNvbmRzOwoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gQ3JlYXRlTW9udGhzTGlzdCgpCgl7CgkJJG1vbnRocyA9IGFycmF5KCk7CgkJZm9yICgkaSA9IDE7ICRpIDw9IDEyOyArKyRpKSB7CgkJCSR0ID0gbWt0aW1lKDAsIDAsIDAsICRpLCAxLCAyMDAwKTsKCQkJJG1vbnRoc1skaV0gPSBkYXRlKCdNJywgJHQpOwoJCX0KCQlyZXR1cm4gJG1vbnRoczsKCX0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIENyZWF0ZU51bWJlckxpc3QoJGVuZCwgJHN0YXJ0PTApCgl7CgkJaWYgKCgkZW5kIDwgMCl8fCghaXNfbnVtZXJpYygkZW5kKSkpICRlbmQgPSAxOwoJCSRsaXN0ID0gYXJyYXkoKTsKCQlmb3IgKCRpID0gJHN0YXJ0OyAkaSA8PSAkZW5kOyAkaSsrKQoJCXsKCQkJJGxpc3RbJGldID0gKHN0cmluZykkaTsKCQl9CgkJcmV0dXJuICRsaXN0OwoJfQoJCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIENyZWF0ZVNlbGVjdG9yKCRpZCwkbmFtZSwkdmFsdWVzLCRzZXR0aW5ncykKCXsKCQlpZihpc3NldCgkc2V0dGluZ3NbJ2V4cGFuZGVkJ10pICYmICRzZXR0aW5nc1snZXhwYW5kZWQnXSA9PSB0cnVlKQoJCXsKCQkJcmV0dXJuIHNlbGY6OkNyZWF0ZUlucHV0RXhwYW5kZWRMaXN0KCRpZCwgJG5hbWUsIGlzc2V0KCRzZXR0aW5nc1sndmFsdWVzJ10pPyRzZXR0aW5nc1sndmFsdWVzJ106YXJyYXkoKSwgJHZhbHVlcywgJycsIGlzc2V0KCRzZXR0aW5nc1snbXVsdGlwbGUnXSk/dHJ1ZTpmYWxzZSwgJHNldHRpbmdzKTsKCQl9CgkJZWxzZQoJCXsKCQkJJGl0ZW1zID0gaXNzZXQoJHNldHRpbmdzWyd2YWx1ZXMnXSk/JHNldHRpbmdzWyd2YWx1ZXMnXTphcnJheSgpOwoJCQlpZihpc3NldCgkc2V0dGluZ3NbJ2luY2x1ZGVfY3VzdG9tJ10pKQoJCQl7CgkJCQkkaXRlbXMgPSBhcnJheSgnJyA9PiAkc2V0dGluZ3NbJ2luY2x1ZGVfY3VzdG9tJ10pICsgJGl0ZW1zOwoJCQl9CgkJCXJldHVybiBzZWxmOjpDcmVhdGVJbnB1dFNlbGVjdExpc3QoJGlkLCAkbmFtZSwgJGl0ZW1zLCAkdmFsdWVzLCBpc3NldCgkc2V0dGluZ3NbJ3NpemUnXSk/JHNldHRpbmdzWydzaXplJ106MSwgJycsIGlzc2V0KCRzZXR0aW5nc1snbXVsdGlwbGUnXSk/dHJ1ZTpmYWxzZSk7CgkJfQoJfQoJCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIENyZWF0ZUlucHV0U2VsZWN0TGlzdCgkaWQsICRuYW1lLCAkaXRlbXMsICRzZWxlY3RlZGl0ZW1zPWFycmF5KCksICRzaXplPTMsICRhZGR0dGV4dD0nJywgJG11bHRpcGxlID0gdHJ1ZSkKCXsKCSAgJGlkID0gY21zX2h0bWxlbnRpdGllcygkaWQpOwoJICAkbmFtZSA9IGNtc19odG1sZW50aXRpZXMoJG5hbWUpOwoJICAkc2l6ZSA9IGNtc19odG1sZW50aXRpZXMoJHNpemUpOwoJICAkbXVsdGlwbGUgPSBjbXNfaHRtbGVudGl0aWVzKCRtdWx0aXBsZSk7CgkKCQlpZigkbXVsdGlwbGUgPT0gdHJ1ZSkKCQl7CgkJCSRuYW1lIC49ICdbXSc7CgkJfQoJCgkJJHRleHQgPSAnPHNlbGVjdCBuYW1lPSInLiRpZC4kbmFtZS4nIic7CgkJaWYgKCRhZGR0dGV4dCAhPSAnJykKCQl7CgkJCSR0ZXh0IC49ICcgJyAuICRhZGR0dGV4dDsKCQl9CgkJaWYoICRtdWx0aXBsZSApCgkJICB7CgkJCSR0ZXh0IC49ICcgbXVsdGlwbGU9Im11bHRpcGxlIiAnOwoJCSAgfQoJCSAgCgkJICBpZiAoJHNpemUgPiAxKQoJCSAgewoJCSAgCSR0ZXh0IC49ICcgc2l6ZT0iJy4kc2l6ZS4nIic7CgkJICB9CgkJCgkJJHRleHQgLj0gJz4nOwoJCQoJCSRjb3VudCA9IDA7CgkJZm9yZWFjaCAoJGl0ZW1zIGFzICRrZXk9PiR2YWx1ZSkKCQl7CgkJICBpZiAoaXNfYXJyYXkoJHZhbHVlKSkKCQkgCXsKCQkJCSR0ZXh0IC49ICc8b3B0Z3JvdXAgbGFiZWw9IicgLiAka2V5IC4gJyI+JzsKCQkJCWZvcmVhY2ggKCR2YWx1ZSBhcyAka2V5MiA9PiAkZW50cnkpCgkJCQl7CgkJCQkJJHRleHQgLj0gc2VsZjo6Z2VuZXJhdGVPcHRpb24oJGtleTIsICRlbnRyeSwgJHNlbGVjdGVkaXRlbXMpOwoJCQkJCSRjb3VudCsrOwoJCQkJfQoJCQkJJHRleHQgLj0gJzwvb3B0Z3JvdXA+JzsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSR0ZXh0IC49IHNlbGY6OmdlbmVyYXRlT3B0aW9uKCRrZXksICR2YWx1ZSwgJHNlbGVjdGVkaXRlbXMpOwoJCQkJJGNvdW50Kys7CgkJCX0KCQl9CgkJJHRleHQgLj0gJzwvc2VsZWN0PicuIlxuIjsKCQoJCXJldHVybiAkdGV4dDsKCX0KCQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZW5lcmF0ZU9wdGlvbigka2V5LCAkdmFsdWUsICRzZWxlY3RlZGl0ZW1zKQoJewogIAkvLyBpZiAoaXNfYXJyYXkoJHZhbHVlKSkKICAJLy8gIAl7CiAgCS8vIAkJJGFycmF5ID0gYXJyYXlfc2hpZnQoJHZhbHVlKTsKICAJLy8gCQkka2V5ID0gaW1wbG9kZSgnfCcsYXJyYXlfa2V5cygkYXJyYXkpKTsKICAJLy8gCQkkdmFsdWUgPSBpbXBsb2RlKCd8JywgJGFycmF5KTsKICAJLy8gCX0KCgkJLy8kdmFsdWUgPSBjbXNfaHRtbGVudGl0aWVzKCR2YWx1ZSk7CgkJJHZhbHVlID0gJHZhbHVlOwoKCQkkdGV4dCA9ICc8b3B0aW9uIHZhbHVlPSInLiRrZXkuJyInOwoJCWlmIChpbl9hcnJheSgka2V5LCAkc2VsZWN0ZWRpdGVtcykpCgkJewoJCQkkdGV4dCAuPSAnICcgLiAnc2VsZWN0ZWQ9InNlbGVjdGVkIic7CgkJfQoJCSR0ZXh0IC49ICc+JzsKCQkkdGV4dCAuPSAkdmFsdWU7CgkJJHRleHQgLj0gJzwvb3B0aW9uPic7CgkJCgkJcmV0dXJuICR0ZXh0OwkKCX0KCQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBDcmVhdGVJbnB1dEV4cGFuZGVkTGlzdCgkaWQsICRuYW1lLCAkaXRlbXMsICRzZWxlY3RlZGl0ZW1zPWFycmF5KCksICRhZGR0dGV4dD0nJywgJG11bHRpcGxlID0gdHJ1ZSwgJHBhcmFtcyA9IGFycmF5KCkpCgl7CgkJZ2xvYmFsICRnQ21zOwoJICAkaWQgPSBjbXNfaHRtbGVudGl0aWVzKCRpZCk7CgkgICRuYW1lID0gY21zX2h0bWxlbnRpdGllcygkbmFtZSk7CgkgICRtdWx0aXBsZSA9IGNtc19odG1sZW50aXRpZXMoJG11bHRpcGxlKTsKCQoJCSRsaXN0ID0gYXJyYXkoKTsKCQlmb3JlYWNoKCRpdGVtcyBhcyAka2V5ID0+ICRpdGVtKQoJCXsKCQkJaWYgKGlzX2FycmF5KCRpdGVtKSkKCQkJewoJCQkJJGxpc3RbXSA9IGFycmF5KCdsYWJlbCcgPT4gJzxzdHJvbmc+JyAuICRrZXkgLiAnPC9zdHJvbmc+JywgJ2lucHV0JyA9PiAnJyk7CgkKCQkJCWZvcmVhY2goJGl0ZW0gYXMgJGtleTIgPT4gJGVudHJ5KQoJCQkJewoJCQkJCSBzZWxmOjpnZW5lcmF0ZUV4cGFuZGVkTGlzdCgmJGxpc3QsICRpZCwgJGVudHJ5LCAkbmFtZSwgJGtleTIsICRzZWxlY3RlZGl0ZW1zLCAkbXVsdGlwbGUsICRhZGR0dGV4dCk7CgkJCQl9CgkJCQkKCQkJfQoJCQllbHNlCgkJCXsKCQkJCXNlbGY6OmdlbmVyYXRlRXhwYW5kZWRMaXN0KCYkbGlzdCwgJGlkLCAkaXRlbSwgJG5hbWUsICRrZXksICRzZWxlY3RlZGl0ZW1zLCAkbXVsdGlwbGUsICRhZGR0dGV4dCk7CgkJCX0KCQl9CgkJCgkJaWYoaXNzZXQoJHBhcmFtc1snbW9kZSddKSAmJiAoJHBhcmFtc1snbW9kZSddID09ICdodG1sJykpCgkJewoJCQkvLyBUT0RPCgkJCXJldHVybiAnTm90IGltcGxlbWVudGVkIHlldCc7CgkJfQoJCWVsc2VpZihpc3NldCgkcGFyYW1zWydtb2RlJ10pICYmICgkcGFyYW1zWydtb2RlJ10gPT0gJ2FycmF5JykpCgkJewoJCQlyZXR1cm4gJGxpc3Q7CgkJfQoJCWVsc2UKCQl7CgkJCSRodG1sID0gJyc7CgkJCWlmIChjb3VudCgkbGlzdCkgPiAwKQoJCQl7CgkJCQkkaHRtbCAuPSAnPHVsPic7CgkJCQlmb3JlYWNoKCRsaXN0IGFzICRpdGVtKQoJCQkJewoJCQkJCSRodG1sIC49ICc8bGk+Jy4kaXRlbVsnaW5wdXQnXS4gJyAnLiAkaXRlbVsnbGFiZWwnXSAuJzwvbGk+JzsKCQkJCX0KCQkJCSRodG1sIC49ICc8L3VsPic7CgkJCX0KCQkJcmV0dXJuICRodG1sOwoJCX0KCQoJfQoJCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdlbmVyYXRlRXhwYW5kZWRMaXN0KCRsaXN0LCAkaWQsICRpdGVtLCAkbmFtZSwgJGtleSwgJHNlbGVjdGVkaXRlbXMsICRtdWx0aXBsZSwgJGFkZHR0ZXh0KQoJewoJCWlmIChpbl9hcnJheSgka2V5LCAkc2VsZWN0ZWRpdGVtcykpCgkJewoJCQkkdGV4dCA9ICcgY2hlY2tlZD0iY2hlY2tlZCInIC4gJyAnIC4gJGFkZHR0ZXh0OwoJCX0KCQllbHNlCgkJewoJCQkkdGV4dCA9ICcgJyAuICRhZGR0dGV4dDsKCQl9CgkJCgkJaWYoJG11bHRpcGxlKQoJCXsJCQkJCgkJCSRsaXN0W10gPSBhcnJheSgKCQkJCSdsYWJlbCcgPT4gJzxsYWJlbCBmb3I9IicuJGlkLiRuYW1lLidbJy4ka2V5LiddIj4nIC4gJGl0ZW0gLiAnPC9sYWJlbD4nLAoJCQkJJ2lucHV0JyA9PiAnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSInLiRpZC4kbmFtZS4nWycuJGtleS4nXSIgaWQ9IicuJGlkLiRuYW1lLidbJy4ka2V5LiddIiB2YWx1ZT0iJy4ka2V5LiciJy4kdGV4dC4nIC8+JwoJCQkJKTsKCQl9CgkJZWxzZQoJCXsKCQkJJGxpc3RbXSA9IGFycmF5KAoJCQkJJ2xhYmVsJyA9PiAnPGxhYmVsIGZvcj0iJy4kaWQuJG5hbWUuJGtleS4nIj4nIC4gJGl0ZW0gLiAnPC9sYWJlbD4nLAoJCQkJJ2lucHV0JyA9PiAnPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSInLiRpZC4kbmFtZS4nIiBpZD0iJy4kaWQuJG5hbWUuJGtleS4nIiB2YWx1ZT0iJy4ka2V5LiciJy4kdGV4dC4nIC8+JwoJCQkJKTsKCQl9CgkJcmV0dXJuICRsaXN0OwoJfQoJCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzSW1hZ2UoJGZpbGVuYW1lKQoJewoJCSR2YWxpZF9leHRlbnNpb25zID0gYXJyYXkoJ2pwZWcnLCdqcGcnLCdnaWYnLCdwbmcnKTsKCQlpZiAoaW5fYXJyYXkoc2VsZjo6Z2V0RmlsZUV4dGVuc2lvbigkZmlsZW5hbWUpLCR2YWxpZF9leHRlbnNpb25zKSkKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RmlsZUV4dGVuc2lvbigkZmlsZW5hbWUpCgl7CgkJJGZpbGUgPSBleHBsb2RlKCcuJywgJGZpbGVuYW1lKTsKICAJCWlmIChjb3VudCgkZmlsZSkgPiAxKQoJICAJewoJICAJCXJldHVybiBzdHJ0b2xvd2VyKGVuZCgkZmlsZSkpOwoJICAJfQoJICAJZWxzZSAKCSAgCXsKCSAgCQlyZXR1cm4gbnVsbDsKCSAgCX0KCX0KCgkvLyBFUlJPUlMKCQkKCXB1YmxpYyBmdW5jdGlvbiBoYXNFcnJvcnMoKQoJewoJCWlmIChjb3VudCgkdGhpcy0+Zm9ybV9lcnJvcnMpID09IDApCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gbm9FcnJvcigpCgl7CgkJcmV0dXJuICEkdGhpcy0+aGFzRXJyb3JzKCk7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvcnMoKQoJewoJCXJldHVybiAkdGhpcy0+Zm9ybV9lcnJvcnM7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBzaG93RXJyb3JzKCkKCXsKCQkkaHRtbCA9ICcnOwoJCWlmKGNvdW50KCR0aGlzLT5mb3JtX2Vycm9ycykgPiAwKQoJCXsKCQkJJGh0bWwgLj0gJzx1bCBjbGFzcz0iZm9ybV93aWRnZXRfZXJyb3JzIj4nOwoJCQlmb3JlYWNoKCR0aGlzLT5mb3JtX2Vycm9ycyBhcyAkcHJpb3JpdHkgPT4gJGVycm9ycykKCQkJewoJCQkJJGh0bWwgLj0gJzxsaT4nOwoJCQkJaWYgKCR0aGlzLT5zaG93X3ByaW9yaXR5KSAkaHRtbCAuPSAnPGVtIGNsYXNzPSJmb3JtX3dpZGdldF9lcnJvcl9wcmlvcml0eSI+Jy4kcHJpb3JpdHkuJzwvZW0+JzsKCQkJCSRodG1sIC49ICc8dWw+JzsKCQkJCWZvcmVhY2goJGVycm9ycyBhcyAkZXJyb3IpCgkJCQl7CgkJCQkJJGh0bWwgLj0gJzxsaSBjbGFzcz0iZm9ybV93aWRnZXRfZXJyb3JfbWVzc2FnZSI+Jy4kZXJyb3IuJzwvbGk+JzsKCQkJCX0JCQkJCgkJCQkkaHRtbCAuPSAnPC91bD48L2xpPic7CgkJCX0KCQkJJGh0bWwgLj0gJzwvdWw+JzsKCQl9CgkJcmV0dXJuICRodG1sOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gc2V0RXJyb3IoJG1lc3NhZ2UsJHByaW9yaXR5PSdkZWZhdWx0JykKCXsKCQkkdGhpcy0+Zm9ybV9lcnJvcnNbJHByaW9yaXR5XVtdID0gJG1lc3NhZ2U7Cgl9CgkKCgkKfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin.form.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCRmb3JtKX0Ke2lmICRmb3JtLT5oYXNFcnJvcnMoKX08ZGl2IHN0eWxlPSJjb2xvcjogcmVkOyI+eyRmb3JtLT5zaG93RXJyb3JzKCl9PC9kaXY+ey9pZn0KCXskZm9ybS0+Z2V0SGVhZGVycygpfQoJCgl7JGZvcm0tPnNob3dXaWRnZXRzKCc8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxkaXYgY2xhc3M9InBhZ2V0ZXh0Ij4lTEFCRUwlOjwvZGl2PgoJCTxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+JUlOUFVUJSA8ZW0+JVRJUFMlPC9lbT48L2Rpdj4KCQk8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiIHN0eWxlPSJjb2xvcjogcmVkOyI+JUVSUk9SUyU8L2Rpdj4KCTwvZGl2PicpfQoJCgl7JGZvcm0tPnJlbmRlckZpZWxkc2V0cygnPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8ZGl2IGNsYXNzPSJwYWdldGV4dCI+JUxBQkVMJTo8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiPiVJTlBVVCUgPGVtPiVUSVBTJTwvZW0+PC9kaXY+CgkJPGRpdiBjbGFzcz0icGFnZWlucHV0IiBzdHlsZT0iY29sb3I6IHJlZDsiPiVFUlJPUlMlPC9kaXY+Cgk8L2Rpdj4nKX0KCQoJPHA+CgkJeyRmb3JtLT5nZXRCdXR0b25zKCl9Cgk8L3A+Cgl7JGZvcm0tPmdldEZvb3RlcnMoKX0Key9pZn0=]]></data>
	</file>
</module>
