<?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>QrCodeMS</name>
	<version>0.1</version>
  <mincmsversion>1.9.4.2</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlFyQ29kZTwvcD4KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+CjxwPltGSVgtTUUhXTwvcD4KPGgzPldoYXQgUGFyYW1ldGVycyBEb2VzIEl0IFRha2U8L2gzPgo8cD5bRklYLU1FIV08L3A+CjxoMz5TdXBwb3J0PC9oMz4KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0IG9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAxMSwgRnJhbmNvaXMgTGUgR2FsIDxhIGhyZWY9Im1haWx0bzpmcmFuY29pc0BibXMtZ3Vlci5jb20iPiZsdDtmcmFuY29pc0BibXMtZ3Vlci5jb20mZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPjxoMz5QYXJhbSZlZ3JhdmU7dHJlczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIFBhcmFtJmVncmF2ZTt0cmUgdXRpbGlzJmVhY3V0ZTsgcG91ciBzcCZlYWN1dGU7Y2lmaWVyIGRhbnMgcXVlbGxlIGxhbmd1ZSBhZmZpY2hlciBsZSBtb2R1bGUgZGFucyBsYSBwYXJ0aWUgcHVibGlxdWUuIENlIHBhcmFtJmVncmF2ZTt0cmUgbiYjMDM5O2VzdCBwYXMgc3VwcG9ydCZlYWN1dGU7IG91IHV0aWxlIHBvdXIgdG91cyBsZXMgbW9kdWxlcy48L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0ZXVyJm5ic3A7OiBGcmFuY29pcyBMZSBHYWwgJmx0O2ZyYW5jb2lzQGJtcy1ndWVyLmNvbSZndDs8YnIgLz48YnIgLz5WZXJzaW9uIDogMC4xPGJyIC8+PGJyIC8+SGlzdG9yaXF1ZSBkZXMgY2hhbmdlbWVudHMmbmJzcDs6PGJyIC8+PHVsPgo8bGk+VmVyc2lvbiAwLjEgLSAzMCBTZXB0ZW1iZXIgMjAxMS4gSW5pdGlhbCBSZWxlYXNlLjwvbGk+CjwvdWw+PGJyIC8+]]></about>
	<description><![CDATA[QrCode]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgpyZXF1aXJlX29uY2UgImxpYnMvcGhwcXJjb2RlL3FybGliLnBocCI7CgpnbG9iYWwgJGdDbXM7CgokcGFyYW1zWyd1cmwnXSA9IGlzc2V0KCRwYXJhbXNbJ3VybCddKSA/ICRwYXJhbXNbJ3VybCddIDogJyc7CgoKaWYgKCRwYXJhbXNbJ3VybCddID09ICcnKXsKCQokbWFuYWdlciA9JiAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwokdGhpc1BhZ2UgPSAkZ0Ntcy0+dmFyaWFibGVzWydwYWdlX25hbWUnXTsKJGN1cnJlbnROb2RlID0gJiRtYW5hZ2VyLT5zdXJlR2V0Tm9kZUJ5QWxpYXMoJHRoaXNQYWdlKTsKJGNvbnRlbnQgPSAkY3VycmVudE5vZGUtPmdldENvbnRlbnQoKS0+R2V0VVJMKCk7Cn0gZWxzZSB7CiRjb250ZW50ID0gJHBhcmFtc1sndXJsJ107CgkKfQoKJHBhcnNlID0gcGFyc2VfdXJsKCRjb250ZW50KTsKCgoKJHByZV9maWxlbmFtZSA9IGltcGxvZGUoIi0iLGV4cGxvZGUoIi4iLCRwYXJzZVsnaG9zdCddKSk7CiRwcmVfZmlsZW5hbWUgLj0gaW1wbG9kZSgiLSIsZXhwbG9kZSgiLyIsJHBhcnNlWydwYXRoJ10pKTsKCiN0ZXN0ZXIgc2kgbGUgZmljaGllciBxcmNvZGUgZXhpc3RlLCBkYW5zIGNlIGNhcywgbmUgcGFzIGxlIHJlZ8OpbsOpcmVyCgokcGF0aCA9ICRjb25maWdbJ2ltYWdlX3VwbG9hZHNfcGF0aCddOwokdXJsID0gJGNvbmZpZ1snaW1hZ2VfdXBsb2Fkc191cmwnXTsKJGZpbGVuYW1lID0gJy8nLiRwcmVfZmlsZW5hbWUuJy5wbmcnOwpwcmludCgkZmlsZW5hbWUpOwokZXJyb3JDb3JyZWN0aW9uTGV2ZWwgPSAnTCc7CiRtYXRyaXhQb2ludFNpemUgPSA0OwoKUVJjb2RlOjpwbmcoJGNvbnRlbnQsICRwYXRoLiRmaWxlbmFtZSwgJGVycm9yQ29ycmVjdGlvbkxldmVsLCAkbWF0cml4UG9pbnRTaXplLCAyKTsKCiRxcmNvZGUgPSAkdXJsLiRmaWxlbmFtZTsKCgoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdxcmNvZGUnLCAkcXJjb2RlKTsJCgoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdxcmNvZGUudHBsJyk7CgoKPz4KCg==]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgppZiAoISAkdGhpcy0+Q2hlY2tBY2Nlc3MoKSkKCXsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJfQoKLyogLT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KCiAgIENvZGUgZm9yIFFyQ29kZSAiZGVmYXVsdGFkbWluIiBhZG1pbiBhY3Rpb24KICAgCiAgIC09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tCiAgIAogICBUeXBpY2FsbHksIHRoaXMgd2lsbCBkaXNwbGF5IHNvbWV0aGluZyBmcm9tIGEgdGVtcGxhdGUKICAgb3IgZG8gc29tZSBvdGhlciB0YXNrLgogICAKKi8KCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</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[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1FyQ29kZSc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1Bvc3QgSW5zdGFsbCBNZXNzYWdlLic7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnUG9zdCBVbmluc3RhbGwgTWVzc2FnZSwgZS5nLiwgIkN1cnNlcyEgRm9pbGVkIEFnYWluISInOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ1JlYWxseT8gQXJlIHlvdSBzdXJlCnlvdSB3YW50IHRvIHVuc2luc3RhbGwgdGhpcyBmaW5lIG1vZHVsZT8nOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgVW5pbnN0YWxsZWQuJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bGUgdXBncmFkZWQgdG8gdmVyc2lvbiAlcy4nOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdRckNvZGUnOwoKJGxhbmdbJ2Vycm9yJ10gPSAnRXJyb3IhJzsKJGxhbmRbJ2FkbWluX3RpdGxlJ10gPSAnUXJDb2RlIEFkbWluIFBhbmVsJzsKJGxhbmdbJ2FkbWluZGVzY3JpcHRpb24nXSA9ICdRckNvZGUnOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQWNjZXNzIERlbmllZC4gUGxlYXNlIGNoZWNrIHlvdXIgcGVybWlzc2lvbnMuJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnUG9zdCBJbnN0YWxsIE1lc3NhZ2UsIChlLmcuLCBCZSBzdXJlIHRvIHNldCAiIiBwZXJtaXNzaW9ucyB0byB1c2UgdGhpcyBtb2R1bGUhKSc7CgoKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4KPGxpPlZlcnNpb24gMC4xIC0gMzAgU2VwdGVtYmVyIDIwMTEuIEluaXRpYWwgUmVsZWFzZS48L2xpPgo8L3VsPic7CiRsYW5nWydoZWxwJ10gPSAnPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlFyQ29kZTwvcD4KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+CjxwPltGSVgtTUUhXTwvcD4KPGgzPldoYXQgUGFyYW1ldGVycyBEb2VzIEl0IFRha2U8L2gzPgo8cD5bRklYLU1FIV08L3A+CjxoMz5TdXBwb3J0PC9oMz4KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0IG9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAxMSwgRnJhbmNvaXMgTGUgR2FsIDxhIGhyZWY9Im1haWx0bzpmcmFuY29pc0BibXMtZ3Vlci5jb20iPiZsdDtmcmFuY29pc0BibXMtZ3Vlci5jb20mZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPic7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/libs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/libs/phpqrcode/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/libs/phpqrcode/bindings/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/libs/phpqrcode/bindings/tcpdf/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/libs/phpqrcode/bindings/tcpdf/qrcode.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEZpbGUgbmFtZSAgIDogcXJjb2RlLnBocAovLyBCZWdpbiAgICAgICA6IDIwMTAtMDMtMjIKLy8gTGFzdCBVcGRhdGUgOiAyMDEwLTAzLTI5Ci8vIFZlcnNpb24gICAgIDogMS4wLjAwMgovLyBMaWNlbnNlICAgICA6IEdOVSBMR1BMIHYuMyAoaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xlc3Nlci5odG1sKQovLyAJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLwovLyAJVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgovLyAJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwovLyAJTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi8vIAl2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIGFueSBsYXRlciB2ZXJzaW9uLgovLwovLyAJVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi8vIAlidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgovLyAJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQovLyAJTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8KLy8gCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLy8gCUxpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLy8gCUZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQovLyAgb3IgYnJvd3NlIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9sZXNzZXIuaHRtbAovLwovLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLwovLyBERVNDUklQVElPTiA6Ci8vCi8vIENsYXNzIHRvIGNyZWF0ZSBRUi1jb2RlIGFycmF5cyBmb3IgVENQREYgY2xhc3MuCi8vIFFSIENvZGUgc3ltYm9sIGlzIGEgMkQgYmFyY29kZSB0aGF0IGNhbiBiZSBzY2FubmVkIGJ5Ci8vIGhhbmR5IHRlcm1pbmFscyBzdWNoIGFzIGEgbW9iaWxlIHBob25lIHdpdGggQ0NELgovLyBUaGUgY2FwYWNpdHkgb2YgUVIgQ29kZSBpcyB1cCB0byA3MDAwIGRpZ2l0cyBvciA0MDAwCi8vIGNoYXJhY3RlcnMsIGFuZCBoYXMgaGlnaCByb2J1c3RuZXNzLgovLyBUaGlzIGNsYXNzIHN1cHBvcnRzIFFSIENvZGUgbW9kZWwgMiwgZGVzY3JpYmVkIGluCi8vIEpJUyAoSmFwYW5lc2UgSW5kdXN0cmlhbCBTdGFuZGFyZHMpIFgwNTEwOjIwMDQKLy8gb3IgSVNPL0lFQyAxODAwNC4KLy8gQ3VycmVudGx5IHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQ6Ci8vIEVDSSBhbmQgRk5DMSBtb2RlLCBNaWNybyBRUiBDb2RlLCBRUiBDb2RlIG1vZGVsIDEsCi8vIFN0cnVjdHVyZWQgbW9kZS4KLy8KLy8gVGhpcyBjbGFzcyBpcyBkZXJpdmVkIGZyb20gdGhlIGZvbGxvd2luZyBwcm9qZWN0czoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICJQSFAgUVIgQ29kZSBlbmNvZGVyIgovLyBMaWNlbnNlOiBHTlUtTEdQTHYzCi8vIENvcHlyaWdodCAoQykgMjAxMCBieSBEb21pbmlrIER6aWVuaWEgPGRlbHRhbGFiIGF0IHBvY3p0YSBkb3QgZm0+Ci8vIGh0dHA6Ly9waHBxcmNvZGUuc291cmNlZm9yZ2UubmV0LwovLyBodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9waHBxcmNvZGUvCi8vCi8vIFRoZSAiUEhQIFFSIENvZGUgZW5jb2RlciIgaXMgYmFzZWQgb24KLy8gIkMgbGlicXJlbmNvZGUgbGlicmFyeSIgKHZlci4gMy4xLjEpCi8vIExpY2Vuc2U6IEdOVS1MR1BMIDIuMQovLyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMCBieSBLZW50YXJvIEZ1a3VjaGkKLy8gaHR0cDovL21lZ2F1aS5uZXQvZnVrdWNoaS93b3Jrcy9xcmVuY29kZS9pbmRleC5lbi5odG1sCi8vCi8vIFJlZWQtU29sb21vbiBjb2RlIGVuY29kZXIgaXMgd3JpdHRlbiBieSBQaGlsIEthcm4sIEtBOVEuCi8vIENvcHlyaWdodCAoQykgMjAwMi0yMDA2IFBoaWwgS2FybiwgS0E5UQovLwovLyBRUiBDb2RlIGlzIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIERFTlNPIFdBVkUgSU5DT1JQT1JBVEVECi8vIGh0dHA6Ly93d3cuZGVuc28td2F2ZS5jb20vcXJjb2RlL2luZGV4LWUuaHRtbAovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8KLy8gQXV0aG9yOiBOaWNvbGEgQXN1bmkKLy8KLy8gKGMpIENvcHlyaWdodCAyMDEwOgovLyAgICAgICAgICAgICAgIE5pY29sYSBBc3VuaQovLyAgICAgICAgICAgICAgIFRlY25pY2suY29tIFMuci5sLgovLyAgICAgICAgICAgICAgIFZpYSBkZWxsYSBQYWNlLCAxMQovLyAgICAgICAgICAgICAgIDA5MDQ0IFF1YXJ0dWNjaXUgKENBKQovLyAgICAgICAgICAgICAgIElUQUxZCi8vICAgICAgICAgICAgICAgd3d3LnRlY25pY2suY29tCi8vICAgICAgICAgICAgICAgaW5mb0B0ZWNuaWNrLmNvbQovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKCi8qKgogKiBDbGFzcyB0byBjcmVhdGUgUVItY29kZSBhcnJheXMgZm9yIFRDUERGIGNsYXNzLgogKiBRUiBDb2RlIHN5bWJvbCBpcyBhIDJEIGJhcmNvZGUgdGhhdCBjYW4gYmUgc2Nhbm5lZCBieSBoYW5keSB0ZXJtaW5hbHMgc3VjaCBhcyBhIG1vYmlsZSBwaG9uZSB3aXRoIENDRC4KICogVGhlIGNhcGFjaXR5IG9mIFFSIENvZGUgaXMgdXAgdG8gNzAwMCBkaWdpdHMgb3IgNDAwMCBjaGFyYWN0ZXJzLCBhbmQgaGFzIGhpZ2ggcm9idXN0bmVzcy4KICogVGhpcyBjbGFzcyBzdXBwb3J0cyBRUiBDb2RlIG1vZGVsIDIsIGRlc2NyaWJlZCBpbiBKSVMgKEphcGFuZXNlIEluZHVzdHJpYWwgU3RhbmRhcmRzKSBYMDUxMDoyMDA0IG9yIElTTy9JRUMgMTgwMDQuCiAqIEN1cnJlbnRseSB0aGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkOiBFQ0kgYW5kIEZOQzEgbW9kZSwgTWljcm8gUVIgQ29kZSwgUVIgQ29kZSBtb2RlbCAxLCBTdHJ1Y3R1cmVkIG1vZGUuCiAqCiAqIFRoaXMgY2xhc3MgaXMgZGVyaXZlZCBmcm9tICJQSFAgUVIgQ29kZSBlbmNvZGVyIiBieSBEb21pbmlrIER6aWVuaWEgKGh0dHA6Ly9waHBxcmNvZGUuc291cmNlZm9yZ2UubmV0LykgYmFzZWQgb24gImxpYnFyZW5jb2RlIEMgbGlicmFyeSAzLjEuMS4iIGJ5IEtlbnRhcm8gRnVrdWNoaSAoaHR0cDovL21lZ2F1aS5uZXQvZnVrdWNoaS93b3Jrcy9xcmVuY29kZS9pbmRleC5lbi5odG1sKSwgY29udGFpbnMgUmVlZC1Tb2xvbW9uIGNvZGUgd3JpdHRlbiBieSBQaGlsIEthcm4sIEtBOVEuIFFSIENvZGUgaXMgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgREVOU08gV0FWRSBJTkNPUlBPUkFURUQgKGh0dHA6Ly93d3cuZGVuc28td2F2ZS5jb20vcXJjb2RlL2luZGV4LWUuaHRtbCkuCiAqIFBsZWFzZSByZWFkIGNvbW1lbnRzIG9uIHRoaXMgY2xhc3Mgc291cmNlIGZpbGUgZm9yIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLgogKgogKiBAcGFja2FnZSBjb20udGVjbmljay50Y3BkZgogKiBAYWJzdHJhY3QgQ2xhc3MgZm9yIGdlbmVyYXRpbmcgUVItY29kZSBhcnJheSBmb3IgVENQREYuCiAqIEBhdXRob3IgTmljb2xhIEFzdW5pCiAqIEBjb3B5cmlnaHQgMjAxMCBOaWNvbGEgQXN1bmkgLSBUZWNuaWNrLmNvbSBTLnIubCAod3d3LnRlY25pY2suY29tKSBWaWEgRGVsbGEgUGFjZSwgMTEgLSAwOTA0NCAtIFF1YXJ0dWNjaXUgKENBKSAtIElUQUxZIC0gd3d3LnRlY25pY2suY29tIC0gaW5mb0B0ZWNuaWNrLmNvbQogKiBAbGluayBodHRwOi8vd3d3LnRjcGRmLm9yZwogKiBAbGljZW5zZSBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvbGVzc2VyLmh0bWwgTEdQTAogKiBAdmVyc2lvbiAxLjAuMDAyCiAqLwoKLy8gZGVmaW5pdGlvbnMKaWYgKCFkZWZpbmVkKCdRUkNPREVERUZTJykpIHsKCgkvKioKCSAqIEluZGljYXRlIHRoYXQgZGVmaW5pdGlvbnMgZm9yIHRoaXMgY2xhc3MgYXJlIHNldAoJICovCglkZWZpbmUoJ1FSQ09ERURFRlMnLCB0cnVlKTsKCgkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCS8vIEVuY29kaW5nIG1vZGVzIChjaGFyYWN0ZXJzIHdoaWNoIGNhbiBiZSBlbmNvZGVkIGluIFFSY29kZSkKCgkvKioKCSAqIEVuY29kaW5nIG1vZGUKCSAqLwoJZGVmaW5lKCdRUl9NT0RFX05MJywgLTEpOwoKCS8qKgoJICogRW5jb2RpbmcgbW9kZSBudW1lcmljICgwLTkpLiAzIGNoYXJhY3RlcnMgYXJlIGVuY29kZWQgdG8gMTBiaXQgbGVuZ3RoLiBJbiB0aGVvcnksIDcwODkgY2hhcmFjdGVycyBvciBsZXNzIGNhbiBiZSBzdG9yZWQgaW4gYSBRUmNvZGUuCgkgKi8KCWRlZmluZSgnUVJfTU9ERV9OTScsIDApOwoKCS8qKgoJICogRW5jb2RpbmcgbW9kZSBhbHBoYW51bWVyaWMgKDAtOUEtWiAkJSorLS4vOikgNDVjaGFyYWN0ZXJzLiAyIGNoYXJhY3RlcnMgYXJlIGVuY29kZWQgdG8gMTFiaXQgbGVuZ3RoLiBJbiB0aGVvcnksIDQyOTYgY2hhcmFjdGVycyBvciBsZXNzIGNhbiBiZSBzdG9yZWQgaW4gYSBRUmNvZGUuCgkgKi8KCWRlZmluZSgnUVJfTU9ERV9BTicsIDEpOwoKCS8qKgoJICogRW5jb2RpbmcgbW9kZSA4Yml0IGJ5dGUgZGF0YS4gSW4gdGhlb3J5LCAyOTUzIGNoYXJhY3RlcnMgb3IgbGVzcyBjYW4gYmUgc3RvcmVkIGluIGEgUVJjb2RlLgoJICovCglkZWZpbmUoJ1FSX01PREVfOEInLCAyKTsKCgkvKioKCSAqIEVuY29kaW5nIG1vZGUgS0FOSkkuIEEgS0FOSkkgY2hhcmFjdGVyIChtdWx0aWJ5dGUgY2hhcmFjdGVyKSBpcyBlbmNvZGVkIHRvIDEzYml0IGxlbmd0aC4gSW4gdGhlb3J5LCAxODE3IGNoYXJhY3RlcnMgb3IgbGVzcyBjYW4gYmUgc3RvcmVkIGluIGEgUVJjb2RlLgoJICovCglkZWZpbmUoJ1FSX01PREVfS0onLCAzKTsKCgkvKioKCSAqIEVuY29kaW5nIG1vZGUgU1RSVUNUVVJFRCAoY3VycmVudGx5IHVuc3VwcG9ydGVkKQoJICovCglkZWZpbmUoJ1FSX01PREVfU1QnLCA0KTsKCgkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCS8vIExldmVscyBvZiBlcnJvciBjb3JyZWN0aW9uLgoJLy8gUVJjb2RlIGhhcyBhIGZ1bmN0aW9uIG9mIGFuIGVycm9yIGNvcnJlY3RpbmcgZm9yIG1pc3MgcmVhZGluZyB0aGF0IHdoaXRlIGlzIGJsYWNrLgoJLy8gRXJyb3IgY29ycmVjdGluZyBpcyBkZWZpbmVkIGluIDQgbGV2ZWwgYXMgYmVsb3cuCgoJLyoqCgkgKiBFcnJvciBjb3JyZWN0aW9uIGxldmVsIEwgOiBBYm91dCA3JSBvciBsZXNzIGVycm9ycyBjYW4gYmUgY29ycmVjdGVkLgoJICovCglkZWZpbmUoJ1FSX0VDTEVWRUxfTCcsIDApOwoKCS8qKgoJICogRXJyb3IgY29ycmVjdGlvbiBsZXZlbCBNIDogQWJvdXQgMTUlIG9yIGxlc3MgZXJyb3JzIGNhbiBiZSBjb3JyZWN0ZWQuCgkgKi8KCWRlZmluZSgnUVJfRUNMRVZFTF9NJywgMSk7CgoJLyoqCgkgKiBFcnJvciBjb3JyZWN0aW9uIGxldmVsIFEgOiBBYm91dCAyNSUgb3IgbGVzcyBlcnJvcnMgY2FuIGJlIGNvcnJlY3RlZC4KCSAqLwoJZGVmaW5lKCdRUl9FQ0xFVkVMX1EnLCAyKTsKCgkvKioKCSAqIEVycm9yIGNvcnJlY3Rpb24gbGV2ZWwgSCA6IEFib3V0IDMwJSBvciBsZXNzIGVycm9ycyBjYW4gYmUgY29ycmVjdGVkLgoJICovCglkZWZpbmUoJ1FSX0VDTEVWRUxfSCcsIDMpOwoKCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJLy8gVmVyc2lvbi4gU2l6ZSBvZiBRUmNvZGUgaXMgZGVmaW5lZCBhcyB2ZXJzaW9uLgoJLy8gVmVyc2lvbiBpcyBmcm9tIDEgdG8gNDAuCgkvLyBWZXJzaW9uIDEgaXMgMjEqMjEgbWF0cml4LiBBbmQgNCBtb2R1bGVzIGluY3JlYXNlcyB3aGVuZXZlciAxIHZlcnNpb24gaW5jcmVhc2VzLgoJLy8gU28gdmVyc2lvbiA0MCBpcyAxNzcqMTc3IG1hdHJpeC4KCgkvKioKCSAqIE1heGltdW0gUVIgQ29kZSB2ZXJzaW9uLgoJICovCglkZWZpbmUoJ1FSU1BFQ19WRVJTSU9OX01BWCcsIDQwKTsKCgkvKioKCSAqIE1heGltdW0gbWF0cml4IHNpemUgZm9yIG1heGltdW0gdmVyc2lvbiAodmVyc2lvbiA0MCBpcyAxNzcqMTc3IG1hdHJpeCkuCgkgKi8KICAgIGRlZmluZSgnUVJTUEVDX1dJRFRIX01BWCcsIDE3Nyk7CgoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkvKioKCSAqIE1hdHJpeCBpbmRleCB0byBnZXQgd2lkdGggZnJvbSAkY2FwYWNpdHkgYXJyYXkuCgkgKi8KICAgIGRlZmluZSgnUVJDQVBfV0lEVEgnLCAgICAwKTsKCiAgICAvKioKCSAqIE1hdHJpeCBpbmRleCB0byBnZXQgbnVtYmVyIG9mIHdvcmRzIGZyb20gJGNhcGFjaXR5IGFycmF5LgoJICovCiAgICBkZWZpbmUoJ1FSQ0FQX1dPUkRTJywgICAgMSk7CgogICAgLyoqCgkgKiBNYXRyaXggaW5kZXggdG8gZ2V0IHJlbWFpbmRlciBmcm9tICRjYXBhY2l0eSBhcnJheS4KCSAqLwogICAgZGVmaW5lKCdRUkNBUF9SRU1JTkRFUicsIDIpOwoKICAgIC8qKgoJICogTWF0cml4IGluZGV4IHRvIGdldCBlcnJvciBjb3JyZWN0aW9uIGxldmVsIGZyb20gJGNhcGFjaXR5IGFycmF5LgoJICovCiAgICBkZWZpbmUoJ1FSQ0FQX0VDJywgICAgICAgMyk7CgoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkvLyBTdHJ1Y3R1cmUgKGN1cnJlbnRseSB1c3VwcG9ydGVkKQoKCS8qKgoJICogTnVtYmVyIG9mIGhlYWRlciBiaXRzIGZvciBzdHJ1Y3R1cmVkIG1vZGUKCSAqLwogICAgZGVmaW5lKCdTVFJVQ1RVUkVfSEVBREVSX0JJVFMnLCAgMjApOwoKICAgIC8qKgoJICogTWF4IG51bWJlciBvZiBzeW1ib2xzIGZvciBzdHJ1Y3R1cmVkIG1vZGUKCSAqLwogICAgZGVmaW5lKCdNQVhfU1RSVUNUVVJFRF9TWU1CT0xTJywgMTYpOwoKCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgLy8gTWFza3MKCiAgICAvKioKCSAqIERvd24gcG9pbnQgYmFzZSB2YWx1ZSBmb3IgY2FzZSAxIG1hc2sgcGF0dGVybiAoY29uY2F0ZW5hdGlvbiBvZiBzYW1lIGNvbG9yIGluIGEgbGluZSBvciBhIGNvbHVtbikKCSAqLwogICAgZGVmaW5lKCdOMScsICAzKTsKCiAgICAvKioKCSAqIERvd24gcG9pbnQgYmFzZSB2YWx1ZSBmb3IgY2FzZSAyIG1hc2sgcGF0dGVybiAobW9kdWxlIGJsb2NrIG9mIHNhbWUgY29sb3IpCgkgKi8KCWRlZmluZSgnTjInLCAgMyk7CgogICAgLyoqCgkgKiBEb3duIHBvaW50IGJhc2UgdmFsdWUgZm9yIGNhc2UgMyBtYXNrIHBhdHRlcm4gKDE6MTozOjE6MShkYXJrOmJyaWdodDpkYXJrOmJyaWdodDpkYXJrKXBhdHRlcm4gaW4gYSBsaW5lIG9yIGEgY29sdW1uKQoJICovCglkZWZpbmUoJ04zJywgNDApOwoKICAgIC8qKgoJICogRG93biBwb2ludCBiYXNlIHZhbHVlIGZvciBjYXNlIDQgbWFzayBwYXR0ZXJuIChyYXRpb24gb2YgZGFyayBtb2R1bGVzIGluIHdob2xlKQoJICovCglkZWZpbmUoJ040JywgMTApOwoKCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJLy8gT3B0aW1pemF0aW9uIHNldHRpbmdzCgoJLyoqCgkgKiBpZiB0cnVlLCBlc3RpbWF0ZXMgYmVzdCBtYXNrIChzcGVjLiBkZWZhdWx0LCBidXQgZXh0cmVtYWxseSBzbG93OyBzZXQgdG8gZmFsc2UgdG8gc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgYm9vc3QgYnV0IChwcm9wYWJseSkgd29yc3QgcXVhbGl0eSBjb2RlCgkgKi8KCWRlZmluZSgnUVJfRklORF9CRVNUX01BU0snLCB0cnVlKTsKCgkvKioKCSAqIGlmIGZhbHNlLCBjaGVja3MgYWxsIG1hc2tzIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHZhbHVlIHRlbGxzIGNvdW50IG9mIG1hc2tzIG5lZWQgdG8gYmUgY2hlY2tlZCwgbWFzayBpZCBhcmUgZ290IHJhbmRvbWx5CgkgKi8KCWRlZmluZSgnUVJfRklORF9GUk9NX1JBTkRPTScsIDIpOwoKCS8qKgoJICogd2hlbiBRUl9GSU5EX0JFU1RfTUFTSyA9PT0gZmFsc2UKCSAqLwoJZGVmaW5lKCdRUl9ERUZBVUxUX01BU0snLCAyKTsKCgkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKfSAvLyBlbmQgb2YgZGVmaW5pdGlvbnMKCi8vICMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIwoKaWYgKCFjbGFzc19leGlzdHMoJ1FSY29kZScsIGZhbHNlKSkgewoKCS8vIGZvciBjb21wYWliaWxpdHkgd2l0aCBQSFA0CglpZiAoIWZ1bmN0aW9uX2V4aXN0cygnc3RyX3NwbGl0JykpIHsKICAgIAkvKioKICAgIAkgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIGFycmF5IChuZWVkZWQgZm9yIFBIUDQgY29tcGF0aWJpbGl0eSkKICAgIAkgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgVGhlIGlucHV0IHN0cmluZy4KICAgIAkgKiBAcGFyYW0gaW50ICRzcGxpdF9sZW5ndGggTWF4aW11bSBsZW5ndGggb2YgdGhlIGNodW5rLgogICAgCSAqIEByZXR1cm4gIElmIHRoZSBvcHRpb25hbCBzcGxpdF9sZW5ndGggIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQsIHRoZSByZXR1cm5lZCBhcnJheSB3aWxsIGJlIGJyb2tlbiBkb3duIGludG8gY2h1bmtzIHdpdGggZWFjaCBiZWluZyBzcGxpdF9sZW5ndGggIGluIGxlbmd0aCwgb3RoZXJ3aXNlIGVhY2ggY2h1bmsgd2lsbCBiZSBvbmUgY2hhcmFjdGVyIGluIGxlbmd0aC4gRkFMU0UgaXMgcmV0dXJuZWQgaWYgc3BsaXRfbGVuZ3RoIGlzIGxlc3MgdGhhbiAxLiBJZiB0aGUgc3BsaXRfbGVuZ3RoIGxlbmd0aCBleGNlZWRzIHRoZSBsZW5ndGggb2Ygc3RyaW5nICwgdGhlIGVudGlyZSBzdHJpbmcgaXMgcmV0dXJuZWQgYXMgdGhlIGZpcnN0IChhbmQgb25seSkgYXJyYXkgZWxlbWVudC4KICAgIAkgKi8KCQlmdW5jdGlvbiBzdHJfc3BsaXQoJHN0cmluZywgJHNwbGl0X2xlbmd0aD0xKSB7CgkJCWlmICgoc3RybGVuKCRzdHJpbmcpID4gJHNwbGl0X2xlbmd0aCkgT1IgKCEkc3BsaXRfbGVuZ3RoKSkgewoJCQkJZG8gewoJCQkJCSRjID0gc3RybGVuKCRzdHJpbmcpOwoJCQkJCSRwYXJ0c1tdID0gc3Vic3RyKCRzdHJpbmcsIDAsICRzcGxpdF9sZW5ndGgpOwoJCQkJCSRzdHJpbmcgPSBzdWJzdHIoJHN0cmluZywgJHNwbGl0X2xlbmd0aCk7CgkJCQl9IHdoaWxlICgkc3RyaW5nICE9PSBmYWxzZSk7CgkJCX0gZWxzZSB7CgkJCQkkcGFydHMgPSBhcnJheSgkc3RyaW5nKTsKCQkJfQoJCQlyZXR1cm4gJHBhcnRzOwoJCX0KCX0KCgkvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCS8qKgoJICogQ2xhc3MgdG8gY3JlYXRlIFFSLWNvZGUgYXJyYXlzIGZvciBUQ1BERiBjbGFzcy4KCSAqIFFSIENvZGUgc3ltYm9sIGlzIGEgMkQgYmFyY29kZSB0aGF0IGNhbiBiZSBzY2FubmVkIGJ5IGhhbmR5IHRlcm1pbmFscyBzdWNoIGFzIGEgbW9iaWxlIHBob25lIHdpdGggQ0NELgoJICogVGhlIGNhcGFjaXR5IG9mIFFSIENvZGUgaXMgdXAgdG8gNzAwMCBkaWdpdHMgb3IgNDAwMCBjaGFyYWN0ZXJzLCBhbmQgaGFzIGhpZ2ggcm9idXN0bmVzcy4KCSAqIFRoaXMgY2xhc3Mgc3VwcG9ydHMgUVIgQ29kZSBtb2RlbCAyLCBkZXNjcmliZWQgaW4gSklTIChKYXBhbmVzZSBJbmR1c3RyaWFsIFN0YW5kYXJkcykgWDA1MTA6MjAwNCBvciBJU08vSUVDIDE4MDA0LgoJICogQ3VycmVudGx5IHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQ6IEVDSSBhbmQgRk5DMSBtb2RlLCBNaWNybyBRUiBDb2RlLCBRUiBDb2RlIG1vZGVsIDEsIFN0cnVjdHVyZWQgbW9kZS4KCSAqCgkgKiBUaGlzIGNsYXNzIGlzIGRlcml2ZWQgZnJvbSAiUEhQIFFSIENvZGUgZW5jb2RlciIgYnkgRG9taW5payBEemllbmlhIChodHRwOi8vcGhwcXJjb2RlLnNvdXJjZWZvcmdlLm5ldC8pIGJhc2VkIG9uICJsaWJxcmVuY29kZSBDIGxpYnJhcnkgMy4xLjEuIiBieSBLZW50YXJvIEZ1a3VjaGkgKGh0dHA6Ly9tZWdhdWkubmV0L2Z1a3VjaGkvd29ya3MvcXJlbmNvZGUvaW5kZXguZW4uaHRtbCksIGNvbnRhaW5zIFJlZWQtU29sb21vbiBjb2RlIHdyaXR0ZW4gYnkgUGhpbCBLYXJuLCBLQTlRLiBRUiBDb2RlIGlzIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIERFTlNPIFdBVkUgSU5DT1JQT1JBVEVEIChodHRwOi8vd3d3LmRlbnNvLXdhdmUuY29tL3FyY29kZS9pbmRleC1lLmh0bWwpLgoJICogUGxlYXNlIHJlYWQgY29tbWVudHMgb24gdGhpcyBjbGFzcyBzb3VyY2UgZmlsZSBmb3IgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24uCgkgKgoJICogQG5hbWUgUVJjb2RlCgkgKiBAcGFja2FnZSBjb20udGVjbmljay50Y3BkZgoJICogQGFic3RyYWN0IENsYXNzIGZvciBnZW5lcmF0aW5nIFFSLWNvZGUgYXJyYXkgZm9yIFRDUERGLgoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBjb3B5cmlnaHQgMjAxMCBOaWNvbGEgQXN1bmkgLSBUZWNuaWNrLmNvbSBTLnIubCAod3d3LnRlY25pY2suY29tKSBWaWEgRGVsbGEgUGFjZSwgMTEgLSAwOTA0NCAtIFF1YXJ0dWNjaXUgKENBKSAtIElUQUxZIC0gd3d3LnRlY25pY2suY29tIC0gaW5mb0B0ZWNuaWNrLmNvbQoJICogQGxpbmsgaHR0cDovL3d3dy50Y3BkZi5vcmcKCSAqIEBsaWNlbnNlIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9sZXNzZXIuaHRtbCBMR1BMCgkgKiBAdmVyc2lvbiAxLjAuMDAyCgkgKi8KCWNsYXNzIFFSY29kZSB7CgoJCS8qKgoJCSAqIEB2YXIgYmFyY29kZSBhcnJheSB0byBiZSByZXR1cm5lZCB3aGljaCBpcyByZWFkYWJsZSBieSBUQ1BERgoJCSAqIEBhY2Nlc3MgcHJvdGVjdGVkCgkJICovCgkJcHJvdGVjdGVkICRiYXJjb2RlX2FycmF5ID0gYXJyYXkoKTsKCgkJLyoqCgkJICogQHZhciBRUiBjb2RlIHZlcnNpb24uIFNpemUgb2YgUVJjb2RlIGlzIGRlZmluZWQgYXMgdmVyc2lvbi4gVmVyc2lvbiBpcyBmcm9tIDEgdG8gNDAuIFZlcnNpb24gMSBpcyAyMSoyMSBtYXRyaXguIEFuZCA0IG1vZHVsZXMgaW5jcmVhc2VzIHdoZW5ldmVyIDEgdmVyc2lvbiBpbmNyZWFzZXMuIFNvIHZlcnNpb24gNDAgaXMgMTc3KjE3NyBtYXRyaXguCgkJICogQGFjY2VzcyBwcm90ZWN0ZWQKCQkgKi8KCQlwcm90ZWN0ZWQgJHZlcnNpb24gPSAwOwoKCQkvKioKCQkgKiBAdmFyIExldmVscyBvZiBlcnJvciBjb3JyZWN0aW9uLiBTZWUgZGVmaW5pdGlvbnMgZm9yIHBvc3NpYmxlIHZhbHVlcy4KCQkgKiBAYWNjZXNzIHByb3RlY3RlZAoJCSAqLwoJCXByb3RlY3RlZCAkbGV2ZWwgPSBRUl9FQ0xFVkVMX0w7CgoJCS8qKgoJCSAqIEB2YXIgRW5jb2RpbmcgbW9kZQoJCSAqIEBhY2Nlc3MgcHJvdGVjdGVkCgkJICovCgkJcHJvdGVjdGVkICRoaW50ID0gUVJfTU9ERV84QjsKCgkJLyoqCgkJICogQHZhciBpZiB0cnVlIHRoZSBpbnB1dCBzdHJpbmcgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlCgkJICogQGFjY2VzcyBwcm90ZWN0ZWQKCQkgKi8KCQlwcm90ZWN0ZWQgJGNhc2VzZW5zaXRpdmUgPSB0cnVlOwoKCQkvKioKCQkgKiBAdmFyIHN0cnVjdHVyZWQgUVIgY29kZSAobm90IHN1cHBvcnRlZCB5ZXQpCgkJICogQGFjY2VzcyBwcm90ZWN0ZWQKCQkgKi8KCQlwcm90ZWN0ZWQgJHN0cnVjdHVyZWQgPSAwOwoKCQkvKioKCQkgKiBAdmFyIG1hc2sgZGF0YQoJCSAqIEBhY2Nlc3MgcHJvdGVjdGVkCgkJICovCgkJcHJvdGVjdGVkICRkYXRhOwoKCQkvLyBGcmFtZUZpbGxlcgoKCQkvKioKCQkgKiBAdmFyIHdpZHRoCgkJICogQGFjY2VzcyBwcm90ZWN0ZWQKCQkgKi8KCQlwcm90ZWN0ZWQgJHdpZHRoOwoKCQkvKioKCQkgKiBAdmFyIGZyYW1lCgkJICogQGFjY2VzcyBwcm90ZWN0ZWQKCQkgKi8KCQlwcm90ZWN0ZWQgJGZyYW1lOwoKCQkvKioKCQkgKiBAdmFyIFggcG9zaXRpb24gb2YgYml0CgkJICogQGFjY2VzcyBwcm90ZWN0ZWQKCQkgKi8KCQlwcm90ZWN0ZWQgJHg7CgoJCS8qKgoJCSAqIEB2YXIgWSBwb3NpdGlvbiBvZiBiaXQKCQkgKiBAYWNjZXNzIHByb3RlY3RlZAoJCSAqLwoJCXByb3RlY3RlZCAkeTsKCgkJLyoqCgkJICogQHZhciBkaXJlY3Rpb24KCQkgKiBAYWNjZXNzIHByb3RlY3RlZAoJCSAqLwoJCXByb3RlY3RlZCAkZGlyOwoKCQkvKioKCQkgKiBAdmFyIHNpbmdsZSBiaXQKCQkgKiBAYWNjZXNzIHByb3RlY3RlZAoJCSAqLwoJCXByb3RlY3RlZCAkYml0OwoKCQkvLyAtLS0tIFFScmF3Y29kZSAtLS0tCgoJCS8qKgoJCSAqIEB2YXIgZGF0YSBjb2RlCgkJICogQGFjY2VzcyBwcm90ZWN0ZWQKCQkgKi8KCQlwcm90ZWN0ZWQgJGRhdGFjb2RlID0gYXJyYXkoKTsKCgkJLyoqCgkJICogQHZhciBlcnJvciBjb3JyZWN0aW9uIGNvZGUKCQkgKiBAYWNjZXNzIHByb3RlY3RlZAoJCSAqLwoJCXByb3RlY3RlZCAkZWNjY29kZSA9IGFycmF5KCk7CgoJCS8qKgoJCSAqIEB2YXIgYmxvY2tzCgkJICogQGFjY2VzcyBwcm90ZWN0ZWQKCQkgKi8KCQlwcm90ZWN0ZWQgJGJsb2NrczsKCgkJLyoqCgkJICogQHZhciBSZWVkLVNvbG9tb24gYmxvY2tzCgkJICogQGFjY2VzcyBwcm90ZWN0ZWQKCQkgKi8KCQlwcm90ZWN0ZWQgJHJzYmxvY2tzID0gYXJyYXkoKTsgLy9vZiBSU2Jsb2NrCgoJCS8qKgoJCSAqIEB2YXIgY291bnRlcgoJCSAqIEBhY2Nlc3MgcHJvdGVjdGVkCgkJICovCgkJcHJvdGVjdGVkICRjb3VudDsKCgkJLyoqCgkJICogQHZhciBkYXRhIGxlbmd0aAoJCSAqIEBhY2Nlc3MgcHJvdGVjdGVkCgkJICovCgkJcHJvdGVjdGVkICRkYXRhTGVuZ3RoOwoKCQkvKioKCQkgKiBAdmFyIGVycm9yIGNvcnJlY3Rpb24gbGVuZ3RoCgkJICogQGFjY2VzcyBwcm90ZWN0ZWQKCQkgKi8KCQlwcm90ZWN0ZWQgJGVjY0xlbmd0aDsKCgkJLyoqCgkJICogQHZhciBiMQoJCSAqIEBhY2Nlc3MgcHJvdGVjdGVkCgkJICovCgkJcHJvdGVjdGVkICRiMTsKCgkJLy8gLS0tLSBRUm1hc2sgLS0tLQoKCQkvKioKCQkgKiBAdmFyIHJ1biBsZW5ndGgKCQkgKiBAYWNjZXNzIHByb3RlY3RlZAoJCSAqLwoJCXByb3RlY3RlZCAkcnVuTGVuZ3RoID0gYXJyYXkoKTsKCgkJLy8gLS0tLSBRUnNwbGl0IC0tLS0KCgkJLyoqCgkJICogQHZhciBpbnB1dCBkYXRhIHN0cmluZwoJCSAqIEBhY2Nlc3MgcHJvdGVjdGVkCgkJICovCgkJcHJvdGVjdGVkICRkYXRhU3RyID0gJyc7CgoJCS8qKgoJCSAqIEB2YXIgaW5wdXQgaXRlbXMKCQkgKiBAYWNjZXNzIHByb3RlY3RlZAoJCSAqLwoJCXByb3RlY3RlZCAkaXRlbXM7CgoJCS8vIFJlZWQtU29sb21vbiBpdGVtcwoKCQkvKioKCQkgKiBAdmFyIFJlZWQtU29sb21vbiBpdGVtcwoJCSAqIEBhY2Nlc3MgcHJvdGVjdGVkCgkJICovCgkJcHJvdGVjdGVkICRyc2l0ZW1zID0gYXJyYXkoKTsKCgkJLyoqCgkJICogQHZhciBhcnJheSBvZiBmcmFtZXMKCQkgKiBAYWNjZXNzIHByb3RlY3RlZAoJCSAqLwoJCXByb3RlY3RlZCAkZnJhbWVzID0gYXJyYXkoKTsKCgkJLyoqCgkJICogQHZhciBhbHBoYWJldC1udW1lcmljIGNvbnZlc2lvbiB0YWJsZQoJCSAqIEBhY2Nlc3MgcHJvdGVjdGVkCgkJICovCgkJcHJvdGVjdGVkICRhblRhYmxlID0gYXJyYXkoCgkJCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvLwoJCQktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLy8KCQkJMzYsIC0xLCAtMSwgLTEsIDM3LCAzOCwgLTEsIC0xLCAtMSwgLTEsIDM5LCA0MCwgLTEsIDQxLCA0MiwgNDMsIC8vCgkJCSAwLCAgMSwgIDIsICAzLCAgNCwgIDUsICA2LCAgNywgIDgsICA5LCA0NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvLwoJCQktMSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgLy8KCQkJMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8vCgkJCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvLwoJCQktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSAgLy8KCQkJKTsKCgkJLyoqCgkJICogQHZhciBhcnJheSBUYWJsZSBvZiB0aGUgY2FwYWNpdHkgb2Ygc3ltYm9scwoJCSAqIFNlZSBUYWJsZSAxIChwcC4xMykgYW5kIFRhYmxlIDEyLTE2IChwcC4zMC0zNiksIEpJUyBYMDUxMDoyMDA0LgoJCSAqIEBhY2Nlc3MgcHJvdGVjdGVkCgkJICovCgkJcHJvdGVjdGVkICRjYXBhY2l0eSA9IGFycmF5KAoJCQlhcnJheSggIDAsICAgIDAsIDAsIGFycmF5KCAgIDAsICAgIDAsICAgIDAsICAgIDApKSwgLy8KCQkJYXJyYXkoIDIxLCAgIDI2LCAwLCBhcnJheSggICA3LCAgIDEwLCAgIDEzLCAgIDE3KSksIC8vICAxCgkJCWFycmF5KCAyNSwgICA0NCwgNywgYXJyYXkoICAxMCwgICAxNiwgICAyMiwgICAyOCkpLCAvLwoJCQlhcnJheSggMjksICAgNzAsIDcsIGFycmF5KCAgMTUsICAgMjYsICAgMzYsICAgNDQpKSwgLy8KCQkJYXJyYXkoIDMzLCAgMTAwLCA3LCBhcnJheSggIDIwLCAgIDM2LCAgIDUyLCAgIDY0KSksIC8vCgkJCWFycmF5KCAzNywgIDEzNCwgNywgYXJyYXkoICAyNiwgICA0OCwgICA3MiwgICA4OCkpLCAvLyAgNQoJCQlhcnJheSggNDEsICAxNzIsIDcsIGFycmF5KCAgMzYsICAgNjQsICAgOTYsICAxMTIpKSwgLy8KCQkJYXJyYXkoIDQ1LCAgMTk2LCAwLCBhcnJheSggIDQwLCAgIDcyLCAgMTA4LCAgMTMwKSksIC8vCgkJCWFycmF5KCA0OSwgIDI0MiwgMCwgYXJyYXkoICA0OCwgICA4OCwgIDEzMiwgIDE1NikpLCAvLwoJCQlhcnJheSggNTMsICAyOTIsIDAsIGFycmF5KCAgNjAsICAxMTAsICAxNjAsICAxOTIpKSwgLy8KCQkJYXJyYXkoIDU3LCAgMzQ2LCAwLCBhcnJheSggIDcyLCAgMTMwLCAgMTkyLCAgMjI0KSksIC8vIDEwCgkJCWFycmF5KCA2MSwgIDQwNCwgMCwgYXJyYXkoICA4MCwgIDE1MCwgIDIyNCwgIDI2NCkpLCAvLwoJCQlhcnJheSggNjUsICA0NjYsIDAsIGFycmF5KCAgOTYsICAxNzYsICAyNjAsICAzMDgpKSwgLy8KCQkJYXJyYXkoIDY5LCAgNTMyLCAwLCBhcnJheSggMTA0LCAgMTk4LCAgMjg4LCAgMzUyKSksIC8vCgkJCWFycmF5KCA3MywgIDU4MSwgMywgYXJyYXkoIDEyMCwgIDIxNiwgIDMyMCwgIDM4NCkpLCAvLwoJCQlhcnJheSggNzcsICA2NTUsIDMsIGFycmF5KCAxMzIsICAyNDAsICAzNjAsICA0MzIpKSwgLy8gMTUKCQkJYXJyYXkoIDgxLCAgNzMzLCAzLCBhcnJheSggMTQ0LCAgMjgwLCAgNDA4LCAgNDgwKSksIC8vCgkJCWFycmF5KCA4NSwgIDgxNSwgMywgYXJyYXkoIDE2OCwgIDMwOCwgIDQ0OCwgIDUzMikpLCAvLwoJCQlhcnJheSggODksICA5MDEsIDMsIGFycmF5KCAxODAsICAzMzgsICA1MDQsICA1ODgpKSwgLy8KCQkJYXJyYXkoIDkzLCAgOTkxLCAzLCBhcnJheSggMTk2LCAgMzY0LCAgNTQ2LCAgNjUwKSksIC8vCgkJCWFycmF5KCA5NywgMTA4NSwgMywgYXJyYXkoIDIyNCwgIDQxNiwgIDYwMCwgIDcwMCkpLCAvLyAyMAoJCQlhcnJheSgxMDEsIDExNTYsIDQsIGFycmF5KCAyMjQsICA0NDIsICA2NDQsICA3NTApKSwgLy8KCQkJYXJyYXkoMTA1LCAxMjU4LCA0LCBhcnJheSggMjUyLCAgNDc2LCAgNjkwLCAgODE2KSksIC8vCgkJCWFycmF5KDEwOSwgMTM2NCwgNCwgYXJyYXkoIDI3MCwgIDUwNCwgIDc1MCwgIDkwMCkpLCAvLwoJCQlhcnJheSgxMTMsIDE0NzQsIDQsIGFycmF5KCAzMDAsICA1NjAsICA4MTAsICA5NjApKSwgLy8KCQkJYXJyYXkoMTE3LCAxNTg4LCA0LCBhcnJheSggMzEyLCAgNTg4LCAgODcwLCAxMDUwKSksIC8vIDI1CgkJCWFycmF5KDEyMSwgMTcwNiwgNCwgYXJyYXkoIDMzNiwgIDY0NCwgIDk1MiwgMTExMCkpLCAvLwoJCQlhcnJheSgxMjUsIDE4MjgsIDQsIGFycmF5KCAzNjAsICA3MDAsIDEwMjAsIDEyMDApKSwgLy8KCQkJYXJyYXkoMTI5LCAxOTIxLCAzLCBhcnJheSggMzkwLCAgNzI4LCAxMDUwLCAxMjYwKSksIC8vCgkJCWFycmF5KDEzMywgMjA1MSwgMywgYXJyYXkoIDQyMCwgIDc4NCwgMTE0MCwgMTM1MCkpLCAvLwoJCQlhcnJheSgxMzcsIDIxODUsIDMsIGFycmF5KCA0NTAsICA4MTIsIDEyMDAsIDE0NDApKSwgLy8gMzAKCQkJYXJyYXkoMTQxLCAyMzIzLCAzLCBhcnJheSggNDgwLCAgODY4LCAxMjkwLCAxNTMwKSksIC8vCgkJCWFycmF5KDE0NSwgMjQ2NSwgMywgYXJyYXkoIDUxMCwgIDkyNCwgMTM1MCwgMTYyMCkpLCAvLwoJCQlhcnJheSgxNDksIDI2MTEsIDMsIGFycmF5KCA1NDAsICA5ODAsIDE0NDAsIDE3MTApKSwgLy8KCQkJYXJyYXkoMTUzLCAyNzYxLCAzLCBhcnJheSggNTcwLCAxMDM2LCAxNTMwLCAxODAwKSksIC8vCgkJCWFycmF5KDE1NywgMjg3NiwgMCwgYXJyYXkoIDU3MCwgMTA2NCwgMTU5MCwgMTg5MCkpLCAvLyAzNQoJCQlhcnJheSgxNjEsIDMwMzQsIDAsIGFycmF5KCA2MDAsIDExMjAsIDE2ODAsIDE5ODApKSwgLy8KCQkJYXJyYXkoMTY1LCAzMTk2LCAwLCBhcnJheSggNjMwLCAxMjA0LCAxNzcwLCAyMTAwKSksIC8vCgkJCWFycmF5KDE2OSwgMzM2MiwgMCwgYXJyYXkoIDY2MCwgMTI2MCwgMTg2MCwgMjIyMCkpLCAvLwoJCQlhcnJheSgxNzMsIDM1MzIsIDAsIGFycmF5KCA3MjAsIDEzMTYsIDE5NTAsIDIzMTApKSwgLy8KCQkJYXJyYXkoMTc3LCAzNzA2LCAwLCBhcnJheSggNzUwLCAxMzcyLCAyMDQwLCAyNDMwKSkgIC8vIDQwCgkJKTsKCgkJLyoqCgkJICogQHZhciBhcnJheSBMZW5ndGggaW5kaWNhdG9yCgkJICogQGFjY2VzcyBwcm90ZWN0ZWQKCQkgKi8KCQlwcm90ZWN0ZWQgJGxlbmd0aFRhYmxlQml0cyA9IGFycmF5KAoJCQlhcnJheSgxMCwgMTIsIDE0KSwKCQkJYXJyYXkoIDksIDExLCAxMyksCgkJCWFycmF5KCA4LCAxNiwgMTYpLAoJCQlhcnJheSggOCwgMTAsIDEyKQoJCSk7CgoJCS8qKgoJCSAqIEB2YXIgYXJyYXkgVGFibGUgb2YgdGhlIGVycm9yIGNvcnJlY3Rpb24gY29kZSAoUmVlZC1Tb2xvbW9uIGJsb2NrKQoJCSAqIFNlZSBUYWJsZSAxMi0xNiAocHAuMzAtMzYpLCBKSVMgWDA1MTA6MjAwNC4KCQkgKiBAYWNjZXNzIHByb3RlY3RlZAoJCSAqLwoJCXByb3RlY3RlZCAkZWNjVGFibGUgPSBhcnJheSgKCQkJYXJyYXkoYXJyYXkoIDAsICAwKSwgYXJyYXkoIDAsICAwKSwgYXJyYXkoIDAsICAwKSwgYXJyYXkoIDAsICAwKSksIC8vCgkJCWFycmF5KGFycmF5KCAxLCAgMCksIGFycmF5KCAxLCAgMCksIGFycmF5KCAxLCAgMCksIGFycmF5KCAxLCAgMCkpLCAvLyAgMQoJCQlhcnJheShhcnJheSggMSwgIDApLCBhcnJheSggMSwgIDApLCBhcnJheSggMSwgIDApLCBhcnJheSggMSwgIDApKSwgLy8KCQkJYXJyYXkoYXJyYXkoIDEsICAwKSwgYXJyYXkoIDEsICAwKSwgYXJyYXkoIDIsICAwKSwgYXJyYXkoIDIsICAwKSksIC8vCgkJCWFycmF5KGFycmF5KCAxLCAgMCksIGFycmF5KCAyLCAgMCksIGFycmF5KCAyLCAgMCksIGFycmF5KCA0LCAgMCkpLCAvLwoJCQlhcnJheShhcnJheSggMSwgIDApLCBhcnJheSggMiwgIDApLCBhcnJheSggMiwgIDIpLCBhcnJheSggMiwgIDIpKSwgLy8gIDUKCQkJYXJyYXkoYXJyYXkoIDIsICAwKSwgYXJyYXkoIDQsICAwKSwgYXJyYXkoIDQsICAwKSwgYXJyYXkoIDQsICAwKSksIC8vCgkJCWFycmF5KGFycmF5KCAyLCAgMCksIGFycmF5KCA0LCAgMCksIGFycmF5KCAyLCAgNCksIGFycmF5KCA0LCAgMSkpLCAvLwoJCQlhcnJheShhcnJheSggMiwgIDApLCBhcnJheSggMiwgIDIpLCBhcnJheSggNCwgIDIpLCBhcnJheSggNCwgIDIpKSwgLy8KCQkJYXJyYXkoYXJyYXkoIDIsICAwKSwgYXJyYXkoIDMsICAyKSwgYXJyYXkoIDQsICA0KSwgYXJyYXkoIDQsICA0KSksIC8vCgkJCWFycmF5KGFycmF5KCAyLCAgMiksIGFycmF5KCA0LCAgMSksIGFycmF5KCA2LCAgMiksIGFycmF5KCA2LCAgMikpLCAvLyAxMAoJCQlhcnJheShhcnJheSggNCwgIDApLCBhcnJheSggMSwgIDQpLCBhcnJheSggNCwgIDQpLCBhcnJheSggMywgIDgpKSwgLy8KCQkJYXJyYXkoYXJyYXkoIDIsICAyKSwgYXJyYXkoIDYsICAyKSwgYXJyYXkoIDQsICA2KSwgYXJyYXkoIDcsICA0KSksIC8vCgkJCWFycmF5KGFycmF5KCA0LCAgMCksIGFycmF5KCA4LCAgMSksIGFycmF5KCA4LCAgNCksIGFycmF5KDEyLCAgNCkpLCAvLwoJCQlhcnJheShhcnJheSggMywgIDEpLCBhcnJheSggNCwgIDUpLCBhcnJheSgxMSwgIDUpLCBhcnJheSgxMSwgIDUpKSwgLy8KCQkJYXJyYXkoYXJyYXkoIDUsICAxKSwgYXJyYXkoIDUsICA1KSwgYXJyYXkoIDUsICA3KSwgYXJyYXkoMTEsICA3KSksIC8vIDE1CgkJCWFycmF5KGFycmF5KCA1LCAgMSksIGFycmF5KCA3LCAgMyksIGFycmF5KDE1LCAgMiksIGFycmF5KCAzLCAxMykpLCAvLwoJCQlhcnJheShhcnJheSggMSwgIDUpLCBhcnJheSgxMCwgIDEpLCBhcnJheSggMSwgMTUpLCBhcnJheSggMiwgMTcpKSwgLy8KCQkJYXJyYXkoYXJyYXkoIDUsICAxKSwgYXJyYXkoIDksICA0KSwgYXJyYXkoMTcsICAxKSwgYXJyYXkoIDIsIDE5KSksIC8vCgkJCWFycmF5KGFycmF5KCAzLCAgNCksIGFycmF5KCAzLCAxMSksIGFycmF5KDE3LCAgNCksIGFycmF5KCA5LCAxNikpLCAvLwoJCQlhcnJheShhcnJheSggMywgIDUpLCBhcnJheSggMywgMTMpLCBhcnJheSgxNSwgIDUpLCBhcnJheSgxNSwgMTApKSwgLy8gMjAKCQkJYXJyYXkoYXJyYXkoIDQsICA0KSwgYXJyYXkoMTcsICAwKSwgYXJyYXkoMTcsICA2KSwgYXJyYXkoMTksICA2KSksIC8vCgkJCWFycmF5KGFycmF5KCAyLCAgNyksIGFycmF5KDE3LCAgMCksIGFycmF5KCA3LCAxNiksIGFycmF5KDM0LCAgMCkpLCAvLwoJCQlhcnJheShhcnJheSggNCwgIDUpLCBhcnJheSggNCwgMTQpLCBhcnJheSgxMSwgMTQpLCBhcnJheSgxNiwgMTQpKSwgLy8KCQkJYXJyYXkoYXJyYXkoIDYsICA0KSwgYXJyYXkoIDYsIDE0KSwgYXJyYXkoMTEsIDE2KSwgYXJyYXkoMzAsICAyKSksIC8vCgkJCWFycmF5KGFycmF5KCA4LCAgNCksIGFycmF5KCA4LCAxMyksIGFycmF5KCA3LCAyMiksIGFycmF5KDIyLCAxMykpLCAvLyAyNQoJCQlhcnJheShhcnJheSgxMCwgIDIpLCBhcnJheSgxOSwgIDQpLCBhcnJheSgyOCwgIDYpLCBhcnJheSgzMywgIDQpKSwgLy8KCQkJYXJyYXkoYXJyYXkoIDgsICA0KSwgYXJyYXkoMjIsICAzKSwgYXJyYXkoIDgsIDI2KSwgYXJyYXkoMTIsIDI4KSksIC8vCgkJCWFycmF5KGFycmF5KCAzLCAxMCksIGFycmF5KCAzLCAyMyksIGFycmF5KCA0LCAzMSksIGFycmF5KDExLCAzMSkpLCAvLwoJCQlhcnJheShhcnJheSggNywgIDcpLCBhcnJheSgyMSwgIDcpLCBhcnJheSggMSwgMzcpLCBhcnJheSgxOSwgMjYpKSwgLy8KCQkJYXJyYXkoYXJyYXkoIDUsIDEwKSwgYXJyYXkoMTksIDEwKSwgYXJyYXkoMTUsIDI1KSwgYXJyYXkoMjMsIDI1KSksIC8vIDMwCgkJCWFycmF5KGFycmF5KDEzLCAgMyksIGFycmF5KCAyLCAyOSksIGFycmF5KDQyLCAgMSksIGFycmF5KDIzLCAyOCkpLCAvLwoJCQlhcnJheShhcnJheSgxNywgIDApLCBhcnJheSgxMCwgMjMpLCBhcnJheSgxMCwgMzUpLCBhcnJheSgxOSwgMzUpKSwgLy8KCQkJYXJyYXkoYXJyYXkoMTcsICAxKSwgYXJyYXkoMTQsIDIxKSwgYXJyYXkoMjksIDE5KSwgYXJyYXkoMTEsIDQ2KSksIC8vCgkJCWFycmF5KGFycmF5KDEzLCAgNiksIGFycmF5KDE0LCAyMyksIGFycmF5KDQ0LCAgNyksIGFycmF5KDU5LCAgMSkpLCAvLwoJCQlhcnJheShhcnJheSgxMiwgIDcpLCBhcnJheSgxMiwgMjYpLCBhcnJheSgzOSwgMTQpLCBhcnJheSgyMiwgNDEpKSwgLy8gMzUKCQkJYXJyYXkoYXJyYXkoIDYsIDE0KSwgYXJyYXkoIDYsIDM0KSwgYXJyYXkoNDYsIDEwKSwgYXJyYXkoIDIsIDY0KSksIC8vCgkJCWFycmF5KGFycmF5KDE3LCAgNCksIGFycmF5KDI5LCAxNCksIGFycmF5KDQ5LCAxMCksIGFycmF5KDI0LCA0NikpLCAvLwoJCQlhcnJheShhcnJheSggNCwgMTgpLCBhcnJheSgxMywgMzIpLCBhcnJheSg0OCwgMTQpLCBhcnJheSg0MiwgMzIpKSwgLy8KCQkJYXJyYXkoYXJyYXkoMjAsICA0KSwgYXJyYXkoNDAsICA3KSwgYXJyYXkoNDMsIDIyKSwgYXJyYXkoMTAsIDY3KSksIC8vCgkJCWFycmF5KGFycmF5KDE5LCAgNiksIGFycmF5KDE4LCAzMSksIGFycmF5KDM0LCAzNCksIGFycmF5KDIwLCA2MSkpICAvLyA0MAoJCSk7CgoJCS8qKgoJCSAqIEB2YXIgYXJyYXkgUG9zaXRpb25zIG9mIGFsaWdubWVudCBwYXR0ZXJucy4KCQkgKiBUaGlzIGFycmF5IGluY2x1ZGVzIG9ubHkgdGhlIHNlY29uZCBhbmQgdGhlIHRoaXJkIHBvc2l0aW9uIG9mIHRoZSBhbGlnbm1lbnQgcGF0dGVybnMuIFJlc3Qgb2YgdGhlbSBjYW4gYmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZW0uCgkJICogU2VlIFRhYmxlIDEgaW4gQXBwZW5kaXggRSAocHAuNzEpIG9mIEpJUyBYMDUxMDoyMDA0LgoJCSAqIEBhY2Nlc3MgcHJvdGVjdGVkCgkJICovCgkJcHJvdGVjdGVkICRhbGlnbm1lbnRQYXR0ZXJuID0gYXJyYXkoCgkJCWFycmF5KCAwLCAgMCksCgkJCWFycmF5KCAwLCAgMCksIGFycmF5KDE4LCAgMCksIGFycmF5KDIyLCAgMCksIGFycmF5KDI2LCAgMCksIGFycmF5KDMwLCAgMCksIC8vICAxLSA1CgkJCWFycmF5KDM0LCAgMCksIGFycmF5KDIyLCAzOCksIGFycmF5KDI0LCA0MiksIGFycmF5KDI2LCA0NiksIGFycmF5KDI4LCA1MCksIC8vICA2LTEwCgkJCWFycmF5KDMwLCA1NCksIGFycmF5KDMyLCA1OCksIGFycmF5KDM0LCA2MiksIGFycmF5KDI2LCA0NiksIGFycmF5KDI2LCA0OCksIC8vIDExLTE1CgkJCWFycmF5KDI2LCA1MCksIGFycmF5KDMwLCA1NCksIGFycmF5KDMwLCA1NiksIGFycmF5KDMwLCA1OCksIGFycmF5KDM0LCA2MiksIC8vIDE2LTIwCgkJCWFycmF5KDI4LCA1MCksIGFycmF5KDI2LCA1MCksIGFycmF5KDMwLCA1NCksIGFycmF5KDI4LCA1NCksIGFycmF5KDMyLCA1OCksIC8vIDIxLTI1CgkJCWFycmF5KDMwLCA1OCksIGFycmF5KDM0LCA2MiksIGFycmF5KDI2LCA1MCksIGFycmF5KDMwLCA1NCksIGFycmF5KDI2LCA1MiksIC8vIDI2LTMwCgkJCWFycmF5KDMwLCA1NiksIGFycmF5KDM0LCA2MCksIGFycmF5KDMwLCA1OCksIGFycmF5KDM0LCA2MiksIGFycmF5KDMwLCA1NCksIC8vIDMxLTM1CgkJCWFycmF5KDI0LCA1MCksIGFycmF5KDI4LCA1NCksIGFycmF5KDMyLCA1OCksIGFycmF5KDI2LCA1NCksIGFycmF5KDMwLCA1OCkgIC8vIDM1LTQwCgkJKTsKCgkJLyoqCgkJICogQHZhciBhcnJheSBWZXJzaW9uIGluZm9ybWF0aW9uIHBhdHRlcm4gKEJDSCBjb2RlZCkuCgkJICogU2VlIFRhYmxlIDEgaW4gQXBwZW5kaXggRCAocHAuNjgpIG9mIEpJUyBYMDUxMDoyMDA0LgoJCSAqIHNpemU6IFtRUlNQRUNfVkVSU0lPTl9NQVggLSA2XQoJCSAqIEBhY2Nlc3MgcHJvdGVjdGVkCgkJICovCgkJcHJvdGVjdGVkICR2ZXJzaW9uUGF0dGVybiA9IGFycmF5KAoJCQkweDA3Yzk0LCAweDA4NWJjLCAweDA5YTk5LCAweDBhNGQzLCAweDBiYmY2LCAweDBjNzYyLCAweDBkODQ3LCAweDBlNjBkLCAvLwoJCQkweDBmOTI4LCAweDEwYjc4LCAweDExNDVkLCAweDEyYTE3LCAweDEzNTMyLCAweDE0OWE2LCAweDE1NjgzLCAweDE2OGM5LCAvLwoJCQkweDE3N2VjLCAweDE4ZWM0LCAweDE5MWUxLCAweDFhZmFiLCAweDFiMDhlLCAweDFjYzFhLCAweDFkMzNmLCAweDFlZDc1LCAvLwoJCQkweDFmMjUwLCAweDIwOWQ1LCAweDIxNmYwLCAweDIyOGJhLCAweDIzNzlmLCAweDI0YjBiLCAweDI1NDJlLCAweDI2YTY0LCAvLwoJCQkweDI3NTQxLCAweDI4YzY5CgkJKTsKCgkJLyoqCgkJICogQHZhciBhcnJheSBGb3JtYXQgaW5mb3JtYXRpb24KCQkgKiBAYWNjZXNzIHByb3RlY3RlZAoJCSAqLwoJCXByb3RlY3RlZCAkZm9ybWF0SW5mbyA9IGFycmF5KAoJCQlhcnJheSgweDc3YzQsIDB4NzJmMywgMHg3ZGFhLCAweDc4OWQsIDB4NjYyZiwgMHg2MzE4LCAweDZjNDEsIDB4Njk3NiksIC8vCgkJCWFycmF5KDB4NTQxMiwgMHg1MTI1LCAweDVlN2MsIDB4NWI0YiwgMHg0NWY5LCAweDQwY2UsIDB4NGY5NywgMHg0YWEwKSwgLy8KCQkJYXJyYXkoMHgzNTVmLCAweDMwNjgsIDB4M2YzMSwgMHgzYTA2LCAweDI0YjQsIDB4MjE4MywgMHgyZWRhLCAweDJiZWQpLCAvLwoJCQlhcnJheSgweDE2ODksIDB4MTNiZSwgMHgxY2U3LCAweDE5ZDAsIDB4MDc2MiwgMHgwMjU1LCAweDBkMGMsIDB4MDgzYikgIC8vCgkJKTsKCgoJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKCQkvKioKCQkgKiBUaGlzIGlzIHRoZSBjbGFzcyBjb25zdHJ1Y3Rvci4KCQkgKiBDcmVhdGVzIGEgUVJjb2RlIG9iamVjdAoJCSAqIEBwYXJhbSBzdHJpbmcgJGNvZGUgY29kZSB0byByZXByZXNlbnQgdXNpbmcgUVJjb2RlCgkJICogQHBhcmFtIHN0cmluZyAkZWNsZXZlbCBlcnJvciBsZXZlbDogPHVsPjxsaT5MIDogQWJvdXQgNyUgb3IgbGVzcyBlcnJvcnMgY2FuIGJlIGNvcnJlY3RlZC48L2xpPjxsaT5NIDogQWJvdXQgMTUlIG9yIGxlc3MgZXJyb3JzIGNhbiBiZSBjb3JyZWN0ZWQuPC9saT48bGk+USA6IEFib3V0IDI1JSBvciBsZXNzIGVycm9ycyBjYW4gYmUgY29ycmVjdGVkLjwvbGk+PGxpPkggOiBBYm91dCAzMCUgb3IgbGVzcyBlcnJvcnMgY2FuIGJlIGNvcnJlY3RlZC48L2xpPjwvdWw+CgkJICogQGFjY2VzcyBwdWJsaWMKCQkgKiBAc2luY2UgMS4wLjAwMAoJCSAqLwoJCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY29kZSwgJGVjbGV2ZWwgPSAnTCcpIHsKCQkJJGJhcmNvZGVfYXJyYXkgPSBhcnJheSgpOwoJCQlpZiAoKGlzX251bGwoJGNvZGUpKSBPUiAoJGNvZGUgPT0gJ1wwJykgT1IgKCRjb2RlID09ICcnKSkgewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCS8vIHNldCBlcnJvciBjb3JyZWN0aW9uIGxldmVsCgkJCSR0aGlzLT5sZXZlbCA9IGFycmF5X3NlYXJjaCgkZWNsZXZlbCwgYXJyYXkoJ0wnLCAnTScsICdRJywgJ0gnKSk7CgkJCWlmICgkdGhpcy0+bGV2ZWwgPT09IGZhbHNlKSB7CgkJCQkkdGhpcy0+bGV2ZWwgPSBRUl9FQ0xFVkVMX0w7CgkJCX0KCQkJaWYgKCgkdGhpcy0+aGludCAhPSBRUl9NT0RFXzhCKSBBTkQgKCR0aGlzLT5oaW50ICE9IFFSX01PREVfS0opKSB7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQkJaWYgKCgkdGhpcy0+dmVyc2lvbiA8IDApIE9SICgkdGhpcy0+dmVyc2lvbiA+IFFSU1BFQ19WRVJTSU9OX01BWCkpIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQkkdGhpcy0+aXRlbXMgPSBhcnJheSgpOwoJCQkkdGhpcy0+ZW5jb2RlU3RyaW5nKCRjb2RlKTsKCQkJJHFyVGFiID0gJHRoaXMtPmJpbmFyaXplKCR0aGlzLT5kYXRhKTsKCQkJJHNpemUgPSBjb3VudCgkcXJUYWIpOwoJCQkkYmFyY29kZV9hcnJheVsnbnVtX3Jvd3MnXSA9ICRzaXplOwoJCQkkYmFyY29kZV9hcnJheVsnbnVtX2NvbHMnXSA9ICRzaXplOwoJCQkkYmFyY29kZV9hcnJheVsnYmNvZGUnXSA9IGFycmF5KCk7CgkJCWZvcmVhY2ggKCRxclRhYiBhcyAkbGluZSkgewoJCQkJJGFyckFkZCA9IGFycmF5KCk7CgkJCQlmb3JlYWNoIChzdHJfc3BsaXQoJGxpbmUpIGFzICRjaGFyKSB7CgkJCQkJJGFyckFkZFtdID0gKCRjaGFyPT0nMScpPzE6MDsKCQkJCX0KCQkJCSRiYXJjb2RlX2FycmF5WydiY29kZSddW10gPSAkYXJyQWRkOwoJCQl9CgkJCSR0aGlzLT5iYXJjb2RlX2FycmF5ID0gJGJhcmNvZGVfYXJyYXk7CgkJfQoKCQkvKioKCQkgKiBSZXR1cm5zIGEgYmFyY29kZSBhcnJheSB3aGljaCBpcyByZWFkYWJsZSBieSBUQ1BERgoJCSAqIEByZXR1cm4gYXJyYXkgYmFyY29kZSBhcnJheSByZWFkYWJsZSBieSBUQ1BERjsKCQkgKiBAYWNjZXNzIHB1YmxpYwoJCSAqLwoJCXB1YmxpYyBmdW5jdGlvbiBnZXRCYXJjb2RlQXJyYXkoKSB7CgkJCXJldHVybiAkdGhpcy0+YmFyY29kZV9hcnJheTsKCQl9CgoJCS8qKgoJCSAqIENvbnZlcnQgdGhlIGZyYW1lIGluIGJpbmFyeSBmb3JtCgkJICogQHBhcmFtIGFycmF5ICRmcmFtZSBhcnJheSB0byBiaW5hcml6ZQoJCSAqIEByZXR1cm4gYXJyYXkgZnJhbWUgaW4gYmluYXJ5IGZvcm0KCQkgKi8KCQlwcm90ZWN0ZWQgZnVuY3Rpb24gYmluYXJpemUoJGZyYW1lKSB7CgkJCSRsZW4gPSBjb3VudCgkZnJhbWUpOwoJCQkvLyB0aGUgZnJhbWUgaXMgc3F1YXJlICh3aWR0aCA9IGhlaWdodCkKCQkJZm9yZWFjaCAoJGZyYW1lIGFzICYkZnJhbWVMaW5lKSB7CgkJCQlmb3IgKCRpPTA7ICRpPCRsZW47ICRpKyspIHsKCQkJCQkkZnJhbWVMaW5lWyRpXSA9IChvcmQoJGZyYW1lTGluZVskaV0pJjEpPycxJzonMCc7CgkJCQl9CgkJCX0KCQkJcmV0dXJuICRmcmFtZTsKCQl9CgoJCS8qKgoJCSAqIEVuY29kZSB0aGUgaW5wdXQgc3RyaW5nIHRvIFFSIGNvZGUKCQkgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgaW5wdXQgc3RyaW5nIHRvIGVuY29kZQoJCSAqLwoJCXByb3RlY3RlZCBmdW5jdGlvbiBlbmNvZGVTdHJpbmcoJHN0cmluZykgewoJCQkkdGhpcy0+ZGF0YVN0ciA9ICRzdHJpbmc7CgkJCWlmICghJHRoaXMtPmNhc2VzZW5zaXRpdmUpIHsKCQkJCSR0aGlzLT50b1VwcGVyKCk7CgkJCX0KCQkJJHJldCA9ICR0aGlzLT5zcGxpdFN0cmluZygpOwoJCQlpZiAoJHJldCA8IDApIHsKCQkJCXJldHVybiBOVUxMOwoJCQl9CgkJCSR0aGlzLT5lbmNvZGVNYXNrKC0xKTsKCQl9CgoJCS8qKgoJCSAqIEVuY29kZSBtYXNrCgkJICogQHBhcmFtIGludCAkbWFzayBtYXNraW5nIG1vZGUKCQkgKi8KCQlwcm90ZWN0ZWQgZnVuY3Rpb24gZW5jb2RlTWFzaygkbWFzaykgewoJCQkkc3BlYyA9IGFycmF5KDAsIDAsIDAsIDAsIDApOwoJCQkkdGhpcy0+ZGF0YWNvZGUgPSAkdGhpcy0+Z2V0Qnl0ZVN0cmVhbSgkdGhpcy0+aXRlbXMpOwoJCQlpZiAoaXNfbnVsbCgkdGhpcy0+ZGF0YWNvZGUpKSB7CgkJCQlyZXR1cm4gTlVMTDsKCQkJfQoJCQkkc3BlYyA9ICR0aGlzLT5nZXRFY2NTcGVjKCR0aGlzLT52ZXJzaW9uLCAkdGhpcy0+bGV2ZWwsICRzcGVjKTsKCQkJJHRoaXMtPmIxID0gJHRoaXMtPnJzQmxvY2tOdW0xKCRzcGVjKTsKCQkJJHRoaXMtPmRhdGFMZW5ndGggPSAkdGhpcy0+cnNEYXRhTGVuZ3RoKCRzcGVjKTsKCQkJJHRoaXMtPmVjY0xlbmd0aCA9ICR0aGlzLT5yc0VjY0xlbmd0aCgkc3BlYyk7CgkJCSR0aGlzLT5lY2Njb2RlID0gYXJyYXlfZmlsbCgwLCAkdGhpcy0+ZWNjTGVuZ3RoLCAwKTsKCQkJJHRoaXMtPmJsb2NrcyA9ICR0aGlzLT5yc0Jsb2NrTnVtKCRzcGVjKTsKCQkJJHJldCA9ICR0aGlzLT5pbml0KCRzcGVjKTsKCQkJaWYgKCRyZXQgPCAwKSB7CgkJCQlyZXR1cm4gTlVMTDsKCQkJfQoJCQkkdGhpcy0+Y291bnQgPSAwOwoJCQkkdGhpcy0+d2lkdGggPSAkdGhpcy0+Z2V0V2lkdGgoJHRoaXMtPnZlcnNpb24pOwoJCQkkdGhpcy0+ZnJhbWUgPSAkdGhpcy0+bmV3RnJhbWUoJHRoaXMtPnZlcnNpb24pOwoJCQkkdGhpcy0+eCA9ICR0aGlzLT53aWR0aCAtIDE7CgkJCSR0aGlzLT55ID0gJHRoaXMtPndpZHRoIC0gMTsKCQkJJHRoaXMtPmRpciA9IC0xOwoJCQkkdGhpcy0+Yml0ID0gLTE7CgkJCS8vIGludGVsZWF2ZWQgZGF0YSBhbmQgZWNjIGNvZGVzCgkJCWZvciAoJGk9MDsgJGkgPCAoJHRoaXMtPmRhdGFMZW5ndGggKyAkdGhpcy0+ZWNjTGVuZ3RoKTsgJGkrKykgewoJCQkJJGNvZGUgPSAkdGhpcy0+Z2V0Q29kZSgpOwoJCQkJJGJpdCA9IDB4ODA7CgkJCQlmb3IgKCRqPTA7ICRqPDg7ICRqKyspIHsKCQkJCQkkYWRkciA9ICR0aGlzLT5nZXROZXh0UG9zaXRpb24oKTsKCQkJCQkkdGhpcy0+c2V0RnJhbWVBdCgkYWRkciwgMHgwMiB8ICgoJGJpdCAmICRjb2RlKSAhPSAwKSk7CgkJCQkJJGJpdCA9ICRiaXQgPj4gMTsKCQkJCX0KCQkJfQoJCQkvLyByZW1haW5kZXIgYml0cwoJCQkkaiA9ICR0aGlzLT5nZXRSZW1haW5kZXIoJHRoaXMtPnZlcnNpb24pOwoJCQlmb3IgKCRpPTA7ICRpPCRqOyAkaSsrKSB7CgkJCQkkYWRkciA9ICR0aGlzLT5nZXROZXh0UG9zaXRpb24oKTsKCQkJCSR0aGlzLT5zZXRGcmFtZUF0KCRhZGRyLCAweDAyKTsKCQkJfQoJCQkvLyBtYXNraW5nCgkJCSR0aGlzLT5ydW5MZW5ndGggPSBhcnJheV9maWxsKDAsIFFSU1BFQ19XSURUSF9NQVggKyAxLCAwKTsKCQkJaWYgKCRtYXNrIDwgMCkgewoJCQkJaWYgKFFSX0ZJTkRfQkVTVF9NQVNLKSB7CgkJCQkJJG1hc2tlZCA9ICR0aGlzLT5tYXNrKCR0aGlzLT53aWR0aCwgJHRoaXMtPmZyYW1lLCAkdGhpcy0+bGV2ZWwpOwoJCQkJfSBlbHNlIHsKCQkJCQkkbWFza2VkID0gJHRoaXMtPm1ha2VNYXNrKCR0aGlzLT53aWR0aCwgJHRoaXMtPmZyYW1lLCAoaW50dmFsKFFSX0RFRkFVTFRfTUFTSykgJSA4KSwgJHRoaXMtPmxldmVsKTsKCQkJCX0KCQkJfSBlbHNlIHsKCQkJCSRtYXNrZWQgPSAkdGhpcy0+bWFrZU1hc2soJHRoaXMtPndpZHRoLCAkdGhpcy0+ZnJhbWUsICRtYXNrLCAkdGhpcy0+bGV2ZWwpOwoJCQl9CgkJCWlmICgkbWFza2VkID09IE5VTEwpIHsKCQkJCXJldHVybiBOVUxMOwoJCQl9CgkJCSR0aGlzLT5kYXRhID0gJG1hc2tlZDsKCQl9CgoJCS8vIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KCgkJLy8gRnJhbWVGaWxsZXIKCgkJLyoqCgkJICogU2V0IGZyYW1lIHZhbHVlIGF0IHNwZWNpZmllZCBwb3NpdGlvbgoJCSAqIEBwYXJhbSBhcnJheSAkYXQgeCx5IHBvc2l0aW9uCgkJICogQHBhcmFtIGludCAkdmFsIHZhbHVlIG9mIHRoZSBjaGFyYWN0ZXIgdG8gc2V0CgkJICovCgkJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldEZyYW1lQXQoJGF0LCAkdmFsKSB7CgkJCSR0aGlzLT5mcmFtZVskYXRbJ3knXV1bJGF0Wyd4J11dID0gY2hyKCR2YWwpOwoJCX0KCgkJLyoqCgkJICogR2V0IGZyYW1lIHZhbHVlIGF0IHNwZWNpZmllZCBwb3NpdGlvbgoJCSAqIEBwYXJhbSBhcnJheSAkYXQgeCx5IHBvc2l0aW9uCgkJICogQHJldHVybiB2YWx1ZSBhdCBzcGVjaWZpZWQgcG9zaXRpb24KCQkgKi8KCQlwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RnJhbWVBdCgkYXQpIHsKCQkJcmV0dXJuIG9yZCgkdGhpcy0+ZnJhbWVbJGF0Wyd5J11dWyRhdFsneCddXSk7CgkJfQoKCQkvKioKCQkgKiBSZXR1cm4gdGhlIG5leHQgZnJhbWUgcG9zaXRpb24KCQkgKiBAcmV0dXJuIGFycmF5IG9mIHgseSBjb29yZGluYXRlcwoJCSAqLwoJCXByb3RlY3RlZCBmdW5jdGlvbiBnZXROZXh0UG9zaXRpb24oKSB7CgkJCWRvIHsKCQkJCWlmICgkdGhpcy0+Yml0ID09IC0xKSB7CgkJCQkJJHRoaXMtPmJpdCA9IDA7CgkJCQkJcmV0dXJuIGFycmF5KCd4Jz0+JHRoaXMtPngsICd5Jz0+JHRoaXMtPnkpOwoJCQkJfQoJCQkJJHggPSAkdGhpcy0+eDsKCQkJCSR5ID0gJHRoaXMtPnk7CgkJCQkkdyA9ICR0aGlzLT53aWR0aDsKCQkJCWlmICgkdGhpcy0+Yml0ID09IDApIHsKCQkJCQkkeC0tOwoJCQkJCSR0aGlzLT5iaXQrKzsKCQkJCX0gZWxzZSB7CgkJCQkJJHgrKzsKCQkJCQkkeSArPSAkdGhpcy0+ZGlyOwoJCQkJCSR0aGlzLT5iaXQtLTsKCQkJCX0KCQkJCWlmICgkdGhpcy0+ZGlyIDwgMCkgewoJCQkJCWlmICgkeSA8IDApIHsKCQkJCQkJJHkgPSAwOwoJCQkJCQkkeCAtPSAyOwoJCQkJCQkkdGhpcy0+ZGlyID0gMTsKCQkJCQkJaWYgKCR4ID09IDYpIHsKCQkJCQkJCSR4LS07CgkJCQkJCQkkeSA9IDk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9IGVsc2UgewoJCQkJCWlmICgkeSA9PSAkdykgewoJCQkJCQkkeSA9ICR3IC0gMTsKCQkJCQkJJHggLT0gMjsKCQkJCQkJJHRoaXMtPmRpciA9IC0xOwoJCQkJCQlpZiAoJHggPT0gNikgewoJCQkJCQkJJHgtLTsKCQkJCQkJCSR5IC09IDg7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQlpZiAoKCR4IDwgMCkgT1IgKCR5IDwgMCkpIHsKCQkJCQlyZXR1cm4gTlVMTDsKCQkJCX0KCQkJCSR0aGlzLT54ID0gJHg7CgkJCQkkdGhpcy0+eSA9ICR5OwoJCQl9IHdoaWxlKG9yZCgkdGhpcy0+ZnJhbWVbJHldWyR4XSkgJiAweDgwKTsKCQkJcmV0dXJuIGFycmF5KCd4Jz0+JHgsICd5Jz0+JHkpOwoJCX0KCgkJLy8gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQoKCQkvLyBRUnJhd2NvZGUKCgkJLyoqCgkJICogSW5pdGlhbGl6ZSBjb2RlLgoJCSAqIEBwYXJhbSBhcnJheSAkc3BlYyBhcnJheSBvZiBFQ0Mgc3BlY2lmaWNhdGlvbgoJCSAqIEByZXR1cm4gMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIC0xIGluIGNhc2Ugb2YgZXJyb3IKCQkgKi8KCQlwcm90ZWN0ZWQgZnVuY3Rpb24gaW5pdCgkc3BlYykgewoJCQkkZGwgPSAkdGhpcy0+cnNEYXRhQ29kZXMxKCRzcGVjKTsKCQkJJGVsID0gJHRoaXMtPnJzRWNjQ29kZXMxKCRzcGVjKTsKCQkJJHJzID0gJHRoaXMtPmluaXRfcnMoOCwgMHgxMWQsIDAsIDEsICRlbCwgMjU1IC0gJGRsIC0gJGVsKTsKCQkJJGJsb2NrTm8gPSAwOwoJCQkkZGF0YVBvcyA9IDA7CgkJCSRlY2NQb3MgPSAwOwoJCQkkZW5kZm9yID0gJHRoaXMtPnJzQmxvY2tOdW0xKCRzcGVjKTsKCQkJZm9yICgkaT0wOyAkaSA8ICRlbmRmb3I7ICsrJGkpIHsKCQkJCSRlY2MgPSBhcnJheV9zbGljZSgkdGhpcy0+ZWNjY29kZSwgJGVjY1Bvcyk7CgkJCQkkdGhpcy0+cnNibG9ja3NbJGJsb2NrTm9dID0gYXJyYXkoKTsKCQkJCSR0aGlzLT5yc2Jsb2Nrc1skYmxvY2tOb11bJ2RhdGFMZW5ndGgnXSA9ICRkbDsKCQkJCSR0aGlzLT5yc2Jsb2Nrc1skYmxvY2tOb11bJ2RhdGEnXSA9IGFycmF5X3NsaWNlKCR0aGlzLT5kYXRhY29kZSwgJGRhdGFQb3MpOwoJCQkJJHRoaXMtPnJzYmxvY2tzWyRibG9ja05vXVsnZWNjTGVuZ3RoJ10gPSAkZWw7CgkJCQkkZWNjID0gJHRoaXMtPmVuY29kZV9yc19jaGFyKCRycywgJHRoaXMtPnJzYmxvY2tzWyRibG9ja05vXVsnZGF0YSddLCAkZWNjKTsKCQkJCSR0aGlzLT5yc2Jsb2Nrc1skYmxvY2tOb11bJ2VjYyddID0gJGVjYzsKCQkJCSR0aGlzLT5lY2Njb2RlID0gYXJyYXlfbWVyZ2UoYXJyYXlfc2xpY2UoJHRoaXMtPmVjY2NvZGUsMCwgJGVjY1BvcyksICRlY2MpOwoJCQkJJGRhdGFQb3MgKz0gJGRsOwoJCQkJJGVjY1BvcyArPSAkZWw7CgkJCQkkYmxvY2tObysrOwoJCQl9CgkJCWlmICgkdGhpcy0+cnNCbG9ja051bTIoJHNwZWMpID09IDApIHsKCQkJCXJldHVybiAwOwoJCQl9CgkJCSRkbCA9ICR0aGlzLT5yc0RhdGFDb2RlczIoJHNwZWMpOwoJCQkkZWwgPSAkdGhpcy0+cnNFY2NDb2RlczIoJHNwZWMpOwoJCQkkcnMgPSAkdGhpcy0+aW5pdF9ycyg4LCAweDExZCwgMCwgMSwgJGVsLCAyNTUgLSAkZGwgLSAkZWwpOwoJCQlpZiAoJHJzID09IE5VTEwpIHsKCQkJCXJldHVybiAtMTsKCQkJfQoJCQkkZW5kZm9yID0gJHRoaXMtPnJzQmxvY2tOdW0yKCRzcGVjKTsKCQkJZm9yICgkaT0wOyAkaSA8ICRlbmRmb3I7ICsrJGkpIHsKCQkJCSRlY2MgPSBhcnJheV9zbGljZSgkdGhpcy0+ZWNjY29kZSwgJGVjY1Bvcyk7CgkJCQkkdGhpcy0+cnNibG9ja3NbJGJsb2NrTm9dID0gYXJyYXkoKTsKCQkJCSR0aGlzLT5yc2Jsb2Nrc1skYmxvY2tOb11bJ2RhdGFMZW5ndGgnXSA9ICRkbDsKCQkJCSR0aGlzLT5yc2Jsb2Nrc1skYmxvY2tOb11bJ2RhdGEnXSA9IGFycmF5X3NsaWNlKCR0aGlzLT5kYXRhY29kZSwgJGRhdGFQb3MpOwoJCQkJJHRoaXMtPnJzYmxvY2tzWyRibG9ja05vXVsnZWNjTGVuZ3RoJ10gPSAkZWw7CgkJCQkkZWNjID0gJHRoaXMtPmVuY29kZV9yc19jaGFyKCRycywgJHRoaXMtPnJzYmxvY2tzWyRibG9ja05vXVsnZGF0YSddLCAkZWNjKTsKCQkJCSR0aGlzLT5yc2Jsb2Nrc1skYmxvY2tOb11bJ2VjYyddID0gJGVjYzsKCQkJCSR0aGlzLT5lY2Njb2RlID0gYXJyYXlfbWVyZ2UoYXJyYXlfc2xpY2UoJHRoaXMtPmVjY2NvZGUsIDAsICRlY2NQb3MpLCAkZWNjKTsKCQkJCSRkYXRhUG9zICs9ICRkbDsKCQkJCSRlY2NQb3MgKz0gJGVsOwoJCQkJJGJsb2NrTm8rKzsKCQkJfQoJCQlyZXR1cm4gMDsKCQl9CgoJCS8qKgoJCSAqIFJldHVybiBSZWVkLVNvbG9tb24gYmxvY2sgY29kZS4KCQkgKiBAcmV0dXJuIGFycmF5IHJzYmxvY2tzCgkJICovCgkJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldENvZGUoKSB7CgkJCWlmICgkdGhpcy0+Y291bnQgPCAkdGhpcy0+ZGF0YUxlbmd0aCkgewoJCQkJJHJvdyA9ICR0aGlzLT5jb3VudCAlICR0aGlzLT5ibG9ja3M7CgkJCQkkY29sID0gJHRoaXMtPmNvdW50IC8gJHRoaXMtPmJsb2NrczsKCQkJCWlmICgkY29sID49ICR0aGlzLT5yc2Jsb2Nrc1swXVsnZGF0YUxlbmd0aCddKSB7CgkJCQkJJHJvdyArPSAkdGhpcy0+YjE7CgkJCQl9CgkJCQkkcmV0ID0gJHRoaXMtPnJzYmxvY2tzWyRyb3ddWydkYXRhJ11bJGNvbF07CgkJCX0gZWxzZWlmICgkdGhpcy0+Y291bnQgPCAkdGhpcy0+ZGF0YUxlbmd0aCArICR0aGlzLT5lY2NMZW5ndGgpIHsKCQkJCSRyb3cgPSAoJHRoaXMtPmNvdW50IC0gJHRoaXMtPmRhdGFMZW5ndGgpICUgJHRoaXMtPmJsb2NrczsKCQkJCSRjb2wgPSAoJHRoaXMtPmNvdW50IC0gJHRoaXMtPmRhdGFMZW5ndGgpIC8gJHRoaXMtPmJsb2NrczsKCQkJCSRyZXQgPSAkdGhpcy0+cnNibG9ja3NbJHJvd11bJ2VjYyddWyRjb2xdOwoJCQl9IGVsc2UgewoJCQkJcmV0dXJuIDA7CgkJCX0KCQkJJHRoaXMtPmNvdW50Kys7CgkJCXJldHVybiAkcmV0OwoJCX0KCgkJLy8gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQoKCQkvLyBRUm1hc2sKCgkJLyoqCgkJICogV3JpdGUgRm9ybWF0IEluZm9ybWF0aW9uIG9uIGZyYW1lIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYmxhY2sgYml0cwoJCSAqIEBwYXJhbSBpbnQgJHdpZHRoIGZyYW1lIHdpZHRoCgkJICogQHBhcmFtIGFycmF5ICRmcmFtZSBmcmFtZQoJCSAqIEBwYXJhbSBhcnJheSAkbWFzayBtYXNraW5nIG1vZGUKCQkgKiBAcGFyYW0gaW50ICRsZXZlbCBlcnJvciBjb3JyZWN0aW9uIGxldmVsCgkJICogQHJldHVybiBpbnQgYmxhY2tzCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiB3cml0ZUZvcm1hdEluZm9ybWF0aW9uKCR3aWR0aCwgJiRmcmFtZSwgJG1hc2ssICRsZXZlbCkgewoJCQkkYmxhY2tzID0gMDsKCQkJJGZvcm1hdCA9ICAkdGhpcy0+Z2V0Rm9ybWF0SW5mbygkbWFzaywgJGxldmVsKTsKCQkJZm9yICgkaT0wOyAkaTw4OyArKyRpKSB7CgkJCQlpZiAoJGZvcm1hdCAmIDEpIHsKCQkJCQkkYmxhY2tzICs9IDI7CgkJCQkJJHYgPSAweDg1OwoJCQkJfSBlbHNlIHsKCQkJCQkkdiA9IDB4ODQ7CgkJCQl9CgkJCQkkZnJhbWVbOF1bJHdpZHRoIC0gMSAtICRpXSA9IGNocigkdik7CgkJCQlpZiAoJGkgPCA2KSB7CgkJCQkJJGZyYW1lWyRpXVs4XSA9IGNocigkdik7CgkJCQl9IGVsc2UgewoJCQkJCSRmcmFtZVskaSArIDFdWzhdID0gY2hyKCR2KTsKCQkJCX0KCQkJCSRmb3JtYXQgPSAkZm9ybWF0ID4+IDE7CgkJCX0KCQkJZm9yICgkaT0wOyAkaTw3OyArKyRpKSB7CgkJCWlmICgkZm9ybWF0ICYgMSkgewoJCQkJJGJsYWNrcyArPSAyOwoJCQkJJHYgPSAweDg1OwoJCQl9IGVsc2UgewoJCQkJJHYgPSAweDg0OwoJCQl9CgkJCSRmcmFtZVskd2lkdGggLSA3ICsgJGldWzhdID0gY2hyKCR2KTsKCQkJaWYgKCRpID09IDApIHsKCQkJCSRmcmFtZVs4XVs3XSA9IGNocigkdik7CgkJCX0gZWxzZSB7CgkJCQkkZnJhbWVbOF1bNiAtICRpXSA9IGNocigkdik7CgkJCX0KCQkJJGZvcm1hdCA9ICRmb3JtYXQgPj4gMTsKCQkJfQoJCQlyZXR1cm4gJGJsYWNrczsKCQl9CgoJCS8qKgoJCSAqIG1hc2swCgkJICogQHBhcmFtIGludCAkeCBYIHBvc2l0aW9uCgkJICogQHBhcmFtIGludCAkeSBZIHBvc2l0aW9uCgkJICogQHJldHVybiBpbnQgbWFzawoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gbWFzazAoJHgsICR5KSB7CgkJCXJldHVybiAoJHggKyAkeSkgJiAxOwoJCX0KCgkJLyoqCgkJICogbWFzazEKCQkgKiBAcGFyYW0gaW50ICR4IFggcG9zaXRpb24KCQkgKiBAcGFyYW0gaW50ICR5IFkgcG9zaXRpb24KCQkgKiBAcmV0dXJuIGludCBtYXNrCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBtYXNrMSgkeCwgJHkpIHsKCQkJcmV0dXJuICgkeSAmIDEpOwoJCX0KCgkJLyoqCgkJICogbWFzazIKCQkgKiBAcGFyYW0gaW50ICR4IFggcG9zaXRpb24KCQkgKiBAcGFyYW0gaW50ICR5IFkgcG9zaXRpb24KCQkgKiBAcmV0dXJuIGludCBtYXNrCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBtYXNrMigkeCwgJHkpIHsKCQkJcmV0dXJuICgkeCAlIDMpOwoJCX0KCgkJLyoqCgkJICogbWFzazMKCQkgKiBAcGFyYW0gaW50ICR4IFggcG9zaXRpb24KCQkgKiBAcGFyYW0gaW50ICR5IFkgcG9zaXRpb24KCQkgKiBAcmV0dXJuIGludCBtYXNrCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBtYXNrMygkeCwgJHkpIHsKCQkJcmV0dXJuICgkeCArICR5KSAlIDM7CgkJfQoKCQkvKioKCQkgKiBtYXNrNAoJCSAqIEBwYXJhbSBpbnQgJHggWCBwb3NpdGlvbgoJCSAqIEBwYXJhbSBpbnQgJHkgWSBwb3NpdGlvbgoJCSAqIEByZXR1cm4gaW50IG1hc2sKCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIG1hc2s0KCR4LCAkeSkgewoJCQlyZXR1cm4gKCgoaW50KSgkeSAvIDIpKSArICgoaW50KSgkeCAvIDMpKSkgJiAxOwoJCX0KCgkJLyoqCgkJICogbWFzazUKCQkgKiBAcGFyYW0gaW50ICR4IFggcG9zaXRpb24KCQkgKiBAcGFyYW0gaW50ICR5IFkgcG9zaXRpb24KCQkgKiBAcmV0dXJuIGludCBtYXNrCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBtYXNrNSgkeCwgJHkpIHsKCQkJcmV0dXJuICgoJHggKiAkeSkgJiAxKSArICgkeCAqICR5KSAlIDM7CgkJfQoKCQkvKioKCQkgKiBtYXNrNgoJCSAqIEBwYXJhbSBpbnQgJHggWCBwb3NpdGlvbgoJCSAqIEBwYXJhbSBpbnQgJHkgWSBwb3NpdGlvbgoJCSAqIEByZXR1cm4gaW50IG1hc2sKCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIG1hc2s2KCR4LCAkeSkgewoJCQlyZXR1cm4gKCgoJHggKiAkeSkgJiAxKSArICgkeCAqICR5KSAlIDMpICYgMTsKCQl9CgoJCS8qKgoJCSAqIG1hc2s3CgkJICogQHBhcmFtIGludCAkeCBYIHBvc2l0aW9uCgkJICogQHBhcmFtIGludCAkeSBZIHBvc2l0aW9uCgkJICogQHJldHVybiBpbnQgbWFzawoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gbWFzazcoJHgsICR5KSB7CgkJCXJldHVybiAoKCgkeCAqICR5KSAlIDMpICsgKCgkeCArICR5KSAmIDEpKSAmIDE7CgkJfQoKCQkvKioKCQkgKiBSZXR1cm4gYml0bWFzawoJCSAqIEBwYXJhbSBpbnQgJG1hc2tObyBtYXNrIG51bWJlcgoJCSAqIEBwYXJhbSBpbnQgJHdpZHRoIHdpZHRoCgkJICogQHBhcmFtIGFycmF5ICRmcmFtZSBmcmFtZQoJCSAqIEByZXR1cm4gYXJyYXkgYml0bWFzawoJCSAqLwoJCXByb3RlY3RlZCBmdW5jdGlvbiBnZW5lcmF0ZU1hc2tObygkbWFza05vLCAkd2lkdGgsICRmcmFtZSkgewoJCQkkYml0TWFzayA9IGFycmF5X2ZpbGwoMCwgJHdpZHRoLCBhcnJheV9maWxsKDAsICR3aWR0aCwgMCkpOwoJCQlmb3IgKCR5PTA7ICR5PCR3aWR0aDsgKyskeSkgewoJCQkJZm9yICgkeD0wOyAkeDwkd2lkdGg7ICsrJHgpIHsKCQkJCQlpZiAob3JkKCRmcmFtZVskeV1bJHhdKSAmIDB4ODApIHsKCQkJCQkJJGJpdE1hc2tbJHldWyR4XSA9IDA7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJG1hc2tGdW5jID0gY2FsbF91c2VyX2Z1bmMoYXJyYXkoJHRoaXMsICdtYXNrJy4kbWFza05vKSwgJHgsICR5KTsKCQkJCQkJJGJpdE1hc2tbJHldWyR4XSA9ICgkbWFza0Z1bmMgPT0gMCk/MTowOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQlyZXR1cm4gJGJpdE1hc2s7CgkJfQoKCQkvKioKCQkgKiBtYWtlTWFza05vCgkJICogQHBhcmFtIGludCAkbWFza05vCgkJICogQHBhcmFtIGludCAkd2lkdGgKCQkgKiBAcGFyYW0gaW50ICRzCgkJICogQHBhcmFtIGludCAkZAoJCSAqIEBwYXJhbSBib29sZWFuICRtYXNrR2VuT25seQoJCSAqIEByZXR1cm4gaW50IGIKCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIG1ha2VNYXNrTm8oJG1hc2tObywgJHdpZHRoLCAkcywgJiRkLCAkbWFza0dlbk9ubHk9ZmFsc2UpIHsKCQkJJGIgPSAwOwoJCQkkYml0TWFzayA9IGFycmF5KCk7CgkJCSRiaXRNYXNrID0gJHRoaXMtPmdlbmVyYXRlTWFza05vKCRtYXNrTm8sICR3aWR0aCwgJHMsICRkKTsKCQkJaWYgKCRtYXNrR2VuT25seSkgewoJCQkJcmV0dXJuOwoJCQl9CgkJCSRkID0gJHM7CgkJCWZvciAoJHk9MDsgJHk8JHdpZHRoOyArKyR5KSB7CgkJCQlmb3IgKCR4PTA7ICR4PCR3aWR0aDsgKyskeCkgewoJCQkJCWlmICgkYml0TWFza1skeV1bJHhdID09IDEpIHsKCQkJCQkJJGRbJHldWyR4XSA9IGNocihvcmQoJHNbJHldWyR4XSkgXiAoaW50KSRiaXRNYXNrWyR5XVskeF0pOwoJCQkJCX0KCQkJCQkkYiArPSAoaW50KShvcmQoJGRbJHldWyR4XSkgJiAxKTsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gJGI7CgkJfQoKCQkvKioKCQkgKiBtYWtlTWFzawoJCSAqIEBwYXJhbSBpbnQgJHdpZHRoCgkJICogQHBhcmFtIGFycmF5ICRmcmFtZQoJCSAqIEBwYXJhbSBpbnQgJG1hc2tObwoJCSAqIEBwYXJhbSBpbnQgJGxldmVsCgkJICogQHJldHVybiBhcnJheSBtYXNrCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBtYWtlTWFzaygkd2lkdGgsICRmcmFtZSwgJG1hc2tObywgJGxldmVsKSB7CgkJCSRtYXNrZWQgPSBhcnJheV9maWxsKDAsICR3aWR0aCwgc3RyX3JlcGVhdCgiXDAiLCAkd2lkdGgpKTsKCQkJJHRoaXMtPm1ha2VNYXNrTm8oJG1hc2tObywgJHdpZHRoLCAkZnJhbWUsICRtYXNrZWQpOwoJCQkkdGhpcy0+d3JpdGVGb3JtYXRJbmZvcm1hdGlvbigkd2lkdGgsICRtYXNrZWQsICRtYXNrTm8sICRsZXZlbCk7CgkJCXJldHVybiAkbWFza2VkOwoJCX0KCgkJLyoqCgkJICogY2FsY04xTjMKCQkgKiBAcGFyYW0gaW50ICRsZW5ndGgKCQkgKiBAcmV0dXJuIGludCBkZW1lcml0CgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBjYWxjTjFOMygkbGVuZ3RoKSB7CgkJCSRkZW1lcml0ID0gMDsKCQkJZm9yICgkaT0wOyAkaTwkbGVuZ3RoOyArKyRpKSB7CgkJCQlpZiAoJHRoaXMtPnJ1bkxlbmd0aFskaV0gPj0gNSkgewoJCQkJCSRkZW1lcml0ICs9IChOMSArICgkdGhpcy0+cnVuTGVuZ3RoWyRpXSAtIDUpKTsKCQkJCX0KCQkJCWlmICgkaSAmIDEpIHsKCQkJCQlpZiAoKCRpID49IDMpIEFORCAoJGkgPCAoJGxlbmd0aC0yKSkgQU5EICgkdGhpcy0+cnVuTGVuZ3RoWyRpXSAlIDMgPT0gMCkpIHsKCQkJCQkJJGZhY3QgPSAoaW50KSgkdGhpcy0+cnVuTGVuZ3RoWyRpXSAvIDMpOwoJCQkJCQlpZiAoKCR0aGlzLT5ydW5MZW5ndGhbJGktMl0gPT0gJGZhY3QpCgkJCQkJCQlBTkQgKCR0aGlzLT5ydW5MZW5ndGhbJGktMV0gPT0gJGZhY3QpCgkJCQkJCQlBTkQgKCR0aGlzLT5ydW5MZW5ndGhbJGkrMV0gPT0gJGZhY3QpCgkJCQkJCQlBTkQgKCR0aGlzLT5ydW5MZW5ndGhbJGkrMl0gPT0gJGZhY3QpKSB7CgkJCQkJCQlpZiAoKCR0aGlzLT5ydW5MZW5ndGhbJGktM10gPCAwKSBPUiAoJHRoaXMtPnJ1bkxlbmd0aFskaS0zXSA+PSAoNCAqICRmYWN0KSkpIHsKCQkJCQkJCQkkZGVtZXJpdCArPSBOMzsKCQkJCQkJCX0gZWxzZWlmICgoKCRpKzMpID49ICRsZW5ndGgpIE9SICgkdGhpcy0+cnVuTGVuZ3RoWyRpKzNdID49ICg0ICogJGZhY3QpKSkgewoJCQkJCQkJCSRkZW1lcml0ICs9IE4zOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJCXJldHVybiAkZGVtZXJpdDsKCQl9CgoJCS8qKgoJCSAqIGV2YWx1YXRlU3ltYm9sCgkJICogQHBhcmFtIGludCAkd2lkdGgKCQkgKiBAcGFyYW0gYXJyYXkgJGZyYW1lCgkJICogQHJldHVybiBpbnQgZGVtZXJpdAoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gZXZhbHVhdGVTeW1ib2woJHdpZHRoLCAkZnJhbWUpIHsKCQkJJGhlYWQgPSAwOwoJCQkkZGVtZXJpdCA9IDA7CgkJCWZvciAoJHk9MDsgJHk8JHdpZHRoOyArKyR5KSB7CgkJCQkkaGVhZCA9IDA7CgkJCQkkdGhpcy0+cnVuTGVuZ3RoWzBdID0gMTsKCQkJCSRmcmFtZVkgPSAkZnJhbWVbJHldOwoJCQkJaWYgKCR5ID4gMCkgewoJCQkJCSRmcmFtZVlNID0gJGZyYW1lWyR5LTFdOwoJCQkJfQoJCQkJZm9yICgkeD0wOyAkeDwkd2lkdGg7ICsrJHgpIHsKCQkJCQlpZiAoKCR4ID4gMCkgQU5EICgkeSA+IDApKSB7CgkJCQkJCSRiMjIgPSBvcmQoJGZyYW1lWVskeF0pICYgb3JkKCRmcmFtZVlbJHgtMV0pICYgb3JkKCRmcmFtZVlNWyR4XSkgJiBvcmQoJGZyYW1lWU1bJHgtMV0pOwoJCQkJCQkkdzIyID0gb3JkKCRmcmFtZVlbJHhdKSB8IG9yZCgkZnJhbWVZWyR4LTFdKSB8IG9yZCgkZnJhbWVZTVskeF0pIHwgb3JkKCRmcmFtZVlNWyR4LTFdKTsKCQkJCQkJaWYgKCgkYjIyIHwgKCR3MjIgXiAxKSkgJiAxKSB7CgkJCQkJCQkkZGVtZXJpdCArPSBOMjsKCQkJCQkJfQoJCQkJCX0KCQkJCQlpZiAoKCR4ID09IDApIEFORCAob3JkKCRmcmFtZVlbJHhdKSAmIDEpKSB7CgkJCQkJCSR0aGlzLT5ydW5MZW5ndGhbMF0gPSAtMTsKCQkJCQkJJGhlYWQgPSAxOwoJCQkJCQkkdGhpcy0+cnVuTGVuZ3RoWyRoZWFkXSA9IDE7CgkJCQkJfSBlbHNlaWYgKCR4ID4gMCkgewoJCQkJCQlpZiAoKG9yZCgkZnJhbWVZWyR4XSkgXiBvcmQoJGZyYW1lWVskeC0xXSkpICYgMSkgewoJCQkJCQkJJGhlYWQrKzsKCQkJCQkJCSR0aGlzLT5ydW5MZW5ndGhbJGhlYWRdID0gMTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSR0aGlzLT5ydW5MZW5ndGhbJGhlYWRdKys7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQkkZGVtZXJpdCArPSAkdGhpcy0+Y2FsY04xTjMoJGhlYWQrMSk7CgkJCX0KCQkJZm9yICgkeD0wOyAkeDwkd2lkdGg7ICsrJHgpIHsKCQkJCSRoZWFkID0gMDsKCQkJCSR0aGlzLT5ydW5MZW5ndGhbMF0gPSAxOwoJCQkJZm9yICgkeT0wOyAkeTwkd2lkdGg7ICsrJHkpIHsKCQkJCQlpZiAoKCR5ID09IDApIEFORCAob3JkKCRmcmFtZVskeV1bJHhdKSAmIDEpKSB7CgkJCQkJCSR0aGlzLT5ydW5MZW5ndGhbMF0gPSAtMTsKCQkJCQkJJGhlYWQgPSAxOwoJCQkJCQkkdGhpcy0+cnVuTGVuZ3RoWyRoZWFkXSA9IDE7CgkJCQkJfSBlbHNlaWYgKCR5ID4gMCkgewoJCQkJCQlpZiAoKG9yZCgkZnJhbWVbJHldWyR4XSkgXiBvcmQoJGZyYW1lWyR5LTFdWyR4XSkpICYgMSkgewoJCQkJCQkJJGhlYWQrKzsKCQkJCQkJCSR0aGlzLT5ydW5MZW5ndGhbJGhlYWRdID0gMTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSR0aGlzLT5ydW5MZW5ndGhbJGhlYWRdKys7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQkkZGVtZXJpdCArPSAkdGhpcy0+Y2FsY04xTjMoJGhlYWQrMSk7CgkJCX0KCQkJcmV0dXJuICRkZW1lcml0OwoJCX0KCgkJLyoqCgkJICogbWFzawoJCSAqIEBwYXJhbSBpbnQgJHdpZHRoCgkJICogQHBhcmFtIGFycmF5ICRmcmFtZQoJCSAqIEBwYXJhbSBpbnQgJGxldmVsCgkJICogQHJldHVybiBhcnJheSBiZXN0IG1hc2sKCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIG1hc2soJHdpZHRoLCAkZnJhbWUsICRsZXZlbCkgewoJCQkkbWluRGVtZXJpdCA9IFBIUF9JTlRfTUFYOwoJCQkkYmVzdE1hc2tOdW0gPSAwOwoJCQkkYmVzdE1hc2sgPSBhcnJheSgpOwoJCQkkY2hlY2tlZF9tYXNrcyA9IGFycmF5KDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOwoJCQlpZiAoUVJfRklORF9GUk9NX1JBTkRPTSAhPT0gZmFsc2UpIHsKCQkJCSRob3dNYW51T3V0ID0gOCAtIChRUl9GSU5EX0ZST01fUkFORE9NICUgOSk7CgkJCQlmb3IgKCRpID0gMDsgJGkgPCAgJGhvd01hbnVPdXQ7ICsrJGkpIHsKCQkJCQkkcmVtUG9zID0gcmFuZCAoMCwgY291bnQoJGNoZWNrZWRfbWFza3MpLTEpOwoJCQkJCXVuc2V0KCRjaGVja2VkX21hc2tzWyRyZW1Qb3NdKTsKCQkJCQkkY2hlY2tlZF9tYXNrcyA9IGFycmF5X3ZhbHVlcygkY2hlY2tlZF9tYXNrcyk7CgkJCQl9CgkJCX0KCQkJJGJlc3RNYXNrID0gJGZyYW1lOwoJCQlmb3JlYWNoICgkY2hlY2tlZF9tYXNrcyBhcyAkaSkgewoJCQkJJG1hc2sgPSBhcnJheV9maWxsKDAsICR3aWR0aCwgc3RyX3JlcGVhdCgiXDAiLCAkd2lkdGgpKTsKCQkJCSRkZW1lcml0ID0gMDsKCQkJCSRibGFja3MgPSAwOwoJCQkJJGJsYWNrcyAgPSAkdGhpcy0+bWFrZU1hc2tObygkaSwgJHdpZHRoLCAkZnJhbWUsICRtYXNrKTsKCQkJCSRibGFja3MgKz0gJHRoaXMtPndyaXRlRm9ybWF0SW5mb3JtYXRpb24oJHdpZHRoLCAkbWFzaywgJGksICRsZXZlbCk7CgkJCQkkYmxhY2tzICA9IChpbnQpKDEwMCAqICRibGFja3MgLyAoJHdpZHRoICogJHdpZHRoKSk7CgkJCQkkZGVtZXJpdCA9IChpbnQpKChpbnQpKGFicygkYmxhY2tzIC0gNTApIC8gNSkgKiBONCk7CgkJCQkkZGVtZXJpdCArPSAkdGhpcy0+ZXZhbHVhdGVTeW1ib2woJHdpZHRoLCAkbWFzayk7CgkJCQlpZiAoJGRlbWVyaXQgPCAkbWluRGVtZXJpdCkgewoJCQkJCSRtaW5EZW1lcml0ID0gJGRlbWVyaXQ7CgkJCQkJJGJlc3RNYXNrID0gJG1hc2s7CgkJCQkJJGJlc3RNYXNrTnVtID0gJGk7CgkJCQl9CgkJCX0KCQkJcmV0dXJuICRiZXN0TWFzazsKCQl9CgoJCS8vIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KCgkJLy8gUVJzcGxpdAoKCQkvKioKCQkgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY2hhcmFjdGVyIGF0IHNwZWNpZmllZCBwb3NpdGlvbiBpcyBhIG51bWJlcgoJCSAqIEBwYXJhbSBzdHJpbmcgJHN0ciBzdHJpbmcKCQkgKiBAcGFyYW0gaW50ICRwb3MgY2hhcmFjdGVkIHBvc2l0aW9uCgkJICogQHJldHVybiBib29sZWFuIHRydWUgb2YgZmFsc2UKCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIGlzZGlnaXRhdCgkc3RyLCAkcG9zKSB7CgkJCWlmICgkcG9zID49IHN0cmxlbigkc3RyKSkgewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCXJldHVybiAoKG9yZCgkc3RyWyRwb3NdKSA+PSBvcmQoJzAnKSkmJihvcmQoJHN0clskcG9zXSkgPD0gb3JkKCc5JykpKTsKCQl9CgoJCS8qKgoJCSAqIFJldHVybiB0cnVlIGlmIHRoZSBjaGFyYWN0ZXIgYXQgc3BlY2lmaWVkIHBvc2l0aW9uIGlzIGFuIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXIKCQkgKiBAcGFyYW0gc3RyaW5nICRzdHIgc3RyaW5nCgkJICogQHBhcmFtIGludCAkcG9zIGNoYXJhY3RlZCBwb3NpdGlvbgoJCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIG9mIGZhbHNlCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBpc2FsbnVtYXQoJHN0ciwgJHBvcykgewoJCQlpZiAoJHBvcyA+PSBzdHJsZW4oJHN0cikpIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQlyZXR1cm4gKCR0aGlzLT5sb29rQW5UYWJsZShvcmQoJHN0clskcG9zXSkpID49IDApOwoJCX0KCgkJLyoqCgkJICogaWRlbnRpZnlNb2RlCgkJICogQHBhcmFtIGludCAkcG9zCgkJICogQHJldHVybiBpbnQgbW9kZQoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gaWRlbnRpZnlNb2RlKCRwb3MpIHsKCQkJaWYgKCRwb3MgPj0gc3RybGVuKCR0aGlzLT5kYXRhU3RyKSkgewoJCQkJcmV0dXJuIFFSX01PREVfTkw7CgkJCX0KCQkJJGMgPSAkdGhpcy0+ZGF0YVN0clskcG9zXTsKCQkJaWYgKCR0aGlzLT5pc2RpZ2l0YXQoJHRoaXMtPmRhdGFTdHIsICRwb3MpKSB7CgkJCQlyZXR1cm4gUVJfTU9ERV9OTTsKCQkJfSBlbHNlaWYgKCR0aGlzLT5pc2FsbnVtYXQoJHRoaXMtPmRhdGFTdHIsICRwb3MpKSB7CgkJCQlyZXR1cm4gUVJfTU9ERV9BTjsKCQkJfSBlbHNlaWYgKCR0aGlzLT5oaW50ID09IFFSX01PREVfS0opIHsKCQkJCWlmICgkcG9zKzEgPCBzdHJsZW4oJHRoaXMtPmRhdGFTdHIpKSB7CgkJCQkJJGQgPSAkdGhpcy0+ZGF0YVN0clskcG9zKzFdOwoJCQkJCSR3b3JkID0gKG9yZCgkYykgPDwgOCkgfCBvcmQoJGQpOwoJCQkJCWlmICgoJHdvcmQgPj0gMHg4MTQwICYmICR3b3JkIDw9IDB4OWZmYykgT1IgKCR3b3JkID49IDB4ZTA0MCAmJiAkd29yZCA8PSAweGViYmYpKSB7CgkJCQkJCXJldHVybiBRUl9NT0RFX0tKOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQlyZXR1cm4gUVJfTU9ERV84QjsKCQl9CgoJCS8qKgoJCSAqIGVhdE51bQoJCSAqIEByZXR1cm4gaW50IHJ1bgoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gZWF0TnVtKCkgewoJCQkkbG4gPSAkdGhpcy0+bGVuZ3RoSW5kaWNhdG9yKFFSX01PREVfTk0sICR0aGlzLT52ZXJzaW9uKTsKCQkJJHAgPSAwOwoJCQl3aGlsZSgkdGhpcy0+aXNkaWdpdGF0KCR0aGlzLT5kYXRhU3RyLCAkcCkpIHsKCQkJCSRwKys7CgkJCX0KCQkJJHJ1biA9ICRwOwoJCQkkbW9kZSA9ICR0aGlzLT5pZGVudGlmeU1vZGUoJHApOwoJCQlpZiAoJG1vZGUgPT0gUVJfTU9ERV84QikgewoJCQkJJGRpZiA9ICR0aGlzLT5lc3RpbWF0ZUJpdHNNb2RlTnVtKCRydW4pICsgNCArICRsbgoJCQkJKyAkdGhpcy0+ZXN0aW1hdGVCaXRzTW9kZTgoMSkgICAgICAgICAvLyArIDQgKyBsOAoJCQkJLSAkdGhpcy0+ZXN0aW1hdGVCaXRzTW9kZTgoJHJ1biArIDEpOyAvLyAtIDQgLSBsOAoJCQkJaWYgKCRkaWYgPiAwKSB7CgkJCQkJcmV0dXJuICR0aGlzLT5lYXQ4KCk7CgkJCQl9CgkJCX0KCQkJaWYgKCRtb2RlID09IFFSX01PREVfQU4pIHsKCQkJCSRkaWYgPSAkdGhpcy0+ZXN0aW1hdGVCaXRzTW9kZU51bSgkcnVuKSArIDQgKyAkbG4KCQkJCSsgJHRoaXMtPmVzdGltYXRlQml0c01vZGVBbigxKSAgICAgICAgLy8gKyA0ICsgbGEKCQkJCS0gJHRoaXMtPmVzdGltYXRlQml0c01vZGVBbigkcnVuICsgMSk7Ly8gLSA0IC0gbGEKCQkJCWlmICgkZGlmID4gMCkgewoJCQkJCXJldHVybiAkdGhpcy0+ZWF0QW4oKTsKCQkJCX0KCQkJfQoJCQkkdGhpcy0+aXRlbXMgPSAkdGhpcy0+YXBwZW5kTmV3SW5wdXRJdGVtKCR0aGlzLT5pdGVtcywgUVJfTU9ERV9OTSwgJHJ1biwgc3RyX3NwbGl0KCR0aGlzLT5kYXRhU3RyKSk7CgkJCXJldHVybiAkcnVuOwoJCX0KCgkJLyoqCgkJICogZWF0QW4KCQkgKiBAcmV0dXJuIGludCBydW4KCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIGVhdEFuKCkgewoJCQkkbGEgPSAkdGhpcy0+bGVuZ3RoSW5kaWNhdG9yKFFSX01PREVfQU4sICAkdGhpcy0+dmVyc2lvbik7CgkJCSRsbiA9ICR0aGlzLT5sZW5ndGhJbmRpY2F0b3IoUVJfTU9ERV9OTSwgJHRoaXMtPnZlcnNpb24pOwoJCQkkcCA9IDA7CgkJCXdoaWxlKCR0aGlzLT5pc2FsbnVtYXQoJHRoaXMtPmRhdGFTdHIsICRwKSkgewoJCQkJaWYgKCR0aGlzLT5pc2RpZ2l0YXQoJHRoaXMtPmRhdGFTdHIsICRwKSkgewoJCQkJCSRxID0gJHA7CgkJCQkJd2hpbGUoJHRoaXMtPmlzZGlnaXRhdCgkdGhpcy0+ZGF0YVN0ciwgJHEpKSB7CgkJCQkJCSRxKys7CgkJCQkJfQoJCQkJCSRkaWYgPSAkdGhpcy0+ZXN0aW1hdGVCaXRzTW9kZUFuKCRwKSAvLyArIDQgKyBsYQoJCQkJCSsgJHRoaXMtPmVzdGltYXRlQml0c01vZGVOdW0oJHEgLSAkcCkgKyA0ICsgJGxuCgkJCQkJLSAkdGhpcy0+ZXN0aW1hdGVCaXRzTW9kZUFuKCRxKTsgLy8gLSA0IC0gbGEKCQkJCQlpZiAoJGRpZiA8IDApIHsKCQkJCQkJYnJlYWs7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJHAgPSAkcTsKCQkJCQl9CgkJCQl9IGVsc2UgewoJCQkJCSRwKys7CgkJCQl9CgkJCX0KCQkJJHJ1biA9ICRwOwoJCQlpZiAoISR0aGlzLT5pc2FsbnVtYXQoJHRoaXMtPmRhdGFTdHIsICRwKSkgewoJCQkJJGRpZiA9ICR0aGlzLT5lc3RpbWF0ZUJpdHNNb2RlQW4oJHJ1bikgKyA0ICsgJGxhCgkJCQkrICR0aGlzLT5lc3RpbWF0ZUJpdHNNb2RlOCgxKSAvLyArIDQgKyBsOAoJCQkJLSAkdGhpcy0+ZXN0aW1hdGVCaXRzTW9kZTgoJHJ1biArIDEpOyAvLyAtIDQgLSBsOAoJCQkJaWYgKCRkaWYgPiAwKSB7CgkJCQkJcmV0dXJuICR0aGlzLT5lYXQ4KCk7CgkJCQl9CgkJCX0KCQkJJHRoaXMtPml0ZW1zID0gJHRoaXMtPmFwcGVuZE5ld0lucHV0SXRlbSgkdGhpcy0+aXRlbXMsIFFSX01PREVfQU4sICRydW4sIHN0cl9zcGxpdCgkdGhpcy0+ZGF0YVN0cikpOwoJCQlyZXR1cm4gJHJ1bjsKCQl9CgoJCS8qKgoJCSAqIGVhdEthbmppCgkJICogQHJldHVybiBpbnQgcnVuCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBlYXRLYW5qaSgpIHsKCQkJJHAgPSAwOwoJCQl3aGlsZSgkdGhpcy0+aWRlbnRpZnlNb2RlKCRwKSA9PSBRUl9NT0RFX0tKKSB7CgkJCQkkcCArPSAyOwoJCQl9CgkJCSR0aGlzLT5pdGVtcyA9ICR0aGlzLT5hcHBlbmROZXdJbnB1dEl0ZW0oJHRoaXMtPml0ZW1zLCBRUl9NT0RFX0tKLCAkcCwgc3RyX3NwbGl0KCR0aGlzLT5kYXRhU3RyKSk7CgkJCXJldHVybiAkcnVuOwoJCX0KCgkJLyoqCgkJICogZWF0OAoJCSAqIEByZXR1cm4gaW50IHJ1bgoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gZWF0OCgpIHsKCQkJJGxhID0gJHRoaXMtPmxlbmd0aEluZGljYXRvcihRUl9NT0RFX0FOLCAkdGhpcy0+dmVyc2lvbik7CgkJCSRsbiA9ICR0aGlzLT5sZW5ndGhJbmRpY2F0b3IoUVJfTU9ERV9OTSwgJHRoaXMtPnZlcnNpb24pOwoJCQkkcCA9IDE7CgkJCSRkYXRhU3RyTGVuID0gc3RybGVuKCR0aGlzLT5kYXRhU3RyKTsKCQkJd2hpbGUoJHAgPCAkZGF0YVN0ckxlbikgewoJCQkJJG1vZGUgPSAkdGhpcy0+aWRlbnRpZnlNb2RlKCRwKTsKCQkJCWlmICgkbW9kZSA9PSBRUl9NT0RFX0tKKSB7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQlpZiAoJG1vZGUgPT0gUVJfTU9ERV9OTSkgewoJCQkJCSRxID0gJHA7CgkJCQkJd2hpbGUoJHRoaXMtPmlzZGlnaXRhdCgkdGhpcy0+ZGF0YVN0ciwgJHEpKSB7CgkJCQkJCSRxKys7CgkJCQkJfQoJCQkJCSRkaWYgPSAkdGhpcy0+ZXN0aW1hdGVCaXRzTW9kZTgoJHApIC8vICsgNCArIGw4CgkJCQkJKyAkdGhpcy0+ZXN0aW1hdGVCaXRzTW9kZU51bSgkcSAtICRwKSArIDQgKyAkbG4KCQkJCQktICR0aGlzLT5lc3RpbWF0ZUJpdHNNb2RlOCgkcSk7IC8vIC0gNCAtIGw4CgkJCQkJaWYgKCRkaWYgPCAwKSB7CgkJCQkJCWJyZWFrOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSRwID0gJHE7CgkJCQkJfQoJCQkJfSBlbHNlaWYgKCRtb2RlID09IFFSX01PREVfQU4pIHsKCQkJCQkkcSA9ICRwOwoJCQkJCXdoaWxlKCR0aGlzLT5pc2FsbnVtYXQoJHRoaXMtPmRhdGFTdHIsICRxKSkgewoJCQkJCQkkcSsrOwoJCQkJCX0KCQkJCQkkZGlmID0gJHRoaXMtPmVzdGltYXRlQml0c01vZGU4KCRwKSAgLy8gKyA0ICsgbDgKCQkJCQkrICR0aGlzLT5lc3RpbWF0ZUJpdHNNb2RlQW4oJHEgLSAkcCkgKyA0ICsgJGxhCgkJCQkJLSAkdGhpcy0+ZXN0aW1hdGVCaXRzTW9kZTgoJHEpOyAvLyAtIDQgLSBsOAoJCQkJCWlmICgkZGlmIDwgMCkgewoJCQkJCQlicmVhazsKCQkJCQl9IGVsc2UgewoJCQkJCQkkcCA9ICRxOwoJCQkJCX0KCQkJCX0gZWxzZSB7CgkJCQkJJHArKzsKCQkJCX0KCQkJfQoJCQkkcnVuID0gJHA7CgkJCSR0aGlzLT5pdGVtcyA9ICR0aGlzLT5hcHBlbmROZXdJbnB1dEl0ZW0oJHRoaXMtPml0ZW1zLCBRUl9NT0RFXzhCLCAkcnVuLCBzdHJfc3BsaXQoJHRoaXMtPmRhdGFTdHIpKTsKCQkJcmV0dXJuICRydW47CgkJfQoKCQkvKioKCQkgKiBzcGxpdFN0cmluZwoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gc3BsaXRTdHJpbmcoKSB7CgkJCXdoaWxlIChzdHJsZW4oJHRoaXMtPmRhdGFTdHIpID4gMCkgewoJCQkJaWYgKCR0aGlzLT5kYXRhU3RyID09ICcnKSB7CgkJCQkJcmV0dXJuIDA7CgkJCQl9CgkJCQkkbW9kZSA9ICR0aGlzLT5pZGVudGlmeU1vZGUoMCk7CgkJCQlzd2l0Y2ggKCRtb2RlKSB7CgkJCQkJY2FzZSBRUl9NT0RFX05NOiB7CgkJCQkJCSRsZW5ndGggPSAkdGhpcy0+ZWF0TnVtKCk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQljYXNlIFFSX01PREVfQU46IHsKCQkJCQkJJGxlbmd0aCA9ICR0aGlzLT5lYXRBbigpOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJY2FzZSBRUl9NT0RFX0tKOiB7CgkJCQkJCWlmICgkaGludCA9PSBRUl9NT0RFX0tKKSB7CgkJCQkJCQkkbGVuZ3RoID0gJHRoaXMtPmVhdEthbmppKCk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkbGVuZ3RoID0gJHRoaXMtPmVhdDgoKTsKCQkJCQkJfQoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJZGVmYXVsdDogewoJCQkJCQkkbGVuZ3RoID0gJHRoaXMtPmVhdDgoKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQkJaWYgKCRsZW5ndGggPT0gMCkgewoJCQkJCXJldHVybiAwOwoJCQkJfQoJCQkJaWYgKCRsZW5ndGggPCAwKSB7CgkJCQkJcmV0dXJuIC0xOwoJCQkJfQoJCQkJJHRoaXMtPmRhdGFTdHIgPSBzdWJzdHIoJHRoaXMtPmRhdGFTdHIsICRsZW5ndGgpOwoJCQl9CgkJfQoKCQkvKioKCQkgKiB0b1VwcGVyCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiB0b1VwcGVyKCkgewoJCQkkc3RyaW5nTGVuID0gc3RybGVuKCR0aGlzLT5kYXRhU3RyKTsKCQkJJHAgPSAwOwoJCQl3aGlsZSAoJHAgPCAkc3RyaW5nTGVuKSB7CgkJCQkkbW9kZSA9ICR0aGlzLT5pZGVudGlmeU1vZGUoc3Vic3RyKCR0aGlzLT5kYXRhU3RyLCAkcCksICR0aGlzLT5oaW50KTsKCQkJCWlmICgkbW9kZSA9PSBRUl9NT0RFX0tKKSB7CgkJCQkJJHAgKz0gMjsKCQkJCX0gZWxzZSB7CgkJCQkJaWYgKChvcmQoJHRoaXMtPmRhdGFTdHJbJHBdKSA+PSBvcmQoJ2EnKSkgQU5EIChvcmQoJHRoaXMtPmRhdGFTdHJbJHBdKSA8PSBvcmQoJ3onKSkpIHsKCQkJCQkJJHRoaXMtPmRhdGFTdHJbJHBdID0gY2hyKG9yZCgkdGhpcy0+ZGF0YVN0clskcF0pIC0gMzIpOwoJCQkJCX0KCQkJCQkkcCsrOwoJCQkJfQoJCQl9CgkJCXJldHVybiAkdGhpcy0+ZGF0YVN0cjsKCQl9CgoJCS8vIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KCgkJLy8gUVJpbnB1dEl0ZW0KCgkJLyoqCgkJICogbmV3SW5wdXRJdGVtCgkJICogQHBhcmFtIGludCAkbW9kZQoJCSAqIEBwYXJhbSBpbnQgJHNpemUKCQkgKiBAcGFyYW0gYXJyYXkgJGRhdGEKCQkgKiBAcGFyYW0gYXJyYXkgJGJzdHJlYW0KCQkgKiBAcmV0dXJuIGFycmF5IGlucHV0IGl0ZW0KCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIG5ld0lucHV0SXRlbSgkbW9kZSwgJHNpemUsICRkYXRhLCAkYnN0cmVhbT1udWxsKSB7CgkJCSRzZXREYXRhID0gYXJyYXlfc2xpY2UoJGRhdGEsIDAsICRzaXplKTsKCQkJaWYgKGNvdW50KCRzZXREYXRhKSA8ICRzaXplKSB7CgkJCQkkc2V0RGF0YSA9IGFycmF5X21lcmdlKCRzZXREYXRhLCBhcnJheV9maWxsKDAsICgkc2l6ZSAtIGNvdW50KCRzZXREYXRhKSksIDApKTsKCQkJfQoJCQlpZiAoISR0aGlzLT5jaGVjaygkbW9kZSwgJHNpemUsICRzZXREYXRhKSkgewoJCQkJcmV0dXJuIE5VTEw7CgkJCX0KCQkJJGlucHV0aXRlbSA9IGFycmF5KCk7CgkJCSRpbnB1dGl0ZW1bJ21vZGUnXSA9ICRtb2RlOwoJCQkkaW5wdXRpdGVtWydzaXplJ10gPSAkc2l6ZTsKCQkJJGlucHV0aXRlbVsnZGF0YSddID0gJHNldERhdGE7CgkJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9ICRic3RyZWFtOwoJCQlyZXR1cm4gJGlucHV0aXRlbTsKCQl9CgoJCS8qKgoJCSAqIGVuY29kZU1vZGVOdW0KCQkgKiBAcGFyYW0gYXJyYXkgJGlucHV0aXRlbQoJCSAqIEBwYXJhbSBpbnQgJHZlcnNpb24KCQkgKiBAcmV0dXJuIGFycmF5IGlucHV0IGl0ZW0KCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIGVuY29kZU1vZGVOdW0oJGlucHV0aXRlbSwgJHZlcnNpb24pIHsKCQkJJHdvcmRzID0gKGludCkoJGlucHV0aXRlbVsnc2l6ZSddIC8gMyk7CgkJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9IGFycmF5KCk7CgkJCSR2YWwgPSAweDE7CgkJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9ICR0aGlzLT5hcHBlbmROdW0oJGlucHV0aXRlbVsnYnN0cmVhbSddLCA0LCAkdmFsKTsKCQkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gJHRoaXMtPmFwcGVuZE51bSgkaW5wdXRpdGVtWydic3RyZWFtJ10sICR0aGlzLT5sZW5ndGhJbmRpY2F0b3IoUVJfTU9ERV9OTSwgJHZlcnNpb24pLCAkaW5wdXRpdGVtWydzaXplJ10pOwoJCQlmb3IgKCRpPTA7ICRpIDwgJHdvcmRzOyArKyRpKSB7CgkJCQkkdmFsICA9IChvcmQoJGlucHV0aXRlbVsnZGF0YSddWyRpKjMgIF0pIC0gb3JkKCcwJykpICogMTAwOwoJCQkJJHZhbCArPSAob3JkKCRpbnB1dGl0ZW1bJ2RhdGEnXVskaSozKzFdKSAtIG9yZCgnMCcpKSAqIDEwOwoJCQkJJHZhbCArPSAob3JkKCRpbnB1dGl0ZW1bJ2RhdGEnXVskaSozKzJdKSAtIG9yZCgnMCcpKTsKCQkJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9ICR0aGlzLT5hcHBlbmROdW0oJGlucHV0aXRlbVsnYnN0cmVhbSddLCAxMCwgJHZhbCk7CgkJCX0KCQkJaWYgKCRpbnB1dGl0ZW1bJ3NpemUnXSAtICR3b3JkcyAqIDMgPT0gMSkgewoJCQkJJHZhbCA9IG9yZCgkaW5wdXRpdGVtWydkYXRhJ11bJHdvcmRzKjNdKSAtIG9yZCgnMCcpOwoJCQkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gJHRoaXMtPmFwcGVuZE51bSgkaW5wdXRpdGVtWydic3RyZWFtJ10sIDQsICR2YWwpOwoJCQl9IGVsc2VpZiAoKCRpbnB1dGl0ZW1bJ3NpemUnXSAtICgkd29yZHMgKiAzKSkgPT0gMikgewoJCQkJJHZhbCAgPSAob3JkKCRpbnB1dGl0ZW1bJ2RhdGEnXVskd29yZHMqMyAgXSkgLSBvcmQoJzAnKSkgKiAxMDsKCQkJCSR2YWwgKz0gKG9yZCgkaW5wdXRpdGVtWydkYXRhJ11bJHdvcmRzKjMrMV0pIC0gb3JkKCcwJykpOwoJCQkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gJHRoaXMtPmFwcGVuZE51bSgkaW5wdXRpdGVtWydic3RyZWFtJ10sIDcsICR2YWwpOwoJCQl9CgkJCXJldHVybiAkaW5wdXRpdGVtOwoJCX0KCgkJLyoqCgkJICogZW5jb2RlTW9kZUFuCgkJICogQHBhcmFtIGFycmF5ICRpbnB1dGl0ZW0KCQkgKiBAcGFyYW0gaW50ICR2ZXJzaW9uCgkJICogQHJldHVybiBhcnJheSBpbnB1dCBpdGVtCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBlbmNvZGVNb2RlQW4oJGlucHV0aXRlbSwgJHZlcnNpb24pIHsKCQkJJHdvcmRzID0gKGludCkoJGlucHV0aXRlbVsnc2l6ZSddIC8gMik7CgkJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9IGFycmF5KCk7CgkJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9ICR0aGlzLT5hcHBlbmROdW0oJGlucHV0aXRlbVsnYnN0cmVhbSddLCA0LCAweDAyKTsKCQkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gJHRoaXMtPmFwcGVuZE51bSh2LCAkdGhpcy0+bGVuZ3RoSW5kaWNhdG9yKFFSX01PREVfQU4sICR2ZXJzaW9uKSwgJGlucHV0aXRlbVsnc2l6ZSddKTsKCQkJZm9yICgkaT0wOyAkaSA8ICR3b3JkczsgKyskaSkgewoJCQkJJHZhbCAgPSAoaW50KSR0aGlzLT5sb29rQW5UYWJsZShvcmQoJGlucHV0aXRlbVsnZGF0YSddWyRpKjIgIF0pKSAqIDQ1OwoJCQkJJHZhbCArPSAoaW50KSR0aGlzLT5sb29rQW5UYWJsZShvcmQoJGlucHV0aXRlbVsnZGF0YSddWyRpKjIrMV0pKTsKCQkJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9ICR0aGlzLT5hcHBlbmROdW0oJGlucHV0aXRlbVsnYnN0cmVhbSddLCAxMSwgJHZhbCk7CgkJCX0KCQkJaWYgKCRpbnB1dGl0ZW1bJ3NpemUnXSAmIDEpIHsKCQkJCSR2YWwgPSAkdGhpcy0+bG9va0FuVGFibGUob3JkKCRpbnB1dGl0ZW1bJ2RhdGEnXVsoJHdvcmRzICogMildKSk7CgkJCQkkaW5wdXRpdGVtWydic3RyZWFtJ10gPSAkdGhpcy0+YXBwZW5kTnVtKCRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSwgNiwgJHZhbCk7CgkJCX0KCQkJcmV0dXJuICRpbnB1dGl0ZW07CgkJfQoKCQkvKioKCQkgKiBlbmNvZGVNb2RlOAoJCSAqIEBwYXJhbSBhcnJheSAkaW5wdXRpdGVtCgkJICogQHBhcmFtIGludCAkdmVyc2lvbgoJCSAqIEByZXR1cm4gYXJyYXkgaW5wdXQgaXRlbQoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gZW5jb2RlTW9kZTgoJGlucHV0aXRlbSwgJHZlcnNpb24pIHsKCQkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gYXJyYXkoKTsKCQkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gJHRoaXMtPmFwcGVuZE51bSgkaW5wdXRpdGVtWydic3RyZWFtJ10sIDQsIDB4NCk7CgkJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9ICR0aGlzLT5hcHBlbmROdW0oJGlucHV0aXRlbVsnYnN0cmVhbSddLCAkdGhpcy0+bGVuZ3RoSW5kaWNhdG9yKFFSX01PREVfOEIsICR2ZXJzaW9uKSwgJGlucHV0aXRlbVsnc2l6ZSddKTsKCQkJZm9yICgkaT0wOyAkaSA8ICRpbnB1dGl0ZW1bJ3NpemUnXTsgKyskaSkgewoJCQkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gJHRoaXMtPmFwcGVuZE51bSgkaW5wdXRpdGVtWydic3RyZWFtJ10sIDgsIG9yZCgkaW5wdXRpdGVtWydkYXRhJ11bJGldKSk7CgkJCX0KCQkJcmV0dXJuICRpbnB1dGl0ZW07CgkJfQoKCQkvKioKCQkgKiBlbmNvZGVNb2RlS2FuamkKCQkgKiBAcGFyYW0gYXJyYXkgJGlucHV0aXRlbQoJCSAqIEBwYXJhbSBpbnQgJHZlcnNpb24KCQkgKiBAcmV0dXJuIGFycmF5IGlucHV0IGl0ZW0KCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIGVuY29kZU1vZGVLYW5qaSgkaW5wdXRpdGVtLCAkdmVyc2lvbikgewoJCQkkaW5wdXRpdGVtWydic3RyZWFtJ10gPSBhcnJheSgpOwoJCQkkaW5wdXRpdGVtWydic3RyZWFtJ10gPSAkdGhpcy0+YXBwZW5kTnVtKCRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSwgNCwgMHg4KTsKCQkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gJHRoaXMtPmFwcGVuZE51bSgkaW5wdXRpdGVtWydic3RyZWFtJ10sICR0aGlzLT5sZW5ndGhJbmRpY2F0b3IoUVJfTU9ERV9LSiwgJHZlcnNpb24pLCAoaW50KSgkaW5wdXRpdGVtWydzaXplJ10gLyAyKSk7CgkJCWZvciAoJGk9MDsgJGk8JGlucHV0aXRlbVsnc2l6ZSddOyAkaSs9MikgewoJCQkJJHZhbCA9IChvcmQoJGlucHV0aXRlbVsnZGF0YSddWyRpXSkgPDwgOCkgfCBvcmQoJGlucHV0aXRlbVsnZGF0YSddWyRpKzFdKTsKCQkJCWlmICgkdmFsIDw9IDB4OWZmYykgewoJCQkJCSR2YWwgLT0gMHg4MTQwOwoJCQkJfSBlbHNlIHsKCQkJCQkkdmFsIC09IDB4YzE0MDsKCQkJCX0KCQkJCSRoID0gKCR2YWwgPj4gOCkgKiAweGMwOwoJCQkJJHZhbCA9ICgkdmFsICYgMHhmZikgKyAkaDsKCQkJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9ICR0aGlzLT5hcHBlbmROdW0oJGlucHV0aXRlbVsnYnN0cmVhbSddLCAxMywgJHZhbCk7CgkJCX0KCQkJcmV0dXJuICRpbnB1dGl0ZW07CgkJfQoKCQkvKioKCQkgKiBlbmNvZGVNb2RlU3RydWN0dXJlCgkJICogQHBhcmFtIGFycmF5ICRpbnB1dGl0ZW0KCQkgKiBAcmV0dXJuIGFycmF5IGlucHV0IGl0ZW0KCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIGVuY29kZU1vZGVTdHJ1Y3R1cmUoJGlucHV0aXRlbSkgewoJCQkkaW5wdXRpdGVtWydic3RyZWFtJ10gPSBhcnJheSgpOwoJCQkkaW5wdXRpdGVtWydic3RyZWFtJ10gPSAkdGhpcy0+YXBwZW5kTnVtKCRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSwgNCwgMHgwMyk7CgkJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9ICR0aGlzLT5hcHBlbmROdW0oJGlucHV0aXRlbVsnYnN0cmVhbSddLCA0LCBvcmQoJGlucHV0aXRlbVsnZGF0YSddWzFdKSAtIDEpOwoJCQkkaW5wdXRpdGVtWydic3RyZWFtJ10gPSAkdGhpcy0+YXBwZW5kTnVtKCRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSwgNCwgb3JkKCRpbnB1dGl0ZW1bJ2RhdGEnXVswXSkgLSAxKTsKCQkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gJHRoaXMtPmFwcGVuZE51bSgkaW5wdXRpdGVtWydic3RyZWFtJ10sIDgsIG9yZCgkaW5wdXRpdGVtWydkYXRhJ11bMl0pKTsKCQkJcmV0dXJuICRpbnB1dGl0ZW07CgkJfQoKCQkvKioKCQkgKiBlbmNvZGVCaXRTdHJlYW0KCQkgKiBAcGFyYW0gYXJyYXkgJGlucHV0aXRlbQoJCSAqIEBwYXJhbSBpbnQgJHZlcnNpb24KCQkgKiBAcmV0dXJuIGFycmF5IGlucHV0IGl0ZW0KCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIGVuY29kZUJpdFN0cmVhbSgkaW5wdXRpdGVtLCAkdmVyc2lvbikgewoJCQkkaW5wdXRpdGVtWydic3RyZWFtJ10gPSBhcnJheSgpOwoJCQkkd29yZHMgPSAkdGhpcy0+bWF4aW11bVdvcmRzKCRpbnB1dGl0ZW1bJ21vZGUnXSwgJHZlcnNpb24pOwoJCQlpZiAoJGlucHV0aXRlbVsnc2l6ZSddID4gJHdvcmRzKSB7CgkJCQkkc3QxID0gJHRoaXMtPm5ld0lucHV0SXRlbSgkaW5wdXRpdGVtWydtb2RlJ10sICR3b3JkcywgJGlucHV0aXRlbVsnZGF0YSddKTsKCQkJCSRzdDIgPSAkdGhpcy0+bmV3SW5wdXRJdGVtKCRpbnB1dGl0ZW1bJ21vZGUnXSwgJGlucHV0aXRlbVsnc2l6ZSddIC0gJHdvcmRzLCBhcnJheV9zbGljZSgkaW5wdXRpdGVtWydkYXRhJ10sICR3b3JkcykpOwoJCQkJJHN0MSA9ICR0aGlzLT5lbmNvZGVCaXRTdHJlYW0oJHN0MSwgJHZlcnNpb24pOwoJCQkJJHN0MiA9ICR0aGlzLT5lbmNvZGVCaXRTdHJlYW0oJHN0MiwgJHZlcnNpb24pOwoJCQkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gYXJyYXkoKTsKCQkJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9ICR0aGlzLT5hcHBlbmRCaXRzdHJlYW0oJGlucHV0aXRlbVsnYnN0cmVhbSddLCAkc3QxWydic3RyZWFtJ10pOwoJCQkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gJHRoaXMtPmFwcGVuZEJpdHN0cmVhbSgkaW5wdXRpdGVtWydic3RyZWFtJ10sICRzdDJbJ2JzdHJlYW0nXSk7CgkJCX0gZWxzZSB7CgkJCQlzd2l0Y2goJGlucHV0aXRlbVsnbW9kZSddKSB7CgkJCQkJY2FzZSBRUl9NT0RFX05NOiB7CgkJCQkJCSRpbnB1dGl0ZW0gPSAkdGhpcy0+ZW5jb2RlTW9kZU51bSgkaW5wdXRpdGVtLCAkdmVyc2lvbik7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQljYXNlIFFSX01PREVfQU46IHsKCQkJCQkJJGlucHV0aXRlbSA9ICR0aGlzLT5lbmNvZGVNb2RlQW4oJGlucHV0aXRlbSwgJHZlcnNpb24pOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJY2FzZSBRUl9NT0RFXzhCOiB7CgkJCQkJCSRpbnB1dGl0ZW0gPSAkdGhpcy0+ZW5jb2RlTW9kZTgoJGlucHV0aXRlbSwgJHZlcnNpb24pOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJY2FzZSBRUl9NT0RFX0tKOiB7CgkJCQkJCSRpbnB1dGl0ZW0gPSAkdGhpcy0+ZW5jb2RlTW9kZUthbmppKCRpbnB1dGl0ZW0sICR2ZXJzaW9uKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgUVJfTU9ERV9TVDogewoJCQkJCQkkaW5wdXRpdGVtID0gJHRoaXMtPmVuY29kZU1vZGVTdHJ1Y3R1cmUoJGlucHV0aXRlbSk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQlkZWZhdWx0OiB7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQlyZXR1cm4gJGlucHV0aXRlbTsKCQl9CgoJCS8vIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KCgkJLy8gUVJpbnB1dAoKCQkvKioKCQkgKiBBcHBlbmQgZGF0YSB0byBhbiBpbnB1dCBvYmplY3QuCgkJICogVGhlIGRhdGEgaXMgY29waWVkIGFuZCBhcHBlbmRlZCB0byB0aGUgaW5wdXQgb2JqZWN0LgoJCSAqIEBwYXJhbSBhcnJheSBpdGVtcyBpbnB1dCBpdGVtcwoJCSAqIEBwYXJhbSBpbnQgJG1vZGUgZW5jb2RpbmcgbW9kZS4KCQkgKiBAcGFyYW0gaW50ICRzaXplIHNpemUgb2YgZGF0YSAoYnl0ZSkuCgkJICogQHBhcmFtIGFycmF5ICRkYXRhIGFycmF5IG9mIGlucHV0IGRhdGEuCgkJICogQHJldHVybiBpdGVtcwoJCSAqCgkJICovCgkJcHJvdGVjdGVkIGZ1bmN0aW9uIGFwcGVuZE5ld0lucHV0SXRlbSgkaXRlbXMsICRtb2RlLCAkc2l6ZSwgJGRhdGEpIHsKCQkJJGl0ZW1zW10gPSAkdGhpcy0+bmV3SW5wdXRJdGVtKCRtb2RlLCAkc2l6ZSwgJGRhdGEpOwoJCQlyZXR1cm4gJGl0ZW1zOwoJCX0KCgkJLyoqCgkJICogaW5zZXJ0U3RydWN0dXJlZEFwcGVuZEhlYWRlcgoJCSAqIEBwYXJhbSBhcnJheSAkaXRlbXMKCQkgKiBAcGFyYW0gaW50ICRzaXplCgkJICogQHBhcmFtIGludCAkaW5kZXgKCQkgKiBAcGFyYW0gaW50ICRwYXJpdHkKCQkgKiBAcmV0dXJuIGFycmF5IGl0ZW1zCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBpbnNlcnRTdHJ1Y3R1cmVkQXBwZW5kSGVhZGVyKCRpdGVtcywgJHNpemUsICRpbmRleCwgJHBhcml0eSkgewoJCQlpZiAoJHNpemUgPiBNQVhfU1RSVUNUVVJFRF9TWU1CT0xTKSB7CgkJCQlyZXR1cm4gLTE7CgkJCX0KCQkJaWYgKCgkaW5kZXggPD0gMCkgT1IgKCRpbmRleCA+IE1BWF9TVFJVQ1RVUkVEX1NZTUJPTFMpKSB7CgkJCQlyZXR1cm4gLTE7CgkJCX0KCQkJJGJ1ZiA9IGFycmF5KCRzaXplLCAkaW5kZXgsICRwYXJpdHkpOwoJCQkkZW50cnkgPSAkdGhpcy0+bmV3SW5wdXRJdGVtKFFSX01PREVfU1QsIDMsIGJ1Zik7CgkJCWFycmF5X3Vuc2hpZnQoJGl0ZW1zLCAkZW50cnkpOwoJCQlyZXR1cm4gJGl0ZW1zOwoJCX0KCgkJLyoqCgkJICogY2FsY1Bhcml0eQoJCSAqIEBwYXJhbSBhcnJheSAkaXRlbXMKCQkgKiBAcmV0dXJuIGludCBwYXJpdHkKCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIGNhbGNQYXJpdHkoJGl0ZW1zKSB7CgkJCSRwYXJpdHkgPSAwOwoJCQlmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pIHsKCQkJCWlmICgkaXRlbVsnbW9kZSddICE9IFFSX01PREVfU1QpIHsKCQkJCQlmb3IgKCRpPSRpdGVtWydzaXplJ10tMTsgJGk+PTA7IC0tJGkpIHsKCQkJCQkJJHBhcml0eSBePSAkaXRlbVsnZGF0YSddWyRpXTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJcmV0dXJuICRwYXJpdHk7CgkJfQoKCQkvKioKCQkgKiBjaGVja01vZGVOdW0KCQkgKiBAcGFyYW0gaW50ICRzaXplCgkJICogQHBhcmFtIGFycmF5ICRkYXRhCgkJICogQHJldHVybiBib29sZWFuIHRydWUgb3IgZmFsc2UKCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrTW9kZU51bSgkc2l6ZSwgJGRhdGEpIHsKCQkJZm9yICgkaT0wOyAkaTwkc2l6ZTsgKyskaSkgewoJCQkJaWYgKChvcmQoJGRhdGFbJGldKSA8IG9yZCgnMCcpKSBPUiAob3JkKCRkYXRhWyRpXSkgPiBvcmQoJzknKSkpewoJCQkJCXJldHVybiBmYWxzZTsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgoJCS8qKgoJCSAqIGVzdGltYXRlQml0c01vZGVOdW0KCQkgKiBAcGFyYW0gaW50ICRzaXplCgkJICogQHJldHVybiBpbnQgbnVtYmVyIG9mIGJpdHMKCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIGVzdGltYXRlQml0c01vZGVOdW0oJHNpemUpIHsKCQkJJHcgPSAoaW50KSRzaXplIC8gMzsKCQkJJGJpdHMgPSAkdyAqIDEwOwoJCQlzd2l0Y2goJHNpemUgLSAkdyAqIDMpIHsKCQkJCWNhc2UgMTogewoJCQkJCSRiaXRzICs9IDQ7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlIDI6IHsKCQkJCQkkYml0cyArPSA3OwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJZGVmYXVsdDogewoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCXJldHVybiAkYml0czsKCQl9CgoJCS8qKgoJCSAqIExvb2sgdXAgdGhlIGFscGhhYmV0LW51bWVyaWMgY29udmVzaW9uIHRhYmxlIChzZWUgSklTIFgwNTEwOjIwMDQsIHBwLjE5KS4KCQkgKiBAcGFyYW0gaW50ICRjIGNoYXJhY3RlciB2YWx1ZQoJCSAqIEByZXR1cm4gdmFsdWUKCQkgKi8KCQlwcm90ZWN0ZWQgZnVuY3Rpb24gbG9va0FuVGFibGUoJGMpIHsKCQkJcmV0dXJuICgoJGMgPiAxMjcpPy0xOiR0aGlzLT5hblRhYmxlWyRjXSk7CgkJfQoKCQkvKioKCQkgKiBjaGVja01vZGVBbgoJCSAqIEBwYXJhbSBpbnQgJHNpemUKCQkgKiBAcGFyYW0gYXJyYXkgJGRhdGEKCQkgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBvciBmYWxzZQoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tNb2RlQW4oJHNpemUsICRkYXRhKSB7CgkJCWZvciAoJGk9MDsgJGk8JHNpemU7ICsrJGkpIHsKCQkJCWlmICgkdGhpcy0+bG9va0FuVGFibGUob3JkKCRkYXRhWyRpXSkpID09IC0xKSB7CgkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJfQoJCQl9CgkJCXJldHVybiB0cnVlOwoJCX0KCgkJLyoqCgkJICogZXN0aW1hdGVCaXRzTW9kZUFuCgkJICogQHBhcmFtIGludCAkc2l6ZQoJCSAqIEByZXR1cm4gaW50IG51bWJlciBvZiBiaXRzCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBlc3RpbWF0ZUJpdHNNb2RlQW4oJHNpemUpIHsKCQkJJHcgPSAoaW50KSgkc2l6ZSAvIDIpOwoJCQkkYml0cyA9ICR3ICogMTE7CgkJCWlmICgkc2l6ZSAmIDEpIHsKCQkJCSRiaXRzICs9IDY7CgkJCX0KCQkJcmV0dXJuICRiaXRzOwoJCX0KCgkJLyoqCgkJICogZXN0aW1hdGVCaXRzTW9kZTgKCQkgKiBAcGFyYW0gaW50ICRzaXplCgkJICogQHJldHVybiBpbnQgbnVtYmVyIG9mIGJpdHMKCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIGVzdGltYXRlQml0c01vZGU4KCRzaXplKSB7CgkJCXJldHVybiAkc2l6ZSAqIDg7CgkJfQoKCQkvKioKCQkgKiBlc3RpbWF0ZUJpdHNNb2RlS2FuamkKCQkgKiBAcGFyYW0gaW50ICRzaXplCgkJICogQHJldHVybiBpbnQgbnVtYmVyIG9mIGJpdHMKCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIGVzdGltYXRlQml0c01vZGVLYW5qaSgkc2l6ZSkgewoJCQlyZXR1cm4gKGludCkoKCRzaXplIC8gMikgKiAxMyk7CgkJfQoKCQkvKioKCQkgKiBjaGVja01vZGVLYW5qaQoJCSAqIEBwYXJhbSBpbnQgJHNpemUKCQkgKiBAcGFyYW0gYXJyYXkgJGRhdGEKCQkgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBvciBmYWxzZQoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tNb2RlS2FuamkoJHNpemUsICRkYXRhKSB7CgkJCWlmICgkc2l6ZSAmIDEpIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQlmb3IgKCRpPTA7ICRpPCRzaXplOyAkaSs9MikgewoJCQkJJHZhbCA9IChvcmQoJGRhdGFbJGldKSA8PCA4KSB8IG9yZCgkZGF0YVskaSsxXSk7CgkJCQlpZiAoKCR2YWwgPCAweDgxNDApIE9SICgoJHZhbCA+IDB4OWZmYykgQU5EICgkdmFsIDwgMHhlMDQwKSkgT1IgKCR2YWwgPiAweGViYmYpKSB7CgkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJfQoJCQl9CgkJCXJldHVybiB0cnVlOwoJCX0KCgkJLyoqCgkJICogVmFsaWRhdGUgdGhlIGlucHV0IGRhdGEuCgkJICogQHBhcmFtIGludCAkbW9kZSBlbmNvZGluZyBtb2RlLgoJCSAqIEBwYXJhbSBpbnQgJHNpemUgc2l6ZSBvZiBkYXRhIChieXRlKS4KCQkgKiBAcGFyYW0gYXJyYXkgZGF0YSBkYXRhIHRvIHZhbGlkYXRlCgkJICogQHJldHVybiBib29sZWFuIHRydWUgaW4gY2FzZSBvZiB2YWxpZCBkYXRhLCBmYWxzZSBvdGhlcndpc2UKCQkgKi8KCQlwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2soJG1vZGUsICRzaXplLCAkZGF0YSkgewoJCQlpZiAoJHNpemUgPD0gMCkgewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCXN3aXRjaCgkbW9kZSkgewoJCQkJY2FzZSBRUl9NT0RFX05NOiB7CgkJCQkJcmV0dXJuICR0aGlzLT5jaGVja01vZGVOdW0oJHNpemUsICRkYXRhKTsKCQkJCX0KCQkJCWNhc2UgUVJfTU9ERV9BTjogewoJCQkJCXJldHVybiAkdGhpcy0+Y2hlY2tNb2RlQW4oJHNpemUsICRkYXRhKTsKCQkJCX0KCQkJCWNhc2UgUVJfTU9ERV9LSjogewoJCQkJCXJldHVybiAkdGhpcy0+Y2hlY2tNb2RlS2FuamkoJHNpemUsICRkYXRhKTsKCQkJCX0KCQkJCWNhc2UgUVJfTU9ERV84QjogewoJCQkJCXJldHVybiB0cnVlOwoJCQkJfQoJCQkJY2FzZSBRUl9NT0RFX1NUOiB7CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJCQlkZWZhdWx0OiB7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJLyoqCgkJICogZXN0aW1hdGVCaXRTdHJlYW1TaXplCgkJICogQHBhcmFtIGFycmF5ICRpdGVtcwoJCSAqIEBwYXJhbSBpbnQgJHZlcnNpb24KCQkgKiBAcmV0dXJuIGludCBiaXRzCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBlc3RpbWF0ZUJpdFN0cmVhbVNpemUoJGl0ZW1zLCAkdmVyc2lvbikgewoJCQkkYml0cyA9IDA7CgkJCWlmICgkdmVyc2lvbiA9PSAwKSB7CgkJCQkkdmVyc2lvbiA9IDE7CgkJCX0KCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKSB7CgkJCQlzd2l0Y2goJGl0ZW1bJ21vZGUnXSkgewoJCQkJCWNhc2UgUVJfTU9ERV9OTTogewoJCQkJCQkkYml0cyA9ICR0aGlzLT5lc3RpbWF0ZUJpdHNNb2RlTnVtKCRpdGVtWydzaXplJ10pOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJY2FzZSBRUl9NT0RFX0FOOiB7CgkJCQkJCSRiaXRzID0gJHRoaXMtPmVzdGltYXRlQml0c01vZGVBbigkaXRlbVsnc2l6ZSddKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgUVJfTU9ERV84QjogewoJCQkJCQkkYml0cyA9ICR0aGlzLT5lc3RpbWF0ZUJpdHNNb2RlOCgkaXRlbVsnc2l6ZSddKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgUVJfTU9ERV9LSjogewoJCQkJCQkkYml0cyA9ICR0aGlzLT5lc3RpbWF0ZUJpdHNNb2RlS2FuamkoJGl0ZW1bJ3NpemUnXSk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQljYXNlIFFSX01PREVfU1Q6IHsKCQkJCQkJcmV0dXJuIFNUUlVDVFVSRV9IRUFERVJfQklUUzsKCQkJCQl9CgkJCQkJZGVmYXVsdDogewoJCQkJCQlyZXR1cm4gMDsKCQkJCQl9CgkJCQl9CgkJCQkkbCA9ICR0aGlzLT5sZW5ndGhJbmRpY2F0b3IoJGl0ZW1bJ21vZGUnXSwgJHZlcnNpb24pOwoJCQkJJG0gPSAxIDw8ICRsOwoJCQkJJG51bSA9IChpbnQpKCgkaXRlbVsnc2l6ZSddICsgJG0gLSAxKSAvICRtKTsKCQkJCSRiaXRzICs9ICRudW0gKiAoNCArICRsKTsKCQkJfQoJCQlyZXR1cm4gJGJpdHM7CgkJfQoKCQkvKioKCQkgKiBlc3RpbWF0ZVZlcnNpb24KCQkgKiBAcGFyYW0gYXJyYXkgJGl0ZW1zCgkJICogQHJldHVybiBpbnQgdmVyc2lvbgoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gZXN0aW1hdGVWZXJzaW9uKCRpdGVtcykgewoJCQkkdmVyc2lvbiA9IDA7CgkJCSRwcmV2ID0gMDsKCQkJZG8gewoJCQkJJHByZXYgPSAkdmVyc2lvbjsKCQkJCSRiaXRzID0gJHRoaXMtPmVzdGltYXRlQml0U3RyZWFtU2l6ZSgkaXRlbXMsICRwcmV2KTsKCQkJCSR2ZXJzaW9uID0gJHRoaXMtPmdldE1pbmltdW1WZXJzaW9uKChpbnQpKCgkYml0cyArIDcpIC8gOCksICR0aGlzLT5sZXZlbCk7CgkJCQlpZiAoJHZlcnNpb24gPCAwKSB7CgkJCQkJcmV0dXJuIC0xOwoJCQkJfQoJCQl9IHdoaWxlICgkdmVyc2lvbiA+ICRwcmV2KTsKCQkJcmV0dXJuICR2ZXJzaW9uOwoJCX0KCgkJLyoqCgkJICogbGVuZ3RoT2ZDb2RlCgkJICogQHBhcmFtIGludCAkbW9kZQoJCSAqIEBwYXJhbSBpbnQgJHZlcnNpb24KCQkgKiBAcGFyYW0gaW50ICRiaXRzCgkJICogQHJldHVybiBpbnQgc2l6ZQoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gbGVuZ3RoT2ZDb2RlKCRtb2RlLCAkdmVyc2lvbiwgJGJpdHMpIHsKCQkJJHBheWxvYWQgPSAkYml0cyAtIDQgLSAkdGhpcy0+bGVuZ3RoSW5kaWNhdG9yKCRtb2RlLCAkdmVyc2lvbik7CgkJCXN3aXRjaCgkbW9kZSkgewoJCQkJY2FzZSBRUl9NT0RFX05NOiB7CgkJCQkJJGNodW5rcyA9IChpbnQpKCRwYXlsb2FkIC8gMTApOwoJCQkJCSRyZW1haW4gPSAkcGF5bG9hZCAtICRjaHVua3MgKiAxMDsKCQkJCQkkc2l6ZSA9ICRjaHVua3MgKiAzOwoJCQkJCWlmICgkcmVtYWluID49IDcpIHsKCQkJCQkJJHNpemUgKz0gMjsKCQkJCQl9IGVsc2VpZiAoJHJlbWFpbiA+PSA0KSB7CgkJCQkJCSRzaXplICs9IDE7CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSBRUl9NT0RFX0FOOiB7CgkJCQkJJGNodW5rcyA9IChpbnQpKCRwYXlsb2FkIC8gMTEpOwoJCQkJCSRyZW1haW4gPSAkcGF5bG9hZCAtICRjaHVua3MgKiAxMTsKCQkJCQkkc2l6ZSA9ICRjaHVua3MgKiAyOwoJCQkJCWlmICgkcmVtYWluID49IDYpIHsKCQkJCQkJKyskc2l6ZTsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlIFFSX01PREVfOEI6IHsKCQkJCQkkc2l6ZSA9IChpbnQpKCRwYXlsb2FkIC8gOCk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlIFFSX01PREVfS0o6IHsKCQkJCQkkc2l6ZSA9IChpbnQpKCgkcGF5bG9hZCAvIDEzKSAqIDIpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSBRUl9NT0RFX1NUOiB7CgkJCQkJJHNpemUgPSAoaW50KSgkcGF5bG9hZCAvIDgpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJZGVmYXVsdDogewoJCQkJCSRzaXplID0gMDsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQkkbWF4c2l6ZSA9ICR0aGlzLT5tYXhpbXVtV29yZHMoJG1vZGUsICR2ZXJzaW9uKTsKCQkJaWYgKCRzaXplIDwgMCkgewoJCQkJJHNpemUgPSAwOwoJCQl9CgkJCWlmICgkc2l6ZSA+ICRtYXhzaXplKSB7CgkJCQkkc2l6ZSA9ICRtYXhzaXplOwoJCQl9CgkJCXJldHVybiAkc2l6ZTsKCQl9CgoJCS8qKgoJCSAqIGNyZWF0ZUJpdFN0cmVhbQoJCSAqIEBwYXJhbSBhcnJheSAkaXRlbXMKCQkgKiBAcmV0dXJuIGFycmF5IG9mIGl0ZW1zIGFuZCB0b3RhbCBiaXRzCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVCaXRTdHJlYW0oJGl0ZW1zKSB7CgkJCSR0b3RhbCA9IDA7CgkJCWZvcmVhY2ggKCRpdGVtcyBhcyAka2V5ID0+ICRpdGVtKSB7CgkJCQkkaXRlbXNbJGtleV0gPSAkdGhpcy0+ZW5jb2RlQml0U3RyZWFtKCRpdGVtLCAkdGhpcy0+dmVyc2lvbik7CgkJCQkkYml0cyA9IGNvdW50KCRpdGVtc1ska2V5XVsnYnN0cmVhbSddKTsKCQkJCSR0b3RhbCArPSAkYml0czsKCQkJfQoJCQlyZXR1cm4gYXJyYXkoJGl0ZW1zLCAkdG90YWwpOwoJCX0KCgkJLyoqCgkJICogY29udmVydERhdGEKCQkgKiBAcGFyYW0gYXJyYXkgJGl0ZW1zCgkJICogQHJldHVybiBhcnJheSBpdGVtcwoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gY29udmVydERhdGEoJGl0ZW1zKSB7CgkJCSR2ZXIgPSAkdGhpcy0+ZXN0aW1hdGVWZXJzaW9uKCRpdGVtcyk7CgkJCWlmICgkdmVyID4gJHRoaXMtPnZlcnNpb24pIHsKCQkJCSR0aGlzLT52ZXJzaW9uID0gJHZlcjsKCQkJfQoJCQlmb3IgKDs7KSB7CgkJCQkkY2JzID0gJHRoaXMtPmNyZWF0ZUJpdFN0cmVhbSgkaXRlbXMpOwoJCQkJJGl0ZW1zID0gJGNic1swXTsKCQkJCSRiaXRzID0gJGNic1sxXTsKCQkJCWlmICgkYml0cyA8IDApIHsKCQkJCQlyZXR1cm4gLTE7CgkJCQl9CgkJCQkkdmVyID0gJHRoaXMtPmdldE1pbmltdW1WZXJzaW9uKChpbnQpKCgkYml0cyArIDcpIC8gOCksICR0aGlzLT5sZXZlbCk7CgkJCQlpZiAoJHZlciA8IDApIHsKCQkJCQlyZXR1cm4gLTE7CgkJCQl9IGVsc2VpZiAoJHZlciA+ICR0aGlzLT52ZXJzaW9uKSB7CgkJCQkJJHRoaXMtPnZlcnNpb24gPSAkdmVyOwoJCQkJfSBlbHNlIHsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gJGl0ZW1zOwoJCX0KCgkJLyoqCgkJICogQXBwZW5kIFBhZGRpbmcgQml0IHRvIGJpdHN0cmVhbQoJCSAqIEBwYXJhbSBhcnJheSAkYnN0cmVhbQoJCSAqIEByZXR1cm4gYXJyYXkgYml0c3RyZWFtCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBhcHBlbmRQYWRkaW5nQml0KCRic3RyZWFtKSB7CgkJCSRiaXRzID0gY291bnQoJGJzdHJlYW0pOwoJCQkkbWF4d29yZHMgPSAkdGhpcy0+Z2V0RGF0YUxlbmd0aCgkdGhpcy0+dmVyc2lvbiwgJHRoaXMtPmxldmVsKTsKCQkJJG1heGJpdHMgPSAkbWF4d29yZHMgKiA4OwoJCQlpZiAoJG1heGJpdHMgPT0gJGJpdHMpIHsKCQkJCXJldHVybiAwOwoJCQl9CgkJCWlmICgkbWF4Yml0cyAtICRiaXRzIDwgNSkgewoJCQkJcmV0dXJuICR0aGlzLT5hcHBlbmROdW0oJGJzdHJlYW0sICRtYXhiaXRzIC0gJGJpdHMsIDApOwoJCQl9CgkJCSRiaXRzICs9IDQ7CgkJCSR3b3JkcyA9IChpbnQpKCgkYml0cyArIDcpIC8gOCk7CgkJCSRwYWRkaW5nID0gYXJyYXkoKTsKCQkJJHBhZGRpbmcgPSAkdGhpcy0+YXBwZW5kTnVtKCRwYWRkaW5nLCAkd29yZHMgKiA4IC0gJGJpdHMgKyA0LCAwKTsKCQkJJHBhZGxlbiA9ICRtYXh3b3JkcyAtICR3b3JkczsKCQkJaWYgKCRwYWRsZW4gPiAwKSB7CgkJCQkkcGFkYnVmID0gYXJyYXkoKTsKCQkJCWZvciAoJGk9MDsgJGk8JHBhZGxlbjsgKyskaSkgewoJCQkJCSRwYWRidWZbJGldID0gKCRpJjEpPzB4MTE6MHhlYzsKCQkJCX0KCQkJCSRwYWRkaW5nID0gJHRoaXMtPmFwcGVuZEJ5dGVzKCRwYWRkaW5nLCAkcGFkbGVuLCAkcGFkYnVmKTsKCQkJfQoJCQlyZXR1cm4gJHRoaXMtPmFwcGVuZEJpdHN0cmVhbSgkYnN0cmVhbSwgJHBhZGRpbmcpOwoJCX0KCgkJLyoqCgkJICogbWVyZ2VCaXRTdHJlYW0KCQkgKiBAcGFyYW0gYXJyYXkgJGJzdHJlYW0KCQkgKiBAcmV0dXJuIGFycmF5IGJpdHN0cmVhbQoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gbWVyZ2VCaXRTdHJlYW0oJGl0ZW1zKSB7CgkJCSRpdGVtcyA9ICR0aGlzLT5jb252ZXJ0RGF0YSgkaXRlbXMpOwoJCQkkYnN0cmVhbSA9IGFycmF5KCk7CgkJCWZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkgewoJCQkJJGJzdHJlYW0gPSAkdGhpcy0+YXBwZW5kQml0c3RyZWFtKCRic3RyZWFtLCAkaXRlbVsnYnN0cmVhbSddKTsKCQkJfQoJCQlyZXR1cm4gJGJzdHJlYW07CgkJfQoKCQkvKioKCQkgKiBSZXR1cm5zIGEgc3RyZWFtIG9mIGJpdHMuCgkJICogQHBhcmFtIGludCAkaXRlbXMKCQkgKiBAcmV0dXJuIGFycmF5IHBhZGRlZCBtZXJnZWQgYnl0ZSBzdHJlYW0KCQkgKi8KCQlwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Qml0U3RyZWFtKCRpdGVtcykgewoJCQkkYnN0cmVhbSA9ICR0aGlzLT5tZXJnZUJpdFN0cmVhbSgkaXRlbXMpOwoJCQlyZXR1cm4gJHRoaXMtPmFwcGVuZFBhZGRpbmdCaXQoJGJzdHJlYW0pOwoJCX0KCgkJLyoqCgkJICogUGFjayBhbGwgYml0IHN0cmVhbXMgcGFkZGluZyBiaXRzIGludG8gYSBieXRlIGFycmF5LgoJCSAqIEBwYXJhbSBpbnQgJGl0ZW1zCgkJICogQHJldHVybiBhcnJheSBwYWRkZWQgbWVyZ2VkIGJ5dGUgc3RyZWFtCgkJICovCgkJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEJ5dGVTdHJlYW0oJGl0ZW1zKSB7CgkJCSRic3RyZWFtID0gJHRoaXMtPmdldEJpdFN0cmVhbSgkaXRlbXMpOwoJCQlyZXR1cm4gJHRoaXMtPmJpdHN0cmVhbVRvQnl0ZSgkYnN0cmVhbSk7CgkJfQoKCQkvLyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCgoJCS8vIFFSYml0c3RyZWFtCgoJCS8qKgoJCSAqIFJldHVybiBhbiBhcnJheSB3aXRoIHplcm9zCgkJICogQHBhcmFtIGludCAkc2V0TGVuZ3RoIGFycmF5IHNpemUKCQkgKiBAcmV0dXJuIGFycmF5CgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBhbGxvY2F0ZSgkc2V0TGVuZ3RoKSB7CgkJCXJldHVybiBhcnJheV9maWxsKDAsICRzZXRMZW5ndGgsIDApOwoJCX0KCgkJLyoqCgkJICogUmV0dXJuIG5ldyBiaXRzdHJlYW0gZnJvbSBudW1iZXIKCQkgKiBAcGFyYW0gaW50ICRiaXRzIG51bWJlciBvZiBiaXRzCgkJICogQHBhcmFtIGludCAkbnVtIG51bWJlcgoJCSAqIEByZXR1cm4gYXJyYXkgYml0c3RyZWFtCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBuZXdGcm9tTnVtKCRiaXRzLCAkbnVtKSB7CgkJCSRic3RyZWFtID0gJHRoaXMtPmFsbG9jYXRlKCRiaXRzKTsKCQkJJG1hc2sgPSAxIDw8ICgkYml0cyAtIDEpOwoJCQlmb3IgKCRpPTA7ICRpPCRiaXRzOyArKyRpKSB7CgkJCQlpZiAoJG51bSAmICRtYXNrKSB7CgkJCQkJJGJzdHJlYW1bJGldID0gMTsKCQkJCX0gZWxzZSB7CgkJCQkJJGJzdHJlYW1bJGldID0gMDsKCQkJCX0KCQkJCSRtYXNrID0gJG1hc2sgPj4gMTsKCQkJfQoJCQlyZXR1cm4gJGJzdHJlYW07CgkJfQoKCQkvKioKCQkgKiBSZXR1cm4gbmV3IGJpdHN0cmVhbSBmcm9tIGJ5dGVzCgkJICogQHBhcmFtIGludCAkc2l6ZSBzaXplCgkJICogQHBhcmFtIGFycmF5ICRkYXRhIGJ5dGVzCgkJICogQHJldHVybiBhcnJheSBiaXRzdHJlYW0KCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIG5ld0Zyb21CeXRlcygkc2l6ZSwgJGRhdGEpIHsKCQkJJGJzdHJlYW0gPSAkdGhpcy0+YWxsb2NhdGUoJHNpemUgKiA4KTsKCQkJJHA9MDsKCQkJZm9yICgkaT0wOyAkaTwkc2l6ZTsgKyskaSkgewoJCQkJJG1hc2sgPSAweDgwOwoJCQkJZm9yICgkaj0wOyAkajw4OyArKyRqKSB7CgkJCQkJaWYgKCRkYXRhWyRpXSAmICRtYXNrKSB7CgkJCQkJCSRic3RyZWFtWyRwXSA9IDE7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJGJzdHJlYW1bJHBdID0gMDsKCQkJCQl9CgkJCQkJJHArKzsKCQkJCQkkbWFzayA9ICRtYXNrID4+IDE7CgkJCQl9CgkJCX0KCQkJcmV0dXJuICRic3RyZWFtOwoJCX0KCgkJLyoqCgkJICogQXBwZW5kIG9uZSBiaXRzdHJlYW0gdG8gYW5vdGhlcgoJCSAqIEBwYXJhbSBhcnJheSAkYml0c3RyZWFtIG9yaWdpbmFsIGJpdHN0cmVhbQoJCSAqIEBwYXJhbSBhcnJheSAkYXBwZW5kIGJpdHN0cmVhbSB0byBhcHBlbmQKCQkgKiBAcmV0dXJuIGFycmF5IGJpdHN0cmVhbQoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gYXBwZW5kQml0c3RyZWFtKCRiaXRzdHJlYW0sICRhcHBlbmQpIHsKCQkJaWYgKCghaXNfYXJyYXkoJGFwcGVuZCkpIE9SIChjb3VudCgkYXBwZW5kKSA9PSAwKSkgewoJCQkJcmV0dXJuICRiaXRzdHJlYW07CgkJCX0KCQkJaWYgKGNvdW50KCRiaXRzdHJlYW0pID09IDApIHsKCQkJCXJldHVybiAkYXBwZW5kOwoJCQl9CgkJCXJldHVybiBhcnJheV92YWx1ZXMoYXJyYXlfbWVyZ2UoJGJpdHN0cmVhbSwgJGFwcGVuZCkpOwoJCX0KCgkJLyoqCgkJICogQXBwZW5kIG9uZSBiaXRzdHJlYW0gY3JlYXRlZCBmcm9tIG51bWJlciB0byBhbm90aGVyCgkJICogQHBhcmFtIGFycmF5ICRiaXRzdHJlYW0gb3JpZ2luYWwgYml0c3RyZWFtCgkJICogQHBhcmFtIGludCAkYml0cyBudW1iZXIgb2YgYml0cwoJCSAqIEBwYXJhbSBpbnQgJG51bSBudW1iZXIKCQkgKiBAcmV0dXJuIGFycmF5IGJpdHN0cmVhbQoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gYXBwZW5kTnVtKCRiaXRzdHJlYW0sICRiaXRzLCAkbnVtKSB7CgkJCWlmICgkYml0cyA9PSAwKSB7CgkJCQlyZXR1cm4gMDsKCQkJfQoJCQkkYiA9ICR0aGlzLT5uZXdGcm9tTnVtKCRiaXRzLCAkbnVtKTsKCQkJcmV0dXJuICR0aGlzLT5hcHBlbmRCaXRzdHJlYW0oJGJpdHN0cmVhbSwgJGIpOwoJCX0KCgkJLyoqCgkJICogQXBwZW5kIG9uZSBiaXRzdHJlYW0gY3JlYXRlZCBmcm9tIGJ5dGVzIHRvIGFub3RoZXIKCQkgKiBAcGFyYW0gYXJyYXkgJGJpdHN0cmVhbSBvcmlnaW5hbCBiaXRzdHJlYW0KCQkgKiBAcGFyYW0gaW50ICRzaXplIHNpemUKCQkgKiBAcGFyYW0gYXJyYXkgJGRhdGEgYnl0ZXMKCQkgKiBAcmV0dXJuIGFycmF5IGJpdHN0cmVhbQoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gYXBwZW5kQnl0ZXMoJGJpdHN0cmVhbSwgJHNpemUsICRkYXRhKSB7CgkJCWlmICgkc2l6ZSA9PSAwKSB7CgkJCQlyZXR1cm4gMDsKCQkJfQoJCQkkYiA9ICR0aGlzLT5uZXdGcm9tQnl0ZXMoJHNpemUsICRkYXRhKTsKCQkJcmV0dXJuICR0aGlzLT5hcHBlbmRCaXRzdHJlYW0oJGJpdHN0cmVhbSwgJGIpOwoJCX0KCgkJLyoqCgkJICogQ29udmVydCBiaXRzdHJlYW0gdG8gYnl0ZXMKCQkgKiBAcGFyYW0gYXJyYXkgJGJpdHN0cmVhbSBvcmlnaW5hbCBiaXRzdHJlYW0KCQkgKiBAcmV0dXJuIGFycmF5IG9mIGJ5dGVzCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBiaXRzdHJlYW1Ub0J5dGUoJGJzdHJlYW0pIHsKCQkJJHNpemUgPSBjb3VudCgkYnN0cmVhbSk7CgkJCWlmICgkc2l6ZSA9PSAwKSB7CgkJCQlyZXR1cm4gYXJyYXkoKTsKCQkJfQoJCQkkZGF0YSA9IGFycmF5X2ZpbGwoMCwgKGludCkoKCRzaXplICsgNykgLyA4KSwgMCk7CgkJCSRieXRlcyA9IChpbnQpKCRzaXplIC8gOCk7CgkJCSRwID0gMDsKCQkJZm9yICgkaT0wOyAkaTwkYnl0ZXM7ICRpKyspIHsKCQkJCSR2ID0gMDsKCQkJCWZvciAoJGo9MDsgJGo8ODsgJGorKykgewoJCQkJCSR2ID0gJHYgPDwgMTsKCQkJCQkkdiB8PSAkYnN0cmVhbVskcF07CgkJCQkJJHArKzsKCQkJCX0KCQkJCSRkYXRhWyRpXSA9ICR2OwoJCQl9CgkJCWlmICgkc2l6ZSAmIDcpIHsKCQkJCSR2ID0gMDsKCQkJCWZvciAoJGo9MDsgJGo8KCRzaXplICYgNyk7ICRqKyspIHsKCQkJCQkkdiA9ICR2IDw8IDE7CgkJCQkJJHYgfD0gJGJzdHJlYW1bJHBdOwoJCQkJCSRwKys7CgkJCQl9CgkJCQkkZGF0YVskYnl0ZXNdID0gJHY7CgkJCX0KCQkJcmV0dXJuICRkYXRhOwoJCX0KCgkJLy8gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQoKCQkvLyBRUnNwZWMKCgkJLyoqCgkJICogUmVwbGFjZSBhIHZhbHVlIG9uIHRoZSBhcnJheSBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uCgkJICogQHBhcmFtIGFycmF5ICRzcmN0YWIKCQkgKiBAcGFyYW0gaW50ICR4IFggcG9zaXRpb24KCQkgKiBAcGFyYW0gaW50ICR5IFkgcG9zaXRpb24KCQkgKiBAcGFyYW0gc3RyaW5nICRyZXBsIHZhbHVlIHRvIHJlcGxhY2UKCQkgKiBAcGFyYW0gaW50ICRyZXBsTGVuIGxlbmd0aCBvZiB0aGUgcmVwbCBzdHJpbmcKCQkgKiBAcmV0dXJuIGFycmF5IHNyY3RhYgoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gcXJzdHJzZXQoJHNyY3RhYiwgJHgsICR5LCAkcmVwbCwgJHJlcGxMZW49ZmFsc2UpIHsKCQkJJHNyY3RhYlskeV0gPSBzdWJzdHJfcmVwbGFjZSgkc3JjdGFiWyR5XSwgKCRyZXBsTGVuICE9PSBmYWxzZSk/c3Vic3RyKCRyZXBsLDAsJHJlcGxMZW4pOiRyZXBsLCAkeCwgKCRyZXBsTGVuICE9PSBmYWxzZSk/JHJlcGxMZW46c3RybGVuKCRyZXBsKSk7CgkJCXJldHVybiAkc3JjdGFiOwoJCX0KCgkJLyoqCgkJICogUmV0dXJuIG1heGltdW0gZGF0YSBjb2RlIGxlbmd0aCAoYnl0ZXMpIGZvciB0aGUgdmVyc2lvbi4KCQkgKiBAcGFyYW0gaW50ICR2ZXJzaW9uIHZlcnNpb24KCQkgKiBAcGFyYW0gaW50ICRsZXZlbCBlcnJvciBjb3JyZWN0aW9uIGxldmVsCgkJICogQHJldHVybiBpbnQgbWF4aW11bSBzaXplIChieXRlcykKCQkgKi8KCQlwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RGF0YUxlbmd0aCgkdmVyc2lvbiwgJGxldmVsKSB7CgkJCXJldHVybiAkdGhpcy0+Y2FwYWNpdHlbJHZlcnNpb25dW1FSQ0FQX1dPUkRTXSAtICR0aGlzLT5jYXBhY2l0eVskdmVyc2lvbl1bUVJDQVBfRUNdWyRsZXZlbF07CgkJfQoKCQkvKioKCQkgKiBSZXR1cm4gbWF4aW11bSBlcnJvciBjb3JyZWN0aW9uIGNvZGUgbGVuZ3RoIChieXRlcykgZm9yIHRoZSB2ZXJzaW9uLgoJCSAqIEBwYXJhbSBpbnQgJHZlcnNpb24gdmVyc2lvbgoJCSAqIEBwYXJhbSBpbnQgJGxldmVsIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwKCQkgKiBAcmV0dXJuIGludCBFQ0Mgc2l6ZSAoYnl0ZXMpCgkJICovCgkJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVDQ0xlbmd0aCgkdmVyc2lvbiwgJGxldmVsKXsKCQkJcmV0dXJuICR0aGlzLT5jYXBhY2l0eVskdmVyc2lvbl1bUVJDQVBfRUNdWyRsZXZlbF07CgkJfQoKCQkvKioKCQkgKiBSZXR1cm4gdGhlIHdpZHRoIG9mIHRoZSBzeW1ib2wgZm9yIHRoZSB2ZXJzaW9uLgoJCSAqIEBwYXJhbSBpbnQgJHZlcnNpb24gdmVyc2lvbgoJCSAqIEByZXR1cm4gaW50IHdpZHRoCgkJICovCgkJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFdpZHRoKCR2ZXJzaW9uKSB7CgkJCXJldHVybiAkdGhpcy0+Y2FwYWNpdHlbJHZlcnNpb25dW1FSQ0FQX1dJRFRIXTsKCQl9CgoJCS8qKgoJCSAqIFJldHVybiB0aGUgbnVtZXIgb2YgcmVtYWluZGVyIGJpdHMuCgkJICogQHBhcmFtIGludCAkdmVyc2lvbiB2ZXJzaW9uCgkJICogQHJldHVybiBpbnQgbnVtYmVyIG9mIHJlbWFpbmRlciBiaXRzCgkJICovCgkJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFJlbWFpbmRlcigkdmVyc2lvbikgewoJCQlyZXR1cm4gJHRoaXMtPmNhcGFjaXR5WyR2ZXJzaW9uXVtRUkNBUF9SRU1JTkRFUl07CgkJfQoKCQkvKioKCQkgKiBSZXR1cm4gYSB2ZXJzaW9uIG51bWJlciB0aGF0IHNhdGlzZmllcyB0aGUgaW5wdXQgY29kZSBsZW5ndGguCgkJICogQHBhcmFtIGludCAkc2l6ZSBpbnB1dCBjb2RlIGxlbmd0aCAoYnl0ZSkKCQkgKiBAcGFyYW0gaW50ICRsZXZlbCBlcnJvciBjb3JyZWN0aW9uIGxldmVsCgkJICogQHJldHVybiBpbnQgdmVyc2lvbiBudW1iZXIKCQkgKi8KCQlwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TWluaW11bVZlcnNpb24oJHNpemUsICRsZXZlbCkgewoJCQlmb3IgKCRpPTE7ICRpIDw9IFFSU1BFQ19WRVJTSU9OX01BWDsgKyskaSkgewoJCQkJJHdvcmRzICA9ICR0aGlzLT5jYXBhY2l0eVskaV1bUVJDQVBfV09SRFNdIC0gJHRoaXMtPmNhcGFjaXR5WyRpXVtRUkNBUF9FQ11bJGxldmVsXTsKCQkJCWlmICgkd29yZHMgPj0gJHNpemUpIHsKCQkJCQlyZXR1cm4gJGk7CgkJCQl9CgkJCX0KCQkJcmV0dXJuIC0xOwoJCX0KCgkJLyoqCgkJICogUmV0dXJuIHRoZSBzaXplIG9mIGxlbmd0aCBpbmRpY2F0b3IgZm9yIHRoZSBtb2RlIGFuZCB2ZXJzaW9uLgoJCSAqIEBwYXJhbSBpbnQgJG1vZGUgZW5jb2RpbmcgbW9kZQoJCSAqIEBwYXJhbSBpbnQgJHZlcnNpb24gdmVyc2lvbgoJCSAqIEByZXR1cm4gaW50IHRoZSBzaXplIG9mIHRoZSBhcHByb3ByaWF0ZSBsZW5ndGggaW5kaWNhdG9yIChiaXRzKS4KCQkgKi8KCQlwcm90ZWN0ZWQgZnVuY3Rpb24gbGVuZ3RoSW5kaWNhdG9yKCRtb2RlLCAkdmVyc2lvbikgewoJCQlpZiAoJG1vZGUgPT0gUVJfTU9ERV9TVCkgewoJCQkJcmV0dXJuIDA7CgkJCX0KCQkJaWYgKCR2ZXJzaW9uIDw9IDkpIHsKCQkJCSRsID0gMDsKCQkJfSBlbHNlaWYgKCR2ZXJzaW9uIDw9IDI2KSB7CgkJCQkkbCA9IDE7CgkJCX0gZWxzZSB7CgkJCQkkbCA9IDI7CgkJCX0KCQkJcmV0dXJuICR0aGlzLT5sZW5ndGhUYWJsZUJpdHNbJG1vZGVdWyRsXTsKCQl9CgoJCS8qKgoJCSAqIFJldHVybiB0aGUgbWF4aW11bSBsZW5ndGggZm9yIHRoZSBtb2RlIGFuZCB2ZXJzaW9uLgoJCSAqIEBwYXJhbSBpbnQgJG1vZGUgZW5jb2RpbmcgbW9kZQoJCSAqIEBwYXJhbSBpbnQgJHZlcnNpb24gdmVyc2lvbgoJCSAqIEByZXR1cm4gaW50IHRoZSBtYXhpbXVtIGxlbmd0aCAoYnl0ZXMpCgkJICovCgkJcHJvdGVjdGVkIGZ1bmN0aW9uIG1heGltdW1Xb3JkcygkbW9kZSwgJHZlcnNpb24pIHsKCQkJaWYgKCRtb2RlID09IFFSX01PREVfU1QpIHsKCQkJCXJldHVybiAzOwoJCQl9CgkJCWlmICgkdmVyc2lvbiA8PSA5KSB7CgkJCQkkbCA9IDA7CgkJCX0gZWxzZSBpZiAoJHZlcnNpb24gPD0gMjYpIHsKCQkJCSRsID0gMTsKCQkJfSBlbHNlIHsKCQkJCSRsID0gMjsKCQkJfQoJCQkkYml0cyA9ICR0aGlzLT5sZW5ndGhUYWJsZUJpdHNbJG1vZGVdWyRsXTsKCQkJJHdvcmRzID0gKDEgPDwgJGJpdHMpIC0gMTsKCQkJaWYgKCRtb2RlID09IFFSX01PREVfS0opIHsKCQkJCSR3b3JkcyAqPSAyOyAvLyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGlzIHJlcXVpcmVkCgkJCX0KCQkJcmV0dXJuICR3b3JkczsKCQl9CgoJCS8qKgoJCSAqIFJldHVybiBhbiBhcnJheSBvZiBFQ0Mgc3BlY2lmaWNhdGlvbi4KCQkgKiBAcGFyYW0gaW50ICR2ZXJzaW9uIHZlcnNpb24KCQkgKiBAcGFyYW0gaW50ICRsZXZlbCBlcnJvciBjb3JyZWN0aW9uIGxldmVsCgkJICogQHBhcmFtIGFycmF5ICRzcGVjIGFuIGFycmF5IG9mIEVDQyBzcGVjaWZpY2F0aW9uIGNvbnRhaW5zIGFzIGZvbGxvd2luZzogeyMgb2YgdHlwZTEgYmxvY2tzLCAjIG9mIGRhdGEgY29kZSwgIyBvZiBlY2MgY29kZSwgIyBvZiB0eXBlMiBibG9ja3MsICMgb2YgZGF0YSBjb2RlfQoJCSAqIEByZXR1cm4gYXJyYXkgc3BlYwoJCSAqLwoJCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRFY2NTcGVjKCR2ZXJzaW9uLCAkbGV2ZWwsICRzcGVjKSB7CgkJCWlmIChjb3VudCgkc3BlYykgPCA1KSB7CgkJCQkkc3BlYyA9IGFycmF5KDAsIDAsIDAsIDAsIDApOwoJCQl9CgkJCSRiMSA9ICR0aGlzLT5lY2NUYWJsZVskdmVyc2lvbl1bJGxldmVsXVswXTsKCQkJJGIyID0gJHRoaXMtPmVjY1RhYmxlWyR2ZXJzaW9uXVskbGV2ZWxdWzFdOwoJCQkkZGF0YSA9ICR0aGlzLT5nZXREYXRhTGVuZ3RoKCR2ZXJzaW9uLCAkbGV2ZWwpOwoJCQkkZWNjID0gJHRoaXMtPmdldEVDQ0xlbmd0aCgkdmVyc2lvbiwgJGxldmVsKTsKCQkJaWYgKCRiMiA9PSAwKSB7CgkJCQkkc3BlY1swXSA9ICRiMTsKCQkJCSRzcGVjWzFdID0gKGludCkoJGRhdGEgLyAkYjEpOwoJCQkJJHNwZWNbMl0gPSAoaW50KSgkZWNjIC8gJGIxKTsKCQkJCSRzcGVjWzNdID0gMDsKCQkJCSRzcGVjWzRdID0gMDsKCQkJfSBlbHNlIHsKCQkJCSRzcGVjWzBdID0gJGIxOwoJCQkJJHNwZWNbMV0gPSAoaW50KSgkZGF0YSAvICgkYjEgKyAkYjIpKTsKCQkJCSRzcGVjWzJdID0gKGludCkoJGVjYyAgLyAoJGIxICsgJGIyKSk7CgkJCQkkc3BlY1szXSA9ICRiMjsKCQkJCSRzcGVjWzRdID0gJHNwZWNbMV0gKyAxOwoJCQl9CgkJCXJldHVybiAkc3BlYzsKCQl9CgoJCS8qKgoJCSAqIFB1dCBhbiBhbGlnbm1lbnQgbWFya2VyLgoJCSAqIEBwYXJhbSBhcnJheSAkZnJhbWUgZnJhbWUKCQkgKiBAcGFyYW0gaW50ICR3aWR0aCB3aWR0aAoJCSAqIEBwYXJhbSBpbnQgJG94IFggY2VudGVyIGNvb3JkaW5hdGUgb2YgdGhlIHBhdHRlcm4KCQkgKiBAcGFyYW0gaW50ICRveSBZIGNlbnRlciBjb29yZGluYXRlIG9mIHRoZSBwYXR0ZXJuCgkJICogQHJldHVybiBhcnJheSBmcmFtZQoJCSAqLwoJCXByb3RlY3RlZCBmdW5jdGlvbiBwdXRBbGlnbm1lbnRNYXJrZXIoJGZyYW1lLCAkb3gsICRveSkgewoJCQkkZmluZGVyID0gYXJyYXkoCgkJCQkiXHhhMVx4YTFceGExXHhhMVx4YTEiLAoJCQkJIlx4YTFceGEwXHhhMFx4YTBceGExIiwKCQkJCSJceGExXHhhMFx4YTFceGEwXHhhMSIsCgkJCQkiXHhhMVx4YTBceGEwXHhhMFx4YTEiLAoJCQkJIlx4YTFceGExXHhhMVx4YTFceGExIgoJCQkJKTsKCQkJJHlTdGFydCA9ICRveSAtIDI7CgkJCSR4U3RhcnQgPSAkb3ggLSAyOwoJCQlmb3IgKCR5PTA7ICR5IDwgNTsgJHkrKykgewoJCQkJJGZyYW1lID0gJHRoaXMtPnFyc3Ryc2V0KCRmcmFtZSwgJHhTdGFydCwgJHlTdGFydCskeSwgJGZpbmRlclskeV0pOwoJCQl9CgkJCXJldHVybiAkZnJhbWU7CgkJfQoKCQkvKioKCQkgKiBQdXQgYW4gYWxpZ25tZW50IHBhdHRlcm4uCgkJICogQHBhcmFtIGludCAkdmVyc2lvbiB2ZXJzaW9uCgkJICogQHBhcmFtIGFycmF5ICRmcmFtIGZyYW1lCgkJICogQHBhcmFtIGludCAkd2lkdGggd2lkdGgKCQkgKiBAcmV0dXJuIGFycmF5IGZyYW1lCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBwdXRBbGlnbm1lbnRQYXR0ZXJuKCR2ZXJzaW9uLCAkZnJhbWUsICR3aWR0aCkgewoJCQlpZiAoJHZlcnNpb24gPCAyKSB7CgkJCQlyZXR1cm4gJGZyYW1lOwoJCQl9CgkJCSRkID0gJHRoaXMtPmFsaWdubWVudFBhdHRlcm5bJHZlcnNpb25dWzFdIC0gJHRoaXMtPmFsaWdubWVudFBhdHRlcm5bJHZlcnNpb25dWzBdOwoJCQlpZiAoJGQgPCAwKSB7CgkJCQkkdyA9IDI7CgkJCX0gZWxzZSB7CgkJCQkkdyA9IChpbnQpKCgkd2lkdGggLSAkdGhpcy0+YWxpZ25tZW50UGF0dGVyblskdmVyc2lvbl1bMF0pIC8gJGQgKyAyKTsKCQkJfQoJCQlpZiAoJHcgKiAkdyAtIDMgPT0gMSkgewoJCQkJJHggPSAkdGhpcy0+YWxpZ25tZW50UGF0dGVyblskdmVyc2lvbl1bMF07CgkJCQkkeSA9ICR0aGlzLT5hbGlnbm1lbnRQYXR0ZXJuWyR2ZXJzaW9uXVswXTsKCQkJCSRmcmFtZSA9ICR0aGlzLT5wdXRBbGlnbm1lbnRNYXJrZXIoJGZyYW1lLCAkeCwgJHkpOwoJCQkJcmV0dXJuICRmcmFtZTsKCQkJfQoJCQkkY3ggPSAkdGhpcy0+YWxpZ25tZW50UGF0dGVyblskdmVyc2lvbl1bMF07CgkJCSR3byA9ICR3IC0gMTsKCQkJZm9yICgkeD0xOyAkeCA8ICR3bzsgKyskeCkgewoJCQkJJGZyYW1lID0gJHRoaXMtPnB1dEFsaWdubWVudE1hcmtlcigkZnJhbWUsIDYsICRjeCk7CgkJCQkkZnJhbWUgPSAkdGhpcy0+cHV0QWxpZ25tZW50TWFya2VyKCRmcmFtZSwgJGN4LCAgNik7CgkJCQkkY3ggKz0gJGQ7CgkJCX0KCQkJJGN5ID0gJHRoaXMtPmFsaWdubWVudFBhdHRlcm5bJHZlcnNpb25dWzBdOwoJCQlmb3IgKCR5PTA7ICR5IDwgJHdvOyArKyR5KSB7CgkJCQkkY3ggPSAkdGhpcy0+YWxpZ25tZW50UGF0dGVyblskdmVyc2lvbl1bMF07CgkJCQlmb3IgKCR4PTA7ICR4IDwgJHdvOyArKyR4KSB7CgkJCQkJJGZyYW1lID0gJHRoaXMtPnB1dEFsaWdubWVudE1hcmtlcigkZnJhbWUsICRjeCwgJGN5KTsKCQkJCQkkY3ggKz0gJGQ7CgkJCQl9CgkJCQkkY3kgKz0gJGQ7CgkJCX0KCQkJcmV0dXJuICRmcmFtZTsKCQl9CgoJCS8qKgoJCSAqIFJldHVybiBCQ0ggZW5jb2RlZCB2ZXJzaW9uIGluZm9ybWF0aW9uIHBhdHRlcm4gdGhhdCBpcyB1c2VkIGZvciB0aGUgc3ltYm9sIG9mIHZlcnNpb24gNyBvciBncmVhdGVyLiBVc2UgbG93ZXIgMTggYml0cy4KCQkgKiBAcGFyYW0gaW50ICR2ZXJzaW9uIHZlcnNpb24KCQkgKiBAcmV0dXJuIEJDSCBlbmNvZGVkIHZlcnNpb24gaW5mb3JtYXRpb24gcGF0dGVybgoJCSAqLwoJCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRWZXJzaW9uUGF0dGVybigkdmVyc2lvbikgewoJCQlpZiAoKCR2ZXJzaW9uIDwgNykgT1IgKCR2ZXJzaW9uID4gUVJTUEVDX1ZFUlNJT05fTUFYKSkgewoJCQkJcmV0dXJuIDA7CgkJCX0KCQkJcmV0dXJuICR0aGlzLT52ZXJzaW9uUGF0dGVyblsoJHZlcnNpb24gLSA3KV07CgkJfQoKCQkvKioKCQkgKiBSZXR1cm4gQkNIIGVuY29kZWQgZm9ybWF0IGluZm9ybWF0aW9uIHBhdHRlcm4uCgkJICogQHBhcmFtIGFycmF5ICRtYXNrCgkJICogQHBhcmFtIGludCAkbGV2ZWwgZXJyb3IgY29ycmVjdGlvbiBsZXZlbAoJCSAqIEByZXR1cm4gQkNIIGVuY29kZWQgZm9ybWF0IGluZm9ybWF0aW9uIHBhdHRlcm4KCQkgKi8KCQlwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Rm9ybWF0SW5mbygkbWFzaywgJGxldmVsKSB7CgkJCWlmICgoJG1hc2sgPCAwKSBPUiAoJG1hc2sgPiA3KSkgewoJCQkJcmV0dXJuIDA7CgkJCX0KCQkJaWYgKCgkbGV2ZWwgPCAwKSBPUiAoJGxldmVsID4gMykpIHsKCQkJCXJldHVybiAwOwoJCQl9CgkJCXJldHVybiAkdGhpcy0+Zm9ybWF0SW5mb1skbGV2ZWxdWyRtYXNrXTsKCQl9CgoJCS8qKgoJCSAqIFB1dCBhIGZpbmRlciBwYXR0ZXJuLgoJCSAqIEBwYXJhbSBhcnJheSAkZnJhbWUgZnJhbWUKCQkgKiBAcGFyYW0gaW50ICR3aWR0aCB3aWR0aAoJCSAqIEBwYXJhbSBpbnQgJG94IFggY2VudGVyIGNvb3JkaW5hdGUgb2YgdGhlIHBhdHRlcm4KCQkgKiBAcGFyYW0gaW50ICRveSBZIGNlbnRlciBjb29yZGluYXRlIG9mIHRoZSBwYXR0ZXJuCgkJICogQHJldHVybiBhcnJheSBmcmFtZQoJCSAqLwoJCXByb3RlY3RlZCBmdW5jdGlvbiBwdXRGaW5kZXJQYXR0ZXJuKCRmcmFtZSwgJG94LCAkb3kpIHsKCQkJJGZpbmRlciA9IGFycmF5KAoJCQkiXHhjMVx4YzFceGMxXHhjMVx4YzFceGMxXHhjMSIsCgkJCSJceGMxXHhjMFx4YzBceGMwXHhjMFx4YzBceGMxIiwKCQkJIlx4YzFceGMwXHhjMVx4YzFceGMxXHhjMFx4YzEiLAoJCQkiXHhjMVx4YzBceGMxXHhjMVx4YzFceGMwXHhjMSIsCgkJCSJceGMxXHhjMFx4YzFceGMxXHhjMVx4YzBceGMxIiwKCQkJIlx4YzFceGMwXHhjMFx4YzBceGMwXHhjMFx4YzEiLAoJCQkiXHhjMVx4YzFceGMxXHhjMVx4YzFceGMxXHhjMSIKCQkJKTsKCQkJZm9yICgkeT0wOyAkeSA8IDc7ICR5KyspIHsKCQkJCSRmcmFtZSA9ICR0aGlzLT5xcnN0cnNldCgkZnJhbWUsICRveCwgKCRveSArICR5KSwgJGZpbmRlclskeV0pOwoJCQl9CgkJCXJldHVybiAkZnJhbWU7CgkJfQoKCQkvKioKCQkgKiBSZXR1cm4gYSBjb3B5IG9mIGluaXRpYWxpemVkIGZyYW1lLgoJCSAqIEBwYXJhbSBpbnQgJHZlcnNpb24gdmVyc2lvbgoJCSAqIEByZXR1cm4gQXJyYXkgb2YgdW5zaWduZWQgY2hhci4KCQkgKi8KCQlwcm90ZWN0ZWQgZnVuY3Rpb24gY3JlYXRlRnJhbWUoJHZlcnNpb24pIHsKCQkJJHdpZHRoID0gJHRoaXMtPmNhcGFjaXR5WyR2ZXJzaW9uXVtRUkNBUF9XSURUSF07CgkJCSRmcmFtZUxpbmUgPSBzdHJfcmVwZWF0ICgiXDAiLCAkd2lkdGgpOwoJCQkkZnJhbWUgPSBhcnJheV9maWxsKDAsICR3aWR0aCwgJGZyYW1lTGluZSk7CgkJCS8vIEZpbmRlciBwYXR0ZXJuCgkJCSRmcmFtZSA9ICR0aGlzLT5wdXRGaW5kZXJQYXR0ZXJuKCRmcmFtZSwgMCwgMCk7CgkJCSRmcmFtZSA9ICR0aGlzLT5wdXRGaW5kZXJQYXR0ZXJuKCRmcmFtZSwgJHdpZHRoIC0gNywgMCk7CgkJCSRmcmFtZSA9ICR0aGlzLT5wdXRGaW5kZXJQYXR0ZXJuKCRmcmFtZSwgMCwgJHdpZHRoIC0gNyk7CgkJCS8vIFNlcGFyYXRvcgoJCQkkeU9mZnNldCA9ICR3aWR0aCAtIDc7CgkJCWZvciAoJHk9MDsgJHkgPCA3OyArKyR5KSB7CgkJCQkkZnJhbWVbJHldWzddID0gIlx4YzAiOwoJCQkJJGZyYW1lWyR5XVskd2lkdGggLSA4XSA9ICJceGMwIjsKCQkJCSRmcmFtZVskeU9mZnNldF1bN10gPSAiXHhjMCI7CgkJCQkrKyR5T2Zmc2V0OwoJCQl9CgkJCSRzZXRQYXR0ZXJuID0gc3RyX3JlcGVhdCgiXHhjMCIsIDgpOwoJCQkkZnJhbWUgPSAkdGhpcy0+cXJzdHJzZXQoJGZyYW1lLCAwLCA3LCAkc2V0UGF0dGVybik7CgkJCSRmcmFtZSA9ICR0aGlzLT5xcnN0cnNldCgkZnJhbWUsICR3aWR0aC04LCA3LCAkc2V0UGF0dGVybik7CgkJCSRmcmFtZSA9ICR0aGlzLT5xcnN0cnNldCgkZnJhbWUsIDAsICR3aWR0aCAtIDgsICRzZXRQYXR0ZXJuKTsKCQkJLy8gRm9ybWF0IGluZm8KCQkJJHNldFBhdHRlcm4gPSBzdHJfcmVwZWF0KCJceDg0IiwgOSk7CgkJCSRmcmFtZSA9ICR0aGlzLT5xcnN0cnNldCgkZnJhbWUsIDAsIDgsICRzZXRQYXR0ZXJuKTsKCQkJJGZyYW1lID0gJHRoaXMtPnFyc3Ryc2V0KCRmcmFtZSwgJHdpZHRoIC0gOCwgOCwgJHNldFBhdHRlcm4sIDgpOwoJCQkkeU9mZnNldCA9ICR3aWR0aCAtIDg7CgkJCWZvciAoJHk9MDsgJHkgPCA4OyArKyR5LCsrJHlPZmZzZXQpIHsKCQkJCSRmcmFtZVskeV1bOF0gPSAiXHg4NCI7CgkJCQkkZnJhbWVbJHlPZmZzZXRdWzhdID0gIlx4ODQiOwoJCQl9CgkJCS8vIFRpbWluZyBwYXR0ZXJuCgkJCSR3byA9ICR3aWR0aCAtIDE1OwoJCQlmb3IgKCRpPTE7ICRpIDwgJHdvOyArKyRpKSB7CgkJCQkkZnJhbWVbNl1bNyskaV0gPSBjaHIoMHg5MCB8ICgkaSAmIDEpKTsKCQkJCSRmcmFtZVs3KyRpXVs2XSA9IGNocigweDkwIHwgKCRpICYgMSkpOwoJCQl9CgkJCS8vIEFsaWdubWVudCBwYXR0ZXJuCgkJCSRmcmFtZSA9ICR0aGlzLT5wdXRBbGlnbm1lbnRQYXR0ZXJuKCR2ZXJzaW9uLCAkZnJhbWUsICR3aWR0aCk7CgkJCS8vIFZlcnNpb24gaW5mb3JtYXRpb24KCQkJaWYgKCR2ZXJzaW9uID49IDcpIHsKCQkJCSR2aW5mID0gJHRoaXMtPmdldFZlcnNpb25QYXR0ZXJuKCR2ZXJzaW9uKTsKCQkJCSR2ID0gJHZpbmY7CgkJCQlmb3IgKCR4PTA7ICR4PDY7ICsrJHgpIHsKCQkJCQlmb3IgKCR5PTA7ICR5PDM7ICsrJHkpIHsKCQkJCQkJJGZyYW1lWygkd2lkdGggLSAxMSkrJHldWyR4XSA9IGNocigweDg4IHwgKCR2ICYgMSkpOwoJCQkJCQkkdiA9ICR2ID4+IDE7CgkJCQkJfQoJCQkJfQoJCQkJJHYgPSAkdmluZjsKCQkJCWZvciAoJHk9MDsgJHk8NjsgKyskeSkgewoJCQkJCWZvciAoJHg9MDsgJHg8MzsgKyskeCkgewoJCQkJCQkkZnJhbWVbJHldWyR4Kygkd2lkdGggLSAxMSldID0gY2hyKDB4ODggfCAoJHYgJiAxKSk7CgkJCQkJCSR2ID0gJHYgPj4gMTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJLy8gYW5kIGEgbGl0dGxlIGJpdC4uLgoJCQkkZnJhbWVbJHdpZHRoIC0gOF1bOF0gPSAiXHg4MSI7CgkJCXJldHVybiAkZnJhbWU7CgkJfQoKCQkvKioKCQkgKiBTZXQgbmV3IGZyYW1lIGZvciB0aGUgc3BlY2lmaWVkIHZlcnNpb24uCgkJICogQHBhcmFtIGludCAkdmVyc2lvbiB2ZXJzaW9uCgkJICogQHJldHVybiBBcnJheSBvZiB1bnNpZ25lZCBjaGFyLgoJCSAqLwoJCXByb3RlY3RlZCBmdW5jdGlvbiBuZXdGcmFtZSgkdmVyc2lvbikgewoJCQlpZiAoKCR2ZXJzaW9uIDwgMSkgT1IgKCR2ZXJzaW9uID4gUVJTUEVDX1ZFUlNJT05fTUFYKSkgewoJCQkJcmV0dXJuIE5VTEw7CgkJCX0KCQkJaWYgKCFpc3NldCgkdGhpcy0+ZnJhbWVzWyR2ZXJzaW9uXSkpIHsKCQkJCSR0aGlzLT5mcmFtZXNbJHZlcnNpb25dID0gJHRoaXMtPmNyZWF0ZUZyYW1lKCR2ZXJzaW9uKTsKCQkJfQoJCQlpZiAoaXNfbnVsbCgkdGhpcy0+ZnJhbWVzWyR2ZXJzaW9uXSkpIHsKCQkJCXJldHVybiBOVUxMOwoJCQl9CgkJCXJldHVybiAkdGhpcy0+ZnJhbWVzWyR2ZXJzaW9uXTsKCQl9CgoJCS8qKgoJCSAqIFJldHVybiBibG9jayBudW1iZXIgMAoJCSAqIEBwYXJhbSBhcnJheSAkc3BlYwoJCSAqIEByZXR1cm4gaW50IHZhbHVlCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiByc0Jsb2NrTnVtKCRzcGVjKSB7CgkJCXJldHVybiAoJHNwZWNbMF0gKyAkc3BlY1szXSk7CgkJfQoKCQkvKioKCQkqIFJldHVybiBibG9jayBudW1iZXIgMQoJCSAqIEBwYXJhbSBhcnJheSAkc3BlYwoJCSAqIEByZXR1cm4gaW50IHZhbHVlCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiByc0Jsb2NrTnVtMSgkc3BlYykgewoJCQlyZXR1cm4gJHNwZWNbMF07CgkJfQoKCQkvKioKCQkgKiBSZXR1cm4gZGF0YSBjb2RlcyAxCgkJICogQHBhcmFtIGFycmF5ICRzcGVjCgkJICogQHJldHVybiBpbnQgdmFsdWUKCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIHJzRGF0YUNvZGVzMSgkc3BlYykgewoJCQlyZXR1cm4gJHNwZWNbMV07CgkJfQoKCQkvKioKCQkgKiBSZXR1cm4gZWNjIGNvZGVzIDEKCQkgKiBAcGFyYW0gYXJyYXkgJHNwZWMKCQkgKiBAcmV0dXJuIGludCB2YWx1ZQoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gcnNFY2NDb2RlczEoJHNwZWMpIHsKCQkJcmV0dXJuICRzcGVjWzJdOwoJCX0KCgkJLyoqCgkJICogUmV0dXJuIGJsb2NrIG51bWJlciAyCgkJICogQHBhcmFtIGFycmF5ICRzcGVjCgkJICogQHJldHVybiBpbnQgdmFsdWUKCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIHJzQmxvY2tOdW0yKCRzcGVjKSB7CgkJCXJldHVybiAkc3BlY1szXTsKCQl9CgoJCS8qKgoJCSAqIFJldHVybiBkYXRhIGNvZGVzIDIKCQkgKiBAcGFyYW0gYXJyYXkgJHNwZWMKCQkgKiBAcmV0dXJuIGludCB2YWx1ZQoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gcnNEYXRhQ29kZXMyKCRzcGVjKSB7CgkJCXJldHVybiAkc3BlY1s0XTsKCQl9CgoJCS8qKgoJCSAqIFJldHVybiBlY2MgY29kZXMgMgoJCSAqIEBwYXJhbSBhcnJheSAkc3BlYwoJCSAqIEByZXR1cm4gaW50IHZhbHVlCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiByc0VjY0NvZGVzMigkc3BlYykgewoJCQlyZXR1cm4gJHNwZWNbMl07CgkJfQoKCQkvKioKCQkgKiBSZXR1cm4gZGF0YSBsZW5ndGgKCQkgKiBAcGFyYW0gYXJyYXkgJHNwZWMKCQkgKiBAcmV0dXJuIGludCB2YWx1ZQoJCSAqLwoJCSBwcm90ZWN0ZWQgZnVuY3Rpb24gcnNEYXRhTGVuZ3RoKCRzcGVjKSB7CgkJCXJldHVybiAoJHNwZWNbMF0gKiAkc3BlY1sxXSkgKyAoJHNwZWNbM10gKiAkc3BlY1s0XSk7CgkJfQoKCQkvKioKCQkgKiBSZXR1cm4gZWNjIGxlbmd0aAoJCSAqIEBwYXJhbSBhcnJheSAkc3BlYwoJCSAqIEByZXR1cm4gaW50IHZhbHVlCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiByc0VjY0xlbmd0aCgkc3BlYykgewoJCQlyZXR1cm4gKCRzcGVjWzBdICsgJHNwZWNbM10pICogJHNwZWNbMl07CgkJfQoKCQkvLyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCgoJCS8vIFFScnMKCgkJLyoqCgkJICogSW5pdGlhbGl6ZSBhIFJlZWQtU29sb21vbiBjb2RlYyBhbmQgYWRkIGl0IHRvIGV4aXN0aW5nIHJzaXRlbXMKCQkgKiBAcGFyYW0gaW50ICRzeW1zaXplIHN5bWJvbCBzaXplLCBiaXRzCgkJICogQHBhcmFtIGludCAkZ2Zwb2x5ICBGaWVsZCBnZW5lcmF0b3IgcG9seW5vbWlhbCBjb2VmZmljaWVudHMKCQkgKiBAcGFyYW0gaW50ICRmY3IgIGZpcnN0IHJvb3Qgb2YgUlMgY29kZSBnZW5lcmF0b3IgcG9seW5vbWlhbCwgaW5kZXggZm9ybQoJCSAqIEBwYXJhbSBpbnQgJHByaW0gIHByaW1pdGl2ZSBlbGVtZW50IHRvIGdlbmVyYXRlIHBvbHlub21pYWwgcm9vdHMKCQkgKiBAcGFyYW0gaW50ICRucm9vdHMgUlMgY29kZSBnZW5lcmF0b3IgcG9seW5vbWlhbCBkZWdyZWUgKG51bWJlciBvZiByb290cykKCQkgKiBAcGFyYW0gaW50ICRwYWQgIHBhZGRpbmcgYnl0ZXMgYXQgZnJvbnQgb2Ygc2hvcnRlbmVkIGJsb2NrCgkJICogQHJldHVybiBhcnJheSBBcnJheSBvZiBSUyB2YWx1ZXM6PHVsPjxsaT5tbSA9IEJpdHMgcGVyIHN5bWJvbDs8L2xpPjxsaT5ubiA9IFN5bWJvbHMgcGVyIGJsb2NrOzwvbGk+PGxpPmFscGhhX3RvID0gbG9nIGxvb2t1cCB0YWJsZSBhcnJheTs8L2xpPjxsaT5pbmRleF9vZiA9IEFudGlsb2cgbG9va3VwIHRhYmxlIGFycmF5OzwvbGk+PGxpPmdlbnBvbHkgPSBHZW5lcmF0b3IgcG9seW5vbWlhbCBhcnJheTs8L2xpPjxsaT5ucm9vdHMgPSBOdW1iZXIgb2YgZ2VuZXJhdG9yOzwvbGk+PGxpPnJvb3RzID0gbnVtYmVyIG9mIHBhcml0eSBzeW1ib2xzOzwvbGk+PGxpPmZjciA9IEZpcnN0IGNvbnNlY3V0aXZlIHJvb3QsIGluZGV4IGZvcm07PC9saT48bGk+cHJpbSA9IFByaW1pdGl2ZSBlbGVtZW50LCBpbmRleCBmb3JtOzwvbGk+PGxpPmlwcmltID0gcHJpbS10aCByb290IG9mIDEsIGluZGV4IGZvcm07PC9saT48bGk+cGFkID0gUGFkZGluZyBieXRlcyBpbiBzaG9ydGVuZWQgYmxvY2s7PC9saT48bGk+Z2Zwb2x5PC91bD4uCgkJICovCgkJIHByb3RlY3RlZCBmdW5jdGlvbiBpbml0X3JzKCRzeW1zaXplLCAkZ2Zwb2x5LCAkZmNyLCAkcHJpbSwgJG5yb290cywgJHBhZCkgewoJCQlmb3JlYWNoICgkdGhpcy0+cnNpdGVtcyBhcyAkcnMpIHsKCQkJCWlmICgoJHJzWydwYWQnXSAhPSAkcGFkKSBPUiAoJHJzWyducm9vdHMnXSAhPSAkbnJvb3RzKSBPUiAoJHJzWydtbSddICE9ICRzeW1zaXplKQoJCQkJCU9SICgkcnNbJ2dmcG9seSddICE9ICRnZnBvbHkpIE9SICgkcnNbJ2ZjciddICE9ICRmY3IpIE9SICgkcnNbJ3ByaW0nXSAhPSAkcHJpbSkpIHsKCQkJCQljb250aW51ZTsKCQkJCX0KCQkJCXJldHVybiAkcnM7CgkJCX0KCQkJJHJzID0gJHRoaXMtPmluaXRfcnNfY2hhcigkc3ltc2l6ZSwgJGdmcG9seSwgJGZjciwgJHByaW0sICRucm9vdHMsICRwYWQpOwoJCQlhcnJheV91bnNoaWZ0KCR0aGlzLT5yc2l0ZW1zLCAkcnMpOwoJCQlyZXR1cm4gJHJzOwoJCX0KCgkJLy8gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQoKCQkvLyBRUnJzSXRlbQoKCQkvKioKCQkgKiBtb2RubgoJCSAqIEBwYXJhbSBhcnJheSBSUyB2YWx1ZXMKCQkgKiBAcGFyYW0gaW50ICR4IFggcG9zaXRpb24KCQkgKiBAcmV0dXJuIGludCBYIG9zaXRpb24KCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIG1vZG5uKCRycywgJHgpIHsKCQkJd2hpbGUgKCR4ID49ICRyc1snbm4nXSkgewoJCQkJJHggLT0gJHJzWydubiddOwoJCQkJJHggPSAoJHggPj4gJHJzWydtbSddKSArICgkeCAmICRyc1snbm4nXSk7CgkJCX0KCQkJcmV0dXJuICR4OwoJCX0KCgkJLyoqCgkJICogSW5pdGlhbGl6ZSBhIFJlZWQtU29sb21vbiBjb2RlYyBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB2YWx1ZXMuCgkJICogQHBhcmFtIGludCAkc3ltc2l6ZSBzeW1ib2wgc2l6ZSwgYml0cwoJCSAqIEBwYXJhbSBpbnQgJGdmcG9seSAgRmllbGQgZ2VuZXJhdG9yIHBvbHlub21pYWwgY29lZmZpY2llbnRzCgkJICogQHBhcmFtIGludCAkZmNyICBmaXJzdCByb290IG9mIFJTIGNvZGUgZ2VuZXJhdG9yIHBvbHlub21pYWwsIGluZGV4IGZvcm0KCQkgKiBAcGFyYW0gaW50ICRwcmltICBwcmltaXRpdmUgZWxlbWVudCB0byBnZW5lcmF0ZSBwb2x5bm9taWFsIHJvb3RzCgkJICogQHBhcmFtIGludCAkbnJvb3RzIFJTIGNvZGUgZ2VuZXJhdG9yIHBvbHlub21pYWwgZGVncmVlIChudW1iZXIgb2Ygcm9vdHMpCgkJICogQHBhcmFtIGludCAkcGFkICBwYWRkaW5nIGJ5dGVzIGF0IGZyb250IG9mIHNob3J0ZW5lZCBibG9jawoJCSAqIEByZXR1cm4gYXJyYXkgQXJyYXkgb2YgUlMgdmFsdWVzOjx1bD48bGk+bW0gPSBCaXRzIHBlciBzeW1ib2w7PC9saT48bGk+bm4gPSBTeW1ib2xzIHBlciBibG9jazs8L2xpPjxsaT5hbHBoYV90byA9IGxvZyBsb29rdXAgdGFibGUgYXJyYXk7PC9saT48bGk+aW5kZXhfb2YgPSBBbnRpbG9nIGxvb2t1cCB0YWJsZSBhcnJheTs8L2xpPjxsaT5nZW5wb2x5ID0gR2VuZXJhdG9yIHBvbHlub21pYWwgYXJyYXk7PC9saT48bGk+bnJvb3RzID0gTnVtYmVyIG9mIGdlbmVyYXRvcjs8L2xpPjxsaT5yb290cyA9IG51bWJlciBvZiBwYXJpdHkgc3ltYm9sczs8L2xpPjxsaT5mY3IgPSBGaXJzdCBjb25zZWN1dGl2ZSByb290LCBpbmRleCBmb3JtOzwvbGk+PGxpPnByaW0gPSBQcmltaXRpdmUgZWxlbWVudCwgaW5kZXggZm9ybTs8L2xpPjxsaT5pcHJpbSA9IHByaW0tdGggcm9vdCBvZiAxLCBpbmRleCBmb3JtOzwvbGk+PGxpPnBhZCA9IFBhZGRpbmcgYnl0ZXMgaW4gc2hvcnRlbmVkIGJsb2NrOzwvbGk+PGxpPmdmcG9seTwvdWw+LgoJCSAqLwoJCXByb3RlY3RlZCBmdW5jdGlvbiBpbml0X3JzX2NoYXIoJHN5bXNpemUsICRnZnBvbHksICRmY3IsICRwcmltLCAkbnJvb3RzLCAkcGFkKSB7CgkJCS8vIEJhc2VkIG9uIFJlZWQgc29sb21vbiBlbmNvZGVyIGJ5IFBoaWwgS2FybiwgS0E5USAoR05VLUxHUEx2MikKCQkJJHJzID0gbnVsbDsKCQkJLy8gQ2hlY2sgcGFyYW1ldGVyIHJhbmdlcwoJCQlpZiAoKCRzeW1zaXplIDwgMCkgT1IgKCRzeW1zaXplID4gOCkpIHsKCQkJCXJldHVybiAkcnM7CgkJCX0KCQkJaWYgKCgkZmNyIDwgMCkgT1IgKCRmY3IgPj0gKDE8PCRzeW1zaXplKSkpIHsKCQkJCXJldHVybiAkcnM7CgkJCX0KCQkJaWYgKCgkcHJpbSA8PSAwKSBPUiAoJHByaW0gPj0gKDE8PCRzeW1zaXplKSkpIHsKCQkJCXJldHVybiAkcnM7CgkJCX0KCQkJaWYgKCgkbnJvb3RzIDwgMCkgT1IgKCRucm9vdHMgPj0gKDE8PCRzeW1zaXplKSkpIHsKCQkJCXJldHVybiAkcnM7CgkJCX0KCQkJaWYgKCgkcGFkIDwgMCkgT1IgKCRwYWQgPj0gKCgxPDwkc3ltc2l6ZSkgLTEgLSAkbnJvb3RzKSkpIHsKCQkJCXJldHVybiAkcnM7CgkJCX0KCQkJJHJzID0gYXJyYXkoKTsKCQkJJHJzWydtbSddID0gJHN5bXNpemU7CgkJCSRyc1snbm4nXSA9ICgxIDw8ICRzeW1zaXplKSAtIDE7CgkJCSRyc1sncGFkJ10gPSAkcGFkOwoJCQkkcnNbJ2FscGhhX3RvJ10gPSBhcnJheV9maWxsKDAsICgkcnNbJ25uJ10gKyAxKSwgMCk7CgkJCSRyc1snaW5kZXhfb2YnXSA9IGFycmF5X2ZpbGwoMCwgKCRyc1snbm4nXSArIDEpLCAwKTsKCQkJLy8gUEhQIHN0eWxlIG1hY3JvIHJlcGxhY2VtZW50IDspCgkJCSROTiA9JiAkcnNbJ25uJ107CgkJCSRBMCA9JiAkTk47CgkJCS8vIEdlbmVyYXRlIEdhbG9pcyBmaWVsZCBsb29rdXAgdGFibGVzCgkJCSRyc1snaW5kZXhfb2YnXVswXSA9ICRBMDsgLy8gbG9nKHplcm8pID0gLWluZgoJCQkkcnNbJ2FscGhhX3RvJ11bJEEwXSA9IDA7IC8vIGFscGhhKiotaW5mID0gMAoJCQkkc3IgPSAxOwoJCQlmb3IgKCRpPTA7ICRpPCRyc1snbm4nXTsgKyskaSkgewoJCQkJJHJzWydpbmRleF9vZiddWyRzcl0gPSAkaTsKCQkJCSRyc1snYWxwaGFfdG8nXVskaV0gPSAkc3I7CgkJCQkkc3IgPDw9IDE7CgkJCQlpZiAoJHNyICYgKDEgPDwgJHN5bXNpemUpKSB7CgkJCQkJJHNyIF49ICRnZnBvbHk7CgkJCQl9CgkJCQkkc3IgJj0gJHJzWydubiddOwoJCQl9CgkJCWlmICgkc3IgIT0gMSkgewoJCQkJLy8gZmllbGQgZ2VuZXJhdG9yIHBvbHlub21pYWwgaXMgbm90IHByaW1pdGl2ZSEKCQkJCXJldHVybiBOVUxMOwoJCQl9CgkJCS8vIEZvcm0gUlMgY29kZSBnZW5lcmF0b3IgcG9seW5vbWlhbCBmcm9tIGl0cyByb290cwoJCQkkcnNbJ2dlbnBvbHknXSA9IGFycmF5X2ZpbGwoMCwgKCRucm9vdHMgKyAxKSwgMCk7CgkJCSRyc1snZmNyJ10gPSAkZmNyOwoJCQkkcnNbJ3ByaW0nXSA9ICRwcmltOwoJCQkkcnNbJ25yb290cyddID0gJG5yb290czsKCQkJJHJzWydnZnBvbHknXSA9ICRnZnBvbHk7CgkJCS8vIEZpbmQgcHJpbS10aCByb290IG9mIDEsIHVzZWQgaW4gZGVjb2RpbmcKCQkJZm9yICgkaXByaW09MTsgKCRpcHJpbSAlICRwcmltKSAhPSAwOyAkaXByaW0gKz0gJHJzWydubiddKSB7CgkJCQk7IC8vIGludGVudGlvbmFsIGVtcHR5LWJvZHkgbG9vcCEKCQkJfQoJCQkkcnNbJ2lwcmltJ10gPSAoaW50KSgkaXByaW0gLyAkcHJpbSk7CgkJCSRyc1snZ2VucG9seSddWzBdID0gMTsKCgoJCQlmb3IgKCRpID0gMCwkcm9vdD0kZmNyKiRwcmltOyAkaSA8ICRucm9vdHM7ICRpKyssICRyb290ICs9ICRwcmltKSB7CgkJCQkkcnNbJ2dlbnBvbHknXVskaSsxXSA9IDE7CgkJCQkvLyBNdWx0aXBseSBycy0+Z2VucG9seVtdIGJ5ICBAKioocm9vdCArIHgpCgkJCQlmb3IgKCRqID0gJGk7ICRqID4gMDsgLS0kaikgewoJCQkJCWlmICgkcnNbJ2dlbnBvbHknXVskal0gIT0gMCkgewoJCQkJCQkkcnNbJ2dlbnBvbHknXVskal0gPSAkcnNbJ2dlbnBvbHknXVskai0xXSBeICRyc1snYWxwaGFfdG8nXVskdGhpcy0+bW9kbm4oJHJzLCAkcnNbJ2luZGV4X29mJ11bJHJzWydnZW5wb2x5J11bJGpdXSArICRyb290KV07CgkJCQkJfSBlbHNlIHsKCQkJCQkJJHJzWydnZW5wb2x5J11bJGpdID0gJHJzWydnZW5wb2x5J11bJGotMV07CgkJCQkJfQoJCQkJfQoJCQkJLy8gcnMtPmdlbnBvbHlbMF0gY2FuIG5ldmVyIGJlIHplcm8KCQkJCSRyc1snZ2VucG9seSddWzBdID0gJHJzWydhbHBoYV90byddWyR0aGlzLT5tb2RubigkcnMsICRyc1snaW5kZXhfb2YnXVskcnNbJ2dlbnBvbHknXVswXV0gKyAkcm9vdCldOwoJCQl9CgkJCS8vIGNvbnZlcnQgcnMtPmdlbnBvbHlbXSB0byBpbmRleCBmb3JtIGZvciBxdWlja2VyIGVuY29kaW5nCgkJCWZvciAoJGkgPSAwOyAkaSA8PSAkbnJvb3RzOyArKyRpKSB7CgkJCQkkcnNbJ2dlbnBvbHknXVskaV0gPSAkcnNbJ2luZGV4X29mJ11bJHJzWydnZW5wb2x5J11bJGldXTsKCQkJfQoJCQlyZXR1cm4gJHJzOwoJCX0KCgkJLyoqCgkJICogRW5jb2RlIGEgUmVlZC1Tb2xvbW9uIGNvZGVjIGFuZCByZXR1cm5zIHRoZSBwYXJpdHkgYXJyYXkKCQkgKiBAcGFyYW0gYXJyYXkgJHJzIFJTIHZhbHVlcwoJCSAqIEBwYXJhbSBhcnJheSAkZGF0YSBkYXRhCgkJICogQHBhcmFtIGFycmF5ICRwYXJpdHkgcGFyaXR5CgkJICogQHJldHVybiBwYXJpdHkgYXJyYXkKCQkgKi8KCQkgcHJvdGVjdGVkIGZ1bmN0aW9uIGVuY29kZV9yc19jaGFyKCRycywgJGRhdGEsICRwYXJpdHkpIHsKCQkJJE1NICAgICAgID0mICRyc1snbW0nXTsgLy8gYml0cyBwZXIgc3ltYm9sCgkJCSROTiAgICAgICA9JiAkcnNbJ25uJ107IC8vIHRoZSB0b3RhbCBudW1iZXIgb2Ygc3ltYm9scyBpbiBhIFJTIGJsb2NrCgkJCSRBTFBIQV9UTyA9JiAkcnNbJ2FscGhhX3RvJ107IC8vIHRoZSBhZGRyZXNzIG9mIGFuIGFycmF5IG9mIE5OIGVsZW1lbnRzIHRvIGNvbnZlcnQgR2Fsb2lzIGZpZWxkIGVsZW1lbnRzIGluIGluZGV4IChsb2cpIGZvcm0gdG8gcG9seW5vbWlhbCBmb3JtCgkJCSRJTkRFWF9PRiA9JiAkcnNbJ2luZGV4X29mJ107IC8vIHRoZSBhZGRyZXNzIG9mIGFuIGFycmF5IG9mIE5OIGVsZW1lbnRzIHRvIGNvbnZlcnQgR2Fsb2lzIGZpZWxkIGVsZW1lbnRzIGluIHBvbHlub21pYWwgZm9ybSB0byBpbmRleCAobG9nKSBmb3JtCgkJCSRHRU5QT0xZICA9JiAkcnNbJ2dlbnBvbHknXTsgLy8gYW4gYXJyYXkgb2YgTlJPT1RTKzEgZWxlbWVudHMgY29udGFpbmluZyB0aGUgZ2VuZXJhdG9yIHBvbHlub21pYWwgaW4gaW5kZXggZm9ybQoJCQkkTlJPT1RTICAgPSYgJHJzWyducm9vdHMnXTsgLy8gdGhlIG51bWJlciBvZiByb290cyBpbiB0aGUgUlMgY29kZSBnZW5lcmF0b3IgcG9seW5vbWlhbCwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIG51bWJlciBvZiBwYXJpdHkgc3ltYm9scyBpbiBhIGJsb2NrCgkJCSRGQ1IgICAgICA9JiAkcnNbJ2ZjciddOyAvLyBmaXJzdCBjb25zZWN1dGl2ZSByb290LCBpbmRleCBmb3JtCgkJCSRQUklNICAgICA9JiAkcnNbJ3ByaW0nXTsgLy8gcHJpbWl0aXZlIGVsZW1lbnQsIGluZGV4IGZvcm0KCQkJJElQUklNICAgID0mICRyc1snaXByaW0nXTsgLy8gcHJpbS10aCByb290IG9mIDEsIGluZGV4IGZvcm0KCQkJJFBBRCAgICAgID0mICRyc1sncGFkJ107IC8vIHRoZSBudW1iZXIgb2YgcGFkIHN5bWJvbHMgaW4gYSBibG9jawoJCQkkQTAgICAgICAgPSYgJE5OOwoJCQkkcGFyaXR5ID0gYXJyYXlfZmlsbCgwLCAkTlJPT1RTLCAwKTsKCQkJZm9yICgkaT0wOyAkaSA8ICgkTk4gLSAkTlJPT1RTIC0gJFBBRCk7ICRpKyspIHsKCQkJCSRmZWVkYmFjayA9ICRJTkRFWF9PRlskZGF0YVskaV0gXiAkcGFyaXR5WzBdXTsKCQkJCWlmICgkZmVlZGJhY2sgIT0gJEEwKSB7CgkJCQkJLy8gZmVlZGJhY2sgdGVybSBpcyBub24temVybwoJCQkJCS8vIFRoaXMgbGluZSBpcyB1bm5lY2Vzc2FyeSB3aGVuIEdFTlBPTFlbTlJPT1RTXSBpcyB1bml0eSwgYXMgaXQgbXVzdAoJCQkJCS8vIGFsd2F5cyBiZSBmb3IgdGhlIHBvbHlub21pYWxzIGNvbnN0cnVjdGVkIGJ5IGluaXRfcnMoKQoJCQkJCSRmZWVkYmFjayA9ICR0aGlzLT5tb2RubigkcnMsICROTiAtICRHRU5QT0xZWyROUk9PVFNdICsgJGZlZWRiYWNrKTsKCQkJCQlmb3IgKCRqPTE7ICRqIDwgJE5ST09UUzsgKyskaikgewoJCQkJCSRwYXJpdHlbJGpdIF49ICRBTFBIQV9UT1skdGhpcy0+bW9kbm4oJHJzLCAkZmVlZGJhY2sgKyAkR0VOUE9MWVsoJE5ST09UUyAtICRqKV0pXTsKCQkJCQl9CgkJCQl9CgkJCQkvLyBTaGlmdAoJCQkJYXJyYXlfc2hpZnQoJHBhcml0eSk7CgkJCQlpZiAoJGZlZWRiYWNrICE9ICRBMCkgewoJCQkJCWFycmF5X3B1c2goJHBhcml0eSwgJEFMUEhBX1RPWyR0aGlzLT5tb2RubigkcnMsICRmZWVkYmFjayArICRHRU5QT0xZWzBdKV0pOwoJCQkJfSBlbHNlIHsKCQkJCQlhcnJheV9wdXNoKCRwYXJpdHksIDApOwoJCQkJfQoJCQl9CgkJCXJldHVybiAkcGFyaXR5OwoJCX0KCgl9IC8vIGVuZCBRUmNvZGUgY2xhc3MKCn0gLy8gRU5EIE9GICJjbGFzc19leGlzdHMgUVJjb2RlIgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNqdkMENwCAIRTmzdRMGkI1gsyJQxYRD2+eJlx8EVB0hMCQKRZXJslGZncltvfpo2745Aw97awZJIpsgOUxuKUFwBhyk5da+yz7fXofVerNt627Fljv8tG3fboYb+gSmyw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_1.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABUAAAAVAQMAAACT2TfVAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGNg/MPAUPv3A4PrXwE4BvEZQxgY/v//wfAXiDHo+h8MjEC6FohdkTCIDxQHAPdPLd2Qj8lSAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrNks0NwCAIRnt26yYMoBvgJrBZKz9aMfbQU58neSGin8wCwWGQFjgxNSajldu0jtlI5aPZnmOzlWyrz0bG6DESCAW6ASPpNh8LZsrW/KmnNsT4lU83iKiGQ6YVq5vw1o+ekM84Z0muz/ZmQqbDxP/mXETUuyg=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_2.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABkAAAAZAQMAAAD+JxcgAAAABlBMVEUAAAD///+l2Z/dAAAARUlEQVR4nGNg/H+AgaH2/30GBtf/F5EJsBhjqAMDw////xsY/oIIoljsQFZ9eQMD4//wBqApQJYrSMwVJAsmakEEI5AAANUPQrZ/cGVrAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtk8ENwCAIRXt26yYMoBvgJrBZK6JipPbQa58nefmRpL/MAsFhoDrkwFRYbJ3etiRXK9OPdvuu7pyiOX1nUuasEkBIMFlQQr3Gw0Vt2to/+5zNBbHtc5zWImK17HQyY27W6YbJOr0a77qt6zu/WaeTw3r/UeMCqze/1A==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_3.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdAQMAAABsXfVMAAAABlBMVEUAAAD///+l2Z/dAAAASElEQVR4nGNg/P+HgaH2/98PDK7//wogEWAxxtAQBob/////YPgLIshmfahg+F//vYKB8f/XCqDJQJYrSMwVJAsmakEEI5AAACnCXwZsmojOAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlMENwCAIRT27dRMG0A1wE9isFVEbldhDT02fJ8PLjyQgs0DgBqgU2DNllkapXEZOWBtSecnYvkN7iWE4rRdS5gzFgxBhMkDx5RqciRpxa/wZ38lIGTHqKB2jgYjFYGPnEqZqGLN+yzD2pb/D3KjWyxPD2LluWP9H5QT/jcSA]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_4.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACEAAAAhAQMAAABtKlAsAAAABlBMVEUAAAD///+l2Z/dAAAASklEQVR4nGNg/P//AAND7f//9xkYXP//v4hKQsQZQ0MdGBj+A0EDw18wSVM2O5Bd/7+8gQHotvAGkBuAbFewuCtYDYSsBZOMIBIANpx+y7TG4/oAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlDEOwCAIRZ29dRMOoDfQm8DNWgG1AxKHDh18ToaXHxn8RAxCMEAZUiRsLC2ZPlZLWls8/djaepfumJNxxo6o2FlKBCaDaYES5ZqCi1p5yzpZJ+uvWbXBVv8ml2WVUsQip3Nqqd1y/vYry+mJ+S63TcaOu5bTOdPyerVzA46UySw=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_5.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACUAAAAlAQMAAAD/ULJAAAAABlBMVEUAAAD///+l2Z/dAAAAS0lEQVR4nGNg/P//DwND7f//fz8wuAJJARQSIs4YGhrCwPAfCH4w/AWTA8L+UMHwv/7/9woGoJu/VoDcBmS7gsVdwWogZC2YZASRAEKbotfqBbjaAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlTEOwCAIRTt76yYcQG+AN4GbtSJqF8QOTTr4nExefmD5MAsEhwFVgQNTYWpW4zZL4twU4yNzeU7dPUXj9d1JsTOVAEIC0wQl1G88XNRMy+bO3Jk78x+ZuSBmq4jTMhGxmux0csbcTKfrHplOf4453abtu78xnU4epnePGhek7M3Y]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_6.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACkAAAApAQMAAACSrpK1AAAABlBMVEUAAAD///+l2Z/dAAAATElEQVR4nGNg/P///wEGhlogdZ+BwRVIXUSnoHKMoaGhDgwM/0GggeEvhBoSPHYgr/7///IGBpBvwxvAPgLyXCFyrhCVUKoWQjGCKQBFL8rQQnK2FAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlUEOhCAMRV1z60lY0J3cAG4CN5uC1SmMteDKhZ9V48tPbX7anKuSXSQ5B2mDssmp6JIGl4hCujjrdKWGaLikY9FRQUP/9x1DCJH9JeubZuLX34sBH6v9MZNEkr1RO2Rslbdy3yhLMlu5LkMi2k/Rr/dzvftciLU5y5xYEx27r0J9x3uq7zcnT/XGnYgLetQbtzOAG/UGtO695Zzs6/MzlMF8ctPkfOu3ofFW7w7vW79pfCaztHaLG1q980xfu8gukg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_7.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAC0AAAAtAQMAAAAA1HDZAAAABlBMVEUAAAD///+l2Z/dAAAAcklEQVR4nKWPwQ2AIBAElw5oig6kBHvgY+5pZZbi04SHRD/m3OOMDcA+JpMlbEBQ1RNYiKMiGWLHbqiyRXaXPBUh5zwBStMbDztC7Zh1DFoVpuASpqAJ89vXDS40x+qY1d/0haB9z35LS94lv/lhcYSOF+hx6ADcNRNbAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_8.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlkEOxCAIRbv21pO40F29gd5EbzaItMGpg9i131UpLz8QDZSCyvaQ5JzPLbGYkqtmhPdAtEwgqsPUAwnMVBNuQqSqrg5OjOpIMUZOeCSoDupVOPlJEU4XCXevMkn2AF2JxqKClesAWZJpn+ehFhFhmdge22NGPG+qEDHj1yBEiEiP/38jbz2W69j3anvIBMwrGKRhifDArHgg4H49pLt7jZ6P+n2U4c4gvUHdrO08VPOc16HbGXiv3hCa3acjVPsV0xc4IjM+]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_8.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAADEAAAAxAQMAAABJUtNfAAAABlBMVEUAAAD///+l2Z/dAAAAgUlEQVR4nLWQsQ2DMBREz1WmQFmFxgOkQCkZgwrZGzBPxmACVqBBaXCO+/FHTMA1T0/3pbOMQKUFRmHvgSj+Xs7ZuD85W1+WsgChU3RPOZlRrBf5j3nlXb4m7T0yvkn7Q8aWSs/35Wd/1/7HOTkb+p7vB9b32H+ZR++j358cnaHyAIEcFf2Q1+A7AAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_9.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlkEOhCAMRV1z60lYtDu5AdwEbjYVqoERoTArEz4rm778lFj9IUR5vfWEAD41BxX8IRGFRKVuog4nCQWRit0DFAJ2KXfoPtdF1edy1toaxXPxHZq9PM7S+amZ6w49q+9FOpuVjjK6PxdJs1R63LchMWWmqOW1vN7qVdulZk097W2zxpSrdDRq/3hNzbXejeX1Ti/KHog46kUMAIx6EULY3au9X+dv/TO0y+Ehs7W/G/JsU3iJc1Q+lzyz5Xc4S0mzaEGJc2+mL7PiN+o=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_9.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAADUAAAA1AQMAAADbKDEzAAAABlBMVEUAAAD///+l2Z/dAAAAfElEQVR4nL2QsQmAUBBD8ytbV3CYv4HiKNrIH8WJLO10BOE3oo3Eu/PEDUzzCDm4EASKFmBQThlRuZUPZ2PBtdS845oRGlENUD1PXJoLaTLPP31O8j/3OJL0OXrsiS33z7/5X30q5+jc6P+9j+xt/WxP8dHz6PcvB2d4eAMNgEiKiFtAJAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_10.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtl00OhCAMRl1z60lYtDu5AdwEbjb81Ak6IBTjrh8rG19eSpSUEHK83maCCL4AQQWfMktCIgsRyWRkOQvBJGGKdCm3ZK9PZ629kghVn7S3Zr8uZ+P6q5rf3nrKnDPmAJTOMXquzxhNUeVx39gh0iyT4hSnON91tv/+QVX1T5xBlUjXfOe2+tS53Kd8Q+IU55tOjGMV4IoTU2DFCTkt5+hMOEaqD/scCt2ZenT28WbNk5M139Z98mbqem+fkJy7w4lk3VeqfAF87zyW]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_10.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAADkAAAA5AQMAAAC21hHGAAAABlBMVEUAAAD///+l2Z/dAAAAf0lEQVR4nM2RsQmAMBREL5Vr2WQEESexCsloOoKFpbiCjdioZ36SL47gVY/jBS58GMacA+AE7hWwqZkK3BnGBNFZeEXHNJIaoDRkwCWOAHNSwz81m5eFVcDhZXMfsHvOZPtpXucnmzuF6uOUhbo5XjD/Il1HGquO1VcvOAVT4AFvfYgkegVkXAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_11.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtl00OhCAMRl1z60lYlB3cAG4CN5vy4wxGEAou+7my8eWlxDQ0hBQvj9mAUj5DQQQfQ6YzhXQ0U2iV6ESt0DBHu5iGGyq637ez1jZogH/f5cyNvj/O4tOom9+Z+5J5N+aEhEwxcr5vjCwR+VUfSym02aLZzW52s7tF9+bXsC6eZuewXmjX+WpQf8O91Tf/a+xmN7vvNOBlXalVN6KgQK/TeGVuu8dz7bzufpZmanjYicbznL4bXNzkvaTum74T1We+S1N3wQtN3kOrfAEgekFK]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_11.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAD0AAAA9AQMAAAAkrPOqAAAABlBMVEUAAAD///+l2Z/dAAAAgklEQVR4nM2RMQqAMAxFfw8guHmi3kDv4lJ6NgdHR0c33buILhKT1BTBC/jJ8Pj8wA+BI9EKBIUtwSuM9QOzQoo01ZI5Ii0JrhO1AKlDJy7NMFCWOhl+63BhmR58gkyPPZLMyymZn3T+OoNBY1CRdbYr+Mv5rvxBdrxlvG0VCAbugRs5Sr39Ws7J0AAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_12.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmEEOhSAMRF1z65+wgJ3cAG4CN/sFi2ICCMWV6eDGVCaPYiRjCElebjNSWvljYhDBR007KO1xJjhEglkHnRzSTKpDXMWQg4tqriI79PrgrLWuugp19QH3wuy14SyMasWce+FRcwygPFHIJCPn+gCSKHHc7htZ6GCWHZiBGZiBGb7M0P4iD1RE/1QYqKCDaz73WHmLYbkP/E4yAzMww3cZIK1AaFphgLQC1xJDRFAthpFvdY4qP/J5EbqZd+TMomW9GwMpb5Z9oGXeci/ecKBk/5sD6f9DoT8nhUXu]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_12.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAEEAAABBAQMAAAC0OVsGAAAABlBMVEUAAAD///+l2Z/dAAAAjUlEQVR4nGNg/A8C/w4wMNSCWf/jGRhcwYy/gTDWn4tg1h/5//8Dwer+3gciBgbGUDBwYGD4Dxb7/7+B4S9EHZD1HwrAYlDW0Bb7UA/2G3sDw/d6sH/LGxi+Alnx//+HI4sh1A28mykROwln5cNZU//D/Qb3LzANQcMAkjZAYq5wda5wvQhWLZzFCGMBAE0Q/h7VxC3kAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_13.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmEEOxCAIRbv21pO4gF29gd5EbzZq6cQmo6XopgnfVUP5eYUmRFKqinZ7KkSMR3IyKRZJXAAgUnZ2KSQilupSsydcAJDtEoo6LK3LuC7Bex8GX0R1oR65/f8JPp9OzP16FEnPWbLOZGOrnH1elyxLMsfjvk2JXNwSF2VRFmVRFmV5H8to5rBi5m7+sWLkEgZvMmIrWZbURf9dZVEWZVGWt7HkmyggummXonmWjAJ9Ft48Oq+hn6nZmG52Hrw5Lb/bX1jEe4a2LvKdR9ujVS7SXdDFRbyXavQFpPJKmg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_13.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAEUAAABFAQMAAAAmQ7lqAAAABlBMVEUAAAD///+l2Z/dAAAAh0lEQVR4nN2SwQmAMAxFf09eu1QHEBQncAa9SJdzBY/u0IvoRWJMbHQAQfCfHj+/0HwCR6IRGJT2hKA0+0yLUkE0ecl1PE1wtagCSD3asGuOiS6pRz/1UpR9U481Sgdrj4Wp4dae3p37/s9ve6VRNGrJ9o25g/PWtJfrhtgLlgv29qbByGU6AMKTP3PEEmSPAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_14.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmEEKxCAMRbv21gMukl29gd5EbzZq00GZTltNoAzku2ooj0eULJJSTbTLTBAwboBkUiyZJ0EkQiYVo1kSVFIlMEmI16RQclkDxIZ03KfgvQ+Xta5PdHdu7U/w+dyouc/dRcqcU84OMLbG2bk+5ViK2T7XhR0iOTGSOqmTOv2v091ZdFozI/PxtEakcPDHYE3aSaxP+sbVSZ3USee4znF94+qkTk84IUI+Ek4AkGEiTgUF307j82lfQbzYMzP92ImNz3HerqdzYu2f2j7xdmLt3UmSOLvDjsTaZzZ5A1rXt3c=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_14.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAEkAAABJAQMAAABLvZmfAAAABlBMVEUAAAD///+l2Z/dAAAAiklEQVR4nN2SsQ2AMAwEnYpZ2IImA1AgJkFUKFmRCShpaRAN8CQ2iWEDxBfW6fWy/JLJgHVURMONE5EVxJhxFyywuLPmbI/NxaxpRGEDxAU8HZKNiCR2E37MDafyvYWnUIBb9J5WhxZxvNxH9mMt/tytVJwVO+i92iJ8dep2f2p0rWatbnjgoGgyXmY3cuIU3MLeAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_15.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmDEOwyAMRTNz60oM9hZuADeBmxUSEhHVqQq4Xfp/pljK05NRjOSUtkS7jIaI4g5JJsWSGRoTx0rJtGI251ZoG+VHtFDy8qVUZW5pct+C916gCVUup3D0rZ6pW69P8PlZP6u680xjzbhbzgExdouz433LsTVmf10XlVSaU6XBDW5w+y83aWr1zLezau4mas/sPauVFgRaEL97W/2Gm2rf8C/ADW5wgxvuLNxZ+BfgBje49dCIiZi13CiHSc8th1zvlL2Zvcd66qFyL6SbnerYnTW/G7y4Te8t277N71TbM9Wmze6iL7TpPXmTJwK6vCM=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_15.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAE0AAABNAQMAAADZx3vzAAAABlBMVEUAAAD///+l2Z/dAAAAkElEQVR4nGNg/A8BfxgYaqHMqx8YXKHMrwJoTPb/f+T/HxUAqS3///f+/7sfGBhDISCEgeE/VPT/D4a/ULVA5n8YAIvCmINM9EM9xL0fKhi+10N88b2C4Wv9//D/f+P/f0URRVI7yHwx6mMIcyOC+R3BbP2P8AXCb8AcAPMxLFUDRV0Ral0RJiAxaxFMRjgTAPtNwORA0mFhAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_16.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmUEOhCAMRV1z60lYtDu4AdwEbjaAyGCCcZTq6n9XNvHlpQSaYIwlQS8zIaKwgqKKIWeWyMyhkhIxG04TKRML6UWizxl8O66XPjbiuI/eOTckDuvE9OtjXWtr9o936THW/Fu3ba1DzZxjygZSusTquT6m6Bq1vppFLJVoxYlwhCMc4XhGHJ15V8/HVldH5/LVM7zVK9EPiP7gy5P6U47ifcSegSMc4QhHOGJeY15jz8ARjnCEYyYSMxNZUSIR8RuO9+fMdrX5EZuF8eDO/v68lrlr3jmK3If3fZS5s+/X+gmixL+PHVHk/0yXL93UwM8=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_16.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAFEAAABRAQMAAACQQdh1AAAABlBMVEUAAAD///+l2Z/dAAAAiElEQVR4nGNg/A8FBxgYaqHMP/EMDK5Q9t9ADDY7GF0Eqy8HoX/3GRgYQ6HAgYHhP1T8//8Ghr8w9UD2fzgAi8PZg1n8Qz3U/ewNDN/rof4qb2D4Wv8//D8YoYojqx8M7h8NH/qI9yKxd6OKI/yLFA6M/xHhA8tHIHFXJPWuSOYgs2uR2IwINgDF7wrWGdmF7wAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_17.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmUEKxCAMRbv21gMukl29gd5EbzZq7aDMdGptXBT+76qhPB4hoDQh5Hi93A0T+w0WVPApIlQmX2iRmkxlXBM10wSpxH1Ul9Jdb12P++qsta67TnVfywyY9ftxNj4X6uYzA77kvmvMDlM6x+j7fY3RJWp7XRfRFKqZQoUrXOEKV7g+x/Xq+XRaVyNn6Wm9UN3BV4P1ma5T+op5hStc4QpXuOI+gPsA5hWucIUrXJ/iyszEJO1KCcrirpTy23X83Np/m79Ez9jwZ2c0fh+Q2200rmJ7mLqvcjujegZmUaV2cQ1VbG9Y5Q3zmsV7]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_17.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAFUAAABVAQMAAAACOzoZAAAABlBMVEUAAAD///+l2Z/dAAAAiElEQVR4nGNg/A8FVxgYamHssx8YXGHsuwII9lsw+0M9CAHFgeq/14PQ2w8MjKFQEMLA8B8m/v8Hw1+YeiD7PxyAxeHs4SQO8SwIVTBAAgGEKhi+1v+HIlRxZPWDwf2j4UMfcVEk9mokdu1/JP8ihQMwn8LDB57vgOKuSOpdkcxxRTUTzmZEsAFIb2amRRJ0pwAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_18.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmUEKgzAQRV3n1oUsMjtzg+Qmyc2aaBSlHdvqT6H0f93I4OMxBCYwOU9JdkBERNIMzCanGhTZiUuNWMjVGEZ2lTwRwWRx8hY51jwlaJW5GwtZ73MMIShkpbLrczsbfnx8YijP+FnFr2cjtWCcSxagsVO8xfS5xLaY+XMc4Glk341MZzrTmc50/i9nbaqdmYNrxRxN4jOze600clTIUf3/ZaW3c7c+8zzTmc50pjOd6cw7Eu9IvCPRmc50pjOdf81ZnCtvD2epaPm287XZvaxsbvD7Rj7YaV67I2F3bTtn6H5w22fsTnN7NnqSkbvjHRm6797kDnC+yic=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_18.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAFkAAABZAQMAAABvxRrsAAAABlBMVEUAAAD///+l2Z/dAAAAmUlEQVR4nGNg/A8FfxwYGGphnH/3GRhcYZz/F5E4fwPBnA/1///I//93Eazne/3/v/fBehhDYQBo2n+YzP//DQx/YXpAnP8IAJZBcIa1DDAAoGHA3sAADBpo6JQ3MHyt/w9Ef+P//w9Hk0HRM8j8M/AyoyFKnkwuMscYTQYpdJDDDVhSIEIUnutBMq7IelyRTUPh1CJzGJE4AA/Pvb+lSOoBAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_19.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmkEKxCAMRbv21gMuzE5voDfRm422aWkZUtpOMovhf1cl8HgEwUDa2pzqJ60ECnWBNtfqiC6dKlM7fZir0sOgz1QL+ujMBXoZERhyjQ50ue8l5yzSxdrizn3nO5Pi5ym5n5ji3Vra7kzl6Ln3rFDn5ySv1/cez3HLZ5xMwvRkSoc73OEOd7jD/S5deiOfvqtbzZ29709ngq3G9CLQywnhQu0X7qZ9x32HO9zhDne4wx3umCMxR2KOhDvc4Q53uMP9X91DDwUrd6JARGbuHR8E9+/nmXWd+DKZxdrJTv77OVJ/N3xwV99r7/uuv5Pf3xlruva/EAe6+n8cu7wBAhzO0w==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_19.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAF0AAABdAQMAAAD9v/iAAAAABlBMVEUAAAD///+l2Z/dAAAAlklEQVR4nO2UsQ3CMBREzxVtdmAWbwBiFNJEmYSRGCMdSG6s0KDjiBL7Qk0RIb7cPD19S36FEbjMDegKDAmxQG4M7hOkntyR1+a9MwrOMgnhuMwBYDF84Fl2BKwzmQo/bRRgbpBaKM1cZ2yRe+rwpNYfZrWzsfds2fxbf9tkh73Dhd7Ni+p3qa3rTyETfSf6bSvoHILBC5ZaFyQLwUstAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_20.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmk0KwyAQhbP21gUXM7t4A72J3qz+pU2gWBOdUOh7WYUJ8/gYhQeZELK8XmaKmH1pHFTwSdMdKDqUztEhEYgwlM5SDtTv4JJO144O7Tk4a607XSOm9xzqWTLr58fZ+FyomddZ8lVzGaK2xkpnGT13DlG6SpXXdRFTdTDiDmAAAxjAAAYwgOF/Ga5moq6aGsl1XbXq4BpfDtbuYhCfA+4DGMAABjCAAQxgQG5FbkVuxZ0GAxjAAAYwgOF3GShLkoGJiViSgZMaDON5afsV/hDLfOHLzsl4bpXZdTgwiOxr7Ocgs3OyP0t3OEjs/hwcRPaXdnoC2TfTfw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_20.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAGEAAABhAQMAAAD8yF3gAAAABlBMVEUAAAD///+l2Z/dAAAAlklEQVR4nO2UMQ7CMAxFf4Yq12LJATogBgaO0alKbtordEFM9BOXEMdMbIAUL9bTkyPlWzIcX7UdgLkSL0BQN7bEQp5c404yN5G3yG0B3LFWfpPVkQl3ncvEpp5OqbtPnARZ8vQJEnLJekq45nYi9/bu7Nzv/u9fXN/Dt9zZ0ECTZ2yzllune9CbJS6YuWDetDQbci09AOEvdE4zSRzLAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_21.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmkEOhCAMRV1z60lYtDu5AdwEbjZVcIITjZPQspn/XdmY/jwLaRctZVf2i7aYKdfkxZW8ycKFSFxqdnHZSExcNpaa3dCFf3JJmwaiTNy53NUlxRjTQLT+sVaXdsbC+v2kKM9QNHzOWG7SZxEdyZ3fFbx+XUS+ydXXdTFVcwlTXMACFrCABSz/xTLeFR+iTqfDP0SbS7r8Ri06k2VKXXBfwAIWsIAFLJhhMMNghsHdBwtYwAIWsGCGwQyDGQZ3HyxgAQtYtF2YiJmCuYuYsDULia5ZNHvlsebxMu375XbnSnOGsdvtObGY7Sn1dbHbuerP2CwXq124k4vZXl+nNySDX80=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_21.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAGUAAABlAQMAAABusr+MAAAABlBMVEUAAAD///+l2Z/dAAAAoElEQVR4nO2UMQ7CMBAE1xVtfpDXuKIFUabiDaSJ/DZ6KFNGvCCSGysUWIuTwr5DeUCEct1otCfdFgfDPA+gKxQ9bKGxkvRc6E4e+KnZV3NuIG+ML44e5pznBLA4vhFLLhHFLE7Q/znv8u2+xeRyL1OL4NiTF8aG4dfp3Hbv2zvbhts7W3dXRUdFgep21Uv6kaIz8euSsypn1U5NnSIj6Qu4f8pfRsvNxAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_22.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmkEKhDAMRV1764Eukl17A3sTe7OpWqVCZXDGFAbed2VAH49Wm0VSWjO7wSIqMm+ANKZ5iSlpI2TSYmRG0oW0EoxJIvqRFJc0nr1XF61J7XWK0zQ133irLlqtU9l7wZ+vOOXLB/9rPRx7by6xccrZAaNbE5zNOuW4knG79YN5Cil0I+GEE0444WRDap0tT51PR328Oi+fOnOPeiHFBilePPllvbdTt3Xie8IJJ5xwwgkn+j36Pfo9vieccMIJJ5xwot+j36Pf4x+BE0444YTT/zmpqoj0cBJRUfVdSBnUcHq+j9hHnF7mvVG6mEl8vt+znXU7OZnO79XrZDuTWO+9niTL2dETyXQetsob2+lkeQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_22.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAGkAAABpAQMAAAADTJ95AAAABlBMVEUAAAD///+l2Z/dAAAAl0lEQVR4nGNg/A8Hfw8wMNQice8zMLgiuH8uonD/B4K57FD0LxCstxyK/gH1MoYigAMDw3+E7P//DQx/EXpB3P/IACyLzB0Gsh/qEf5lb2D4Xo8IjfIGhq/1/8P/wxCGLJreQeKjwSk7Gs70kR0NZ2rJyqJyL6Nyn/5HDSvUkGT8jxLOSCUwSNYVVa8rqslo3FpULiMKFwBKwh7oUooORwAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_23.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmkEKwyAQRbP21gUXZhdvoDfRm1WNKQklTSHOlML7WXUoPB6a8BeTc0uyk1Scm9MKySanGknaXGkrpdCqmShtrrRGUaG5r2ix5vb86HZ+bjGEEG/PXXPr59bvpF/enxjKM2DuX3cy9ci5lWwQY1u8lTu3Ettj1p/LpJJO86o03HDDDTfccMPtHm1U/7icm5Hd6nLeafHkX4Pnv3BTPTfeN9xwww033HDDjT5Jn6RP8i3BDTfccMMNN/okfZI+ybcEN9xwww23f3Rzc4nTcnMNp+VWzc7cxveSbf3vodK58oed3vF9Un439OAmvve6Pzf5nd79ndSmSe9iH2jie+a7PAHATWkt]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_23.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAG0AAABtAQMAAACRNn0VAAAABlBMVEUAAAD///+l2Z/dAAAAkUlEQVR4nGNg/I8AXxgYapG4Vz8wuCJxjwqgcM+CuR/qoQgoC9T7vR6K3n5gYAxFgBAGhv9Isv9/MPxF0gvk/kcGYFlk7giXhQcUCFUwwIMRhCoYvtb/RyAMWTS9g8RHg1N2NJzpIzsaztSSbUXlHkbliv5HDSvUkASW/MjhjFx6A2VdUfW6opqMxq1F5TKicAETi5jH+5XZTwAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_24.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtm0EOgyAQRbv21k1YMDu4gdwEblZQNNpIU1MZu3jfVTOxL0+0/QtMaUo0j56xVuIMSkOKJf2JNlZSJhbD3kSRQpxIakT5ghhKDs8/P5mv6kJsrWMYx7Hxvacn81Wt61jvVe/ejzDmw3l3zcSv92qs6euYs4AGM8WbvuuYY2qG+aN7qKUSvToRRxxxxBFHHP/d8fif+9oOsE6Gdju5tuesk0oMh8TQPPuHyV2O6uvI84gjjjjiiCOOOOJIJ6eT08n5zcERRxxxxBFHHOnkdHI6Oc8jjjjiiCOOOOLYk2itiBWvTtR0lIy01l/d2D50uWXr7FOtr6bmnvlenVxnr/XOUWU/+XYddfbMb+/VO4ga7z7siCrvd2zyAtcSbdE=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_24.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAHEAAABxAQMAAADYsN6TAAAABlBMVEUAAAD///+l2Z/dAAAAp0lEQVR4nO2VsQ3CMBBFzxVjsEoaD0CBKDMBNVVkr5YSUaWgRFkhTURj63O4yfkzAEHkCktPT9+S/xUWBzONSGd5FPEG00B8KNwDU0DaA0PJP4BnQB6RNO+OZvR+GA9EyTavjGqKr/jfvDaz9LOLos0t/V2izAF3QM/cAqdPz/m1ve/X/bafdfttP9/1V+Ib8RnUL/Wv/1O1H/u/vL2nvKf7mTtiV/MLDEQRSNjXwpEAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_25.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt20EKwyAQheGsc+uCi5ldcoN4E71ZNTFtAk3IQkcK/7gqU3h8VWEWNca1ghtal4qELSyOMeSySBXRUNJSapaaWDWnrmmGqZJ/4UepPleljp5S7/bVL8viK3VU5buv5QzP06/ll7SqdebPGQ6l2ltT7WGjW2t27fc1lSs1bh+nwbRK6twlFStWrFixYsWK9d+sdSfBB52x/tT7oFNS/eX3mnR6WrvsK/cVK1asWLFixYqV2Z/Zn9mf+4oVK1asWLFixcrsz+zP7M99xYoVK1asWLH2saqkpdZWSami1tYEFZEra6sZcf9b+st0Ho63b1Zazf52bxtOVrN3HMd9tXuzcjzDvVKt3iKdUs3eXR3qDVercn0=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_25.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAHUAAAB1AQMAAABKyjz/AAAABlBMVEUAAAD///+l2Z/dAAAAp0lEQVR4nO2VIQ7CQBBF/ypsb8Bp9gAkNEiOQU3Tk3AYBLISBYQrrGmKYPM7VM0MCkVJdtzLy99k54tBoJob0GoeEqLmc2U5z/xakyvyRN6rdz4/yIMA2SeEWs0WoPZ8Iuu8MM3M3nDx3/nUqf2mBmOn9j82GIT35I68SN+f3ueX9r9/96WfZfvSz2/9xvHV8ZFuv27/ct9MP+Y+iY8uH937nlvHwfIEwk6BC/SxMRQAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_26.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtm0EKwyAQRbP21oUsdKc3iDfRm1WNCQlFKWkdN++7KgN+HmPD/MXEWBTWRULG6LAbRhVDlpizNqE6JudMLOWsTXYujsLO5ktnn9W441lN5z6fzu0++23bmrc/qpUXdvS5vm1nP4/f0rHO/rPmzrcdqmSYkw5DtRa5VabPSWuV2n/aRVzV2U1zhhlmmGGGGWaYYT6cW3PTiDnsrKnerDhi9jxr1dk3nH3nhh9rs5mn9Zn/M8wwwwwzzDDDDDPM5CpyFbmKXMU3DGaYYYYZZphhhhlmchW5ilzFNwxmmGGGGWaYYYZZxtkYnc4M5mSbNIM5G2vtxszU3Xn7WAl5iWeM2NkpG5urZHeNbsyi+1XXPsvulF3f9kxnyd3Bm7PovuRFb4IgdzE=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_26.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAHkAAAB5AQMAAAAnNBwKAAAABlBMVEUAAAD///+l2Z/dAAAAqUlEQVR4nGNg/I8E/hxgYKhFFvgbz8DgiizwLxBN4A9E4EP9///sYOrfRbAZ34EC5WDqz30GBsZQZODAwPAfWcX//w0Mf5HNAAn8RwVgFagCoyoIqACGJFKYsjcwAMMaKdTLGxi+1v8Hov/h/yEUFhUYZgxa344sFaNxO3xVjMbtUFWhiS7gjC7Q+x89XtBjjvE/Wtyi1KYgFa7oZrii24IhUIsuwIgmAABCM+2V6iLc2QAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_27.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt20EOgyAQheGuuXUTFsxObgA3gZsVFBtNWmtSGVz846qZJi9fUOMsJue5kn1olRNJS2g2OdXSTBfnUkst6VWua6/pc+qIdHc+Pda6tCc7+/G5xxBCvLS3pLdzb/e8nz5fMZTr4p5/3/OplZ691Bpq7Fze6p17KdvKLD+nx5Bq6X5oOnbs2LFjx44dO3bs/6b3+GY/1TO95pVTvZYeD/7ZsXcH+9Bz53nHjh07duzYsWPHjp05jjmOOY7nHTt27NixY8eOHTtzHHMccxxzHO867NixY8eOHTv2u9qdOCcyyi4lXmQall7ru73v9/y6rvUcMsvkHzuhfec4/d3AnV19L3J77vo7odt7fnS69i7wLl19D3pTL6GCe9U=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_27.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAH0AAAB9AQMAAAC1Tv5mAAAABlBMVEUAAAD///+l2Z/dAAAAoklEQVR4nO2VOw7CMBBExxVtLuUTAOIopIl8Jg6SI9DRIrlB0ESD48RSZkON+HibiZ6eNrKmWDgu5wJ0As4RXsC1MWCYwIaMIUff5B1H8h5y9BFuv5wdQDH4wCA7EqDOZAioxhuMuZASLebKSrS4pa8DWeKFsdrxsa/9L6N2+7tG7fZbjZMFWwvG86q9BNPceNWlW73IyfB2h7d/WYHOAmfAE+oGZm/p29MwAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_28.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtnEEOgyAQRV176yYuZnZyA7kJ3KygaCTBdKOMad531UksPy9A5y+mMa4K09BTohK2heMYQ1ZvB5odbCsnB5lAdwaSHawrWzlQ/enAZzXevacucnbQ3gd+WZbmN95Sr/ZBOQturh+/pGd281N1d5yFUNSXQdK+8DitclPffZA0FY3bx3kwU3HgzB3AAAYwgAEMYPAmBq3f8Kf7g6M+XvUxT/dIR7048A0H/uLNm+tvYWC+D7gPYAADGMAABjCAAQzIC+QF8gJ5gTsRBjCAAQxgAAMYkBfIC+QF8gJ3IgxgAAMYwAAGMCAvkBfIC+QF7kQYwAAGMIABDP6TgaiIqCUD1eRBTRkkAiru+X7wsk/cRy0/Zr1yvJj57pcXbGZ9KwYm887nfWAz830+C29wYDH7Xzkw+f+Dk772+CeF]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_28.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAIEAAACBAQMAAADdbksTAAAABlBMVEUAAAD///+l2Z/dAAAAn0lEQVR4nO2WsQ2DMBBFvyuGYQkaD0CBGIUK2WulywpMQJU+TZQm8BPcxHeXAbDi01VPTx9xvzEc89mvwCzIawW8IFw02ftEmmz7lDN998hxg5gOoHDIiE3mfAjVJEeR/3HuQdyniXgGccMp4hE4Mttfjs05/7+X6NS+ynJqX2U5ta/zOBdDWkNuNHc2XTjqvuRb4nC8yfHmW5bMhjhN3qiaupAXji5xAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_29.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3EEOgyAQhWHX3roJi5md3EBuAjcrKraa1to0kSHNP65KmvDyBQmzkJTmiq6rXaoal8lTn+JUZimW2XOKScIihciUYp7dMIWKfJUiTHXZuO4sjtdFGMcxXDauKs91Ud4RP7w+YczPheP+8Y7EUvUtcq2T924u7+qvi1yuVL/8HDrTKil8EymwwAILLLDAAgss/tHi6vPl6Xhf46x9Ol5ShIN/VRpvyaKJdcF+wd6JBRZYYIEFFljQj9CP0I/Qj7BfYIEFFlhggQUWWNCP0I/Qj7BfYIEFFlhggQUWWNCP0I/Qj9CPsHdigQUWWGCBBRa/pVAVVfX2KUTU3iJjyHuLeufO9TPqm+kZPH2486FeP2L3bf/Owuyeg+26sLvzYfuOtJLC6i6QXQqze1E2dQfhVCw5]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_29.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAIUAAACFAQMAAABPFKl/AAAABlBMVEUAAAD///+l2Z/dAAAAnUlEQVR4nGNg/I8CjjAw1KKKHP3A4Ioq8lUAXeQuWORDPQJdFQCZ870egc5+YGAMRQEhDAz/UdX8/8HwF9UcoMh/NABWgyYyqoZUNciBDEIVDMgRAUIVDF/r/6MgbGowzRn8fh+Kakbja2ipGY2voaVmNL4GjxpFDBFrDBHR/xjhjBEXwLYNWnyhtUmAalwxzHHFsAtTpBZDhBFdBABtzFQDgyiQvAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_30.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3EEOgyAQhWHX3LoJC2YnN5CbyM2KglYSdGUd0v7jqiE2L1+QMJuJca3ZDholTuYcIJo4L6WVxElKkhOkJIuIqklOoJwkm1wnCUs1375zpU7S3idhmqaTf71xRcR99kn5dvxYP2FKz+gbz70rfv925lI6Jqm2AMau5a3OPkllS5n8cxzUqyTx3STBBBNMMMEEk380ad0enrqf7Cvm7Eb11J1tXylJQiNJOH33Kyu9mXSzTzhPOGMxwQQTTDDBBBNMMKEHpAekB+Q8wQQTTDDBBBNMMMEEE3pAekB6QM4TTDDBBBNMMMEEE0wwoQekB6QH5DzBBBNMMMEEE0ww+XUTceKc9GCSgohIFyZLOf/UDf7ibr+NUHip9zvxZCbM8z2g7qyPykR1/slxn+jOhDl+Oz0l0ZwdVCVRnad0qDf/dzDl]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_30.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAIkAAACJAQMAAAAi6omKAAAABlBMVEUAAAD///+l2Z/dAAAAtElEQVR4nO2WsQ3CMBBFLwXKGKxCkwEoUESVMVJF8S5MwhCUKCvQIJo4DyeI4nweAGFfZT093cn3m5MKVf4gMmi0dCJNZB0NWj6ohis8Rub9hkKvHu7wGvET8yRSnXSFiWgLnHjda0XEtVkxytQKa1L7qp2EZaqt9k6eIy3cIDx8B23SSvT6iT8W64tK2jlZJe2crJL2f1hniy4W7bAJ2RzDlRanHV1Wq9XYXo2dmECDRZVBb5hM3vRN5SoUAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_31.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3EEOgyAQhWHX3roJC9jJDeAmcrOCoMG0uKrONPmnq4a0efmCxLchpW1WM0mNtXatIdKc1jKiaVxOU1PkNEVGMo0rNjXFH6WJZb7+wy9XnHNdmvG+iSGEwT//cMX1+6Y9U375/MSQP8v9K/54ptY2cjZ59hCz2cYbuX2Tx7SZ69dlUjEtjVeVBhtssMEGG2ywwQab+9KM3lifei8+Vuart/mnOsOx0tLEQZo4/P0tKxptVO0bzhvOYmywwQYbbLDBBhts6Jp0TbomXZOzGBtssMEGG2ywwQYbuiZdk65J1+S8wQYbbLDBBhtssMEGG7omXZOuyXmDDTbYYIMNNthgg83daax1ebTYWFfy6LHJaax/shlcdIb9epWXij6VLu6Uer5ryt8NdLIRvzep3zfyd0r1z5S2NNJ3kZ3SiN/T1s0bGDg1iQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_31.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAI0AAACNAQMAAACwkGvmAAAABlBMVEUAAAD///+l2Z/dAAAAuUlEQVR4nO2WsQ3CMBBFLxVtNmAaNgBRMgZuUIZighSUlJSICZDcWEkR63EgUfhsKhpEfHL19HSW/ZsvDelMIgeD7l5WBl3bD8h3TEtYQA+n9rlr6Ig32KsCZy/NJp21CMZilGh2KcLOy7KoWl9b+vHJ33snGk+S0OAkdOiJO9jCBULRKuz6iTdW641q2nOyatpzsmra/2H1OTrmKJAnlOeojc+mbVuaWrbLeZc1Pr2xgGx7VGQ7JuMDEJxulRSGIaIAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_32.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3MEKhCAUheHWvvWAi+su3yDfRN9srCwMpppNeon/NpsQhsOHCWdjSstEO/QcJy6uQZJJcZ7eicRJLElyolmou5HLRmsSJYlE/k8U5nl8RUSqRNf7KEzTFB5fWY3KPirfmh9/P2HKT4MVv39rsUxfozxbEGOX8bbvPspjy5j1dRzUTEnk1SXCCCOMMMIII4wwwggjjN5vdNGimvW1fcXcNM1mnXZfKYnCRaJw+h+PrGg1UrePOI84szHCCCOMMMIII4wwotPSaem0dFrOI4wwwggjjDDCCCOMMKLT0mnptHRaziOMMMIII4wwwggjjDCi09Jp6bR0Ws5sjDDCCCOMMMIIo/cbOXEioslI3JxImVH+nRu17yLb1UwfNX0t3dxZ177T6rhr7GCk4j62eh/puLOu/tY0JtJw9+EhkYr7Iav5AmC/OjU=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_32.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAJEAAACRAQMAAAD5FshgAAAABlBMVEUAAAD///+l2Z/dAAAAu0lEQVR4nO2WsQ3CMBBFL5XHYBUaCkoKRIUyRioUb8IsjEBBibICDaKJeVwEFD6bPkLnKnl6Osv6V3xpyE9aihwMew4iK8PGTcn4sAAnuPWMCzi/53VwhUdPGqAVabbm6L1YjyjJzlNmr/16lrk3f09TzfMNUTT9fA+6KHdlO7iAfqVWf+pebd6c3uue74F7vz3fA/d8D/7f21fYscLWVHLry3ynHmv3oOid6hX9NMSyx1JnthdPzPZnZS+GYPsAItF9UgAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_33.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3EEOgyAQhWHX3rqJi5md3EBuAjcrKhpMAysr0+afrhoS8/IFicxiYtwqTEPvEpGwh4ljDGuZSKUacpqUapWykEo1We1pfjCVX6vyjPvXVMpU9X3ll2WpPv32NZFiX+V30M2fP7+k3+zmp9bc+Q6GXP2tUh1hxmkrN/XfV6mmXOP+dx5MVU7lTKbCCiussMIKK6ywwur/rWrf0k9/t59rY+ve8fQd51zLqXwllW884Ytrlq1M7ivOK852rLDCCiussMIKK6ywwoo+A30G+gz0GTivsMIKK6ywwgorrLDCCiv6DPQZ6DPQZ+C8wgorrLDCCiussMIKK6zoM9BnoM9An4HzCiussMIKK6ywwgorrLA6Uomoqliz2kKJOauUSdQ9f+dr3gePsW8vU3fn2JiZ2a/PYGe24cXKzBzIcl/ZmZlZvoNWU1mZxXpJZWZubVFveg0+4Q==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_33.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAJUAAACVAQMAAABrbCoMAAAABlBMVEUAAAD///+l2Z/dAAAAsklEQVR4nO2WMQrCQBBF/1a2uZQ3UDyK20iO4Hk8gKVHsLSfJiSF8p2ALGRmLAQRi1kCQz6PWZb/i49Cc+7AwWo3wdpql+6dJj25auPazftG/dm3MQjK1pwNQMtxwsPuU81e++Kcltz3OXVh6YdUqFtL38aKoad+3LGNmIv2/dN7k8u8JPc7LvOSXOYluU+5c6AdA+1k++Tsb5CDQp8X12OVc31Xqu/Fem+kuZ6tmuvjnJ4iE4D7LfbBmwAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_34.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3DGOgzAQBdDU3HolCtyFG+CbmJutCU4EUpKlglnpDVXkFF9PNshTzDw/qvS3CDWkoayB5m4uS0VJllIqLVFNtoiFMlsTRUs2pMPJ8lKnre3Nvu+zPE1TPm1tNWv7rJ3N8f7+yVN9TlwbX2eztIphVusZqOsfNfYx9lmtvlW3/rzfwlVLNoZNxowZM2bMmDFjxowZM2ZRkp19pzy01l1xDz+01pLlL/+8aC26Wdh95n3mG8CMGTNmzJgxY8aMGTN9DX0NfQ19De8zZsyYMWPGjBkzZsyYMdPX0NfQ19DX8D5jxowZM2bMmDFjxowZM30NfQ19DX0N3wBmzJgxY8aMGTNmzP6P2ZCGWhHNUko1XFCz+nw2u+6++Rw5+RPujj7/MdP3ur5GrFmrO7NQ82m3+yzWTN/t2YycLNLs6F2yUPO2N/ULGHhDjQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_34.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAJkAAACZAQMAAAAGkgr5AAAABlBMVEUAAAD///+l2Z/dAAAAtUlEQVR4nO2XsQkCQRBF/0WWYDsmFmAghpZhJHvtWMSBLdiJiZio3x1kZdk/Z3Qowmzy4fGY49gfzKJjcx5HYN/C2xZYinlyIFcvOCPPqYSZNnNHXtM78sxu3Z4FQDHZ497ONCgfL6bAMP/UrC68RI+qGiV6XHJsyDpGTHfm1/4ozF+Z0aUwpzKjS2FOZUaXwvxsDh6ce/BA796T0xDb/KVLuqVnU/Z5m6mbP0egvCYMyrsjwyeeuxalMmgEQgAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_35.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3bFugzAUBdDM/HUlBnsLfwB/An9WE5wW1KaoC36RziNLrAxXRwZ0F2dZHjP3tyiTc563UEu3zOvESpfmmqqkW+UipUur3ZYqYLrN7jzdtM7l68d0r/fdNI7jdPl6Svl739V7drj/vKaxXA3Wh697dq4Tx67MM1TXP2bo4+y7Mn2dbvt6v4Wcmm4InY4dO3bs2LFjx44du6vSteoPp+tdy+51ul7TTS9+1Xj9HexC7zvPO+8KduzYsWPHjh07dvqsPqvP6rOed+zYsWPHjh07duzY6bP6rD6rz3resWPHjh07duzYsWOnz+qz+qw+613Bjh07duzYsWPHTp/VZ/VZfdbzjh07duzYsWPHjt1/0+WcymcIm65MCmuXckr5d7v2veJ5HO5HyE62/HEmefs+G+9s6INduHO19/su3pnk+3s2erpoZ+Ef0oX7H4HdfAJPiQ6n]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_35.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAJ0AAACdAQMAAACU6OiVAAAABlBMVEUAAAD///+l2Z/dAAAAqElEQVR4nO2XMQ6DMBAEl4qWT+Qp+QEU/MRNxOfS8oz0bhBukHNGNNxe2gjhs7Yajc6ytvGhyfq8gRfBOeJJ8NMZcN5hnE4RKDPX6ZQlohn06YFMZk7YaKZAuvwwGbr5B1MVVBKgqiwJWKR9lR+mOfOCb6/Z9N7rNL33Ok3vvU7Te7+T+bBga8GR/t6lI6tN2Sa4d/75i8k7QgzGNiG3m5A3FIG8y+T0BeZcmlcOsP1FAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_36.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3UFugzAQBdCsuXUlFvYObgA3gZvVCQ4ChbRSFzBR37CKLKKvJ2NgFnieHzW1t0iVc5qWYHMzT/cKlzCVhEuykvAuGC1hSnmqyYImzL8mHO91eO45I3vDo3k4DsPw5j9PGVkS1nlYr+W+2x7jUI6uPzjOGunXa3mqFcuw1DNY0z6qb2PNw1JtrWb52d3CVk3Yh0/IkCFDhgwZ/hfD1yeM659t1pHm+Cnt+ufDdaQmHF8Sjm/PPHnkUwzDz0ProXsKQ4YMGTJkyJAhQ4YM9Rz0HPQc9ByshwwZMmTIkCFDhgwZMtRz0HPQc9BzsB4yZMiQIUOGDBkyZMhQz0HPQc9Bz8F66J7CkCFDhgwZMmTIkCFDPQc9Bz0HPQfrIUOGDBkyZMiQIUOGf02Yc8opRTYs8UpFNkwpl+qvfqP74V3v+Snvr7Dvy/PhnguReg4xv3W/Mwy5X8B2Hsbcc2F7LX9Cwoh7f+wShtw/ZVPfxowTSw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_36.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAKEAAAChAQMAAACVn031AAAABlBMVEUAAAD///+l2Z/dAAAAxUlEQVR4nO2XsQ3CMBBFv6uMwQTsQMMAKRBlxkiF7NHIEJQoK6SJ0sT62KaJuEtjCRrO3T09nRL7Nx+On2e9AzdB4wicBWWr0VjoeiAbciAnX4Y2740j2ZNPcvFl6AB3EecEULoMiHJvovLD3q5G/8+dvLizJmDx4n77gNnHjrySD3JONA97rr73t/9m7nddy465ta5lx9xa17Jjbq1r2TF3S48q9SodZL/Ib6zmwVHLjtJxkqv0oSZojYp7VHayTGV/S/QFrc4/LNDfshIAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_37.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3U1ugzAQBtCsuXUlFvYObgA3gZuVH4NIBW1XZJDekE1kEX16MU48G4/jUkP9ilYp52ENN1bjMFfElDlNKdd0U8pZMqRlSkNJFzll/k/Kfq7T++8ZWb/xLeXVvOy7rrv43FtG0nFelme8bX5efTddTdt8bqTdn/GhVDzLqbZwVb1UW8ebl1PVpar1bfMKXSVl+4iULFmyZMmSJUuWLJ9hef5v+fP/1feR6nrn8fl9zz5SUvanKfvLu28eeZLlI+al9dJvD0uWLFmyZMmSJUuWLPU29Db0NvQ2rJcsWbJkyZIlS5YsWbJkqbeht6G3obdhvWTJkiVLlixZsmTJkqXeht6G3obeht6G9ZIlS5YsWbJkyZIlS5Z6G3obeht6G9ZLvz0sWbJkyZIlS5YsWf6VMuU0vaJbLiFTdMs8x8xthJ3iL3vI7ZiCr9D78fHyzJlIvY24Z3u8WYY9J+U4L+OeOXN8xp+SMupZSG8pw54rdahvbeAX9w==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_37.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAKUAAAClAQMAAAAH5a+ZAAAABlBMVEUAAAD///+l2Z/dAAAAzElEQVR4nO2XsQ3CMBBFzxVtNmAGhmADECUjUJIGZSoGYAiXiIYWyU2UFESfi5UC5T4FFgXFufPT08ny/eZLgDl3kZOlMcna0qFi9JHpBUgNnktgkS+xGudega7BcAOO+dImCVtzNiKwLnoZ7Fyl9gmTS6i7v3J1C/NdpFp0Y/O9dbW0DaIuW+ke2CFfPrl87v/+g7vfu54dd0tdz467pa5nx91S17Pj7js9U3qgdGV7y7hjmocAlh3SndQlPSvVrJPpGzglXU8p6YXoX8DL8O0cdP89AAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_38.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3UGqgzAUBdCO3XXBQTKrO9Cd6M4aa/wo/BZnvsB5HZV0cDnEFO8ky/KZuX9EnJTyvAVcumVeJ3TSLWFJuopGTZpTmmvC8EnzxaTTOjeupHxM+mufTuM4TjeunPZpffaH13+faSyfW1eGv2d/rhPTtMwesOs/M/Qx92mZvk63fX09wk9NOjSTlClTpkyZMmXKlClTpkwjJL3/DfTCShfjrf7CSk06ff1dmJXWTJvZp85T/1FMmTJlypQpU6ZMmTLVoehQdCg6FB2K85QpU6ZMmTJlypQpU6Y6FB2KDkWHokNxnjJlypQpU6ZMmTJlypSpDkWHokPRoThPmTJlypQpU6ZMmTJlylSHokPRoehQnKdMmTJlypQpU6ZMmTLdk6aUc0pDE0lL1tSCaRHNOX8zjfRuul/R8gz/vr/8vJMrUocS+66jk2no+6OO+zT2nVzHZ7+lpJHvjjslDX0f32Hebo4cow==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_38.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAKkAAACpAQMAAABqG49sAAAABlBMVEUAAAD///+l2Z/dAAAAzElEQVR4nO2XMQrCQBBFJ1WOId7ExgOkEMscI5Vkr5YDWFhYilewkTSu39llLcL+BYtFEWarzOfxmTC/+dIgfxuRA5F7kW2u+hOXuyg/VkALTMBtDMOzi97+CgzABZjHOKh3s8ufbgJCw4nPvYNM1k40k43+Qzode3H51kmKxiIng5O7fvXAHjgD76FIF7x/8JdGf5e2VBldn7ZUGV2ftlQZXZ+2VBn9CX3k8szlNelp4fI8J9pGWapYY1Sa9MvgTdpo2KQgs6aLuAmRXzPyijqjAXSZAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_39.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3UFugzAQBdCsuXUlFvYObgA3gZsVEiciFaTqgnQcvWEVuYm+niyL/o3n+TpTe4k6OaXpFnJu5mmdyGnTmvaWckm7ysa2zVNJWUHalNOvacd1Dr7/3rWct7b7+3YchuHwl9+6lq47oezbcib03fMzDsvT9bvPu9f6x5kwlYlru8w9ZNNep2/j7ttl2jLN7WN3qWJK2r6qtGzZsmXLli1btp9gu/duGen99rHWHL23R/rf4bFW0o47accX3/6ntRptq9q3zlvnLVu2bNmyZcuWLVu2bNmyjZBWD3bKmh5MD6YHc96yZcuWLVu2bNmyZcuWLdtgafVgp6zpwfRgejDnLVu2bNmyZcuWLVu2bNmyDZZWD3bKmh5MD6YHc96yZcuWLVu2bNmyZcuWLdtgafVgp6zpwfRgejDnLVu2bNmyZcuWLVu2bNn+OW1O61OLbUop59RVk3axzX2czuBln3C/vurr51+E7GrmgzsNY/Zg8e+Ge7INf+/edt/Gv9NweybUljb6XZxPacPfc7qZb0SfIU8=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_39.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAK0AAACtAQMAAAD4YW0AAAAABlBMVEUAAAD///+l2Z/dAAAAvUlEQVR4nO2XsQoCMRBEN5Xt/ZR/4OGnmEbydX6AhZ29lZDmuGuOcU8sApmAhRCLSbNkeCzJ7jRjAfW5m52JvGbbE/k2UPn5lndATmW5DFvvEzCnskzZwlifgxkIjcVW0ttl8pAPzWTRX9M+4mreOZovpNrOHG1KOPpS/V6UJt3o3eGXov+ZlgdF96blQdG9aXlQdG9aHhT9e3rk8oPLV5IBN59wVwVQD7I06jTLrjnSpOsvacgsRbvMMjeWF1SkHpgyW3eQAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_40.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3UGKg0AQBdCsvfWAi+6d3kBvojcbk5hgk1FmZbrklatQQT6PpsDa9Dw/ampvNVdOaXoGnZt5ulf9ifO0Jl0S34VDGD+TBkmccv5X4vFeO+84t5cK4/1zPA7DsPv2U3vFOV5nRd99PuOwPF3f1dDr37NiWqtu46VeQZv2UX1b9zleql2ref7sbmFqTdyHS8yYMWPGjBkzZsyYMeO4xnvfVzV95717zdE3bE3f0u/emnjcSTwevOFLvajG4c6xeWweM2bMmDFjxowZM2bMmDHjqxvbu9m7FT17t5POsXlsHjNmzJgxY8aMGTNmzJgx46sb27vZuxU9e7eTzrF5bB4zZsyYMWPGjBkzZsyYMeOrG9u72bsVPXu3k86xeWweM2bMmDFjxowZM2bMmDHjqxvbu9m7FT17t5POsXlsHjNmzJgxY8aMGTNmzJjx9xLnnFPKkYzTkjelSMZL3rxnXOe+4nX1389f/6pyJzQf3Blb594txl2bhXGI+0y35zjGnbHbWRExcYS7j4vEIe6X3tQvFygl+w==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/frame_40.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAALEAAACxAQMAAACx586GAAAABlBMVEUAAAD///+l2Z/dAAAAwElEQVR4nO2YQQrCMBBFf1Y5Q2/jxgO4kC49RlfSXMdb9Ao9iW7EVR1nCoIlf7YaYUIh5fEYEuZvJkhSr2UCzoyfgD3jM+fPw8pvo0jebPNa/6F/w+dm9dORrB0gxBcpWFh95eQ4b5/y8Nv0tZ11f3OBtr/Ow1BwH0U/6WWz+b5X/1f3Df+//Mhn+C37kc/wW/Yjn+G37Ec+w/+m3zn86vALm38tP07ekvB8snncfDq/50LnfTuPx9l7gnH2/qD8BYXP0npxedsFAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_21_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIABQyCEAi5sgkiiNFOLBEgz1xAL5DKEqkERJk0tsmVwtQbYhAeDWgCgelPh]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_25_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIABQyiEAi5cEkgydNODBsizxxAH5IKpw5AahHrgfsMeBmA96GFAZT1wtxngkiJHDwDK1HbU]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_29_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIABQyQIBVz4JJFkB0wvFkCZvYZ4IBdMLVbpUb0E9cLDHXccgfViiyMa6oW72QCfNCV6AZpHn+Q=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_33_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIABQzQIBVyEFCCpGDRm4ADUcYchAcgFU49TyagZw84MeJrBn8bAZuBKY3QyA+4XA0JKqGEGAIvlzwQ=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_37_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIABQywQCriIUYSkatCahQdQ112GREAumB68ykbNGjVrkJsFzw+E8xDYLHx5aADMgvvRgBhl1DQLAGn8BEM=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_41_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIABQxwQCriIVYikcsiYSQDQxp2GREIumD6CSkfNHDVz1MxBZSa8LCCuDAGbSagMGWAz4X43IFYpLcwEAET4P4M=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_45_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlDEOACAIA3deA///nJNGFC0MGgZgIikX0jQw95JDT0VQLKb6E1vPkG0tL2xHedgSuXuS08WLvanvuuTFTs9GORkzHTNnzdnYlZOkbPyQFTsgttmXnHh/rGJzTjb0hCN+v2A3OdGAhg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_49_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt1UsOwCAIRdE5q4H9b64jGz9ILwObNgFnJM8TLY2qrSxYXQkKmJt43Zg7wPC3mAxY1LDsObqIPNzRuqTlcaSMMqBBZvfuSPA3+J0vGzVXZYQGe9QGIxnYGeHsZt6owdA/GOCuNPs9ThoXID7H5g==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_53_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt1ksKQCEIBdC5q9H9b65R0c+6OigEbSbcDq+eEHMtuayuCA7JNvXRWnuQpW00WYayWOL5ri5GwNmti+oeplhaaQW30PlqPTrOrdaLYuW/kVZIC384DJYjpFuX+bK+AQaL41nQGbLnvl5YBdT3FWU=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_57_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt1kEKwCAMBMB7XpP8/3M9WUzVmg0oChtvgXWolqBqKQusqgQKWjd5hNnrBs3xdh8TLNS07HdWUQmeabuk7ANHadKkucVEZsLblcnEGXdvNPkP0aS50MQeb85MBv/M6UzIvMGcqbebwbPV7H3uNB+BDWjl]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_61_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt1jkKACEMBdA+p0nufzkrxY2YpZhRfuwC38foEGSuJcbVFbnDsk3/zN73zba26WQHKmJL5ru7ODnOel1U9wrFYcOGDVuxvXOt9ek4O7X+7Tb+NdiwYS+2/4E92ImwbhvmWvSNPNj8lm0+c87c9xd2AZOCwnU=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_65_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt10EOwCAIBMA7r4H/f64nG7GtleVgQxePJJuJEo2qrSywuhIowG4TPmt46gQM8+jBABZqsOw+dBESPIPrkpYHR9BAAw00/MCA3NVnRxZehXmnkoEzSQMNNJQ1YJ8kZ0gGvBmW7urMH8cZtLIhcBaanYedhgPBlCIk]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_69_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt10sOwCAIBNA9p4H7X64rG61tkM9C7OCSZHxREyJzKzGursgdIq8pBSzfPZNF2+BhCVTEIhnn0sWQ427mRS0zFAMLLLDAAktZi3ce3T1amn9a71QL3i4ssMACSzGL/yM8WBJCdMviPIr+YQcL/8diuiPOeC87WC4GrofU]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_73_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEOwCAIheGd08D9L9fJRlNNKJC0xh83hpcvShhUbWWB05WkgmyatIHJ13OZfL2pKVlZk1XdUxclwTd7Hmm56ShMmDBtb8rsp7snr/fjqneCiRnHhAkTe5w9zoxjwvSBKfcZMpiKgtamwH6q+MMYTHqWKfx2WjVPfzJdPYzzPw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_77_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2EEOgCAMRNF9T9Pe/3KuMKCggc5Cwy87YoYXEEhwLxWLrSpLh0U37Ue2/hDjL19sfe94iItNUApbKOetirPEWt6blWxJHDZs2La0Zc+3s9ceT/uY7N3Nxl7Ahg0bNu4s7iz2AjZs2CZs+QezxiYMG9sWz17VG1dj831tqTV15f/2RdsBO+JlHg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_81_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEOgCAMheG9p2nvfzknFJUaQt+g8YeN4fFFpE1wbyMKsxsmCYxh4geN2Tbj9Slj5n7a6GIUDZUx1N+xi7TiGd+ntXxZJEaMGDFOGhX1cV+3tC6v1PC/G7kzGDFixIiRfk2/5s5gxIgRYxxve0KjODA3FvqM8o30ZHSMkrN29f/4ZuMG39jc/g==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_85_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEKwCAMheE9p0nuf7lOFkWRWl+GwB+3DK8fbSBF91ZxeboyWWgsU4tbz/qfrWf9pVVYSmtkvNcu1gTffj7WniGNxYoVK1as5ayqvfX27fcu3fWxMq9YsWLFipX/AazMK1asWLGWsuou9gdrQujeerG31Hfwg9WxpsyAZ8xrBesDoVla/Q==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_89_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2TEOgCAMheG9p2nvfzknjIiA0dcB/ctIbD9ME5rgXiIE6xAmTRyXmT9i7pccf3HD3D/LuOTJLA61ObL+8yG1iXqiXVbqyFNjxowZM+ZfmpX34L5j0+khHu5gbs30M2bMmDFjxsyMhJkZCTNmzJgxL2bWPi5V5qTEY/PLuzvjDagyO+aZWdIbntXPK5k3Fxve/Q==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_93_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2UsKwCAMRdF5VhP3v7mOLNpPrG3eoHLjUEiOEjCge42StJqw9OTlMvti9qjs/d5je3SmUeGDXRAKe1Hee5PeEnvlvKzWkqTHjh07duzYX9qz39V9z8L3/ctMgH1sp9+xY8eOHTt27MyRzJHMkdixY8eOHfui9vwP0M4uTB7bE+YZ1R9lZ3fsM/a0nnFlv//RvgFAj2kc]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_97_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2UEKwCAMRNF9TpPc/3JdWZQKtpoB2/64zCI8NDCge6lIPFWZZEB0J3zYMNd7ZJjrdQ2iUhlCfQ/VCEt+Q9djZZ5sBAYMGDBgwIDh9wZFXjp7tpzrRj0M9w3sAwYMGDBgwICB3EpuJbey0xgwYMCAAcO2Bs0nfmMQDxgbEvKS8o+9MTiGFUPaW3L1PrzZcAB1wvk8]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_101_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2jEOwCAIheGd08D9L9fJRlPbNJXHYH/cWMgXJTDo3iKSTxcmKxLTKltbVrMvLavZqUUYSktU3EtXxgRv63qs1ZSWwYIFCxYsv7SoZuWZtcQJf5/F8s1Cv2DBggULFnYYdhh2GHofCxYsWLCww7DDsMPQ+1iwYMGSbNF9VBksBUWeLKmzUv2HZLA4lnWL4I15Rb/sYDkApuSPDA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_105_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2kEKgCAABMC7r9H/f65TUZRQ4ArV6M3LMqS5B2tdRwvM3SjRoHaZ9ANTL/7Z+i1Tz/ls/dIUHmlTm/WddlEltOfOs6y58SgmJiYmpqgpeT9t66V7X468c5nGmJwnJiYmJiYmfU830vecJyYmJiYmJn1P39P3/COYmJiYmF5nyj7WOpgmBfVNgR4x4w3VwVSZRppie6/OOk9fMi1Oditb]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_109_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2j0KgDAMBtC9p2nvfzknxWIRhySgvnTLEh794Rva+14jaZ2qpQ8by2k/s8X0H9ti+ktbQVXYRuW+nca1xLN4XW2fXTKOjY2NjY2NLcSWnUuOfgvPVnd9tlib+8bGxsbGxsYmT7LJk94SNjY2NjY2eVKelCe9JWxsbGxsL7Tlf2icbIXD7m0JuaTqj+Fk62yZtrQz2Svv2xdtGxsTzas=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_113_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2jsKhTAQBdA+q0n2vzkrRfGDgnPhPc+kTDEezIRbpPe5RuFaVYs0HIcdP2k8/5DnOzeN5/LnO4fGUKWMI/0fVy1b8Rndrzb3j7VkZGRkZGT8EWMiAyw77SKdvJ9zGGuN5pGRkZGRkZGRUSaXyWVydw4jIyMjIyOjTC6vyuTmkZGRkZGRkbHQmHkUvDGGG14Zy7Jc8o3uxtgZM8bis9rT8/jPxgmR0XYa]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_117_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2kEKhDAMBdB9T9Pe/3KzUiwjMwj2B/Glyyziwwb+or1vNRafQ7XY0HE69fXWOzsXrHd2Tq3BSlpHxX89jG2Bu/t92vYN0bGsrKysrKysrA+1pjLi3mmLUu/vDmvGal9ZWVlZWVlZWWV/2V/2t6+srKysrKysrLK/7C/721dWVlZWVlbWEmvu4f1kLRj6z7osI6bfwE/WzlpjXXyHe8W+vsH6AYitJJk=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_121_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2zEOhCAQBdCe08D9L7eVBncNWU38U/igxDg+BDJT0PvWRqBPrUUDj9PIzNNjq1dcHfvbvJqLe2On5nBLm0fVf55Ct9Ca/u1t+454aGZmZmZmZmbmL3MyD9vH2jJXfCr3ZK4x28/MzMzMzMzMzMzqKjUGs7rKGcbMzMzMzMzMzKyuUlepq5xhzMzMzMzMzMwRc/byy8FcFHhtfjjfrriDcjB35mpzZG33qv38JvMH4nnZGQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_125_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt20EKgCAQBdC9p9H7X66VkVRIYDNBT5cTTI80/Atr7aMFzcMo4c3bZXf2m0dX1h7Z19cu7Qkjw94yv/uhfQlc6+dZ+ruktGdnZ2dnZ2dnZ2dfZI8+z++18mpemdXYc+32Ozs7Ozs7Ozs7O7scJ8fJcfY7Ozs7Ozs7Ozu7HCfLsMtx/nXs7Ozs7Ozs7B+1x19QG+yJzef2l8/zWXfEBntl/5o9ZM3XzP3+R/sGL/2TuA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_129_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2zEKxSAQBcDe0+j9L5cqn4RE+EXYJ8loZ/UYdNkt7H1fo3AfVosEGLcJGFwizGI9c/6XwczlmfNbg9BKGYz0PThEaMVv4LrbnicWgQEDBgwYMFjQINEf/M7btI+p6JEYrGWgHjBgwIABAwYMGJgX9MoMzAtqIgMGDBgwYMDAvKBXZmBeUBMZMGDAgAEDBuYFvTID84KayIABAwYMGLzSIPPJ9GQQDjA3KOwTk388TwadwYoG5W+hp+vBlw02Dc5T3g==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_133_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2zEKgDAMBdC9p0nvfzmniqIUEdpUee2WKTw05A+NaKdOvodT0pqot12w6FqMrT+2GFu/tUg8mRZ1he/i0EZJ+Deut7SeUttgwYIFCxYsWLD4sUXW3rnXy7Rdu1dnsaaFecGCBQsWLFiwYCGP2MFZyCPmBQsWLFiwYMGChTwij8gj5gULFixYsGDBgoU8YgdnIY+YnSxYsGDBggWLVxZ5D8lPFgs00beYuHdmv+E+WQSLL1hM/0dihXnBIuoGcFQanQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_137_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3DEOhCAQBdCe08D9L7eVK0bJWhg/rg9KmskLTOY31LqsFtjdKtFC2mElTH6ajMu78uSUydjpypNDk/BKm7RZ7klXSgm9mf0uS13xUpgwYcKECZMXmyTnk+9JGU5Ud85sTJ5hop/osUyYMGHChAkTJkxkQBlQBtRPmDBhwoQJEyZMmDCRAWVAGVA/YcKECRMmTJgwYcJEBpQBZUD9hAkTJkyYMGHC5M9Nsp9JbEwmKWRsEpjtZ/jDYWNSmTzJJPZ26iz9hMm6P1Uy510=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_141_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3D0KgDAMBtC9p2nvfzknRdH6A9ZEeM2YJTxs8Fta63xaUK1OCR+mHU7D5pFNf8w3O7dt+mZvdg5tEpwMNi3Td7MapwTepX2VebYU47Bhw4YNGzZs2LAZbhP9X7x0ymXSaR922PzLxr6xi9mwYcOGDRs2bNjImvIUG1nTLmbDhg0bNmzYsGEja8pTbGRN+4YNGzZs2LBhw4YNG1lT1pQ17Rs2bNiwYcOGDRs2g23iH5zZ2CQa5twmIDNkeeNlY1PZ/Nkm7E7VTPuGzb4m6+66PA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_145_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3DsKhTAUBNA+q0n2vzkrRfHHe4gZ9STlbYaDXpgmtY6ndbyzUyICtc1EjP422p9dOfnJ6DjsVZNNo5CTYtTSvqNZpNL5H1vfMuaLicSIESNGjBgxYsSIEaPPGCX0tWlSTprmvZ2W0bON7CM7mxEjRowYMWLEiJFOq68x0mntI0aMGDFixIgRI0aMdFp9jZFOax8xYsSIESNGjBgxYqTT6muMdFo7mxEjRowYMWLE6PVGGY9WLYzCAp0bdegiSW9ELYwqozcZdfvXato+YrR/B01Wkys=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_149_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3EEKgCAQBdC9p9H7X65NRVFYUOCnni7dfB45NLOw1mW1wXuzSkyodpqK1SOrXtz3z25b9QzfPzu1ClpJVi3xu9rEKgF377jLkjEqFitWrFixYsWKFavfWKX8t69npdt3jOhxWH3HSr1S21mxYsWKFStWrFixYmXOoHdmZc6gXrFixYoVK1asWLFixcqcQe/MypxBvWLFihUrVqxYsWLFipU5g97ZnMGcQb1ixYoVK1asWLFixYrVbJXzMN7OKjBU32pgP5j2Bt3OqrL6otXwO1gT6xWr6z0BelpyKg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_153_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3DEOgCAMBdCd08D9L+ekkWiiJka++mDs0rxASTtQ67xawF6tEpVY282M2W1mz8YumT0b2zULW2lmLfWcrVIrIXdyu8ucZ1xqzJgxY8aMGTNmzJgxYxZmltRvLrEyrA8/ijH7npl65g1gxowZM2bMmDFjxoyZuYYenZm5hnrGjBkzZsyYMWPGjBkzZuYaenRm5hrqGTNmzJgxY8aMGTNmzJiZa5hrMDPX8AYwY8aMGTNmzJgxY/Yas6zPOTuz0MSOzQb2m4l/YHZmldkfzIbfzZpaz5id3xMBtlc5]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_157_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3EEKgCAQBdC9p9H7X66VURRSEPmpp7tZDQ8d+Rtr7auF7M0qcc210+7YPWo3p37Zbk791C5wJdq15HO3aa8E3dXjLr3XyPbYsWPHjh07duzYsXvZLi1XrPUyPXuN6uy+bWfeeSvYsWPHjh07duzYybMyGTt51rxjx44dO3bs2LFjx06elcnYybPmHTt27NixY8eOHTt2Mpk8y06e9VawY8eOHTt27Nixk2dlMnbyrHnHjh07duzYsWPH7qZd3gfCO7vg5sZ2Abki9Y/enV1l9ye7mDtbk+cdu/t7Ab58QbU=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_161_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3EEKgCAQBdC9p9H7X65VoZQQEvHBp0s3w6Mm5y+q9VwtaHerRBbYHitk+LHhvOh/Tl4YzlX/OXk0DF2phi39OexKLGHv8H2Xs97YEhkyZMiQIcPNDBPvNtdJmdzSMu6HDPcy1A99UxgyZMiQIUOGDBkyZChzMC8zlDnohwwZMmTIkCFDhgwZMpQ5mJcZyhz0Q4YMGTJkyJAhQ4YMGcoczMsyB5mDfuibwpAhQ4YMGTJkyJAhQ5mDeZmhzEE/ZMiQIUOGDBkyZMhw0TDzJ+iDYXiBM8OoWS/5H+ODYWW4n2Hgu1zT+yHD9X0AFOsy5A==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_165_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3TsKgDAQBcA+p0nufzkrxeAXRHnBSco0y6Ab9zXWOq8WtlerxBbZdqtk+aLlcfHfnNy0PBb+5mTXMnglW7YRnstVmSXw3d7uMtccXSZLlixZsmTJkiXLoSxTv9WXk3IyeWTMPSz/a6lfuntYsmTJkiVLlixZsmQp2zCPs5Rt6JcsWbJkyZIlS5YsWbJkKdswj7OUbeiXLFmyZMmSJUuWLFmylG2Yx2UbLGUb+iVLlixZsmTJkiVLlixlG+ZxlrIN/dLdw5IlS5YsWbJkyZLlhWXujx46ywGKPLOMmiHT/6HQWVaWLAPf8TpCv2T5fE+oJCoj]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_169_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3TEKgDAQBMA+r0n+/zkbFUVRBNE9mKRMcwzm5LZJ78sagXuzWnSh47RSph+Z/n3ywPTvk1PT8JVuOqp8p5tSW+idP+621B1fKlOmTJkyZcqUKVOmTJkGmSbPputJC5rqr0+YMtVP/aOYMmXKlClTpkyZMmUqQzHvy1CYylD0U6ZMmTJlypQpU6ZMmcpQzPsyFKYyFP2UKVOmTJkyZcqUKVOmTGUo5n2mMhT9lClTpkyZMmXKlClTpkxlKOZ9pjIU/ZQpU6ZMmTJlypQpU6azafZjNzvTIoXemUbNphXekNmZdqZMC9z9XqWfMn1vT+TfJ3I=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_173_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3TEOgzAQBMDer7H//7lUICAGpYisWzR26eYyihbYxr1vaxTdh9XKDzum07JdZvv0E9ae/WT75L32bGobsBJsR9L/9jBuK5wF37tts0eMy5YtW7Zs2bJl+yLb6u+3+1m7fW+v9u3Alu3VVt7KW7Zs2bJly5YtW7Zs2bJlqwfT1bDVg8lbzzK2bNmyZcuWLVu2bNmyZasH09Ww1YPJW88ytmzZsmXLli1btmzZsmWrB9PVsNWDyVu2bNmyZcuWLVu2bNmyZctWD6arYasHk7ds2bJly5YtW7Zs2bJlG2Zb/0Kwk23QsPe2RfuElDu2TradLducVAi4L3KSt2z/vz/Y1CrR]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_0/mask_177_0.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3TEKhTAQBNA+p0nufzkrP4qy2OjfgZeUadaHDGSazLmv1Xgf1ogYeN1OzPgvxtWnfHv22Liy//bs1jhkpRivtP/4MPJonhHXPfb5Y0ZmzJgxY8aMGTNmzJhxvHHCPe93Nso7bLe7NGPGlbE8lseMGTNmzJgxY8aMGTNmzFjvphPSuzHWu8ljxowZM2bMmDFjxowZM2bMWO+mE2Ksd5PHjBkzZsyYMWPGjBkzZsyYsd5NJ8RY7yaP5TFjxowZM2bMmDFjxowZM9a76YT0boz1bvKYMWPGjBkzZsyYMWPGjMONMx5VPBmHDVwbN+0rkt4oPBlPxoyfGbfOipmWx4zf2xvV5DRA]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_21_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQyCAsbkMsAGEKK3UkiJKhLmGYGBgiAKooBbFDYNJLQCdClPh]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_25_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQyiA8bkMcAGEDL30kCNDgj1QhYYYYBDqgfuNhDCglx5i/INTDwDCPnbS]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_29_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQyQAE+MywAcQsgOllxJZMuyFKjbECkb1EtQLD3cy4mig9BLrX7x6AYuxn+I=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_33_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQzQAE+cyIAQQKgaLGdRQQYE7oBoMcYJRM4adGfA0Q0EaGyxmkBIeBM0AAHT/zwI=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_37_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQywAJsdlQAxAqBqsZlFTFRXcBdVkiBeMmjVq1iA3C54fqJCHBqtZpIYXUWYBAEgWBEE=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_41_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQxwAJs9lQCxAqBwqZtJCJRXdCdVoSBCMmjlq5qiZg8pMeFlAxTJkqJhJTngSbSYAFQI/gQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_45_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQ1zAAAG4DEgBCNV0MhuVTwWzaakap7uRnE6i2VDNhkSBUbMHvdmE0gmcP4LMHk0n9DObUOlNbbOplU6IKWOHitlUDm/izAYA19KAeQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_49_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQ3zAAAG4DEgFCB10twNdhEp20EMHXn8geYUMO6AGGBINRu0YtYNIO4hJu3CREW7HaLoaWXYQUwvSxg7qpl1i66ihaQdN4oN4OwCjw8fZ]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_53_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQ0LAAAG4DMgBCF0DaBemGBXtoqcugv5C8hqZdkENMSQJjNo1atcQt4vY/AUXG7VrNB2O2jXo7CK2tUFLu2iRv0hpAwwHu2gYX6TZBQA5fxVY]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_57_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQ2KAAQJwGZALEDoHhZ3YRKls50DoJMqfSF6lwE6oQYYkg1E7R+0ctZMudpJSJsBFR+0cTUOjdo7aSSU7SWn10d5O2pUJpLbBhp+dNI9P0u0EAMGKaNg=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_61_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQ2KBAQJwGVACELoHmd3YxWlg90DqJtrfSF6n0G6oYYZkgVG7R+0etXvUbjx2k1quwcVH7R5Na6N2j9o9aje2tuKgs5vW5Ro5beThbjed4ps8uwGqs8Jo]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_65_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt1zEKACAIheG909j9L9cS1dLgq0Tof6sgHyKCZj3VE5spdprZIa1hV3lkyNDBNYdlFBcMvWGVgwEDBgwfGJRbPSoYrhrYSQwYMGQ1KF9WrCHmVqs/zl+G0H3QDQ2pySIX]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_69_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt1zEKACAIheG909j9L9ci1dKQVhb9bxXkQwRRRJNnIy1JVqR1ecAyrm203NRlei7daBZZtGl2BQsWLFiwPGux3qNaw7Ldwu5iwYIFyzmL9ZuOsJy8R54f9mdLwL74LAW5yIfH]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_73_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEKACAIheG909j9L9ci1VhapPS/0UE+RIQS0VRLZKTIqYxOCUxrtcumiJ1Mc5pGddCkjas7mDBhSm/y3Kdew/TExI5jwoSJm8kdx4QJ0/bbPIXp5X3y/mH8bgqwT35TA0fm8yY=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_77_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEOABAMheHdaer+l7MIBhaeKP43ijRfhDZhlhNnYzXBlKnVLrL1vcOde22eq02fW3N0YlsuHiXBhg3bl7bV/lZWsbmx8RawYcPGzGIuMLOwYcP2um319+2EzUPvVfxxYXN53zS2BPL1ZQU=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_81_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEOABAMheHdaer+l7MIBhKJhzb532ioLw2aMKvJJ7GeZOr0igGNK/d8/ZExQsWjPg6tvGCsG2RZMGLEiHHTqHgf2zpG10buDEaMGDEyr5nXzGuMGDFijGhU/OL+MnqaM6o/UoziExnBWAA7ctzl]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_85_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2TEKwCAMBdC9p4n3v1wXqV2LiTTw/phBH0EJaMTM2E2sXFGRtWpz67f6QWunVbf7+mptkXVuMlLDysrKytrOmjW3njprO6u7xcrKyspqxrK6W6ysrKxlb8XtrX+bW5lv8KwV/1vHzmuu9Qao8Frk]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_89_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2TEOgCAMBdDd05T7X86FCItOhWh9fyXAg0AgaURPy0iMHLEqY+Qi5vu1PPbYZ/7iyCn7PG31QnOfqKWHmZmZmfmX5sx38GphLmF2B5mZmZmZ/ZH8N5jdQWZmZmbmpbWJMua3vt3ZNSDmHXXYrec533wCshve5A==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_93_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2TsKwCAQBcA+p9H7Xy6NxDRJkezih3ntgo6iuGApLTUqpecomemjb2Z/W9NzbYB95dHD9v229cn2NllNCTs7Ozs7+0d79Lt61di3tbur7Ozs7Ozs7HoxdneVnZ2dnZ19nD36d3UW++z9TMYfJfs/+yLnPcd+AmWXaQM=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_97_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2TEKwDAIBdC9pzH3v1yX0HRuY0vM+6uDPEQQjOhpMxMjR2RndChseFb7yVChw9Q53EbxgaE3bGlhYGBgYGBg2N6QcS9dNYatDHaagYGBgYGBwb3E4G5lYGBgYGBgePnbLW1Y4V7K+rEzzDUstA95hhMthvkj]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_101_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt1jEKwCAMBdC9p4n3v1wXUfeqRfP+omQJDwkxoqbMTvQ8sSO9y9WWr9UfLTd1mf4uw9NsstSmZWlYWFhYWFJaVu3KVmVJbzH7LCwsLCx2JYs/jNlnYWFhYbH3WcwLCwsLSyZLPS+3nLcr243lEMux87LW8gK83o7j]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_105_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt1jEOgCAMBdDd05T7X86lARcHh2KA9xcNS/NCrD8i0yoSI1fMyph0gOnN+e38Z9OOk0ru6XFVE005uJWHiYmJianUVPl/6udMTHYEExMTExOTvsek79kRTExMTExMegSTvmdHMDExMTEVmvJ5hGnlHtHfmJY0bfA91Ztup6UrMg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_109_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt1rENwCAMBMA+05j9l0uDgAGwlcB9k4jGOiGjj+hpWYmZJyozp11m23P+AdvJ09Lubbm6Ylsf3krCxsbGxsbGtsWW3UvGORubfWNjY2NjY9MndS42+8bGxsbGxsamc7Hpk94SNjY2NrZSW/9eZ/t7Lxl/bMfYDtm3GtsL3jfNgg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_113_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt1jEOgCAQBMDe1xz//5wNARsTLTgFZhtMKHBCjmxETRmZ6DkiO/3ELY338vc7PzHucOLQe7xc5QfG+gMlLYyMjIyMjJMYMzpA22FkNI+MjIyMjIyMjPoqo07uzWFkZGRkZGTUyRkZzSMjIyMjIyPjI2NdNzWu0+XaF+OixuXmMc94An9ZdfE=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_117_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt1rsNwCAMBcA+05j9l0uDgAH4JPheA5ILOFmWHFFTVid6njiR/mp668zKh6yZXl3e16G1h6z1E2VrWFlZWVlZWVl/at21I7YKK6t5ZWVlZWVlZWW1I7KymldWVlZWVlZWVjsiK6t5ZWVlZWVlZZ1srSfrZTtiu7Emsl45r3utL8pKJHA=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_121_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt1zEKwCAMBdC9p4n3v1yXoKVDoVBi0ZdFwcE8RPFHZLWKilFHzKqxM/Po8Kn712s/M++4c8k5X456ojkbaeXFzMzMzMzMzHwzV/7D+hozs/vMzMzMzMzMzMwsV8kYzHKVN4yZmZmZmZmZmVnGYJarvGHMzMzMzMzMzB+bc2Re/L/dZ8zbmhe/z/XmEzQa2PA=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_125_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt1zEKwCAMBdC9p4n3v1yXoB06ihHy/tKCgz4kkkRkxqnEyhOVWbuz/59069qF9s67H7v3z9UX2/MwoyTs7Ozs7Ozs7Ozsm+yn+/m5xs6u3tnZ2dnZ2dnZ2dn18+zs6p2dnZ2dnZ2dnd0cZ5ZhN8d569jZ2dnZ2dnZr7Pnl71ZPz//2Nl71XuN/QW+RJOP]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_129_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2zEKwCAMBdC9p0nuf7kuokJxK0bal6XFKTzkkwxGtMqdFaOuqK7RAYOHwcrlnfNDDXSw+R5MV+EAg9ZQlhUDBgwYMGBwoEHFfNDPGTCQBzKRAQMGDBgwYGBfMCszsC/IRAYMGDBgwICBfcGszMC+IBMZMGDAgAEDBvYFszID+4JMZMCAAQMGDD5u0L4MVi9RfzIn9j8GDCoTgUHmDSl4U6E=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_133_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt1zEOgCAMBdDd05T7X86FgJO6aKu8v2iYmhfSfCJ62tuJmS0qZE7B4tTi2fPCFqZIvBeHq1HEog/VUsOCBQsWLFiwYPFji6zeOc5ZsChuYV+wYMGCBQsWLFjonSxY2BcsWLBgwYIFCxbeIzo4C+8Ru5MFCxYsWLBgwULvZMHCvmDBggULFixYfM+if1lcWKzWO8cfCxY3LRbdF7kWO50LGmA=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_137_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt1zEKgDAMBdDd06T3v5xLaF1EEaWRviwtdAmPEvIjstqMilFbVKnRCZNLk3OnN1+Km+ikyD85fJVCJtlYm15MmDBhwoTJwiYz95P+woTJD03MEyZMmDBhwoQJEyYyoLzDRAY0Y5kwYcKECRMmTJjIgPIOExnQjGXChAkTJkyYMGFit5d3mMiAZiwTJkyYMGHChMk3JnkyuWGy8m7fb0yYPDAxTwqY7AS+5yA=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_141_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt1zEKwCAQBMA+rzn//7k0ojYpBIMXM9ckYHMMsrgRdcquiT5XZJq+DZspm2ezlScfsLFNwnszXJ1kNnW5kmLYsGHDhg0bNmzYvG6z+13cTtiwOcRG3rBhw4YNGzZs2LBhozOwYSNv2LBhw4YNGzZs2LDRGdiw0TVlMRs2bNiwYcOGDRtdU59io2vKGzZs2LBhw4YNmxNt6pfNpM3fO0P7Y8NmkY28SWRzA5BHuf8=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_145_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3CEOgDAQBEDPa67//xymoRgMNGEpswZx5jJpLllDVU97MzWyVVrGRoxuG13PZk4+YmSj8Hd0ekqBRn3BFhNGjBgxYsSIESNGjBj9xiihrx0TRowWNnKPGDFixIgRI0aMGDHSRRgx0mndbEaMGDFixIgRI0aMdBFGjNwjRowYMWLEiBEjRox0Wn2NESP3iBEjRowYMWLEiNFso/5l9MBIF8n5RxSjtY3co0CjHdmdku4=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_149_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEOgCAMBdDd05T7X86FiINxwUgb3l8cWJoX8mOJ6GmrEyNHZMyYitWU1Zvh92eFrExV6F7drlZSqz5kSxVWrFixYsWKFStW21hl+W+/zlix2sxKX7FixYoVK1asWLFixco7g92ZFSt9xYoVK1asWLFixYoVK1b2QVas9JVuZ8WKFStWrFixYsWKlX2QFSvvDPqKFStWrFixYsWKFasVVv3LatLKPvhoZXdm9ZuVvipgdQJUBnHt]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_153_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEKgDAQBMDe11z+/zmbwwhiF3QDs41FmmMIJ5uqzkhIzRyVmjkZs2Vm355tZmayTe/Z7aoFm/WgIy7MmDFjxowZM2bMmDFjFmaW1DevM2bMmNlnzJgxY8aMGTNmzJgxY6ZvMmPmXcM/gBkzZsyYMWPGjBkzZt419E1mzOwzZsyYMWPGjBkzZsyYMdM3dXRmzOwzZsyYMWPGjBkzZsyYPcz6y2yhmb75aqajM/vVzD7byOwEpNBW/A==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_157_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt1zEKwCAQBMA+rzn//7k0ElOmkGQvzDWC1THIylbNGSlTa45KnrUdu61239w3tLPdD97d7emF281lR+SwY8eOHTt27NixY/eyXVqvuO7ZsWMn79ixY8eOHTt27Nix0yvYsdNn5R07duzYsWPHjh07fVavYMdO3vkr2LFjx44dO3bs2OkVOhk7dvKOHTt27NixY8eOHTu9gh07fVbesWPHjh07duzYtbGbJ7vNdnrFIzudjF2MnbxrbHcCr29BYA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_161_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEOgDAIBdDd09D7X86FWBcX0xioj8WhC3lpfoWIrFGpYtYR1Wt2yHCx4bPqNydNDXW42T28XcUGhtnwKFsMGTJkyJDhzwwr/ttcJwwZMpSHDBkyZMiQIUOGDBkytHMwLzNkKA+9KQwZMmTIkCFDhgwZMjTrMWRo5yAPGTJkyJAhQ4YMGTJkaNZjyJChPGTIkCFDhgwZMmTIkKGdg3mZIUN56E1hyJAhQ4YMGTJk2N4wvwyXG5r1XhialxkWNJSHWxmei0Uyjw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_165_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEOgCAMBdDd05T7X86lERYXE0xLXhcHluaFFH8jska1illXdKjZJcuNlu/C/5w0ttTlwfdyuZpNLLPpUbpYsmTJkiVLlixZtrKs+q/+nLBkydK8ZMmSJUuWLFmyZMmSJUsZkiVLuw3zkiVLlixZsmTJkiVLlnYbMiRLlnYb3h6WLFmyZMmSJUuWLFnKkPI4S5bmpbeHJUuWLFmyZMmSJUuWMiRLlizNS5YsWbJkyZIlS5Ys21rml+VWSxnyo6U8zrKJpXl5pOUNmfMpzg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_169_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEOwCAIBdC9p8H7X64L0e5NLNjH4uBCXgzmE5E1KlasuqJLrU6ZbjL9+qa5qU5/8k4fT7WRaTY+yhdTpkyZMmXKlClTpkyZFjKtnE3nDVOmTM1TpkyZMmXKlClTpkyZMpVN5X2mTM1TfxRTpkyZMmXKlClTpkxlU3mfKVPz1B/FlClTpkyZMmXKlClTOxTZlClTOxTzlClTpkyZMmXKlClTpnYosilTpnYo5ilTpkyZMmXKlClTpu1M82S6zVQ2fWEq7zNtbGqeHm16A0MTJx0=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_173_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEOgCAMBdDd05T7X86lEScn00B5XRxYmhfyMT8iZ6w6MeeKnWZuy7bM9su79qyBrW0PvLevq7uZbS4/thi2bNmyZcuWLdtGtqv/3z5nbNmylbfeMrZs2bJly5YtW7Zs2bJlq09gy5atvGXLli1btmzZsmXLli1btmz1CWzZspW3bNmyZcuWLVu2bNmyZctWD6ZPYMuWrbxly5YtW7Zs2bJly5YtW7Z6MH0CW7Z6MHnLli1btmzZsmXLli1btkW2+WVbaKtP+M1WV8O2ha28Pcz2BnT/Knw=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_1/mask_177_1.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEOgCAQBMDe1xz//5zNRaisjHAw11jQ4IQsYSNy2soTfa6oNn3HjKcYv9n/u7aJsR0ffo6Ho1zQOH+glRnGjBkzZsyYMWPGjBmXN67wznvWGDNmLI/deYwZM2bMmDFjxowZM2bMWF+hr2DMWO8mjxkzZsyYMWPGjBkzZsyYsd5NX8GYMWN5zJgxY8aMGTNmzJgxY8aMGesrGDNmLI/deYwZM2bMmDFjxowZM2bMWF+hE2LMWO8mjxkzZsyYMWPGjBkzZsx4EeP8Mp5krK/41FgnxHhbY3l8qPENuJUz6w==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_21_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQzCCAC6DgRFFBiSZAOcYIiEqiKLZNthFAY22U8E=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_25_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQxiCAi6DwSODDsgyDc4zRENDTAbKxu5TusgY0kIGAJHQdqQ=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_29_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQyQEA1wGg1sWG6DIZDjXEAsalaVUFhby+GKB/rJwN9NMFgABIZ+D]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_33_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQwwEAVwGQ08FLkAVW+AcQxxoVMUIVAFPNDhT0GBRgfALXVQAAHVqznc=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_37_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQ2wICrgMhocqfICqNsJ5hnjQqKpRVcNEFVSccO4YlKoMB0oVAKkqA5s=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_41_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQxwIBrgMhq9KQoAmtsO5hgTQqMpRlaMqh6pKWGlAbMkw+FXC/T6gKgFGmT6W]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_45_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQ9wIDrgMBrdqNBGKVRMDiDLbkEzVcI4hEWhU9XBXjTXFDjvVozE/SFQTUyJTVTXOdDKsVA+e8MaFACs6f3Q=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_49_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQ7wIAbgMhpQOA1roIBYQa4chJTpwyeNEozpGddBVB06RYa9jNJWM6kDoILJWo4kO3Gl3uOsYnPGBEwEAz7vGxA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_53_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQ0IICXAZDFldmIJU1EUKIMEuQ4p1wbmGJKBRXaO6RnURzl8jUNdo2hjVNfh1Ed9yoJ0u/PlrpOka/PGFFwEAY9gT1w==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_57_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQ+IQHHAZDBedWMWpqpNUQLKdhlTQCecYkohGdY7qHNU5NHXiKcFGdY6moVGdozqpp5PU1huNdRIoE0Z1DrH4xI8A1SJnAw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_61_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQ6IRAnAZDFPdBvTRTQ4gx25DaunGr4oAGtU9qntU96juAdBNQHxU92hqGdU9qntUN4puMlrYdNJNqFwb1T284psAAgAu48B7]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_65_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt10sKACAIRdF5q3nuf3NNIpoEZh+Q7sNJCIcgEZJabKWGFH0gzFqXhGiCd7CjQj9asBAQEBAQtgTHGkdwCUwUAgJCdiH2S3opeHY1gpK85hOhAm/9H6o=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_69_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt1zEKACAMQ9Hd07T3v5yLdJRqVER/yCLCw6FQNGvx8UaK/ad0brcpSqS3+GIlDi4UBQUFBQVF2LAogsLUoaCgoFyoKD/h40pqH6FMKu/NS6YVnd6E8g==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_73_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2CEOACAMQ1HPabb7Xw5DwBFGGQL+UgPiBbFUYNbGtzKm2JfS4mWupI76Js+Q+snFICEhIU2lUD8hHZDYTCQkJHqcHkdCQsqWxN+Qq1K8n5A06e19CqcCnIjwTw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_77_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEOwCAIBdC9p8H7X66LQxdNitgOPvJH83QgkBjRq2XzqCuO10ZXxB9aRRW8rW3TJmfeh0aj0bZoiflGK9d0L41Go9lZdhaNRqONtPUfs++13Oyl1Wrn9FsqN/LVYbY=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_81_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEKwDAIBdC9p9H7X65LydKpVmkhT1wi4ZFB+JCIq/JdrzqCeLuRD+fDYle1vTEHxXXIpiYSicRfibVUIM6LNpxIJBKJ0lVeE4lE4n5i16/rF2I9Z4iz4p77WO4TrdvZBw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_85_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEKwDAIBdA9pzH3v1yXQjeh1tYOT/4k4ZFBMCTirP04V62gpuqt/ndqZ3Xedb+t5qeKoVKpVCp1lfdT1qeOqOaVSqVSqd4DVPNKpVKp/1Ibf/aH1ereok6o5rWYA+cVVvs=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_89_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2bEJwDAMBMA+08j7L5cmRSpj4sdRceLrw8WDDKp6ZiTymqvIy3JNhd/l9ITfPI7Ic2EjZDKZTCYfkj/vQXITWZ/JZDKZTPZHIuszmUwmk3vK2etSB3lnd5M7yPocyg2D8dpJ]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_93_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2TEKADEIBMD+XmP+/7lrwrWBeAYDs1gPFhYLRsyM/+bLE/QtPVZED70iJbuPQ/pSyQydTqfT6ZfpmcZB76q7dzqdTqfT6XokXY+k0+l0Ov1uveID2kPP9hl6R929F+kvEWpj2A==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_97_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2TEKwDAIBdC9p9H7X65Labd2SDQNPHEJDo8Mwgcjrsqp/dQRhBnCy/Rz1C1UVdUfslO4X1nUBAKBQCAQCGuFkbxE2EmwDwQCgUAgEORWgtxKIBAIBAJhqVB0xf+XMJyXCJsI9qFDOAETJfOs]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_101_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2jEKwCAMBdC9p4n3v5yLQ4fiIIlVeCGTBB4Okj8YMapl96ueoOQpn+eT4XOUyiq8S9uuTGbymkKhUCiU3UrWrqTcqHgvFAqFQpFhKDIMhUKhUCgyDEWGoVAoFMqyUvdT5SglcVdSrlO8l/+UDmlZiQI=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_105_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2iEOwCAQBEDf1xz//1xNg6tp2HA0c8GAmSA2rKDqmZFZc64iBaQ3/tv5Jik98TuNDdLcjPAikUgk0o+lta876XxJnkgkEolE0vd0I31PnkgkEolE0vdI+p7kkkgkEqm3lP6t1Ula3yNIZ0vy1Eq6AXSUJJU=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_109_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2jEKwDAIBdC9pzH3v1yXQLZO1og8cZLAI4PwByN2rd/61BO0Ei1lfl+rqIq/rVva96vkptFoNBqNNkpLntNGavaNRqPRaDSazEWTJ2k0Go1Go8mTNHmSRqPRaLS+WsFFY1MtO5fQJmr2ran2AoyzxvE=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_113_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2jEOgDAIBdDd09D7X87FoROJidCqjzDz2oHkD0RcNSp7qiOIvWLykkgnbyt2VdMfx1Ixn1DQRCKRSCQS74kVGYD4B9E+EolEIpFIJMrkRJmcSCQSiUQiUSaXV2Vy+0gkEolEIvERsecqeFuxKMsRPy/ax/eIJ5+KbmQ=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_117_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2jEKwCAQBMA+rzn//7k0IW0gZE+Dc1ynMFgsbGHVNSO/9xxFnaq+Plpb7ZzWt47J6uO9xFKpVCqVSqVSP1ETLZy6qyqvVCqVSqVSqbo/VfeXVyqVSqVSqVTdn6r7yyuVSqVSqdSk2vnzfm011RGpO6ry+lP1BAcmHCs=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_121_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2zEKACEMBMD+XhP//zkb4UpBSIgyIZ3gYBHIFkasGiX91xfkNnLs7jg76iJXV/WbRwd5K2Q1mUwmk8lk8gVy0h5GJptnMplMJpPJZLJcJWOQ5SoymUwmk8lkMtmmT5aryGQymUwmk8kJcvHvlwvkzH2bTDbPz8gTIuzQZw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_125_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2yEOwCAMBVC/05T7Xw6DQA1VKNtrcEBeEE36BRGj2q411RP0qvrL7vLiLfqJOvD2VkZfnsxcdDqdTqfT6XT69/W8eZ5O13F0Op1Op9PpdLocR5fj9DudTqfT6XQ6nS7L0OU4Op1Op9PpdHpBff8PtYv01HmeTtdxv9E7K26KJg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_129_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2zEKwDAIBdC9p9H7X65LyFbaoaiBJy7J9AgI/iERq7K2d11BMFjwxPr3fpigq9reIAcJ9iGbmoCAgICAgOCjoGZLIyB4E5hGAgICAgICAgJ5gYDANBIQEBAQEBAQyAt2ZQJ5gYCAgICAgIBAXrArE8gLBAQEBAQEBOcLun6ZniCo2xMJCEwjweobdmVJjw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_133_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2zEKwCAMBdC9p4n3v5yL4Ca0YKL0hUzi8BCU/MGIUS29Zz1BcZVi6/q5isqqPIt2mmK9K6kpKCgoKCgoKCjKFEnrFBQfFG4qBQUFBQUFBYU8YgankEcoKCgoKCgoKCjkEQp5xHtBQUFBQUFBQSGPmMEp5BEKCgoKCgoKipWi8Cf5ZYqsuZOC4r3CTf2pogNmdhB7]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_137_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3DEKwCAMBdC9p4n3v1yXDk6CCEksL2QryqNg8C9GfDUqeqonSC6ULHjrT1tLmkuqq/ifjJaS9Q6JTUJCQkJCQtJUknw/ISE5lDjFJCQkJCQkJCQkJDIgiQxonpCQkJCQkJCQkJDIgCQyoHlCQkJCQkJCQkJCImWQyIDmCQkJCQkJCQnJnyS1r0ncJcm/25OQnEicYpKpX3jq2+s=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_141_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3D0KwCAMBtC9p4n3v5yLdCotiD+xvJBNhYcQ4VuMaFX29V1X0PxCE6/nO5bO1GSoFHdTkmo+961sGhoaGhoaGhoamg0JhoZmjsaE09DQ0NDQ0NDQ0MiaNDSyJg0NDQ0NDQ0NDY2sKU/RyJreGxoaGhoaGhoaGhpZk0bWNOE0NDQ0NDQ0NDRjNBl+nDlTszoz0NCM15hwmseuPgOuBw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_145_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3DEKwCAMBdC9p/ne/3JdCt0sdIhRXsgmykOI8BeTp8bSfusK0YmiyWp+bcm+oi7V5Y5GZ9H87AVNRERERERERERERETUU1SZ14iI6kSmn4iIiIiIiIiIiEimlY6IZFrvEREREREREREREZFMK68RybRERERERERERERERDItEZHpJyIiIiIiIiIiOkLU5NeqvUXlWYSIqERk+om++waGC4aK]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_149_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3DsOgEAIBcDe08D9L2djYUfWQlgdQucnky2IvMKIq7K7b3UE1adVUb1k9VJWT22hmlSDzirHq8o7O5qKioqKioqKiopqqKrlu52KqkVlMlBRUVFRUVFRUVFRUckZqKjkDFRUVFRUVFRUVFRUVHIGuzOVnMG8oqKioqKioqKioqKSM9hSqeQMJgMVFRUVFRUVFRXV31Rz/oy3u6prH6Siel9lMlA96hOg72SZ]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_153_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3DEKgDAMBdDd06T3v5yLOFpQIb/6QrbS8ugQ6B9addTI6LO2IvuT7GJ1uvH2mYvI0iruzsYCsukpXU1GRkZGRkZGRkZGRkb2hqwlPSAji5GZGmRkZGRkZGRkZGRkZHINb3QyuYZ5RkZGRkZGRkZGRkZGJtcgI5NrkJGRkZGRkZGRkZGRkck1yMhMDTIyMjIyMjIyMjKyKFna75yfkLW9N8nIImSmBtnz3gFAE0iX]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_157_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3DEKgDAQBMA+r7n8/3M2gk0QG7mNznFVSDGkWNgmVefMmL1mFN0vdS3n++kSJ/Ht5i66+1vNS0dHR0dHR0dHR0f3SNd8TkcXqJModHR0dHR0dHR0dPqsTkanz8o7Ojo6Ojo6Ojo6On2Wjk6fpaOjo6Ojo6Ojo6PTeujoJAodHR0dHR0dHR2dPquT0emzEoWOjo6Ojo6Ojm6tC/xB+CO67l5BR5enkyh0r+wBID0zew==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_161_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3CEOgDAMBVDPabr7Xw4zgVoAsfzCa+rIyAuiWb+gatZI6ksdRfhjYS3Pvnj06EhTYWqFfsPRSrh+Q0ATEhISEhISNhCG3G0ICcOFpg0hISEhISEhISEhIaHMgZBQ5kBISEhISEhISEhISChzsC8TyhzMQ0JCQkJCQkJCQkJCmYNtlFDmYNoQEhISEhISEhISEhLKHAgJZQ6EhISEhISEhISEhHeEmX9B/4YwZ9cjJEwWmjaEG/sE+nYjHg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_165_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3TEKgDAMBdDd06T3v5yLFByK6KA/8kLGVh4OgfylVUeNvJ61FSXl+dDq/rh/5dnXGiqTK/pfjmbKy3MJTUlJSUlJSUlJSfmWMmQ7o6RsqDSJKCkpKSkpKSkpKSkpZRv2cUrZhklESUlJSUlJSUlJSUkp26CklG1QUlJSUlJSUlJSUlLKNmy6lJSyDUpKSkpKSkpKSkpKStmGfZxStmESUVJSUlJSUlJSUlJOZfJLDz9SBu2QlJTNlCYR5Ve9AzMEGVU=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_169_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3TEKwCAMBdC9p4n3v1wXoZtDcfjRF7JZ5OEQyF9aNWtE9ldPkZIuP/xxtOu23tL0Sn/T0VG6vjuoSUlJSUlJSUlJSUlJSbdKQ3ZTUtJDpKYUKSkpKSkpKSkpKSmpDMUWTUpqSpGSkpKSkpKSkpKSkspQbNGkpDIUUlJSUlJSUlJSUlJSUls0KakMhZSUlJSUlJSUlJSUlFSGQkoqQzFPSUlJSUlJSUlJSW+Thv/t5kBp0m5KStpfakqRRvQLABMWKA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_173_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3SsOgEAMBFDPabr3vxwGgdpm3XTzmjo+eSAmZAxV36zU/c1TtLRb7f4Rqrv56aHVXTVaO2EGvNs1VtuembS0tLS0tLS0tLRB2sDvW1ray7QSjJaWlpaWlpaWlpaWlpZWD6arodWDSTBaWlpaWlpaWlpaWlpaWj0YLa0eTILR0tLS0tLS0tLS0tLS0urBaGn1YBKMlpaWlpaWlpaWlpaWllYPRkurB5O3tLS0tLS0tLS0tLS0ydr8P4Ldp83sE2hpb9JKMNrgfQGzohhv]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_2/mask_177_2.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3TEKwCAQRcE+p1nvf7k0klYkzX4dsQssQ4qFvCZV84ze9ztPERNvims1YvfRz5nh4pQT845HsHg5pdslJiYmJiYmJiYmJiZuJO729U9MfIfYdiMmJiYmJiYmJiYmJiYm1t0UFmJi3Y2YmJiYmJiYmJiYmJiYmFh3IybW3Ww3YmJiYmJiYmJiYmJiYmLdTRMi1t1sN2JiYmJiYmJiYmJiYmJi3U1hISbW3YiJiYmJiYmJiYmJiYkzxCl/VTxX3LFXEBOfL7bdiCPuC24XIMI=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_21_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQzCCAC4DBIALIosiBJFEKTcBGZBkAtxqQyTEhcqFIi5sgrhNQPMdxAQsghjhMBAmAACHAFO9]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_25_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQxiCAi4DBECRQJZB08RlQBvT0AFZpsE5hmiIC1MIirhwSQygaTDPcWEPAkNcsQA1DYcmkkwzxGUawqe4NOE2DQCG/XaY]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_29_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQyQEA1wIJhZ5LnySSLK0MxkboMhkOM8QC+LCLgxFXPgkDUdNRjYLX9owxB6DcC7uGCTTZCQ345HEYTJSaOCRBwAHY5+G]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_33_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQwwEAVwGCIBVAbIK7AqQVNDHFlyAKrbAuYY4EBduKSjiIqRg1JahZgs8zeBPYxBb8KcxQ9z5hSq2wP1CSAE+WwyJtQUAdVzOfQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_37_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQ2wICrgMEACnImRVeAzjMhg4G/EBqtoI5xjiQVz4paGIixhFozaO2jiANsIyBBfhLGRITAkAtZEIw6hioyExNiJClRjDiLMRAJRnA48=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_41_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMIACQxwIBrgQTAJquYhViKRyYG0nBGhiO5xnSABxEVYCRVzEKjQctX3U9lHb6WI71D5iyzpDwqUNXIq40obKtiP5nUiFRNiOFPJEqgUAX9M+nQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_45_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlEsKwCAMRPdzmvH+l+tGSigmmSn0szBkofjQhw6Ss0beZyGMWzjSPRzo2ybLaWHCzkQpxWQ4JkEGy9WsoWGz4cDb5AsTMSeZSZZJlKvXs5432Tn5rQlleMCBk9++yAmdxNJJ7Psm1p20r0PndbTND0p5f4I=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_49_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlUEOwCAIBO+8Zv3/53ohlpqiu41ND4VwUCLZiUAA3NrUT7NwphJiBili2EU1RNZUWWTQ4Iykag+oetD6pZFu/FN3UxOK6rdUfLc7lZKQU6WRT6mqr4oqUEFS4PfghWqyK+67HWq3IxdJZxDqDG6jWv8V1ArixQoeOu7GoA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_53_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlksKwDAIRPdzGr3/5boJraWJ0SENLSguQnAmj3yIIi10liZgxnEdGJFRLSIUhvA52V8rHilCZQgvSDi+40SuvCUYkRZhEX6a0H1zcEtGTpj69py2E9Y9LMJ/EsY7hzthXnSqNPeWic9cmd5Gmc7hFcLAHsrOU07pDqfpE+I=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_57_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtljEKwDAMA3e/Rv7/57qE4qEolmhJBxsPIeTIEYwIsCp7fVeUtQRWUgML+aIt2dzaomerlmqbrm0RDnKGd+jI6nDBsR3bsVVsjUzgtjydonHm2eSc7czt2I7tp7awwAwXpD/GbSbATTC4CfY3W/ttm5MAdxL0Sy84rmcZ]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_61_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlkEKwDAIBO++Zv3/53qRNC0lmpWQ0ioeEsPiEGQRsNBwniHdeVrcq4nmgnXkj/Uo+bh+6z0fBLkmyduTtIsSKZzMUjLiIi/yIv88OeeKRs6KPXKn/mLymvMiL/Ifk4PuzO3nF3J3Gx25IjKuCK+54+fI+PlC8uifIzMt2DAtB0uPwFc=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_65_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtl1EKgCAQRP/nNLv3v1w/UgaV2wyFxSz7IahPH4qyES3yTnaBrs0xoAI6wmMWoVqcdR3vgQvaIlWLTQTDlUYJfmpLqIC0hS1sYYsPWxRecRQGXrNRXOmcPY2Fb5QtbGGL/1pwVdLeQgOshOT/C7FASbXWS7VKesmifBYxw42iGQv3kB+5]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_69_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt18EKgDAMA9B7vyb7/5/zMqQnl64RHWT0IGyGPSwUgblGve4V6Xk7JKfsh6SUV0XLLVKEiqizOqKhECVULE8yFb3XZ4UixCKLLLLIoi9EzXnEiJi5GfTJp3v+T+Sus8giiyw6ToR2yAhFCPFXTs4jKCYsFBP2LJHkG5W6Doqu613mAnjYhRA=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_73_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmFEKgDAMQ/97muz+l/Nn6BQ76BqlSko/ZNSsD0uEAj3aUh5hw3NKaFRKNmV4gQ7Oa2G6kPqlp1wk6RqRbq+0SUUsLS/R01hCohOd6CrRhT3L4p7tHNrS/XdlZek0maITnei4dP/2zJJ0mkzRie6rdKB0lN+rnOjgrwFingmWZ0aFZp4J1h/hcbr1bwfWZKLQZG4tE/A/]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_77_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2EEKgDAMBMD7vib5/+e8FK1CimnWUmFLDiJ06WBJQLO2fLa6he65ngdmWJf2sdTirXlp9uXzbPVFkTpTemExOEe+wIlpBWaYSyqppD+WDjpZ3EMx7Iye7KGYGSjhibeX6vZKKqmkkr6SaspsKtXtlVRSSddL63/M7lJe2JnmnN5rc/vCKWPMKWPMKbNKWvimtvPtpeQdBONhtw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_81_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEKwCAMRuE9p4n3v1wXkSxK0UdB+sShi3/9aGrAzD7a2RwjyjMSWBOZwJL4gTrna/fUuVz7Rk0NSt1odYHH+r0bM7ioPoMOVK1a9Z/Ue8fjUFNn+FAnuclr1Fa4atWqVau2X9uv/a9Vq1atupW7PVANB85vhk86V9Kdi97k3Wr8W59XeNIVzm3yAZ0N2TU=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_85_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2UsKgDAMRdF5VvO6/805KbU6qdYXf9zSgUYI4WBoUKmucnmvK7prW9I+q7HY0P0Cp+JHBebiu1p9yyhQkgTao2g3xbjDm67uyEiKAAIIIIBAqoD3NKwC7qQjgcn4jwToAgQQQAABBJgHmAfoAgQQQACBlwnIXqn3f8FGYPiVeuY0VMZpqFGxk/OAMuaBBwSuvgPK6AJ9oAsWa8NWtw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_89_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2TEOgCAMheG9pyn3v5wLKi5A4FXB/A2D09N8sbaJ7rmS4hRlxbU226KCi+R3NSr39CkNbwX0aahLrpGiNG4Qaz7B6DF9ZD4WFZzQQAMNNNBYWUO+b5wa8gnboTE8un+pQaeggQYaaKCBRoQG+8YeGnQK3w000EADjbU1tH+XnhoxwVdy0u8bPjf7q/uGR+0bHrV9faSheDd8x06RZx/G7tpO]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_93_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2UEKgDAMRNF9TpPe/3JuSsmqUZoRGn7pQqiM+jA2oPsco26uYeG4PDym14eH9P9lNtdNl1KZ/UP5FxnFUMgMpUzAsfTMk2ma2DlNGY4MMsggg0xrGcWuvWREu3Yq8yJht9RYhmpCBhlkkEEGGWSqZOj0WvbAVBPfGWSQQQYZZK6QcVn4MGV49vf2vJ9xZafnyk6vq4z6namqJldWk+bmH1F2Y/Q=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_97_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2sEKgCAQhOH7Ps34/i/XRcouKuhk2S8egsjNjzYGSsojTZ3XiOLYUqCsYNpEaLlSvbymKKl1p71KrmFSSg8onWejucroDN/SeYa7AEoooYQSSiih9HYlX6rsUhrNgzFlldqF+yjRcbyXUEIJJZRQQmlfJVLlRkp0HO8llFBCCSWUfqsk6w58/wnclDT2Cbqdl+ROlRrYRG+qlDtVrlea9izJ3XH6cMcdVGnznA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_101_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2ksOgCAMRdF5V1P2vzknRDHxn76qcAkD46AvObHQge51lejdLGuedTmWEdKkvCS2F+77JR+J3a13QUy5pGIlQ2xBs4N6cdu05eu2jJCCGGKIIYbYx8Skd+WZWNw0YMH1tl/2J0ZXco4hhhhiiPUmxnQxxDxGV3KOIYYYYoj9WIzpgnmMruQcQwwxxIYQ0/2pshbTh8wpRXtX+tmvGUHThWdMF54xXbwtJvjGvKeulOZMcW6JDg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_105_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2jEOgCAQRNF+TzPc/3I2hNBAKJwx6icUhoSs++LCFkp9NM8co6Zna6A5kjfQFOlBPa33nq+f6Gm793B9kZN3uPVaSm8CrP373DjLH6LPSgVCDz300EPPcz0NPfedO/SUSOqzelQu5x566KGHHnr0e/R79HtULuceeuihhx569Hv0e/R7VC566KGHHnpv1FMkUKtUoPUfaI6ORamOJZXUv/Ri356vcpWqXH9SF+VMJN0=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_109_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2jEOgCAQRNF+TzPc/3I2BNEGi90JwU8oFIvNvgiZAqmPVjbvEdNzebG5mqG50D6SKetfJXPXX73VD4NkM0uOTzFemmGGp0yf4SyGJJJIIokkkgdLelJQl3QVW0kmr/9Ykt3NOYkkkkgiiSSS5EnyJHmScxJJJJFEEkkkyZPkSfIkuxtJJJFEEsmNJWXrzHN/8iG5vD2XmYLkTEFaNZecJ+XMkxtJVv2Tcu5uHbi7LzJvxoU=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_113_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2kEKgDAMRNF9TpPe/3JuROvCRmoyFPpLF4LCyEPCFHQ/V6vc3bLuWpNp6sAucQHVwYuMb/1QnQv0r6qqJVNtatUb1sI3y96mizq3qQMbqqiiiiqqqE6pyjpApDrdEYe37P3Bir66lSoTgLmKKqqooooqqqhmqdJXOQVkqjIBmKuooooqqqiiimqWKn2VU0CgygRgrqKKKqqooopqvarmr+CnqjbwSmy6vurRv8MFfdXVfdXVp4CVVIu/Vd9hAsgyDzRobnQ=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_117_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2zEKwzAMBdBdp1Huf7kuoXhJ2kIkGfqMh4DBP34EIQ/JPMdRP98jlue20DW1L3RJ3Uo4b3f4ael74Qff5+KsfaNT+JgQXpDjfoeiGb1x54yJUMKECRMmTJgw4Urhou4xyvrPu92i8ETXS38nrEqow4QJEyZMmDDhnYX1w24cDwqrEuowYcKECRMmTHhnYf2wG0eDsCqhDhMmTJgwYcJ7Cmd76BEToZ/+Mqjrh3OiH86Jfpjw7DdcXSVyokr0HvYFOW4cWg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_121_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2zEOwyAMAMCd1zj//1wX1CYdoEqCicohhkipbDhVlj0koq4tZX9W2T2nJt5nTr50iWdqN87UPm5c1D4X/ZcTf905dyVrbxO1329LN8qoXfJT1l1mJaZNmzZt2rRpP1Y7vwOs2vn9dl/7YvRWTNoqibpNmzZt2rRp06b9t9qmG7PkYG2VRN2mTZs2bdq0adNeWNt0Y5a8Q1slUbdp06ZNmzZt2ktpx5Qb5393c9A+11Tf0G/HrOkmer8bON3ErOnmodoZ/+2YVUlioUryAsmu0D0=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_125_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2zEKxCAQBdB+TjPe/3LbhF23iULQkd0nFoEUPzzC4C/MvFbbtbsV3fP+/KgM79KPlL//tByFPJZ/kjAtX7FK5Ful/Ac/hgkrd9TEXjsqwxt58uTJkydPnjz5H5IvOc/Pya/sObE84e4VedPGnCdPnjx58uTJkye/Sl6T0mGXyJs2pg158uTJkydPnjz5R/KalA57lrxpY86TJ0+ePHny5MkP5fffUPuWrwt/p7ea83zOXaha1qSyskllZZM6W37LP5//PG1K8l+2Too6]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_129_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt20EKgCAQBdC9pxnvf7k2IW6UIPBHPHERgjT4aPAvqrpHPzvHaNNzpIC5gkwBUwUfVKj13vfrTxRqu/fl+uIMMiOl0NMKE0Tb13lgttyr79nSBVCgQIECBQrPFM5cD4ZC6o40FCp5CBR0JB2JAgUKFChQoCAvyAvygrygI1GgQIECBQoU5AV5QV6QF3QkChQoUKBAgYK8IC/IC/KCjkSBAgUKFCj8XKGiBfSWLmD9p+3Jm2qlb6rpQ6CwU4h/C+c7UqU7Uu4QLoCPSfU=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_133_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2zEOhCAQBdCe0wz3v5wNcV2LxcaZ2eQRCsVCwosjvyBitZneP21crssmcZ1F4WKM6C/y6vhTkZzx21rUtUKR2UTkfDTOm1nYR+3rVx8dJkGECBEiRIgQIfKSSO3ud4lUT2InkjRO5LGIquU/QoQIESJEiBCRR+QReUQeUbWIECFChAgRIkTkEXlEHlG1/EeIECFChAgRIvKIPCKPyCOqFhEiRIgQIULkp0iUr0TtefYvke2p4ozdb3TY/cZuMZLySHTII38gkv2NRIeqFarWPAD8zg/f]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_137_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3EEKwjAQBdB9TpPe/3JuqkbUSFOameALWQhRGXz46YfSWve1RexmleZ17CwlyyDNJIl1avfTA0ejOsPfeujo828Su8J1tiw6T6Dyc+JZu8SPsO+SZZCNDh06dOjQSaFzxdVq96h8f+PMK+q7Tvg1G52OjmSTbHTo0KFDhw4dOnTO6Og72uhiOpJNstGhQ4cOHTp06NA5o6PvaKPL60g2yUaHDh06dOjQoUPHvaDaqHtBJZtko0OHDh06dOj8s07s0yRedXIM8phkVpfo9J2xBydc03dqlr5Ts7TRFXSC/jtVsr0nW/gsN8MV3Ag=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_141_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3EEKwjAUBNB9TvN7/8u5KSVd2GrAZgwvZCGIdcjDTweKVfva5u1jte719DB9mvlhujT5Uhc56/LKX731oVSNfulgmNPZzF8JUluSVIfVrq/w8G4ZMfbdksKQIkWKFClSpEgtKpVwl35Ihdyl30r95ATef4TUsJTpZ/qRIkWKFClSpEiRSpPSpzTff5Ey/Uw/UqRIkSJFihQpUmlS+pTmu4CU6Wf6kSJFihQpUqRIkfIMrT6l+XqG1vQjRYoUKVKkSJFaQKpiwmwtKczdv/E836cqqU9VUp8iNSaV9puaNf0qafplHM4LSl2uKw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_145_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3MEKgkAUBdD9fM3z/3+ujZQFlTqMXvEMswhKecyhGxekqnlNp+7XaovXEQMtJwo5pFaXU9v91qZLtqkdOevHGWWsELUpUO15Vfv7uaN3yxll3i1tIGrUqFGjRo0aNWrUqI1Sy2nZq9RGNNdfd2t9txgwK7W1ahJSQlKjRo0aNWrUqFG7g5q+pmXfT01CSkhq1KhRo0aNGjVqd1DT17Tsy6pJSAlJjRo1atSoUaNGzbPH+pqW7dljCel3jRo1atSoUaNG7RS1ijqhnP/RelOrjioypK9VWl+rvkMa0tcqrWVfT+2071qlJWRJyK/7AQbihmI=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_149_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3EEOgjAUBNB9T/O5/+XcoOKmkEjpoK/pwo30kxcnGRKsWtcye29W23zOmaslDrWZ6j6CnXn7t1J7h38hOO7kw4JJK0pwSRR8I7bdE2bsljXOulviUAtBggQJEiRIkCDBEYJRffApGNUmDggOPLn3RYKnCUpRKUqQIEGCBAkSJEiQIMFzBDV6jf6PBKWoFCVIkCBBggQJEiRIkOA0QY1eo/81QSkqRQkSJEiQIEGCBAkSJOi9CY3eMxnvTUhRggQJEiRIkCBBggTnCeb8M96nYN5Qr6mub6LdPlh715jU6Cux0Vdio7+h4OzfYEnR4ykaNdcDiCVkmg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_153_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3EEKwjAUBNB9TvNz/8u5KRI3bQhKpvWFLATFDn04kA+16lg9Y79XG15HBRuTZQUbkt1O8zx2XV1i7a1Jza9fvc8E+7hnWStNs6dqDqDt8pO7dsuLdOyWGowmTZo0adKkSZMmTZr/qhl43pzR3HV+b1uvfvadNFc1Na2mpUmTJk2aNGnSpEmT5lM1TQ9MDx6vqWk1LU2aNGnSpEmTJk2aNG+taXpgekBT02pamjRp0qRJkyZNmjRpeg7F9MD0wHMomlbT0qRJkyZNmjRp0qS5rFmRwXpLDTbxj6Ybz5uVOj2o1OkBzV9oxv42tzdtpTZt3k17AZ38SOM=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_157_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3DEOwjAQBMDerzn//3M0VkiQkKFAt0FjuSCmOXnEom1StdaM2c81Tp/jhjtPF3h5o+4r23L+qWzv+cvd5a1A2Rkue3w1jocZuEfmWGuP5OHIkiVLlixZsmTJ/qVsZutZsqnD7WSbz8n+TFYaS2OyZMmSJUuWLFmy+qw+q8/qs9JYGpMlS5YsWbJkyZLVZ/VZfVaflcb+Z8mSJUuWLFmyZPVZrUefJSuNpTFZsmTJkiVLlixZfVaf1Wf1WWksjcmSJUuWLFmyZN/IVuzNZb7f+CK7fdtrZ+up5NZTu8tr7rOV3GdvLJvym63kNC5p/PV+ACFfMqc=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_161_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3EEKwjAQBdB9TpPc/3Juqkax0VRrf+GFLISATvvw2wnEWpfRkmY3Svc6s8aSXmBX4dmUB1XX4btuWNqkvMenTS29voeZI1a5pSvfocvbKzl6ltzSllnSC2yUKVOmTJnyb5Vjn7GvyrFPX0PlP9+p9SXKOypLbIlNmTJlypQpU6ZMmTLlWWX9sl0Rys/KEltiU6ZMmTJlypQpU6ZMeVZZv2xXhPJHyhJbYlOmTJkyZcqUKVOmTNnZCv2yXRFnKyS232XKlClTpkyZMmXKlJ2t0C/bFXG2QmJLbMqUKVOmTJkyZcpxypn/gv6onF3grcKje85Bv7ymnNQv1/R+uabvipxWOe+7XCX294kdW+MFUK8jJw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_165_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3UEKwjAQBdB9TjO5/+XcVIkLI9ha/sALWQildcjDjxMIrTrGzJuvMZbPsUWuVeYWuVTZVHxT/P7SD7fUCfELv3GeKfJtLXNHsvjsIL6gj/0TQubILu+Yo0ORxIkTJ06cOHHixJ/i4f/V9+J3djf7W8bnJ4R0Z8T/IS7VpTpx4sSJEydOnDhx4sQTxPXjdmCIXysu1aU6ceLEiRMnTpw4ceLEE8T143ZgiH8Vl+pSnThx4sSJEydOnDhx4s6k6MftwDiTItWlOnHixIkTJ06cOHHixJ1J0Y/bgXEmRapLdeLEiRMnTpw4ceK9xCu+yDk6FLl9a0ZUP14d+vHq0I8Tv0e8xW88MNWrQ6pnL+YDHV8ZjQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_169_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3UEOgjAQBdB9TzPc/3JuiKKJEATxt76mCxOoKX3hJzMbquYxRc7HaIvf0Rtd7jT8UFsNo1+rf/HBpV1LduiHPMPLmWaPcP2pI/37qrZ5X8ps+VucZ+tlo/Tp06dPnz59+vTp0/9v/aCqtSV1SlYvtbCTe7+E/pf0Jb/kp0+fPn369OnTp0+f/qj66n3dHvqn6kt+yU+fPn369OnTp0+fPv1R9dX7uj30L9GX/JKfPn369OnTp0+fPn36o+qr93V76O/Xl/ySnz59+vTp06dPnz59+qPqq/d1e+ifqi/5JT99+vTp06dPnz59+r/Xry5ONP+7PE/6tfWxkZR6v3qp949s9Op6v3rp9gyin/juVy/JX5L/tHkDcAUWBA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_173_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3UEOgjAQBdB9TzPc/3JuUGuMVFTojHlNFyQmZRYvfPkbIta1ZN3dat11/nlbpWG7aYtLiNEBe3/68sxNCVMmeltChVVCwlJJwh1DG94h0241xlx3qzTsQgIJJJBAAgkkkLBbwpT/sKMz2+tjsr1FXiWUeHcg4QQJ0kE6kEACCSSQQAIJJJBAAgkkkJBCgmZJs0TCBAnSQTqQQAIJJJBAAgkkkEACCSSQcLYEzZJmiYTDJUgH6UACCSSQQAIJJJBAAgkkkEBCUgmaJc0SCb+UIB2kAwkkkEACCSSQQAIJJJBAAgkpJGiWNEskTJAgHaQDCSSQQAIJJJBAAgkkkEDCs4T8XwR7lFBn2Nu0eRqOzT7hg49WTW2WolKzFJWapX+RkPiZENLhuHQoMe8FhaIYfA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_3/mask_177_3.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3UEKwjAUBNB9TpPc/3JuSokIiQiaTHwlC6GCv+XhpLNprdfR9l73UbrPEQP3E2cM3E18horBtYwvs85++rNTUxU/nqq9M/DTPc44UlS0NBUdjDL95m6r5Ix6rZI2MBVUUEEFFVRQQQUVVFDxoiLlyfRWEfRkOlWxaKrRKSqWq5AgEoQKKqigggoqqKCCCiqooIKKM1RosbRYus0lKiSIBLGvoIIKKqigggoqqKCCCiqo+FsVWiwtFhXfUyFBJIh9BRVUUEEFFVRQQQUVVFBBxfEqtFhaLN3mViokiAShggoqqKCCCiqooIIKKqig4gwVWiwtlm5ziQoJIkHsK6igggoqqKCCCiqooIKKhSpq1MCtpA08e3Plnn1FTWuxalqLRcVaFYn/FTsnSE1LkJyb/ABuwyEC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_21_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMEAAQxiDywC/qKEhXJCgKCnmIgOSzIUqAZOGMJILmQMncYjiNAHNGSii6ObiE6WHuQCddlPf]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_25_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMEAAQ0NDBIfLgLAMRBghR4wMOfagA7LsgfKgGpBILnQBOIlHBrdptLYH6jecPjXECB04mxgZIuxB8g8WYWz2YJFBlwQAxl120g==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_29_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMEAAQ0NDOAkGXAbEyWJIkSBLib3YAEX2QtlI4kgkFzZBOElAFr/JI8NeA5gI1ljAIosZgxB7iZEl2l4U/+KQwmkvpiw2BQCbDp/l]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_33_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMEAAQ0NDBAkT5DIgXgWKtCFcAUkqqOEOXIAq7oAqxzAATnLhkoCTRKggbMuoOwaTO+ApBmcKwqICWyo0JJhODfGlU8LuQAkPPNIE3IGuApciAIPizwI=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_37_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMEAAQ0NDNBIKuAxIU4WpBKGOVFXUdBc+QFV3QXlYDEIiufBJwkkiVRFn46i7Rt1FC3dB8wNRucMQb06Di5OqigJ3IYUXASWE3IVFFT6FAF/fBEE=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_41_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNozMEAAQ0NDrCQYcBmQrhKvMjJV0sKdhABN3All41CDRHIRUgAnSVBJvO2j7hx156g7yXWnAUyWYMmARSX+0gbiTlJVUuxOlPAkQhlR7sRUSUgxAEYBP4Q=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_45_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlEEKACEIRfeeRu9/udmEU5Hj/xJMi1wI1RMe8kn1LTNbdi/RGh2htoHuoHYAvTE6rbV3dAOZOC5tNFrI2AWBvJM0Z3K9N3kDie28QdojliXWvXG65H1zcqp38iNP3jw9PHwmlsu3Uvmu0GXvX/eNDTw+8YCI]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_49_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlcEKACEIRO9+jf7/z+1lKQOtcbosix2EZAZ8pag6j5kl0YlEeUcu9/o7RyipcGAO6CQcAVmxKleWvLftQy1RUOGIhKNeVXP8gQPp9pEhHPtpCDKEg+PovmqOIwey1VYOzpGsyqTb6/Oh5flgHdccn/gP3PQAGKrH5g==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_53_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlksKwDAIBfeeRu9/uXZhUwtFfM8WWtCFCSEDmXwkqmeYWZJDiPaoHLmCXep2AupVp8qRee1t3yuMi/cLGxiyIJNXJiluheM1Xq94ld6XHi4k5e8cqQDuhVMtr7mH4/VPr/rPIXrxlBlaAbi6oVTd6FCPeH3uvDBwA7JnFWM=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_57_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlksOgDAIRPecBu5/OTcN/pEZamIiLFi0fYZXzUTVtczssXuJ1skMZpPJ09GxRHgiJFSRZ7wOT+uojMdkLnbfBQW8F0h+2vZsz/95wmninhx5fyhKzY0nQdY8+7ttz/Z82RP4ezt41siL7USa8DmkdA5VyYmeH36fOLwAiMNo5w==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_61_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlkEKwDAIBO++Rv//uV5Kayi16tpDYHMQGjLFScIS1XuYWaI6QHSGzqGenaODhV3vCl0eoffrfgCdu9bl/Epv+FKlA10VpLHO6U1vem/g3co1A+koeT/nQXrEm/ec3vSm99O7+sJevXE6fMiHiYzluUJ5PkH/4L3Befd+cAB3mMJz]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_65_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtl0sOgCAMRPecpr3/5XSBWBOj0JkuNNNFMQFewuPTaHaGu0/mEM14hPnpVwiT8DAM8bBKSMW7h72t8BB6W/9e3IiQW3biyAQCvgp5kAd5kIdaD8Br3z1ghJnqdge3Y+0EAseD7oU8yIM8/NpD7i8peuAQ3JHXHq8XBtcLFqHIw8fOQx6yAYyaIiI=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_69_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlzsOwDAIQ3dOA/e/XJeIfqSoATtDJDOwJDwpL22tut8VEaWeZc6lVBGxkTIZGAuglzqlXf9eVlahEyXGBrJ6Qe9uyHB2EoVzInmRF3mRF3kpegES9uEFpGTEdRM2veAUqhe9R/q+yIu8yMtpXpp/wh8vPMp003LCcnLaKTnNpGz1cuzzgoEuEbaH1g==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_73_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmEEKgDAMBO95TfL/z+mhtCkUMd0tgmwPEUUHM5o91H2siCjW9LA5n1THZM4Z0vKWRS9lTxgJWk+e7uPbF8W7S+1ZO9v6cFM1FNArkcTrTp7kSZ6KnuB8CiKpZex2+vYrRBLdk+ZOcydP8qQcV45r7uRJnr7whOyGzJ64pAhG+vJy3Gk5ziYd8/Sr/wmHXT/D80E=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_77_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmNEKgDAIRd/9Gvf/P9fLakZlOK8w6vogEXXYTqkw1RGttYlsQrSGNoc6A6totw88vRj1lqelQ9xlXCy5C4bs1NyXfp34oCYLAnJkMA27U3qjN3or9Jbqb7q7AtPc/hzr5N0bjlbijXXKOqU3eqO3V2+/mgvLzlPWKeuU3uhtGW/5EzPrDU+LnRd5nRw7FxQ6Fypopd4++79hgBvvQ2Ud]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_81_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmEEKgDAMBO95TfL/z3mRWEULbTciODnkoDKS0big+1ERMd2zzOuIK7h4iXg7xdN0Mx41RElZ97YxeFw6dZ6z/bqVB33upgJlLyDqp8YjHvH4EY+iVGg8Con5+VWkQnrUEss8stfsNR7xiEc8ktfkNXuNRzziEY+iv64XjzXE8Tzppas+r12e11XEco+/eB910A2UDdz7]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_85_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmTEKwCAMRXdPk9z/cl1KG4fa1uQLpc8hYJA3PIIJanYud0/EAGqmpeaQkamnDg4+y6+llq2h17d5FxgICtq+SxdAF1sl7IgiqsYAXvGKV7ziNdOfLvMi6kyHvs2LqFKv1Cv3AF7xile8Mg8wD1Cv3AN4xStev+K16mW/96qjDj8Wpjq3Zh4wyTygpC70+qN6rQVvTiRa+g==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_89_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2TEKgDAMheG9p0nufzkHq8YlIM0Lin+HIFbe8BHagGbXcvfFGtYwffJ67D28Izn57On7zuTSlTqn/vt+m3PYHfO5qDFCHdWBZxUm6zRwxhlnnHEucC67B+2wFSZnt//CVDCdNclyZ/qZcwNnnHHGGedyZ+aNr8919DPnBs4444zz651r/y5FZ22yu2Iq0M0bJps31MnNzj/t5/rwDa863vw=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_93_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2UsKwCAMhOG9p0nuf7luJH1QgsWMQvlduJFO6afIQM3O4e4lc4xma9Kron1DevKNb0F9Ycq9Mr18pO7pftjAqkQmnmw9perA3OemCI1ZnK6VwR133HHHfbO7oHFc3EXpWbOYahzhrktf4s55557BHXfccccdd3okPZIeyT2DO+644477X92L/4A+3PXpnyvRcNPT9kiT9sgV6RvcOe+iFxxE3mke]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_97_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmkEKgDAMBO99Tfr/z3kp2l5aIdnVw/QQEHEXM21Y0Ihn9d6L6iTawudQJz/rex1277uVyXKodZCsM4fT3dN2EnVpalMbV6UbaalNJXxXg4O+S3CAAxzgAAc4wCHJQZaXusFh5MLyVHk/ZXCwceA8MJfgAAc4wAEOcCC3klvJrcwl5hIc4AAHOMDhvxwUX/FXDh6H/X8R2VSpz60hz60uh884cB7ecEjXC3kx+T4=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_101_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmkEOgCAMBO+8pvz/c14QMaBipIvG4dCYql3D2NY0mm0rxjjQFiuYVmWsxF5IrVJdllzNG2OHf66K2wq3Hm/1VxROI7juWOEP6djhBSts8AyerUhFs2NwgQtc4AKXXi7OHTlx8Vc5Dvi87+cIIhUdF/KFOgYXuMAFLp/mQt//8/cY+UIdgwtc4AIX5jDMYZjDUMeoY3CBC1zezcXvT5WSi06lcWpwR9b0fZP0faXKJC7ky4WKp9ACigiPEA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_105_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmksKgDAMRPc9TXL/y7mR+EELhc5U4WWRRRVG80wyCyOOyMzpuaKFX0khk4uVHt/6rRqj5+uUpNG6j5OTzi3Vq2ttv0/x4V1zUwtUNir5qgcnOMEJTp/iJN7uJ04GpVqLyu1enDxKdk70E3MPTnCCE5zghN/D7+H36CfmHpzgBCc4wQm/h9/D7zH3mHtwghOc4PQ/TsK/tW6cvErz/ELPhfn8Xtj8nltpGSf6aUhJLbYBom0rVw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_109_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2kEKwyAUBNC9p/Hf/3LdlNZsLLQ6pvCyECKBAV+UWdj7+6mqDeMQ0PqZtD1RY9a5tMmHv83fI237M3VbNV/BlRyWsj3ftv2Ql7ElQl5jOC27kty4cePGjVvULdJLKpy2ssl9nA+nHXGz35yT3Lhx48aNmz6pT+qTzklu3Lhx48ZNn9Qn9UnnpHOSGzdu3P7RbfeNxqtbPm160XJpw8v2yR7tkyfSbuBmv32Rlgh8AGI2zac=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_113_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2kEKwyAQBdC9p9H7X66LSmIpFRp0JoTnQkLS+EtflYmk1rO11jb1Qys1L3Ff3GdoZuLXx/qpye3/nr9DYkgrF75wm7q/r6c7DldLP978Rx36EhV09AmJ8b8qR44cOXJ8gmNg1dEdYxN/D762zjlGS0jMcTQfrascOXLkyJEjx4WO6lXPHdcczUfrKkeOHDly5MjRPrl9cvvk1lXrKkeOHDlyfLpjzFvBo2NO4qzeW189xterNbxezUq8gaP5uCAxKvQFcZt2Hg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_117_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2ssKwyAQBdC9X6P//3NdNNgHpalEZ6QcF27yuOCJMkpqfbTW2tK+t1JzU1dHto1Sv4zJpxcdF4ae2ik1rJ273kUGhuHkbeEj3K+V477VH/BrXyLDep+UmjPCXLly5cqVK9d/cg2tTLtrfOove4S5O44n1+DUPFfz1TrMlStXrly5ct3cVT1snzPP1Xy1DnPlypUrV65cnfs793fub75ah7ly5cqVK9f9XIP+vH9zzUsd/cP7emWaUw/XlHo4M3UjV/N1Ympk8A3g3SSf]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_121_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2zEKhDAQBdA+p5nc/3I24sbCBFYyY/EsAou6H/I05BdG/I7e++ZxCGtRn7w/dsz9RvLkwsd5m/79O+es5NRj6jz1j8XZ1eOdPNvDdLfzV8qDfRtbduA1FibXzTZnzpw5c+bMeeGcvg/rhcmz3e2OXe91V2FyubP32brNmTNnzpw5c+asV+lVepVeZd22bnPmzJkzZ86cOetVepVeZd22bnPmzJkzZ86cc5wzv365O9cm//cdy9t2U9eroqxXVSd/zNn7vCk5O/wAzMHZGw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_125_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt20EOwiAQBdA9p4H7X84NVlxgqpGZWbwuGhMafu0T4l+099cxxgg4L0frNdJjot9voEr65uI58GGS8eVozfTwo/38FZ6jG98bc6Y8+WW0zc+BP/jl3DJCr3Nyeu6T586dO3fu3Llz5/5n99D/89ecyek3W8+JJjXd89JLuFvv9nnu3Llz586dO3fuepwep8dZ7/Z57ty5c+fOnTt3PU6P0+P0OPu8fZ47d+7cuXPnXtU9/g211T0/fXvB8SaV2+N6ao+rkF7S3Xo/np5xAw8AkZO8]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_129_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2zsOgzAQBNDep7Hvf7k0aPMRoQqeVfQoXJBIjOCF9RSZ83mstbatdYzZJ8HOy6+mCU7v0re796vz/RJEjnEZc918PvoU6rNxfG/nD+F9HakL19ogQf4pcMABBxxw0NBBaJf24iCYoLYriV1aOcgmaOPA+8Bc4IADDjjggAMO9AV9QV/QF8wFc4EDDjjggAMO9AV9QV/QF8wFc4EDDjjggAMO9AV9QV/QF8wFc4EDDjjggIP/dBD4l+mHgx4J7t8PXu3W831hxvtClwTtHHgfRBKkQjwAxqVT2Q==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_133_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt20EKwyAUBNC9p9H7X66b0pqNhUL+H8LLQqgUMuCLZhaZ83uttQrH7cZjZqWojbBnyEtx+OM989kp2q6ji7vnV8CKbEsy3r/KH5DLODpv/hlDUmSsCBdccMEFF1xw8UAXre+dKyRFxRv/z/mQFFEu7BfOEecIF1xwwQUXXOgj+og+oo/YL5wjXHDBBRdccMGFPqKP6CP2C+cIF1xwwQUXXHChj+gj+og+4hxxjnDBBRdccMHFfy66viS/ushJcfzwvaQJZPSRGdFHklIEu7BfNKboDPICFYAamA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_137_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3EEKgzAQBdB9TpPc/3LdiI1FAkpxPviyCKW28ouvGYeAvX/HGOPheRqt5yV5PsYxTGKS0w+cfX07sDjt1feTk5SOtgx87YePpbf12cqvznS0ba+L/jjT3KoD7HNQkpyrwwknnHDCyYuclN2f7GcLSrK463vy7nFzkpEkzon1RN1RdzjhhBNOOOGEE05uO9HvhPc7+uIfJ9YTdUfd4YQTTjjhhBNOOLEPaB/QPqD1RN1RdzjhhBNOOOGEE07sA9oHtA9oPVF3OOGEE0444YSTFzupfZrE7CQryZ2+4P9dRk6/02P6nbQksU6sJ1FJqsN8AGjl52Q=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_141_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3MsKwjAQBdB9vyb5/59zYYkPNGopzg2cLLIwIkNzzHAJtLXb6L2XzGNsLbOaqlL6AtVMnuH3n++L0x057qaymvIxdTP1dF3/4bF9+LWYnRpr2/69qj/U47wlFDHmsGqydoobbrjhhhtuuOHmNDcBCebOTUg1s2zx1wQz3ORUE+nGeaNP6VPccMMNN9xwww03UW7kqYXylBz+xo3zRp/Sp7jhhhtuuOGGG27ca8pTcrh7TX1Kn+KGG2644YYbbrhxrylPyeHuNZ03+hQ33HDDDTfccMPNCzfFb5x5cpNXzdHMcX6CycpTLSpPJVazgBvnTWA1CQVdAGy8ukQ=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_145_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3EEKgzAABMB7XpP8/3NeitWDie3BbGQ8CLVUFjNNWALW+j1aa5POhxCl5iaaF+eYJztR73l2b3P/+vXd1kkUcYwdXX47+FX75/HljNph2Mrn09Q/2ulcUoLs58BEeaPGEUccccQRRxxxxBFHr3EU09daYKIbffmRlr1fD0wU68h8ZF2zrnHEEUccccQRRxy93pG+tmhf0/sHjsxH1jXrGkccccQRRxxxxJF9Wn1N77dPaz6yrnHEEUccccQRRxxxZJ9WX9P77dOaj6xrHHHEEUccccQRRz85Snhr1dlRZqL+e8mebkd5fa3G9bXURMs4Mh/V5EQpoTaMnJM2]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_149_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3MEKAiEUBdC9X6P//3NtnMkgjITBKxwXEljTizk98y6q9T1aaxvnYZSaXdXekj4LS69q8rRvF+kLf76q/XyvU6qKGVNXSx/5Wm3L14y6g8Nq6Y8DvoDDXJKKuefQqjLvIFdcccUVV1xxxdXxriJ+t9/XDK1qdhradPLqrvKqinalX9kH7YNcccUVV1xxxRVXXHElZ5AzyBnkDPqVfZArrrjiiiuuuOKKK67kDHIGOYOcQb+yD3LFFVdcccUVV1xxxZWcQc4gZ5Az6Ff2QfsgV1xxxRVXXHHFFVeXq5x/xhtd5Va1fnZ76kSfmTPUyJwhuaqDXOlXx/SrrMJePO1yLw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_153_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEOgzAQBMDer/H9/3NpLCcpcBQh5LU0LtwQ0AGTO7G9v1dVbd/naj2/soSy6rDKLk4YBxZPvv4++vua51QWtdqNWx/3vhBTNx523NucZ7ZxlYQ/5vfe0gqae3BluW+TM84444wzzjjjjDPOOHvYWVh68OEssLLbX/pPpAfTWWZl8c70M3PT3OSMM84444wzzjjjjDO5hlxDriHX0M/MTXOTM84444wzzjjjjDPO5BpyDbmGXEM/Mzc544wzzjjjjDPOOOOMM7mGXEOuIdcwN81NzjjjjDPOOOOMM87Ocbb+BNrpLLuyyx9tTQ9yc40em2ukV3acM/3swH6WV9wLHYBXQg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_157_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3DEOwjAQBMDer/H9/3M0EZgiRlDgPWlSWMKiWMkTH9sw5+upqoB1CTRmj3QZ0dZsfdJtvvjf/Z7p4p6tu1P7FXyyy9GO61PMC/u2jsRQzzU8XfbJcscdd9xxxx133HH3o7vIXlHh6U42w4/74elauHPfmbPmLHfccccdd9xxx50+q8/qs/qs+86cNWe544477rjjjjvu9Fl9Vp/VZ9135ix33HHHHXfccccdd/qsPqvP6rPmrDnLHXfccccdd9xxp8/qs/qsPuu+M2fNWe6444477rjj7lt3dz9QM9zlp9v+EfLRxpjdZ2d0n+2QrqE79137+y4z4AN3NEGv]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_161_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2kEOgkAMBdD9nGbm/pdzIUFMgASdxF98LIgBmTTybClp769tjBGy32yt14kwJ7z3ICtFuPuFowv3ll1OXLrq/HjFCCO3A4enMp/nL/y8X6wWe5c3Z9vyOeyPvNm31MDWfYEI8+8yhxxyyCGHlRwGP30tDrMjPFr818+H62oFIqzhUD5Ul9VlDjnkkEMOOeSQQw45/MChfvn2/bL3NlMcyofqsrrMIYcccsghhxxyyCGH5hz0y97bmHOQD9VlDjnkkEMOOeSQQw45NOegX/bexpyDfKguq8sccsghhxxyyCGHHJpz0C+bczDnIB+qy+oyhxxyyCGHHHLI4X847Kd9RILDGhHO7B/nd6P5/XKP75erRFjOoXx4w3yYG+QDIeAy8A==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_165_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2kEKAjEMBdB9T9Pe/3IuHKoiFtEqP/pm0cXMUILzTEhJ75drjBG1zqv1WlGmhTgKR3n36nFr8S2ev//ObjWjjL3aKz/M0vH5+b7d4r/4fNaO99L+4LdrSw5urkWirPHFueSSSy655JJLLj/vMrqjmC7zo3y8RUqne+UyPMo6LuVLdVwd55JLLrnkkksuueSSyxCX+vG/6sedE211KV+q4+o4l1xyySWXXHLJJZdcmtvQjzsnMrchX6rj6jiXXHLJJZdccskll1ya29CPOycytyFfquNccskll1xyySWXXHJpbkM/bm7DOZG5DflSHeeSSy655JJLLrnk8jsu+7LzSHFZJ8rdven+TrdGP95L9OOVoizqUr786XyZHegJTXkqMw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_169_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2kEKAjEMBdB9T9Pe/3K6kHFcWBnpYL7zZlFRpAT7TEhJ789njFFs3QXXel6k9cLcx5kZ6eSLb89luv2K3fIjLf18dnp/PfYDrd1thJz+7vjb413JP/7L2qoHuK1BkeacPqeccsopp5xyyimnnHL6rdPKXfT2eVCk53Xoi3cLijTLqXyq7qv7nHLKKaeccsopp5xy+sdO9fuX7ffdS53iVD5V99V9TjnllFNOOeWUU045NYei3zeH4l7KHIp8qu5zyimnnHLKKaeccsqpORT9vjkU91LmUORTdZ9TTjnllFNOOeWUU045NYei33cvZQ5FPlX3OeWUU0455ZRTTjm9itM+7XwqOc2K9GA//KMuOqff7zH9flqk4U7l00vk0/rB3gCUoCeC]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_173_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2EsKAjEQBcB9TpPc/3JuwhhhDPjDflpZBCHO0ErRdF7v1zXGKLgvq/XMamuWeltwarWnX9g/fnY6Dx58anf6G9WWX237o+5YevJvf/WdERKW0zY/F24Iy94Sijz2sGqzJHDLLbfccsstt19wW3q+Pd4ZVu3mllHtpjPd5lQb6Va/1W/NCdxyyy233HLLLbfccsstt3IwOZgcTA6m35oTzAnccsstt9xyyy233HLLLbdyMDmYHEwOpt+aE8wJ3HLLLbfccsstt9xyyy23cjA5mBxMDqbfmhPMCdxyyy233HLLLbfccsstt3IwOZgcTA6m35oTzAnccsstt9xyyy233HKb5nZ/Fa3mNq/a99/9P5UsZeVgPSoHS6w22q1++6f9NqPgC4+0Ktc=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_4/mask_177_4.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2EEKAyEQBMC7r9H/fy4XMRsIQhKE6U158BKUIVsMY/f+XGOMsvtaredWXLnccZOKN9/i3UXzhw9P/XpnfsURa+v4y79qnjtwZ5SKdbLNWyo3ite9pRS69sCK81RwzDHHHHPMMcccc8zxccchr/+L46CKdy/ycq//5Tir4ljH+rF+bK7gmGOOOeaYY4455phjjjmWu8nd5G5yN7mbfmyuMFdwzDHHHHPMMcccc8wxxxzL3eRucje5m35srjBXcMwxxxxzzDHHHHPMMcccy93kbnI3uZt+rB+bKzjmmGOOOeaYY4455phjjuVucje5m9xN7qYfmys45phjjjnmmGOOOeaY43TH+6dvRceZFZ/JFk6lWHm5W4/L3VIrvolj/fiv+3FO0Q9cLDRK]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_21_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNqdjkEKACAIBO++Zuf/nyuiwsooXD3EsNhIPdSMt8kloIS0sv/ujSrlQP8bPzYruDWOu422iCWBA6cDG10cXt34btKhAJkOU9M=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_25_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNqdkWEKQCEIg//vNO7+lwvesxjKopoRmQ0/LCLF1MwRImoCvaYWoY4/bjy2T9UT2+RhDax3LAtsfXJHDotNO8+mzzlbnu0MpKJf+rGdeHyfytY9tGw0bEsDqP12vQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_29_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrVkl0KwCAMg989Tb/7X24wVwkuq449LRXBnzShbcQFBHnXQoDs0yuyDBeJt9xS1+GT5/SIi4YkvK3Ggy49cy8sFivuQvc3nvOznY1xrnrEfn+ncT49R+nZ6o5a+XnOOpfcA0RSn6s=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_33_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtU0kOACEIu/Ma+v/PTcaFOEIdNR4thAMhTRtAtQAdal+0AVz9TMCl40AXOxy/OhiOeKm6wULQ0IYpGOpIE3kJoJjhmNBxvZzxYj9Eb8w69MaCifBbXi8rHMyLst+3vaxwkHwA+LbOug==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_37_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlFEKACEIRP89jXP/ywWLLS7aMC19NoofJZOPKPcQGs098ySUWrrQZfVCE3+9pLmYjjJOFrAwpCOWaaBzRbW4MFCpXuJcl/EyftalN5S6Vl/Ow7jrpc3FGLkXJEYIjK8Gb8ID8A==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_41_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtVEEKwCAMu/c1zf8/N5iryFhNdHjStHippAmFuD9AgpibN0Dyvn4i6Q9OJPWHU9bJsMR7+AMrQ7Oo2wZBJ8r2clxQjHAO6Dzej/ctvAcJzbo6UzMEc7nUifnbu8veqc56I57zcXeZ8wKbCT7+]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_45_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtVUEOgCAMu+817f8/5wWEkFU6TiZaFiKGlDo7BjRQAQMxPYNiTnZTR8ZNMbbcy5u9bjzrdmBxs6R77O7fTWcEp+O2ETT+5T1H8wItVLmLuj+bk9TfPSdr7ch1mdutnZ6T9T6R698nr64d5/4e3CjpzrqO9glKHvR7A0Xf0bVzyl3ICSynHHMbcQEDGH/w]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_49_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtVkEKwCAMu/c1zf8/t8McKmpMK+xkFBHBxaTWzr0ADF5hzdxBx2EHaJ9ygDSFwwWO2ampDhUnHFxH3WSfF1Cbrb647AY55mW0cm8gI8OR0HG9+t+r5YohmB+vV+N7RVYyHAkd917dHNxxiHWw0aFUwd6rUP3oOPT88Ok/A8vBE464jlOv9vHIxFzEA1Alx1s=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_53_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtVkEOwCAIu/Ma+v/P7eIiyxALellmNcaQmEpDCaoNmEE7xNwV4em+wmz7XJgshusdZPJSLq8MElwo5WVf3fogswTmA/QW0LVhTmk1hhSqXMW8job/0NDrh2FMUPLyKK/Q4NI7ndf9BrEy16nD4+WvashONk8NdYUr6a/RbBN7eZWrNm9k+uFeDePa4OdDW4clrgsXDxSE]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_57_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtVkEKwCAMu/c1yf8/t4tOD91sqoMdWotIQWJCiQVaMBIYYdMZDOzOTcbSw2RgBTHdepQnIjzVkDGZ5jluds2oLuP0DCmNYg/du7V+pBw7mBs8S9vS9ofavnhf19b320V1CzPjt11b/y9bVKtvyxNK28+1Vee+gYk0z+fpduUJSPtQbtbk63y78tsTmEltIXfuEUwxLzgsZ+M=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_61_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtl1EOgCAMQ/93mu3+l/NDDBDB1ZbPFUIMib60LhPdmwKVd9lw7QGvr7sDnkt2gANnO8ze+wN8MzrFxn33B9iTYzDDvhnJtKBqra3WajcoqWzRd2VemVfmSubJvoXQU+/Md9/QdF9li76rzqu3VOaV+YpNnM8H339P53Pm9Dl1YnM91T/+ifJ+foqt+T6fOfq+1VojdAH1QsF+]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_65_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtV0EKACEIvPsa5/+f20tLLlTo6F5CCwmEGGasQdURiITOEHNWuPPyBkT2GgMCy49hV/LzoBEe2CAxIM2DveHlFuwSGGDUFlA9abKMPgcdFRgKeGgtWovW4l4t9t7tqAjSfnHmwWElMp1479HHSgmGfhf9R7UWrcXNWjCT3lcLrcKQ+KvPs57HLyox5Ocs1rv/1sLTk9zcbd9FGsMDjgMgxw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_69_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmMEKwCAMQ+9+TfP/P7eLTg/i2iUXIbXIoCChb6XViG6oWkxry3eguG9OQd13WlBcJS2HaC0vkc8LY5QWSPIyTxn5BrMaFnm/vYH4d9+99ZoAZSotoryYkRmZkRldzeizTw9Gp5khFZNpYWeGweg016ViriPXkRmZkRldyYi5T08tIcnL1ytDrh+FpDfyd3sk3hlyM4Nai4BRUJUk10L4A+36hk4=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_73_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtWFsOgCAM+99p1vtfzh9UjGhgHUZNCyGED9K0eyRzL0AEvsOquyN0nn5CaDc5IbB6OHU+dujkt6rc6sRiBqeYTvtntnoAdhkqqtQ20DFeTiv5AxqZnBJ1knfy7q3etfrd8JshqWZe6zRUMzfvWv1u+C2Vk/JOeSfv5N0T3v27ZgZ6y/R+p7xT3sm7L3hHzlUqnZipytG7lHnBgRNfM/1iJjZeM2dwytNplnfxeMqMcRILwJ3xxA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_77_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmFEOgCAMQ/93mvX+l/MHIyZDYFSjscMQwwc2vJTGuZdCtvwoq94dqTncDdkn1obkGNHWEuyD2qLTwMB6a7flImgD9dzq3XYuYAy7+OL8Y1j2QjVb8RooxdZGPjcxFdMvM43yNM7YzqqBevdeJ9HU3VuYRnkaZ2xnla5NPpVPxVRMxTTPlHv3JjPrV3kqn8qnYiqm72C62hk8M/U7tJHu3lZvMPcvc5c2bv+NkafPMM15Yb3fW/uUqm0D4RhjRQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_81_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmMEKwCAMQ+9+TfP/P7fDdHqwVTS9jNQiowcJfXSBmtXATViPMnwbLu7Ji7jLmUZcnB2NnvC4HvXRwn5t9ZEVNI2g97G/2FiBdQoG2ZQsIM3Md5c6l6BFhsaEPoq1WP+d9cyvPQ9f1l2NZz4TsT7zwsZ65teehy/rKRo115prsRZrsRZr+bX8WnOtf7hYi7VYv6xZe9yu0eh99Lbh535tdL/m7poR7MPP/TpTI5m10SY7VSMpHwjx2uQ=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_85_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmUEKgDAMBO95TfL/z3mwUotaarIrCJuWIjnUJU7TYNybRdW8m52ePcrrZdcoz1utURzrWl/5l+Oa84+7woyttR7XvrEd3y+Qw+bvTk4L6Nlqq7UzHFBjaSXFVQyIATEgBr5nIOm3INyxOwNPNWHaz9JKiqvygPKAGBADYkAMqB5QPaA8oDwgBsSAGPgPA8B+wSmuqG7ByAD8v/agFXvH+qRnlK8H2Fo5cf2OgSqvrLMFtA0VLlkG]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_89_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmeEKwyAMhP/7NMn7v9z+uDVlxtnlrm5wUaS0IEf6mQRj1s0RZoe18GxeXoc7O2KONTtgrGu2qbZVzbnfrr5/3xlqYM1O83Pc+flPHT3aXFthNoeewbC2ft4dbkzNRD+LDbEhNsTGf7DxdR78yEYld78qyKyyzGvO+RemZqKfFTcUN5RTxIbYEBtig8OG6o1Yb2R3X/md2MKXbbWo4obihtgQG2JDbPwCG8hO25kNY2sm5O5Zr61Wb9yhmde3Qteiu9ionEFsHzbGDZrmB0pq3Hg=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_93_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmUsKwzAMRPc+jeb+l+smqbvwr7UmDeHJxgQMZlBelMGKOEJZETXKx3MoaW2crrzZ0q6ksa49ZgKXtfczqC9326enh0W7rHmvp5/vWY5Rphp3ZpHhW32v5agNsoRbuznvMAMzMAMzz2Vmx8/MmdnxMyczPQ888sZLe27t5rxTZ6gz/JtgBmZgBmZg5r/MZPiZ3p3e6K5vaQ8P/KMHps5QZ/g3wQzMwAzM3IcZR3+1ag9r3kdd7X0/E1Yv5usNa9LX3vfAV2k3MhOWSnOZdsN8ASoiZl4=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_97_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmkEOhCAMRfecpr3/5WYhM2JmBjXtr8a8QoiRBfnpo3wjZj08M2yNNjybp45fK3hq/6nBE9spDZPZ3anDebCT7/+vIIlKDbl5WBdp79y7qjUfpEl6c9me7mPrdcRlUaGhIA+wBEuwBEuwBEu3ZCnilz4szbx3eK5Eg9a3LizNvuPCc9Ql6hJnHCzBEizBEiw9gKXr/VLQ8+G9k7w3dYm6xBkHS7AES7D0VJZE9wSGPChuCWxZkv6f3mjQ+VbbuXMS996VGvR5uIyltP1QsadF8QI8uPZx]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_101_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmtEKgCAMRd/9mu3/f64XK6MlPdxNojNDYgh287gN0aybq81Oa8O7ubQPZ3H1E2txcXupJfRPBr/S8vxv5575yPssaZaoxUvWZZxl58EzW5t8ie5pnrb3h771mOOpVqWlaF1gDMZgDMYWMKbKlZ2xuB4Tesu0VNQwR3Ue1+waL3GMOEauhDEYg7GPM7Y6V8ryPvWYtB4jjhHHyJUwBmMw9lHGOLv4RT1GHCOOkSthDMb+xFjWzZ4rY1apJTlXPt/tUZ5dVGupuQ+TWY8tZ0y49/Puj41xrETLBuiJi88=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_105_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmkEKxCAQBO++Zvr/n8slWcPiyK7YEwI1igQv0pmi7YMRZ8lR0avdvkOGdXCSPHOkSYbxi6ZM6Nr+rE8x/e//7n+fZC27JpX1qZ90MSL3aLrJtM4ms0d81nb6k+xVqamwT7AHe7D3TvZGeS/LgMv7qaa9OWLG3t5sdLE3yntZBlzeL9WE7+F73LmwB3uwB3vkPfIeeQ/fw/e4c2EP9mAP9sh75D3yHr6H73Hnwh7swd4b2XO/C+uaoqxP2eu9/XkvyvJezVs3Td7v7c97T2gqYi/szveIJvM8AGV8J8k=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_109_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmkEKgDAMBO95TfL/z3mwUotaeki2CJOWIrnUkHFZIe4toiq8h92ePcrOx21Rtl9ri6K1XltKfrlvufnxtvLYVVtd3/qFdnETimXzd0reFhItaac1LQtJqGsT9w0mYRImYRIm/8Jkct5C6LlOJr/+cdLz6trEfUMn0Ul0EiZhEiZhEibxk/hJ/CQ6iU7CJEzCJEzCJH4SP4mfRCfRSZiESZiEyX8yKZifvPWtenpyZFI2hzfUpvFcPpnpzfeTu2rT9m0/k1Xfm1pLBHEAQ9TKXA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_113_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtm8EKgzAQRO/5mt3//7le0jalSZA2M1voW0VED3HMY5jFGNErlRXPasN5pOw4HTGV+1xjCreLGjfaY6vlqsb1+z91/X1ES5k0pn0exxHvLKVra/tnFuwtLZ4zHFv3vbRVhcaCeYRVWIVVWP1TVhUZoLM6z6vrFPvVnRKN7iz36Hzm/dC6U/r0Dr6Kr+KrsAqrsAqrsAqrDlbJq6K8KtFY0lvhq/gqvgqrsAqrsAqrsHqKVfIq3wJO91b4Kr5KBoBVWIVVWIXVU/PoWGn9ympUaTRmufVaa1VerdToX4fs6q1+ilWR53j+Cxh91a7xBlovcgE=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_117_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtm8EOhCAMRO98Tef/f24vKnsQwU2m1c0rhJhw0ElfJm2QiC3kjujRvp5D5vXkrfLPM60yj3WtP28tax1nQjd3Yz2vmZGqVSV57W/d+VLmaNOvc8ymRG861rZ5pFKjSmtRXmEYhmEYhmEYhv+d4XFPZ9ppSq/95ww7+pyd4XFPZ9op04oP48P4MAzDMAzDMAzD8FsZph5218O2PueBPR0+jA/jwzAMwzAMwzAMw09mmHqYM467PR0+jA/jwzAMwzAMwzD8LoYz//fvWqMkr9e3OFz1cJTUw/l3GzS9x+E646jWWsBwpDpxudbE+QGnWCA3]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_121_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtm1EKxCAMRP9zmuT+l9uPurSyWysVJ9K+KFKQYkNeBwfRvUQowveww7OHZPxZOST9b84haP05+9XX35vqqLN3VOzeW/XK0lghZ02d98Xty1yom13mNqtbyDWsjFb0NOSRmXNinWEbtmEbtmEbtsfZnrQP62B73t5zY/vMS7Y85vBcZs6JdUa30W10G7ZhG7ZhG7ZhG7bfzfbs/fbZ2U3rTGd4Di+5kJdEt9FtdBu2YRu2YRu2YRu2n8I2Zzd4ySwviW6j2+g2bMM2bMM2bMP289gW37s51Fl566ZmO+U+RpWz3ld5407ZXC+5Qs55dV6LbcX/nKlh4vgAKJLUvg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_125_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtm0EKxCAMRfeeJrn/5WZjOw5TtLYkP4sXi5SK2I+Pj1E06+FZYd9ow7t5Sn05umc919o9qWxpn7QuO25oX83U/e93ev2Pnh4C7S6d93H0g0NXlLb8z8inebrXDXXr3uuSUGsXzzvMwzzMwzzMwzzMw3wq83Hr+c78LIcNbZNrV+Zx507KbJclqg2fx+fxeZiHeZiHeZiHeZiH+dfM117PB+Yy5LCFc1h8Hp/H52Ee5mEe5mEe5mEe5h8zz5kUOWxIDovP4/P4PMzDPMzDPMzDPMy/m/fsm4G/zFsF7aL1/OpuYOyZVBXt2vtxihy2OPOhXpd/H3b0ean2DwQIjqs=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_129_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmzEOwzAMA3e/Rvz/57okdVBYRgdDFIJTjKDwZLC6UBwccZUqK2aNx+9Q4XtxAtWulQYqfP7RIBPm7P6uD2L7/53a/z2BpWwayN4H8wR3b8r1DD1ksawh0zfx+x7Xd1q26qBBgz6ABViABVjoxMIqL2QZ4vh+qkHNnLhjoWZWvllY5YUsQxzfb6EBvoAv4AuwAAuwAAuwAAvkBfICeYG8gC/gC8xIsAALsAALsEBeIC+QF8gL+AK+wIwEC7AAC7AAC+QF8gJ5gbyAL+ALzEiwAAuwAAtvZcF1z3VqEPY+yG471+WFsOcF711fbe471+WFThqYWQibM7TSwLQ+wEpOdA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_133_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3EEKwzAMRNG9T2Pd/3JdNCUxbUMIVBLlycYEr4TQ93gWzpxbRHbMPcbhe0b6+pZFpM+PtYjkcb0WP92/3Bc5+2sWZdGtFvl9sScyXv0alWOc55o0R5Sends6tjM9SqNLLZr0BUYwghGMYAQj/81I0v6IBnfwJyPfPHvafpdaNOkLOkJH6Ii7FkYwghGMYIQf4Uf4EX6EjtAROoIRjGAEIxjBCD/Cj/AjdISO0BF3LYxgBCMYwQg/wo/wI/wIHaEjdAQjGMEIRjBytxaF79kPfVH1mn1lpPzd8lKL2jv4PPnnQ54f6VaLHn3Rl5Hs86LL2VkYDy1IFZ4=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_137_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3NEKgzAMheH7Pk3z/i+3G8cca8UxbcL4qshYEbqz/D2Jlva+tcho/dXa7nOP5dfhSCLjHGsSCccZTQ6EOu766pYzcdJP/L9Xff85ktSWrEmUiZP9SJ4xHNlHO/4tC88WqXPs7tq2+T/SWyVNCsUJdrCDHez8IzujemdeA93UM9Vkfc42i5PFOdvGzqjemddAN/WU0oTv8B2+I2fDDnawgx3sYAc717Oj3qlc7yTUxeWfFfAdvsN35GzYwQ52sIMd7GDnF3bUO96N1n03ynf4Dt+Rs2EHO9jBDnawgx1rQa0FtRaU7/AdviNnww52sIMd7GDnPU4yd/p4Z6dX06RAbj/b62N9vVNRkzr7WmQ/K6jPzvo5dsbOet8po8kD5t3hUA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_141_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3NEKwjAMheH7PU3z/i/nzXQi1g117Rl8WSmygtSYf6dpRltbrWZZ22x5+txqUv9mNjWvvfNNTbqO+6Z9/DVfDB32Tf8fPX6/fvi219lMtwjfVFTcbLO5x3UlXMvurEe2pQKexY9+WbWiIizNN2FxgylMYQpTmMIUpv7B1Mh8ap+pkfnUnaneHkV/7+KkkTTfhMUNnaJTdMraD1OYwhSmMIUpTOUxJZ+6Sj7Vq/n2a8EnjVxqj4JO0Sk6Ze2HKUxhClOYwhSm0piST6n5Xr/mS6foFJ2y9sMUpjCFKUxhClPeoZVPqfl6h5ZO0Sk6hSlMYQpTmMLUVZhKOP9m802LiptPpyaNz6daVD6VczZQ7ZybNL7mm+qbIKZahFLF+iag3QCdtrPu]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_145_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3NsOgjAQhOH7Pk37/i/nhSgSpXgIdIjfQghxQ1LH/TtuIdQ6RRsZdY7ycF7b0OPTiNrQ/aVGbeD2kUadbP3qkvq2Rlu/8O+fv3PVckQRkazR2DqaB1Vutd5SttL/tgP20mLm7OlYJl9pMZGoUWAdYQ1rWMMa1rCGNaxh7eSsHdmv3VnrrY2s53bKRGqU1fdfWeutQ67ndsrwNb7G1/ga1rCGNaxhDWtYw5p+7cT92sEaRa6N8DW+xtf4GtawhjWsYQ1rWPsH1vRrZ+zX3Mv+fW2Er/E1vuY/JNawhjWsYQ1rWPPssX7NvWzPHvM1vsbXsIY1rGENa1jD2h4abb7b5/A6qt1ubQRrUe8/WmiU06/Npyn9WrJGeXV0GtaGzUeJc3ZIXABTR4zQ]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_149_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3FsKwjAQBdD/riaz/835Y7WgfQgtcysnFRGKEIecXjtBx3iO6h7jPabF61Gtz19nVd2P77Wq5uN4rcbeR/v1VO2968i6GgdWwrnv+pxVzAiqVUWuq+Ws5vVfSce0O/+Ox1Qx1/bF8/TMoIoaqbUKXVcMMsgggwwyyOCdDLZ8b9812HWP8+qGrHVJtjooV51LrVXoupKDclAOykEGGWSQQQYZZJBBBjsNdt4Pru3Rb+3dX3pOT+bPezJyUA7KQTnIIIMMMsgggwwyyOA5Bu3R332PXk/mjJ6MHJSDctB3UQYZZJBBBhlkkEEG/W7CHr2ejN9NyEE5KAcZZJBBBhlkkEEGr15X84SyDI7kWoXdDy4rlbNHn16rzP/rS+rJ3NFg17V9y2BfDkbW6gH3nWsR]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_153_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3NEKgkAQBdB3v2bm/3+ul6yo0Kxg79bZRCJJtsHDZQet6jw6YdR1LDfvqwP2T2bWGduzmnXA61DNNo7ufvHtc756ndXBz/vjc97PLGrE1axjr7PrzFYTnfZadn/fqG3psAy47JdzXnXcSK5Z8HXGJptssskmm2yyySabX7E5pK+x2tzqBQ07Fl2zxF7QanOrTzvsmNyUm3JTbrLJJptssskmm2yyOb3Nedebg9boekF/1guSm3JTbspNNtlkk0022WSTTTantenegx+790Av6LEXJDflptyUm2yyySabbLLJJptseg7FvQd6QZ5DkZtyU27KTTbZZJNNNtlkk81PbO7+N+GwmlXsdbZOquPWmxW7Rq8X2hNj+hq388zqBc1Qs1CbFZecU9QsbDsBSPtPpw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_157_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt2DEOgzAQRNHep/He/3JpnJgoCXIqj6W3IIRcmdV+PkPvoyql+qx2ue8Vc/3YXcWcX3tXIcd677asL8/d3vX33cXVKb3Lmbu5wfbkpBKPdv8Mm89Wka4Y1zbcVpGV3rvwucMsZjGLWcxiFrOYjcoVC8xuXm+vvz6//gbtXE/vXfjc8SzP8izPYhazmMUsZjGLWXlWnpVn5Vme5Vme5VnMYhazmMUsZjErz8qz8qw8y7M8y7O+jTGLWcxiFrOYxaw8K8/Ks/Isz/Isz2IWs5jFLGYxi1l5Vp6VZ+VZnuVZnuVZzGIWs5jFLGb/7911a3lzNzeXyOx973bnih6dyeZtYp49pXfZc3cesynvu3RXBNYDhtM6rg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_161_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3EkKg0AQBdC9p+m6/+Wy0URwQA3ob3xtkBAJmKIf33JIa+OopNF+Y5i9bxWzXt3DSnqt17CCliM1bLu/7sKmU185Mg/b7gypk1uvfb7cw8gRWsOKn4fzPZzsVOoy7P/GgNdQkZkyWw9jDlbs6KGGHcxDlllmmeUnLYcc2+xYzjk+/Hany351u5O9c0sPNexgHspluSyX5TLLLLPMMssss8wyy+ct65ff0C8vry9vX3G+fUvH577kslyWy3KZZZZZZplllllmmeWzlvXLb+iX3Svy/7kvuSyX5bJcZplllllmmWWWWWbZsxX6ZfeKeLZCLstlucwyyyyzzDLLLLPMsmcr9MvuFfFshVyWy3LZMTbLLLPMMssss/zsPJx2Ltdy66WGwb3evIKZ/XJPNcz/n/bUc1/9Ws7JlHXLSbkcX8MP7N4qnw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_165_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt21EKglAQBdB/VzOz/831kxlhVhRyh85TJArkObzDbUSrrqPTRm1juftcHXbcmWXn7Xu17LDtzVoe1LgOr75/erbX6/JX339ztsdZxo7oWvaIdbnNcvXUydvy8moS9qWDs+d2XK6Z2dFjSi2HrEvGGWecccYZZ/wj4yE95Gp8vx9/3qWf/suYWqb346vx/Xtuz+/Enf6LHJfjclyOM84444wzzjjjjDOeblw//of9eEwtx9xzk+NyXI7LccYZZ5xxxhlnnHHGE4zrx/+tH/cMzBn33OS4HJfjcpxxxhlnnHHGGWecce+k6Mc9A+OdFDkux+W4HGecccYZZ5xxxhln3Dsp+nHPwHgnRY7LcTnuvzrjjDPOOOOMM55nvA47kpRa1oh1uU6wo/vxGtGPH6zLoH78fs65z8BMq+UA4xWd5ONqGbxfAFr8IXU=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_169_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt29FqhDAQBdD3fM3k/3+uL7ZuabWiS7mjJ4rIyi4ScvY6wVQtbSa2Wtt4Oa8ZefxxpzNy/7VPZ+B2vE9PX3rXrx0ep3VgBF3//Mi3vt9pdOvYp5njdL3Z8Wlspm9jvxeC9jHjM2o5jiVfZ3zr1KeNxin77LPPPvvss88++8+wvz3XF3RlzCb1/l/jNKTe/7K/PdcXdKVVn8p9uS/35T777LPPPvvss88++0+0r95/cr0fNS91k7k+uS/35b7cZ5999tlnn3322Wf/rvbV+0+u973bc3auT+7Lfbkv99lnn3322WefffbZt5ZHvW8tj3d7rOWR+3Jf7nvmZ5999tlnn3322Wdfva/e926PtTxyX+7Lfc/87LPPPvvss8/+PezXbl2YNE5rp9bOsl8XyvD/rferTb2/nqbX+x37tM847W0/8f+0U0aFtw88Eh63]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_173_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt21sKgzAQBdD/rCaz/831RzHQ+KIUZ+REKQVbsEN6vA6x92VE1tG30Yb3PVK+Ts82su7z2kbS7Uptjwvez0px91Ccfet43vYLc+nu0V++9X226UeB2kapeTue7fq/iwpbO/1dmfYW6a9lw2tbrsVRYlSrbbF5ywQmMIEJTGDCzIRZP+Gox/DYsd3a5rx32Ju3Ce8dFhNm/YSjHsNjx8rVVk6QE+QEOcG9AxOYwAQmMIEJTGACE5iQ14Ra/YSkfTA9Rj1GOUFOkBPkBPcOTGACE5jABCYwgQlMYEJ6E6xZsmZJj/HfPUY5QU6QE+QEJjCBCUxgAhOYwAQmMIEJnou0ZkmP0XORcoKcICfICUxgAhOYwAQmMIEJTGACEzwXac2SHqPnIuUEOUFOkBOYwAQmMIEJTGACE5jwVhPWE61hQq9Y2yL9hLGy+dcsVa1thT7Y9rEKPcZ3mJDzWrZnQs6cUKq2H5QLITg=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_5/mask_177_5.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3dGKwjAQBdD3fs3M///cvtitiJqKC851TywiFCUN8fQ6JFh1aT251dG2q9fVg5/v9LhnH/fGuAc/zo9xrS761VNvfuZ6HteJufVX7zrzmbc9jmgxY9xx8/jo8f5d7JTHtrzuacfWIfe83+ftct/umJY4xoHzmBWsYAUrWMEKVrCCFQn1irUV0+oVuxWPapvPap4fO5c4xoHzWK6QK+QKucJvEFawghWsYAUrWMEKVrDiP1sxtV7xaC3WszVaHzuntqm2+XJtU66QK+QKucJvEFawghWsYAUrWMEKVrDiO6ywFstaLLXNWbVNuUKukCvkClawghWsYAUrWMEKVrCCFfaZWotln6napn2mcoVcIVfIFaxgBStYwQpWsIIVrGAFK+wztRZLbdM+U7lCrpAr5ApWsIIVrGAFK1jBClawomP+B/IY44qbx3tnO6ZeUXE1oVpVu8bV3a77n1HbTB7jMCsqJllEj3HI8QPp9Co2]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_21_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNqdkFEOwCAIQ/85TXv/y2kcXejS/ViJMaTAE6DFLb0LQyG7nckbs0Ts+zcNVwzs2Zyn2CZyRPEpfhnOXTwCTc4gtzMoPnsQg+9BDKGr/+2OYQGyvFP9]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_25_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNqdUUEOwCAIu/c19v+f2zIpA+plK8QoWG3KWgEGdMYqKPXauas7ncMI53RK4zzls4KGX9qkhzOwbxaKEtwPvdq0IsyiARRhshB6aB990SYPcXaAtVNHytaZLPMt94eZSpvNNH2zmaZvU1viAvx9dwY=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_29_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrVUkEKwDAMuvua5P+f21hjkNT1stNMKDRFlNSIQgo4QwjW3L7es27DTamdK2zHnarD1YZPnukxXYEmldqNpTRV60QtNi2QJDo2ymRa4T955n/bbPTdZqM/7ZgN5Y44P57fsrE822z0nn2euWebZ/YFCO2gKg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_33_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtUzESwCAI23kN+f/n2iuQs0g6OTZyDjlNSTHuCTQUb74g+Nz3Ezf/qkEDbe0aXWXQWLsQnY444qX6hlpWFwBRFl+evTy75RAgYSgBpWL5/yAb+b0c88IMyTdGRr4xkjIv5GReqPuZl/DiKvuci8wL5yLzUnUBYI/Pbw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_37_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlEEOwCAIBO+8hv3/59pUIBhgvfToajxQ3DChompCI/8mmrTi+SxZb7Tu6oVmVa/ZavMqVfXVj/qV0VnAlqxbg5VvWTUMjH6KNQxUAjdibmIsoIVdxsuYf/uP8fyCkLOmkYMti7nR9xjxw8xxRjpzoo905kQfGWPoAdhoBNk=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_41_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlEEOACEIA++8Bv7/ud2slBgV6sXTWgkHNQ0Tkqq6LBHeRTu1+7kPP9+7ZS08LTmzZ+K68qymHIhKHWEHn7EjAMwso6RNU03pXXy5RiUGQ+YqDmh00Mt+2f/CjsyiWRdvNOsiYLazrvcsYv5j38m6xk6zLvbOcx57pzmPegCBC0A1]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_45_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtVUEOxCAIvPMa+P/nukkVKB102tMmu2hMrXaK4wCqw6wzDZP0rOfSfQS7P+9xx9jWNIwdcOVnGPvmafG6nHJrkJPpiL9Zc1LOEbvnuY1pMj9u6c5dwtPuJtMoQwtGmdgEZtBlkGCU4z/EyU4nLiQJzdRoAXNZYmUJOifr2El6F88YNYOg+V8nXx072/R94WRfGTInqOr0OmFyrK9SOTZiB9WdPnaIupNi5xUnSimFqsWhE31ymQdEIoFU]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_49_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtVlEOxSAI++9p4P6Xe0smEbfC6sf7E41ZWKSz2IHZMO/MpiE92/2KrXTH5W4mxfBmcIxXTAqxYKQvrzzPk0tWclWiFFwx9mJHcOHqQMTs05EmZk7rjC8rxr1x2eABoKJg8ODyQQ5X/+fqU4PJA99SR3D1/l81HnzGfHrAFdd4zr06GhS4ohWq5UqpgitXRaltNGjbGjTaM3Qa3K2DLtfBqUGtZ2BcyRmB0vms98qk/irZD8VGyPQ=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_53_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtltEOgCAIRd/5Gvn/n6stTajLFR5bonMNp8wTsNtaN11Zmybmu11b0QpPnTt84li6GDiWv/sdP4jlXjJOPTyARtpChhFVzpA4z1ODj1aGDD7L32WnTD48M9wqPce0ZKIjUCWadDhaethm+BuGqB9Sn0SVS3uJ4H5EavlmiPoh9Ym7g/ZDE3/n4a7lDzPMKhvPcKZ/hSFWG6tajrQNr+W8trG1nNc2pnNZvVHoh3l9CBjWkqOgD20eRgzpPAAqQhaS]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_57_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtV9EOwyAIfOdr4P9/rkumwtxRuS3LXkBjGqoiV3JeVYdZxdRNwrM+X92PYOXDf+44phUajrkHgEfBMZOcYJYbQpTdYDsPu/kr2MLsfeXEzNgmc6PS54xdPKdKBYVRRj0abWIzIBtVBoxGJ9rYNrZ/xpbhhEUg4vyAuTX1SmH3dxpa2Nb5NjCirBsK31u5t+u2OaGx/Tm2lOx7wZZTmhHbXN2eOIHVYGsmrcGcb3N9e+JbUt8Gvv0aW6Url/538LrVT4voAmRealc=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_61_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtl0sOwCAIRPdzGrj/5dqkErVFft2CjWlozMQnmQrRCI4GzcDyTs8nb1ZX3+ngo2pzcOjaBxVDetP+7NHOv6mlw2HuqJvMz2chq4UjVwZEJX7cy4NZP7FK22aM2uVSgEW4oo7BkEsbb+bNvJnHmKf8fMmDy44qzE//UDePoIqeh+Xbbr7rvL2lmTfzA3Pjhhxgnr2d78zN1sD1c/rl52T0RL6f/7mfc+l+Pv083xNpzEsnjmwnuNc5pfvQJS7G7sQ3]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_65_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtV1EOxSAI++9p5P6Xe0ueTkwQaz8XkJhlJIxRtGlr3ezG2jS45/YPMXuY4YnwHtdgFyuuIfrarrpNDcE/jwzh+6CTkh2wyDFisDiGngyjt6YujN5ejYN3zN7yE7ns6HNussFGAWoV6I01uRGFRWFRWHwaiz13ExHkvECwGTJ2PPLFi8Weu4kIlnw0d7vq6lzUHVVYFBYfx0JReisW88pUschUFscXudZj+ELTep4vNK3nONXrLJG7Nd0dYKEPpai7/bnIsSD8B09WJA0=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_69_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmEsOxCAIQPecBu5/uZlkVGjD8O2mCWhMU1NFnhQUcQllBVlAPOOvK94qo3zf56quCyWLros+paGorou5esMqN+uWxWW0F6T2xhkZNuNRtr2pU2APmt4usgKvPrtzRQvLJ6glQFuRjjawQFDLMMNoGA2jYfQCRtV4dAIZcGyyMgOnD8Lz/QuNh1EtZxAxHE6GZmVvXt/40fzrhtEwGkavZFQ+Tl8Y1U/2kpF3yxCLR50z7PmqdYblnMG7Z4jlDI17BpEzPMoIW57UugtiP8InNu8HXrqKEg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_73_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtWNEOwyAIfL+vgf//uS2ZTo3QFa5NtgU0pqGmXjiB9ESaacZkGKZneb2KrOaXnu7ENDFpYtiY1uMsnDt4B9MegS0y+0474pS53EVx+ty5To8+dA6UHehM5a7TNDEiEL/hy4qWP0obtANiUaHFX+lAFXfF3RdzZ/W7sA/H9TlQ23G+j9g1870No2tZnSzgw8ezzuKsvKu8K+6Kuxu4+++ayf8j3NLvKu+qZhZ3P8mdrWBkuGNUlZU7T+qJ10y5rGaKo4nFa+ZVuorSusrod5wmZnFH3ygwyuGad0LpmZM9AH6p9cM=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_77_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmNEOwyAIRd/5Gvj/n9uyaYvZxVbkYcsumqaxRqmncFNUm1nW9DRx9/p+tHqFqz2f5Dr2zZIN+zbuGfgbzfz0bTiRvho6IzATUNi2kGlEeToeMsWgJ6f5Wq1zsYomfc/05+a7nFxykTBcpcWalZhYd6zCO2lQrOTgyJRMf5wp0lOssRejEmXUldx7aIhEGXU59x5MkZ5ijb0YlalK3tJT9x6MU8YpmZIpmd5nWpp79/5l3Pif6SnjlHFKpmT6HUx3K4Mj0zMtVjDF1bds7o1qg7l/mf3aoNdTLdVTDeq9OT3dr/cCpjXBUFDv9XEaMU31Bz/lZ9M=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_81_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmVEOhDAIRP85Ddz/crvJ2lKzTNV29muHmsZgtKSvMAm6HxY75mk23Pvn0dpcfPHtX7/qGGNj1DEWq6Jovv11jKe9aW/e8yMyFIOsEX14Ki5Z+3TDJritsQrWsLbA1nEcL0uCOxkzzHbkZdDMogXIitIOgkHbSLEW6z9gXek10vBLv6HK/LSGd78hfXtaw7vfsp5XCoyUeeK3vsCeXqdfea28FmuxFmuxll5Lr5XXquFiLdZi3VlT2rgn1pxO88gadcPX9ZrVI029ZvVIU69RP3xdr0n98EGvf8baaZlN+/eRee3spHkBdVfgEQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_85_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmVEKAyEMRP/nNMn9L9dCtWqr7jYZPwoTF1lmQYM+Y9iYFfOsWTN07/b6FO2noz7l5DP11ZNt7uti9tv6wtevtYrpn7tFswsGgt5uGfhVf4+Lun/ObKiz53HtHrRzkTtZQ49yhp1q8Ooo01uUvXPqwooBMSAGxMBJBij5QKfD6TdsZWCVE4Z1JL2a64jc+5e64oDigBgQA2JADCgfUD6gOKA4IAbEgBj4KwY2f+ATDLCqBSMD29JGOB+wI/mAbWpG8XzgRL3AqfWClg/wakYzBqjEglWJG+OA0eqGnT0AGKhehw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_89_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmVEKxCAMRP9zmuT+l9vC6ppCom4zQj8mlbJsqER9xsGoNjOE6TBxv/XrqrzDni9PvcUxG+CJY05CCKPLRpnEnMxaNKe95/D/YAWhtmDj/9HYFhs5M7pyXT33NTX0Iz06CM6+yVjT+g68vaXtd4ObWA8YHbW0BTX4RJMNskE2yMbb2IDpDXdCikH1hvtKfgoyU5a55px75Jmu2BiNLFXaE73BvMG8wTOFbJANskE2jrJBveH1Rnb3ld+JbXgOa1HmDeYNnilkg2yQjXezgay03dkYRyKajUnVqqg3ZrW2mt7A1tq83tBjd186qcPWtCi2Dhuwgd+E4DqszxtTNirtA7EA4r4=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_93_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmmEKwzAIhf97Gr3/5TZYEl0xJlu0jPFsKaXSzpqv5hHH3EyyjNXInPPLdX50nv68nrP7sUvS5sfuxDG7Pt4/cF1jn+Qvzm6Q9cuoptuCmXn0PTGud4uZkKVgTPTpfZylYqP+Y2m42500i1lfqjlSqw1SYiQ98IroqQEgJYkHM2AGzICZf2AmV8/ofEySrmeMXqChWmdqNlK6Kx/t6KpP9cy4iyLd8q2eGWOCOoM6g7kJzIAZMANmwMxNzNTqmdmaXrTWt+WDBl5pYNQZ1BnMTWAGzIAZMPPzzKS3V9+Yye8MW2airva5nqnoUeqaXkWPUjVw1Nc+18AFfW2jgW9hhksqTcl/IbTOcOXH+gAm2W1S]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_97_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmmEOgzAIhf9zGrj/5bZkxerS0kZ4W7I9NMZIlhb5im+KajOrNO0mp3N9uSqOwxGelwv3YQxWuI1jiCYznurcNYlhclfnXh9h/qv3TENsydJ6nnHsGyzdzNExhnjuDbWJU1G7HE679Ltdt6IvR2l1xGAm5gGgopCWd4MlgiyRJbJElsgSWfoiSwi9dLikK+VIRSd8UjLPKHYxqPZ2lqL/cWkf6xLrEp9xZIkskSWyRJZ+gKWP6CXYu0pq733tzbrEusRnHFkiS2SJLP0rS/EX9gqWEF0CV5Z06ytzRi8p/F2lLnpO8tob3SdgsD6Brr0xPScjlmArYoOlbF1asZS2B62s/fA=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_101_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmmsKhDAMhP/nNMn9L7fLbl8uicoyI4hTi0iUNrFfk1Di3lqgm89my7N/X6Hu6SzvN9ie2xLgK7cl1+VXx8LuZITCluLPbuV9lpNfJqtPazuMndf6UL7HGGa1PrN0HoJ5WdcFvl3WbnMNsDt/c7fmc4LaLLohTGuswRDUhRFjYkyMiTEyY9RYORjL8zGg1MBa5yNY0PKxRW4jO89zdoxUfkx+TLFSjIkxMXZzxi6LlZSzizGC8rG/8jH5MfkxxUoxJsbE2I0Z09nFg/Mx+TH5McVKMSbGnsQYq7Jny9gMS0zGqmoYbKysa3uQZxe82p41H/NL8jEv68eQ+RivfixhjLv5ifVjqx+rGQP2FyQTk94=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_105_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmlEKg0AMRP9zmuT+l2uhrtlC0lq7IwhvFSlTZI19ncxH3LcViuW5bPrsr6/WXoudnvr6s64pBEddU/E03VMe1+ua3t7xuPM/vSNCulr2Ohp/1eMre/7xxR/Xc6fBSKgPGxtL/k7zaUmOwiGmq23+FPJlMQpSV2UbOSH/oWAP9mDvtuxVea/LgKd16zrmqp6769blmlU9d9ct+2+V1LoEd0K3fWNN3ksd38P36LmwB3uwB3vkPfIeeQ/fw/foubAHe7AHe+Q98h55D9/D9+i5sAd7sHdT9qRjYW/saSfdZva66b31eU89Q5V5Tz1DlXmvm99bn/fE83tT3rucPZc7n3x2NH3PrzKJB6i4MKc=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_109_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmkEOwjAMBO9+jf3/z4FEQhNI00O9FkjjVhUyh8Yw2W6ldW8VqvKjbPjsr6+yr8u7PduiczlbiI71bCerut0/me3rN8/tf1Iirwsmk6fbMpnVf9/POjdRcVhflW67Dacd+12jJNPVmpZFSVn0wSqms8ZMlPxxMAmTMAmTMPl7TEr95NC3KHNcncmzd5z0vommWPct0zde9tFJdBKdhEmYhEmYhEn8JH4SP4lOopMwCZMwCZMwiZ/ET+In0Ul0kmc3TMIkTP4tk5uEoYBJdXpyZnIbDU33k17qJ32T6c33k5X5ySjJTx5+Up/pXTFZsuNMncSeddLlOfOhHlHN05U=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_113_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtm9EOwiAMRd/7NfT/f06jG7Ck1Ynr9cHDyGJGNqgcb24dtLYVryxtFJs+t2dTxTns8d5SV+MYvfCIY4zHlQ45jCa7JYkx+fbPX/feY3g9IEdSXrCajXctej/D6sez9XbuHz3uLLnqsH3UpT/HudqYszrFOZxt0z2XFfM9QFWUtoHksomEVViFVVj9A1ZlHqCzGvvV3MV+1WJ5NFf61elp5hK/Ot1lPfOJ86E8U1ptQVfRVXQVVmEVVmEVVmH1WlbxqzV+tfz/1f60H+VW6Cq6iq7CKqzCKqzCKqxexSp+lXcBa7kVuoquoquwCquwCquwWs+qYqX1kdVheVSsZquQ6/xqvta6yq9q1lrPfrXJ3wW0dF9AVW6l2RcQsKoTHdG+gFlXc1aL6g22W3xI]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_117_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtm2EOwiAMRv/3NO39L6eJI0UFnIx2M75uWcyIjI63L22gqptZtKmbVL/10RR3bTz1fj/2bPtqwUfb1+74mkPXcVP/L6++NmajdN2fpW/vv9OUZh8YXvsWbCfDE7M3YMGfWviyzEPKIMI/1/oUn6VoZaqusmmkpZpYcTTTW9mAtNSJhWEYhmEYhmEY/gOG+zldUIvMxfEHswJZns3s6U08Nu7nYctb5PC4Z94COowOo8MwDMMwDMMwDMOXZ5h4ODoezlnjqHo7N6dDh9FhdBiGYRiGYRiGYfi6DBMPs8axLKdDh9FhdBiGYRiGYRiGf4vhtO3+TwznVTbUDI+rOKLi4cw98B4PZ+6B93h4XMcRtcaRWMdR5XSnMqypSpxai+Q6rGeI0w0IQytc]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_121_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtm9EKgzAMRd/zNc3//9wGWlu3JmOT3sI8UWQYXBt7vCSUlLKbK6w0s+532Vwzr8ORn7cF5zBmFxzjmIMZppMfhxa7gpjf1iVf/dhbR46feiVMah/YvhJX/q5ytlPmf2TgGNsqc64+rEan+Zy709qqzVew09V2PXW5mdeA1VHbzpvLFxq2YRu2YRu2YfsbtmX5dvef5kvy7cp2VEtmNeZln+Xzn5dvb2wr8+3DhW6j2+g2bMM2bMM2bMM2bN+E7XX5drR3k+3pXPZRS66oJdFtdBvdhm3Yhm3Yhm3Yhu0/Z5u9G2rJubUkuo1uo9uwDduwDduwDdt3YjvpQJnMtrLr5sx22mo0Nd8uy/ZuStJTNreWXNV34/K+m1ZLanvKRmzLv2hTdg6edbtI+yU7ewDjmOB9]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_125_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtm0EOhDAIRfecptz/cjOZsbYmSI0NsHnYGBNiK/b5U2xo7TDNsjZMpuv2d0WfzdG/npxmx65Jhx2796R2HO47u+3zJnZ3nixvH/3FXQZ16bZk/l18D71r5qOY+I3eOdSKQ/qTpn3uc5MxuzlKdznLob1aYqI98Iro5YBQSyYe5mEe5mEe5mEe5mE+gPmS9fzJvJfDhvokPD6vT9H0HHbyyvknxfvLEuVD59F5dB7mYR7mYR7mYR7mYX6b+fL1fOqe1NknOWxpDovOo/PoPMzDPMzDPMzDPMzD/Bbz7EmRw6bnsOg8Oo/OwzzMwzzMwzzMw/we89mVgVfmx7K4gnm/Oi56Pb+qDYzdk8qvDZxz2Faaw7ZFPWxsDptfD2swXyN2BfWws86vmA9tH933m2o=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_129_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtm9EKwzAIRd/9Gv3/n9tgSUxBt4e2WsZJSxmOgticeO+DqmNZ5VJfsv3Wz181zyCDd7zujmtghVdcgyDLLPvz8bgGh28137wnnu3ElpWykNFxVdx+sqBfP+D5uGcw96Z1XTITKj0O9lt8x1aeiNtTxjltbUtsFqCrCjJ2rLVtBFiABViAhYexEPmFzENcHpdMydytkVZcMj17t0ZacXG9FCn6TOlfGJeVUK1f8Dh9gb5AX0AjwQIswAIswAJ+Ab+AX8Av0BfoC2gkWIAFWIAFWMAv4BfwC/gF+gJ9AY0EC7AAC7AAC/gF/AJ+Ab9AX6AvoJFgARZgARb+mIWWMdcDCz2TvjsL2bRznV/omvF0v9A14+l+IZt3rvMLTfPOm194DAva1hnaZv+9L2j3ofgCZmpb+Q==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_133_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtnEEOgzAMBO9+jf3/z7VSSQltEg4Vu6gagxAyl9TNZLMHJ3OLUkfuEd17vj6pnsNRPNPie1iLEl/jWkxGe1l+Uouv/06T/5ydtjhhRFSNJSNX59/jiDZfy3lFG61+ueju2Ncx7cp5eMa2ppc1olohnNWIba6WdWLACIzACIzACIz8CyMWP9Llo+w78MbIzLPL8iH+1eN8KHzHaR4dQUfQEfZaMAIjMAIjMIIfwY/gR/Aj6Ag6go7ACIzACIzACIzgR/Aj+BF0BB1BR9hrwQiMwAiMwAh+BD+CH8GPoCPoCDoCIzACIzACIz8wsujgFjLi6mY/MrJs7Zf5kbyFH8nFmQ86P3KHfvay9rPvfsR35sOIEeuKEa6TQI46krZzUbp4APCfI38=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_137_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtnNEOgyAMRd/7NfD/P7dlE4Wl1c3NXrIcNGYZgUjlcFsxLWUpVVHKVqz7XZ5VmVf3Tu41+advkyo4fJuM9xvbqexXuaOPmgQ2GZ5iaxs/3ff/j3uLZqy0hOx8Pr5z1qqH7PxyNhz29riTNoer+rA2Gsly0p+2Pfv8FXa42rL+V3mx2gyitootE7jKJwrswA7swM6fsuPFO3EMdFGNRT5Vls+29maRr5Xqs63sePFOHANdVGPRKHPina43dAfdQXfw2WAHdmAHdmAHdmDna3aId2aOd3T7O12r+d4VoDvoDrqDzwY7sAM7sAM7sAM759kh3pk73mFv9OVdAbqD7qA7+GywAzuwAzuwAzuww7egfAvKt6DoDrqD7uCzwQ7swA7swA7sjOwoM32M7GwurZodP6uFIt6Jcn3kxzvaXB99vFOm2RstQZ6c/HcF2jw5Djv6RVacJ6fXnYid9PMGoQHwkA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_141_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtnGEOwiAMRv/3NO39L6eJY6DS6uKkXfLYshjIkBQeH4WlqluyrKQ9yfBbH0Xrn5PW3PNz7rltLOma22bSbi/ffGtqXOS/8mobpz9nvd3+8shbcf77KE5PH5haYzX7iqlTR0dQW29NG9dW4ZLWuLTpZryl93bWTDw8ZdMKK5HEmmEqWEc2EKzEwIEpmIIpmIIpmIKpY0zl+lO9NrF0f2qoTfZdAm/3wN9XOL9EfvEPT7eaRKNglT+114ZOoVPoFGs/mIIpmIIpmIIpmCrJFP7UVfwp78zXPwv+U0nBPQp0Cp1Cp1j7wRRMwRRMwRRMwVQ1pvCnruJPceYb7lGgU+gUOsXaD6ZgCqZgCqZgCqb4hhZ/ijNfvqFFp9ApdAqmYAqmYAqmYOriTKWHv3liKj8y0MhUFDVpvT9VIcZL96cqxHjp/lQUN2n9mW+BuEnDHkVJprSEUpWIRdZ1SitNxjcLusQn]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_145_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtnO0OgyAMRf/3aej7v9yWTEQXvmY2es0OGrOMoFg5XlpMU9qKR5ZUih1+p1dVxLHao+ffgXvVRh641W3U63yzqtqq3yR1TXSyUeMpt2rbrfJlPz/b+8iWKEPWrt/vtbNNsPbF0dI7294ny2PdVTbL9xv7OjrsVp5v3Bv7dLRNV1ymmGcDqVjJtnHuMgMJ1mAN1mAN1mAN1mAN1m7BmoK/tjexEpnoRS0W1ticp7nQeuZSsZHMWi8O2a77UQ26hq6ha8whYQ3WYA3WYA3WYO1/WMNfu6e/JrOWrRobQdfQNXSNOSSswRqswRqswRqs/QNr+Gt39NdYyx7HRtA1dA1dYw4Ja7AGa7AGa7AGa3x7jL/GWjbfHqNr6Bq6xhwS1mAN1mAN1mAtgrV+hqgI1hSyaJ1Zm0l/tNZfS3L+WhrkrFvvr6nl0XKZPFolNqKRs67GmswbaYK11bo2Ym15eQBEBZ3U]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_149_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtnNEKgzAMRd/zNc3//9zGZrWDNBM3zd04VUQIkzbL8ZIU09oyvHq0bdhw356mqms4q7ul9ox95cVH7KvJ9NOVxetOfT995sRXk386j4PI2md14FdBtMuMNwx+2x87rSmDx+Ljw5h7zKrHvysd1ldQ/roaT9uipPbN/nK1RYNcaph3Ryl5y5bgd6nAgkEYhEEYhEEYhEFNBiXyweGZ5jL54GC1tRoyq5JkFZSzbJav4Np8cH2mZXFQkg+ig+ggOogOwiAMwiAMwiAMwiAMwuBlDGrmg7M9+mzv/lQbNZl/qcmgg+ggOogOwiAMwiAMwiAMwiAMwuCpDLJH/+t79NRk9tdk0EF0EB1EB2EQBmEQBmEQBmEQBmGQ7ybYo6cmw3cT6CA6iA7CIAzCIAzCIAzCIAzWMajS2fCVwS1NUmIw6dZXmA9mvQ3r9uh1ehuONZkmWZNpSX/RupqMTn/RgEGtl7tQf9FRB1MGq84b/kx9NA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_153_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3FFuwyAQhOF3TgP3v1wrNTZUorhuqzKJPmxZUZA3ZO0/E0Z4a320ltBqb2V4XT+69h4nI3t/f/8+z1kL2OY5m3+NVUKXuf5ZzHnOlld+1nt8wL2zVr1fERDVLtn8+7ysY7bvs/nP92Af2cFES9vKMdCIn7NxL/3KJyjAcCwPvWpxrbQjYWlZKw9YWtyNhk1sYhOb2MQmNrGJTWzeYDNpvnnGLH3uuXJnNvSVrXlZxSwtygsaYpbTHV05pzv66CbdpJt0E5vYxCY2sYlNbGITm0/PZvR8M2btwXkWL+jlvCC6STfpJt3EJjaxiU1sYhOb2MTmU7Np7cFrrT3gBd30gugm3aSbdBOb2MQmNrGJTWxiE5ueQ7H2gBfkORS6STfppv+02MQmNrGJTWxiE5u/YTOqbOgnNrMqrY5sXlWn3TffTKuB2dcepNXA7F7QVX3afV5QWH3awQuKZ7PGKWdc7eiumzVVBN4Aa7ZjBQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_157_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3UEOgkAQRNF9n2bm/pfTRBDQARMXTiW+gRDTbqDDp/ws2taW1VNW21btPrfHV7OPw7O7l0P2Ye96yDbu3clV/Lx+0ru3e2Bu/ZWKuPWB2cndu2R2Vv15frVy0hO3Wq8i53G322t7PmckxeFYS7b1yFV9bVxi92phpEfeeJjFLGYxi1nMYva/mY3y2V29eqyRrcyevYOaXq+QLo3rNdNbP9blrJyVs3IWs5jFLGYxi1nM8lk+y2f5rJyVs3JWzmIWs5jFLGYxi1k+y2f5LJ+Vs3JWzvptjFnMYhazmMUsZvksn+WzfFbOylk5i1nMYhazmMUsZvksn+WzfFbOylk5K2cxi1nMYhazmP2K2YsJvQHMpk03PjJ7ORp6us+2aJ9tFzPJ5/ts8nzjHjnfePPZvJnkI2Yjn3iVNgn/mLMt7n8EdusGJYVOJw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_161_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3VFuwyAQRdF/VgP731yr1k6IzDRNFLmvysGWFQVlZEZz8xgMuPetjKTSr6VNn/t3VcJ1eYefNTnn2ocj6Fj78NCIZftqf/efqx6yVvjwEAerKNlt1tHz++9raxUpkaVk+XX+eM7auMPyOdF219rXHe7sjNSj7a2M+jucz3aNoRxFubm2TQdHbGljd2CqF9sGzogNRCxjGctYPpPluD72ZK2NyD729Kt2yU6P+WqdyZ5Z06pW/nUf+2KtraMhpI9Nl+kyXabLWMYylrGMZSxjGctYfppl+fI75MvH58v1E+fTa/7J2Bddpst0mS5jGctYxjKWsYxlLGP5UZbly++QL5sr8pKxL7pMl+kyXcYylrGMZSxjGctYxrK1FfJlc0WsraDLdJku62NjGctYxjKWsYxlLFtbIV82V8TaCrpMl+kyXcYylrGMZSxjGcthLCfudH/L8jVlSWV5uUt7VL683us+KV/O3Ot+zpd7/FyRvnxvRdLYV+Z7KxYs54pK6HsrZl0uWM45PwAdKz+3]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_165_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3eFqgzAYBdD/eZrk/V9ug6nJRiLdEHelx5YydAsaPL1+mZJat6WlLbUvZfi5fm3K+Zzs5ef6rPe8L1vYa96XPw/mpIunv38c//JPftnavC8X58Xr69uxl1e0ttITu5wYv7Jf/tZae8X4PWffSWt9L3dPLflV9p2O+7oc36WfNWnJM3yWLTNb9FLa3pHJvVk2gC36xGScccYZZ5xxxpfGU6/Vj9ZKv26f18PrSvnGLWV9nP9ej/fWSoutx4fWyjG6NR/zWo+G3blFjstxOS7HGWecccYZZ5xxxhnPMa4ef796PPL/48f6B425yXE5LsflOOOMM84444wzzjjjCcbV4+9Wj7sH5roxNzkux+W4HGecccYZZ5xxxhln3DMp6nH3wHgmRY7LcTkuxxlnnHHGGWecccYZ90yKetw9MJ5JkeNyXI67VmecccYZZ5xxxp9kPHY6im/Gc2f2GI2vZ0lJqseT51Do9XjyHAq9Hl/Pk5J0D0zwPCnDmNujjNfoJI+eC6nneH1C+HwAEZI3yw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_169_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3eFKwzAUBtD/92mS9385BVvbStPJmPNre7IxxGKYIWffbmhIa1Pria0trVY/t69LSa+77/Tz14HP3THtgY/9Md37p8aj3Y4vvai3wZiO5slgFo3+6i96+ykquj2wnzPaj+y/ZzYe9fb9Xms21tMfNY9D5sfp6lnLPMlLqM1rTfna41v1eUDTR7UmXz1+orLPPvvss88+++yzfxv747W+oCv1/vWQJ3urhNWnX/VWy4raeK0t4kr9y/g805vcl/tyX+6zzz777LPPPvvss39p++r9O9f7+ff2nHKtT+7Lfbkv99lnn3322WefffbZv6Z99f6963339rx4rU/uy325L/fZZ5999tlnn3322beXR71vL497e+zlkftyX+77zs8+++yzzz777LNvL496314e9/bYyyP35b7c952fffbZZ5999tm/hv2jE2Sy7CefyrO1f3zUUVK9305T77fDM7mS6v2znMvT48/lWdb6ss/k2rMf/4laySfHbXO/RZ/Ht2ofB5s1+A==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_173_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3WGKwjAQBtD/OU1y/8vtoq1NIFPcKjphXy2ykDVoaF+/Dimpddta1q0eW+n+rvembO/Tb/vbknOfj21L+pqP7fibTsd78v/jSMw/eK3PYGyHI2bvOT6S2p9br/UZnWXpt9CEz47fk62hCe8//l7s8/Zt9/OurfAq+y9Ly22/l+Noy3klG97Ldi1uS2yl7QO7wuiW7aRrSxy4TGACE5jABCYEJszqCWc1hq+1lSi3Z7p3ePRZotye7t7hYcKsnnBWY/haW4nGI089oetTTpAT5AQ5wb0DE5jABCYwgQlMYAITmJDHhKXqCbnnJ3StaoxqjF2NUU6QE+QEOcG9AxOYwAQmMIEJTGACE5iQwQRzlsxZUmP8QI1RTpAT5AQ5gQlMYAITmMAEJjCBCUxggucizVlSY/RcpJwgJ8gJcgITmMAEJjCBCUxgAhOYwATPRZqzpMbouUg5QU6QE+QEJjCBCUxgAhOYwAQm/BsTsq8MN5pw3DavYMJ89bKs9YRobbicc5byrw3X1xjrUjXGGqwXmbPGmH+9yIkJa1zMFlgvss8JkQkp9x9nBTnI]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_6/mask_177_6.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3dFuhCAQheF7ngbe/+XapCo0AXbbtHWm+6ExG4mjsvh7PIFMrUdpkUvtpQy/60dVzO3kit/3x13nbdwCL/M2ntzbav/1P21apG0O/HrMeRsv+s6+Z81qzxP/XMzVk5eiPGDFX7bjPmZ7ihW/0B+/HbNf8fkstixLOW8gNI7HtfQeFPmNN2zL8d5uaUppZwNnaeVyPKQtTUfGCqzACqzACqzACqx4dVbE9yt6zNJS+BVDzHI5hytHcec23lFXnvFiIvgV11Fl1+8i+RVXTLqCrqAr6ArfIFiBFViBFViBFViBFViBFS/Binx+xWos1m6M1m11vE3e5trbpCvoCrqCrvANghVYgRVYgRVYgRVYgRVY8a9ZYSyWsVi8zTu8TbqCrqAr6ArfIFiBFViBFViBFViBFViBFeaZGotlnilv0zxTuoKuoCvoCqzACqzACqzACqzACqzACqwwz9RYLN6meaZ0BV1BV9AVWIEVWIEVWIEVWIEVWIEVO1akSAP5iRU5Mm2OrNhlM43pV2TJUdjHYmXJUdi9zV0+05jeZpJ8poO3mZYVNY2ySJP7uOuKmu2l9wY3L0Qc]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_21_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNqdkFEKwDAMQv89jd7/chtdmpgtP10CUmyQh+Qe3RuDMpWmuW5jCvBbjrn23W75j0HDIi6WaivqaQoFfot4Mzz6YVjae0iG1kMxeA/JwCnihOECpPxT5Q==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_25_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNqdUUEOwCAIu/c19P+fW0ZAqeBhg4TE1NZazLIYHYUNkD47ktDAUbHKSdbAUUg4Uv+88dKIR8ki6BN6LBP5vSaH8f47sa0e0Cdv8bs5Nx4ZlCVQOCUc9zZvx72dO13e+k5Xbt1b5GY3uQfM1XbU]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_29_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrVUjkOwCAM2/2a+P+fq4rIUXBYmBokDxgHB2zmxbJmIUkycGcVjVPjqhXqqk1aare688zDwjxLLuqB2LcKwseXrdHqXkSOL+hfeZ4v32djeFbZMJ9CZiOO1v9dQsfPvcqznWjtOd65y/PAB5ten+Q=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_33_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtU0EOwEAEvM9r+P/nmjaoqOGyx5I4yOwwCxE3LW6GF6BaYkUwCLYimaOwdBxdF4WjtTNadHEY+vM+Ivp0ivDvoWUwvr8j1JtgkF/LMS2x3vOO6bRj4t3N9/JoYfcSGX4voUVomTQXpsXmIhvkAph+zwk=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_37_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtVDsOQCEI2zkNvf/lzCP+peDwRjFhsSlW0qq2gnNqyQABRz9RHszh4gNnLo/N4eKwhYvWvxpxcaQ+EiBDrQu/mrq07wtHSsrzdRmSA9jT+DRuRkPuR2weIgGAhYsYzTTmKWEao8zpGuPM6XuMNdY96s3IAm61BEM=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_41_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtVEEOwCAIu/c19P+fW2ZEWeYoF08Tkl6sxWJSMy9+dC9MIrnEN1NRUR0eNYVq1FxTl5pp7fHOYqPfIxPVhsiPA8LXK8ejpHcj5noF9Xg/3n/jvadBLeuad5V15puRWTckYi4lQcvHO5V3q1K19/HvlZxveAFHfT+D]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_45_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtVdEKwCAIfL+vsf//uTEo09K8vQ02A0Exk9NLkSEtOUYwg1uLdRidhse5iVJgr46M3diz29y+0qgYyBOJMck8CSaJBwcs9oN+M2uN16hDjMZoAFUK6Ly3xuweEf4hTKo50XmHsmNlS2TjmGt9CeqoudMxWWmc2v+cvJo72lUOk2IzeEyiz/44J9yn2dg/1nAnKyXkDr93DCaOOzUmws4Jjzixi42+AFTUgIw=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_49_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtVssOgDAIu/dr4P9/zmicQy1YLp7GEg6NPOyoaDbMixMMM8C98CxCDYHUlPMaLOdAkhrPkIBkNSRLuCJUfHCVJTkivHlw5izv4uahPRY8xgXJbaGVf/eY1Ikhi6s/uBKm90TAFFcimLJ/fwgoAq64AkHzLdZcLQ1KXKl7MHClbMEbV1cBXYPSHowaNLqePzRoPQ1aX4PWZCv9ZyjmKuMqnSvrtrUBKM/H5g==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_53_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtlksOwCAIRPdzGrz/5ZomtFLla7ppqiYsSCn4dAhE12rBFgs9qLXQzlFhmJ6rUCJkuXMxWnlDrnwYaGV5DK38DkN26WFIsJs3+B+JKxYW+U+FxXWBpRJRznNadGKFsM3wNwy1duP6wIqtaJkZVrXMDLV+6PngtzEj/36HW8sfZpgfHAaG+dnmZkhrWrZKdLWcn20eWs7PNr2XyXPV+uGLDIN3uHLNJkPXHt+2FWY=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_57_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtl0EOgDAIBO/7mvb/nzMmldJIKUtivNAmHIgUHHHF1p7VA1stzMDez9aMDIXaOclyoY9ZcwzXLqvOad3TvmC07PLY+n6XretHkOl7Y5wSaYPVgrtcWTwPmC4XqXy3xewXMrTYFtuf2TKaIIoIUVFbW/deBE6364A4OL0dbO3Pw8FbfVuaUGw/ZytvKs+WmDRXtvuBMaAJ/CDVMzOY0lu/XEdvc/OtYmvobZRty/Rt7omS/w7KXqyiaOs=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_61_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtl0sKwCAMRPdzmuT+lysttSo1/20UsgikY59hVKIx2DmXgVnM7Iyn6kw5wgvns7assucF7XP5Ly9ph4fKXITpYq5/9qnmwsSr4t7rLSJeskSMBkgtHWndO2JuQaK8mTfzZu5lHnS2Nw/Ztx15zKNFOnKUPDTfNvMo/HX3eXtLM2/mIvPM/XxhHr2db8w/4Zyfh+/nq5+T8rRw+Tnl/Zxqfk4F6sabyOxznbnR51RZ+gWhC8J1]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_65_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtl0EOgCAMBO/7Gvj/54xJkSoC7TZeTCHphbC2DLhpKW1Ux1QDXaBWVxwVXBLvOZBlQJc0S3VewiMHTgIlOvYs1tltWcjCSgJOBuOE6Dmvk4rgtqmIdkHoMhD6/hnRz5yUSBbJIln8msXc9gwrED9g/UJYRPxCWMy9e78Ci8Eus8t3kf+oZJEsfs6Ca5IeLLhe72JR4n6xLsPgF1yvd/MLrtfrXqvPgffuT1mY3kX0Sm1YGOIB0c8iJQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_69_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmE0OhTAIhPdzmvb+l3sxqRVjLT/zNibTJiwkUsiHAm3tXD25zcJlpPecXFpJm1n7QoQEa3J16lDsvbG+vEfvBYX2j+UzimgDjAJaFNg8N4bFbMrdJeqvGokzgaiQQPtxSFwZSpgRIzESIzH6AKNqPZo1HLP67zoDT4fweTsvMR/Ue4bBaNcGhXT6jvSvEyMxEqNPMprVgGNUnOzvjLyhPFyPuOGzszOs6RkiIbk9A3/PYBi99gw5Ro39jviMIe6CjPwBRsWH2g==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_73_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtWNEOwyAIfL+vgf//uWVLa3XFqhxNugVNeCARj145IiL7UseuFo5Aqg5rRWJDgUpObUzWXS2GzfXtOWMahup4DEzUuuJuCqcOuTt/k6uUP5E0aGO7y/UvNRbc8cpi/8Ho9BCC521xMEWGSu6SuwdzZ7WEZR9sfZ7XzOKBkppZPCgQrU624sPwrlmcWXdZd8ldcncDd3+vmc43QnU2uN9l3WXdJXe/yh07V6m4Y6YqDXcFEK+Z1Fyl1kzpjI1cmikxbwSJ63cSxF53Juaoux53y3UnUem9AGZH80E=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_77_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmEsOwyAMRPdzGvv+l2srkUATTOKPqlYdkLxgMbLzsEdBZFsa3MNCF1MNx7NaWG6eW0GpGMs+J28VNSvzkNtdOTXlIJULrix0Wf6CaTtyfc2nmhZuNO3E1R0i8hJDxHYBS0pFWV6viE6wQI5MyfTHmc5sZm49F6dYTlTf7G1Mq2ZvY2qlr85TrF1Sb2W318E+ZZ+SKZmSqYdp7ezN/Mt0J/s3P2Wfsk/JlEy/gmn+wezANP82uDOV2tkrC+tw/8vk3wbf/DT/Njj4qRilhv30A0yDfVp5fU2mofgAVm1lHw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_81_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmcEOxCAIRO/zNfD/P9ds0iLNit2VuXU04cBhhD51Emt2DW/MNDAE3ffjVLElOa+R1Day/PeqVTWLKnONHEkYe2C5qv+ZX7I+Uz/nfSg6eeJU72zvewRHJkVcG5TWNqj1fSIGQZKkWIv1C1jPrKuys8c8wm0Zd3iwZtzhkUeUPGujcuZVHpVl7pmrzrXOtViLtViLtfxafq1zrTtcrMVarDPruHx5rAkvzXfW1cNwy6+N69fG9+tV21t+zX0PT6yrb9Ngbcxzzd2RpH8fKR5+LN0L]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_85_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmUsKwDAIRPdzGr3/5UqhbSwkaT7jojAJuBioFXmYAc3u45s3HJSk7puxlpWZFrQGeL3W9t/H9Eat9c+H9VattNNlYFb3IQZm9ZDVEy6uv2+z+orgpQoRN8DUFoBe5xlRkCCmFQNiQAyIgVwGSC/XpWP+3R/QUaxMy+Is6Fh59z91JHRVc0BzQAyIATEgBuQH5Ac0BzQHxIAYEAM/Y4C5LwgMsLYFLwaeQrl+gLYviH7AOiuTLT9gfD9gOX7AEij42Bktz4E+A4tzwDJacAC8Mlr9]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_89_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmc0OhCAMhO/zNOX9X26zCUpdpESYZj0MJD2Iqfx8tBNrdrRC6K6hOS6FYnvPFNf3cyZvB/zWjJb29Hk35/tXy6JrWFYL2QgPNl7NhI0xM3Ugcg0SE31H/Q7pmjgLrjtncQBO3w6kzPdr0c6a7FpsiA2xITbexwZJb7gMiWkmfqY3Wr5Hk0wjKVXWRhDpig29UdnI0BuKG4obyiliQ2yIDbGRx4b0xkVvREsriyP5WlRxQ3FDOUVsiA2x8WI2uMWlHza4tbaTDcvTGzaRUst6g1tru+gNbq3N/fuyYDu2tegf2NiMG1lXZcLGhv0AMWre/g==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_93_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmlEKwzAMQ/91Gvf+lxuDNHVZ4oZWGmwoAf+4uMZ9cUTSiH1spJkGjuDbxrHD6LTw49wFpUF+1SyPUZbNUWefcx8/WFX3qjgI5SiZWciv9uJe1Re9ILLyOdHexFpKZwt+yGSxLwBJaSDL+21xrDxBeDNjZsyMmfkPZgR6JjGj0DONmZnUqyTgkg9VHo8ER2eGrWf6N3GfcZ/x3mRmzIyZMTNm5kvMiPXMTLRVZ30rPmvgUgO7z7jPeG8yM2bGzJiZX2CmqwMNM+Sb4TMz1eUtRc+E7kwvtBr4qjSPNLDuXjsxM9W6HGZC1Wd0xAv+hUj2BbEGaSI=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_97_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmuEOgzAIhP/f08D7v9yyRFvM2uJWLku2q0n/YIXiJ54Gs3N44REGugP3wnnkgeUClCT5eA/jeA7DIs7pqtc9DE9eJnDqYrYHyshZyqyeJOoGS5/do+DByQeOOEufhcsMzmXDjPMBoaUJ1PifMzoVJBdiSSyJJbEklsTSF1li6KW2Ck0pr1T0jg0lca6syPTntqZF/5xYfWps2FSXVJf0jhNLYkksiSWx9AMs8fUS419lWyXt/Y72Vl1SXdI7TiyJJbEklv6SJVafQGCJ0SVwYaltgKeXKH0C8V+lJe0UJdrbuNrb+NrbyDSlPScFdSlhab8uGTtND74V+T4=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_101_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmlEOwyAMQ/99GnL/y22TymAd6drKZqpqkPKBVALpI7EQpdQW5N41NCcRdPvthe5mvBdhyNCHb7CWJAixYzzZy+rj3dPV8UjdoMxoOBSEbNXb+/7BGOtvPb3EhI7Fp+BIdha6qTuLeoCkIYN8Hy+LRo7QjRkzY2bMjIkZU9fKhbGxHuONgrzq8Qw4qUuOKRs0qTkWoJRR5zHnMddKM2bGzNjFGZtTK8V3F9Zj5/WY85jzmGulGTNjZuy6jPnu4r56zHnMecy10oyZsRsxpnuosmJM97bnzViZUyvzkBHvLnRvez70mO5tT6fHShoysh77M2PEPDbjWG4wRrQPDSmPEA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_105_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmkEKxDAIRfeeRu9/uWGgTdKZGJhOvlB4KbhwUaO86F/ofp4QfMOxHihiv51GkoSa5yQun41hv2+T3fJX/0dO2lDmVceWt4lN/iV7h+tvf/RIUfTZEVXxbK/WtL8frJ0PTF4+K8nnba2TIw4Fe7AHe49lbyZZMhlz229NlSlnbmNPOXOb31qKs7QzBXfHb5mE2ivC6Hv0PWYu7MEe7MEeeg+9h96j79H3mLmwB3uwB3voPfQeeo++R99j5sIe7MHec9lrQ1HPnnDT7cpetoAm0Xteo/e8Tu+tyrdV79Xs7w3sZTUWsOcVfa/mRYl3Rwf7At9uK28=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_109_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmkEKhTAMRPc5TXL/y30EtRXaKpgMX3gtZBGQmPo6ziLux4qi3S1rxSKK4qiaopyVH2SMe5u/1bv8pLfx46/zs97K15LJrHw8YjIr31UL4bb9rcru2iVafYku2nEBJUdpsr62aA1RQTmYhEmYhEmY/Ecmi53Jnrc83/ggb806zyx1Yt4yfeNt3oRfDZ1EJ9FJmIRJmIRJmMRP4ifxk+gkOgmTMAmTMAmT+En8JH4SnUQn+XfDJEzC5IeZVMxPdkxWT09emDwb0/jJ8vnJ3k/6YhS1xE+6zk+61k+6kMqbmd50nVwzmayTrjzKH0e8zas=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_113_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmlEOgyAQRP/3NHD/y7VNtFBlUZGdNunDZD/UuLA+J4OQ0tpy4FE1KwlzDo37jKEp22MUldXqEjf61S3R1fO7MW5u7Za6cf/JlJbUzQZKdGf0B6xe7sqJd//MmMWHLfmDP/8qmiZNFW39QGVlNen4XtEKY6KUsAqrsAqrf8Cq0gMsrLb9qu9i71wxv9cz/Wr1NPMd2FS/Wp5mxaK3jbtv6QevoKvoKroKq7AKq7AKq7A6m1X86nS/Kvy/+r25FbqKrqKrsAqrsAqrsAqrk1jFr7IWMDy3QlfRVXQVVmEVVmEVVoNZ1WwK3rCq2Wv9ZjXp/apf1iC/qtlr/eFXNXutq7WA5JY1cG71Q6wG6apaAjqsBsUHCWJ2Hg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_117_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtm1kOwyAMRP/nNHD/y1WVspAWyOpJqj4i+QclNuZlZAuR0jhy8FMMzU5zjrVVr+Fu62s1plhlCK34atEPE7veqq51l9vupvS/9rFW21hn+OosbGD4+O513crA7vejIYJoiVha+VwVVuMPbE2x7Ot8W82sGt3CMAzDMAzDMAz/AcPtliNoRifr+GNdgbKxHp6+pmnp7T7s+hmdjvtIFtBhdBgdhmEYhmEYhmEYfjzD1MOGeth5xnFrT4cOo8PoMAzDMAzDMAzD8MMZph7mjOOqng4dRofRYRiGYRiGYRj+KYanMsfLsOlmw5Lh/iWDwHo4+evhdE89vJ7igDMO/z2OguHW7gUznNw67P9jjXeRCvsCkFYkog==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_121_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtm1sKxCAMRf+zmmT/mxsG+rCMxmk7XmF6LPgjNsaeXnIR3dcWgqdotgeOEPS1yOrQJt3sqOfcXmFt/cvAlVmfOddf0ti69AM1Q7dyljbrrvB0XvlexVds+8XQGQNF5Jj02LJ+yb986E0bruht/cHl221T8n33ttMoDg3bsA3bsA3bsH2ObVG9XYxap1b8cb1dvNN2y9GyIplNuTFm2fpH1NvbLAtxvb3NQrfRbXQbtmEbtmEbtmEbth/C9sR6u2VGsjOdu2N4SbmXRLfRbXQbtmEbtmEbtmEbtv+fbc5u8JLDvSS6jW6j27AN27AN27AN249hW33vpmBbeevmwPaWsL7elt67Kc9uPLnmNNxL+hwv6fO8pE+iu3OnbKhu52wP1G2ftd0vR+vZGw==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_125_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtm0EOwyAMBO/7Gvz/z7WVQqFtAimp7R4GJF+QcOyMVqwQpdRhQbMbasnNwuJn9rD0+7UntF79bzj80mED7cvVg9p3N1pKUFdtkl4lc2i5geP6zvTsFPN+TNyzW+LU9i2BUtNFxafsoqoApLReaXU/ohq9CelhHuZhHuZhHuZhHuYdmM86z2/Mjzys55rc6xvtqR/4sXWPp2bnR1bfaQ2dR+fReZiHeZiHeZiHeZiH+cvM557nk+6k8LD5HhadR+fReZiHeZiHeZiHeZiH+SvMcyeFh432sOg8Oo/OwzzMwzzMwzzMw/wl5uMfqL0xH/828Ml8yT3Pz1rveicV/zbwxcPGvw3sPGyZtN7dw/418646nyk3U+Zd4w3Lx5O8]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_129_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtmzEOwyAQBPt9zd3/PxdFsjFOgArfRtFgieIar8HD7RZEnCMLn27oEpBZNw8VlEoYr4FpG9TL+VY5U7+r/rEGHgkK99BSZT5cX7JwlB6r56UgzY8ONZXH0X2W57XdrPOAsG2DrN//nnX9sSYJsAALsAALP8bCyKrO7Ov2upp7d3ikxoLDI7W62pKMlmnm9HfWNbPUNWadvkBfoC/gkWABFmABFmCBvEBeIC+QF+gL9AU8EizAAizAAiyQF8gL5AXyAn2BvoBHggVYgAVYgAXyAnmBvEBeoC/QF/BIsAALsAAL/81CMys+Fgw3fe8szC7aluaF8OaF8OeF1TaU5AXvfeeOhdleFbIQzr7gPRFMd/+7+QV3FlP7]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_133_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3EEKwyAQRuH9nEbvf7lSSBsDMQkUHSmfARcDpYPm5c9bmFI+o06+mhF7E7VOns+6yGwj0jaknq9Fv9sx9c5anP98WL23FmnjkpHR9fqIkdH1pou6wBVbt9OfFYc58v66mePzAEndkkhfh/ccOzKJbWAEIxjBCEYw8j+MJL15bvUY7x0P6rGrWk/hJtRjhnfc1mOBu0KOyBE54l0LIxjBCEYwwkf4CB/hI3JEjsgRjGAEIxjBCEb4CB/hI3JEjsgR71oYwQhGMIIRPsJH+AgfkSNyRI5gBCMYwQhGfmIk8zx7w0jWafYDI9+FyPWRtPPsrY+Ui08MTPWRku8jZQ0fKQtQcvPNh2k5cs3IpBwpK2zJC7NNGp0=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_137_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtnN0KwyAMRu/zNPr+L7cN+mOnEYurXxjHghcruBh7/BIVU9pLFjxFsdOQnCV1bYnElLZPxMNj5VDVTnP70XX13d8rnwya0h3Kup1RUyxFKda1917/ZrzVYeeXX8NIa29LcpDHNrtE01pRm/bvi9r2CUY+PBbCH5/azm9bbArswA7swM6fstMKqf0w+6E31om1VsZsGzsRYraNnZbr/BzomTfm9WZNvlO0hu6gO+gOMRvswA7swA7swA7sTLNDvhM831Ht75ytBVsrQHfQHXSHmA12YAd2YAd2YAd2Jtkh3wmb77A32lgrQHfQHXSHmA12YAd2YAd2YAd2OAvKWVDOgqI76A66Q8wGO7ADO7ADO7BzYUd7mcQXO9q7Pg52Upx8xxue5fmO9q6PS76jveuj2BtNzvBI1gqCsyPQnShTm8vO8voFccznZA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_141_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtnEEOhCAMRfc9Ddz/cpNJFOuMVFlAv8nDhMUwIbX4+HwxlLKXmnS5YkcwtebUl9GkhXOdG4GhMh9aL+7nv2+NYRaC7PjcXP9xrOMaDnrc209u0otNus/x3m6ZmvF0hOFYIkv/l22RZU1959ryQ3C17ROQxFCZTF6+tR2MCIQDUzAFUzAFUzAFU6NMCfgpx5SCn9qY6lnfviWe1GLR/Sz1U42pbD/VekOn0Cl0irUfTMEUTMEUTMEUTEkyhZ96jZ+KUlgXtmi+o0Cn0Cl0irUfTMEUTMEUTMEUTEkxhZ96kZ9iz7fzjgKdQqfQKdZ+MAVTMAVTMAVTMMU3tPgp9nz5hhadQqfQKZiCKZiCKZiCqfcz1ZarGkwlnwx0Zqqsd02xnyo6fqpo+am7oVq656tzbpJjqvcUJDFVVHRKZ8YROIvM1R9PWbpF]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_145_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrtnNEKwyAMRd/zNfr/P1c2WrWgpi2bXumx4IMyiXGn18RiCEeJE5+iWDYoxol1zSIVk0xi0WLdR3X7947OvK63t0dr+Kg6SHdBW79qmtRtr/hIovis3Z7vM+/FG6z97t/iT/BrURR7bLd86rvoVJuGGUVtxwtKZtlMyj+f2jIdIibBGqzBGqzBGqzBGqzB2hKsKcRrqd1SZqKXtRjZY3+d75PRzInTB+VGitEsp5N6qaaBPegauoausYeENViDNViDNViDtTexRry2XLymcJad2lVzI+gauoausYeENViDNViDNViDtRewRry2ZLzGWfaV3Ai6hq6ha+whYQ3WYA3WYA3WYI1vj4nXOMvm22N0DV1D19hDwhqswRqswRqsDWdN5R6tgjWFW7ROrCUH6cRrEvdolfFacK4/mxKvSdyjlc+yg15uJIjR5t5ZN0HXHNbG61pQW7YNZsiTMA==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_149_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3NFuwyAMheF7Pw28/8t1k9qGrYW0nTK71UckboiIY+fnyEahtUvrydfQYjOq9/T+1qp0s+77qlAIYwznzKXTN1sGoj85OvHV/VsnDn/pwes5J74q05YMHuCPR+bcYbC9aNZfv7kvq3rBK842FlhChz7qmDL0cVnASoUwyvnpu4+NmkJmYRCDGMQgBjGIwaoMFsgHhzljN0frCflPbKn0LMVepd8HjcXqvZPywTOD1fJBOkgH6SAdxCAGMYhBDGIQgxjE4P8wWDQfnCXZq737I8fUZD6iJkMH6SAdpIMYxCAGMYhBDGIQgxg8mkF79G+/R68m80xNhg7SQTpIBzGIQQxiEIMYxCAGMei/CXv0ajL+m6CDdJAOYhCDGMQgBjGIQQwmMVjnYLxfDNY52/DKYKuZD65CmLZHX+dswx81mTpnGw41mbYIYWpN5s0YTNTBisvoDoNJ/Qk8fHIu]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_153_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3FEOgjAQhOH3PQ29/+WMiUI1iArRjuaDpC+NzbLl79hJ2Wm6Xi3g7q5aAmttfLsaWURo6zkLm87qw1x7kkvHxhO2t3ufj3mXs8cz33aGtn/Mu5xFXXVgUtrHcv0im999B9sSWQu96xJlwjJ721ZWOF1b1wUubjorMl/nthbKwkLDJjaxiU1sYhOb2MQmNt9gM2m/OY9ZswOz5c6M6Kuhedn6VX3UnzgyZi122pbVNqCPbtJNukk3sYlNbGITm9jEJjax+fNs5u43484e8IL+1Quim3STbtJNbGITm9jEJjaxiU1s/jKbzh78zdkDXtAOL4hu0k26STexiU1sYhOb2MQmNrHpOxRnD3hBvkOhm3STbvpPi01sYhOb2MQmNrF5gM15F5XHZlCl1Vs2nxU0HbrfzKuB2RJrYHZe0CvTOcQLyqxP27H58H0Zz+aUqJuZK1pY7eiuPQE6aVdF]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_157_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3E0KgzAUReH5W02y/82Vgq0R/KMDc6FfhAweFJ6Jx9vjIK19Rg+5hlFrc72HzHvdJbZXcRvb99fu+C6erR+s3f7PH68frV3cOGV2Vr3fYnZWfeiuB1+13EXMu24zV15Lw1yfF2Dk1lbsur3nWhEObA+zmMUsZjGLWcz+O7NhZrHUa5633qjX+mng6JPBxHrN9NbLegU/dXJWzspZOYtZzGIWs5jFLGb5LJ/ls3xWzspZOStnMYtZzGIWs5jFLJ/ls3yWz8pZOStn/TfGLGYxi1nMYhazfJbP8lk+K2flrJzFLGYxi1nMYhazfJbP8lk+K2flrJyVs5jFLGYxi1nM/shs4vnGA7NppxtvmP0uXKbPxp1vPPpsOzm6OsJnW67PtmyfbcHUXpxJPj1nz5mdnLMteWtfHFRBtQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_161_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3NGOwiAQheH7eZry/i/nmqhFKcaum+4xfjThwhqcDv05Mwgsy7W0oKsrtRrYWlQ9Whhl4rYPQ7u5+i4fnTxz/vS5n3bZ3s8HHz5+ad+Ptaevyt7WJj6MLBOW/9Qf77Q2ZfmYt+2V1n4sbOFXXewNG667ujLN6uq6DpCx3VzR/jvXtTIVaiKWsYxlLB/LcliM3bVW0yjtf2PstbVa05YxkZmnOAfeqe2nj4mxLywnx9h0mS7TZbqMZSxjGctYxjKWsYzl37EsX/6KfHl09fwf56PvfM7cF12my3SZLmMZy1jGMpaxjGUsY3kXy/LlL8mXrRV5c+6LLtNlukyXsYxlLGMZy1jGMpaxbG+FfNlaEXsr6DJdpstibCxjGctYxjKWsYxleyvky9aK2FtBl+kyXabLWMYylrGMZSxjOY/lzEPQH1jOPOv+xvKSny9vd3NQvpx51v1dvpx51n23VmTZ7Oawua+PZDlKl9OH7CnLMfUJakky6w==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_165_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3VGOgjAUBdD/t5qy/81NJkEsTsvMqCGXeDDphyZYWg7XhxBauy1L2Ktb6t7JZclqh72M6+Z4LIOnvPou77dnfetgO//+/itrexjL0X4xn47/feEra3sYy9ilnpm+U0f5V+Nn7n2H3axA2z9ftfY47ZC+byu3a11btwNo9JRX/Dh+t3W3GdxNxhlnnHHGGWd8ajz1t/q2ttoq33E9PK+Uz/yk5tuTUo93xpPr8dX4+BTM/MTM6Z/IcTkux+U444wzzjjjjDPOOONJxtXjH1WPR/8/frVzbnJcjstxOc4444wzzjjjjDPOeIBx9fjH1eOugXnnOTc5LsfluBxnnHHGGWecccYZZ9w9Kepx18C4J0WOy3E5LscZZ5xxxhlnnHHGGXdPinrcNTDuSZHjclyO+63OOOOMM84444xfxvhWdmQbD32yx974/KEZYfV4y6/H2zXq8eMpD7kGJv85KZ3x2d4UZryl53j+ETP4WUhd+wVTXiov]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_169_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3V2OgjAYBdD3bzXt/jc3mYkCJiDD/OgtHEx4kNiU4vHapk1bux898LU4aq5o74HntZqmV7WiH35fb9PtO1q739uFQ586XtpGmx4q/OkX5s9K22rT6GPf/ptbu3/T/mu+jfs3/lXTPsirbncU+Vv6cK7s6i3Odf+BjX/8NUR7fp5rVhleVfbZZ5999tlnn332L2N/e7gn6Eq9bjzkl6VVD+/vT+/X1MTbY20ZV+ot7fOT0uS+3Jf7cp999tlnn3322Wef/VPb19+/eH8/dG7PorTBxvrkvtyX+3KfffbZZ5999tlnn/0T29ffv2x/39yefxjrk/tyX+7LffbZZ5999tlnn332reXR37eWx9wea3nkvtyX+/7zs88+++yzzz777FvLo79vLY+5PdbyyH25L/f952efffbZZ5999k9hP31fnoX95F15HuxPDZrf34/el2fZ329Pt2UK6+9H78szz+1p44z1tUH07+zJFZX7z+0H5X4b5fF/ABLVJ3o=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_173_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3d1qwzAMBtB7PU3y/i+3DVJi1kis+6u0nRRyE2pcxz39LBy6bbdjb/pajjg7u+9tz/e9bdvd67EdMBVinRb3g1/fmnQkHn5XdTUZ28eaTm7cJz9k1WYytu2PKG/B743fR9osTPj++ff1Nl97uw96xdH3xj8Nyzn6d3E5xw3gEVMhxozr2znOb+uA7jKBCUxgAhOYkJhwtYyslpZPuxZFbu+2djhMmLJ2OEy4uglVjeFZ1yL7ZH3qCUubcoKcICfICdYOTGACE5jABCYwgQlMYEInE2bVEzrvTzjbVGNUY1xrjHKCnCAnyAnWDkxgAhOYwAQmMIEJTGBCAxPsWbJnSY3xp2uMcoKcICfICdYOTGACE5jABCYwgQlMYILnIu1ZUmP0XKScICfICXICE5jABCYwgQlMYAITmMAEz0Xas6TG6LlIOUFOkBPkBCYwgQlMYAITmMAEJvwnE/r/Idg7E+rFcSsTtln1hGwqtNyztP492IAa4zm2A2qMWzIV2tYY/4AJTXPCpJ+H1ISW5xet6yrY]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/cache/mask_7/mask_177_7.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eNrt3dFqgzAABdD3fE3y/z9XBlazYlLmoOZux4IvbiWG7Ox6Uaz1ubWFP91WjgG3tu7+dMRLD/l8jkOWRemHPzq3szPfDvzwt377nS9zfP6Ds5XVLg75+ne+zHHENrXipnmcHy3XVvHn13g7RtzCPmUb/cr/Pr7vS8Ywu315Ah2zLErU/H7ty/HXHTJkVrCCFaxgBStYwQpWhPQVnRUpfcVmxajGmtVbtx0rs3Nbrq/YrUjoK/bvlCvkCrlCrnANwgpWsIIVrGAFK1jBClb8CysC+4pReTS7R+uuY7pN3eag25Qr5Aq5Qq5wDcIKVrCCFaxgBStYwQpW/HUr3IvlXizd5k3dplwhV8gVcoVrEFawghWsYAUrWMEKVrDCc6buxfKcqW7Tc6ZyhVwhV8gVrGAFK1jBClawghWsYAUrPGfqXizdpudM5Qq5Qq6QK1jBClawghWsYAUrWMGKoRX7VXWOFfNuYUEr6qQlWLavyHlHYUt6R2HXbb5bFst1m7XWtG7zmOMwK2pSrsgSOeTdx93+AZkGNEw=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/CHANGELOG</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KiAxLjAuMCBidWlsZCAyMDEwMDMxOTIwIA0KDQogIC0gZmlyc3QgcHVibGljIHJlbGVhc2UNCiAgLSBoZWxwIGluIHJlYWRtZSwgaW5zdGFsbA0KICAtIGNsZWFudXAgYW5zIHNlcGFyYXRpb24gb2YgUVJ0b29scyBhbmQgUVJzcGVjDQogIC0gbm93IFRDUERGIGJpbmRpbmcgcmVxdWlyZXMgbWluaW1hbCBjaGFuZ2VzIGluIFRDUERGLCBoYXZpbmcgbW9zdCBvZiBqb2INCiAgICBkb25lIGluIFFSdG9vbHMgdGNwZGZCYXJjb2RlQXJyYXkNCiAgLSBuaWNlciBRUnRvb2xzOjp0aW1lQmVuY2htYXJrIG91dHB1dA0KICAtIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2VzIGluIGZpbGVzDQogIC0gaW5kZW50IGNsZWFudXAgLSBmcm9tIHRhYiB0byA0c3BjLCBrZWVwIGl0IHRoYXQgd2F5IHBsZWFzZSA6KQ0KICAtIHNmIHByb2plY3QsIHJlcG9zaXRvcnksIHdpa2kNCiAgLSBzaW1wbGUgY29kZSBnZW5lcmF0b3IgaW4gaW5kZXgucGhwDQogIA0KKiAxLjEuMCBidWlsZCAyMDEwMDMyMTEzDQoNCiAgLSBhZGRlZCBtZXJnZSB0b29sIHdpY2ggZ2VuZXJhdGUgbWVyZ2VkIHZlcnNpb24gb2YgY29kZQ0KICAgIGxvY2F0ZWQgaW4gcGhwcXJjb2RlLnBocA0KICAtIHNwbGl0ZWQgcXJjb25zdC5waHAgZnJvbSBxcmxpYi5waHANCiAgDQoqIDEuMS4xIGJ1aWxkIDIwMTAwMzI0MDUNCg0KICAtIHBhdGNoIGJ5IFJpY2sgU2V5bW91ciBhbGxvd2luZyBzYXZpbmcgUE5HIGFuZCBkaXNwbGF5aW5nIGl0IGF0IHRoZSBzYW1lIHRpbWUNCiAgLSBhZGRlZCB2ZXJzaW9uIGluZm8gaW4gVkVSU0lPTiBmaWxlDQogIC0gbW9kaWZpZWQgbWVyZ2UgdG9vbCB0byBpbmNsdWRlIHZlcnNpb24gaW5mbyBpbnRvIGdlbmVyYXRlZCBmaWxlDQogIC0gZml4ZWQgZS1tYWlsIGluIGFsbW9zdCBhbGwgaGVhZCBjb21tZW50cw0KICANCiogMS4xLjIgYnVpbGQgMjAxMDAzMjcyMg0KDQogIC0gZnVsbCBpbnRlZ3JhdGlvbiB3aXRoIFRDUERGIHRoYW5rcyB0byBOaWNvbGEgQXN1bmksIGl0J3MgYXV0aG9yDQogIC0gZml4ZWQgYnVnIHdpdGggYWxwaGFudW1lcmljIGVuY29kaW5nIGRldGVjdGlvbg0KICANCiogMS4xLjMgYnVpbGQgMjAxMDA4MTgwNw0KDQogIC0gc2hvcnQgb3BlbmluZyB0YWdzIHJlcGxhY2VkIHdpdGggc3RhbmRhcmQgb25lcw0KICANCiogMS4xLjQgYnVpbGQgMjAxMDEwMDcyMQ0KDQogIC0gYWRkZWQgbWlzc2luZyBzdGF0aWMga2V5d29yZCBRUmlucHV0OjpjaGVjayAoZm91bmQgYnkgTHVrZSBCcm9va2hhcnQsIE9uamF4IExMQykNCg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/index.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgICAgCi8qDQogKiBQSFAgUVIgQ29kZSBlbmNvZGVyDQogKg0KICogRXhlbXBsYXRvcnkgdXNhZ2UNCiAqDQogKiBQSFAgUVIgQ29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBMR1BMIDMNCiAqIENvcHlyaWdodCAoQykgMjAxMCBEb21pbmlrIER6aWVuaWEgPGRlbHRhbGFiIGF0IHBvY3p0YSBkb3QgZm0+DQogKg0KICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQogKiB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIGFueSBsYXRlciB2ZXJzaW9uLg0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUNCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQogKg0KICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBDQogKi8NCiAgICANCiAgICBlY2hvICI8aDE+UEhQIFFSIENvZGU8L2gxPjxoci8+IjsKICAgIA0KICAgIC8vc2V0IGl0IHRvIHdyaXRhYmxlIGxvY2F0aW9uLCBhIHBsYWNlIGZvciB0ZW1wIGdlbmVyYXRlZCBQTkcgZmlsZXMNCiAgICAkUE5HX1RFTVBfRElSID0gZGlybmFtZShfX0ZJTEVfXykuRElSRUNUT1JZX1NFUEFSQVRPUi4ndGVtcCcuRElSRUNUT1JZX1NFUEFSQVRPUjsNCiAgICANCiAgICAvL2h0bWwgUE5HIGxvY2F0aW9uIHByZWZpeA0KICAgICRQTkdfV0VCX0RJUiA9ICd0ZW1wLyc7DQoNCiAgICBpbmNsdWRlICJxcmxpYi5waHAiOyAgICANCiAgICANCiAgICAvL29mY291cnNlIHdlIG5lZWQgcmlnaHRzIHRvIGNyZWF0ZSB0ZW1wIGRpcg0KICAgIGlmICghZmlsZV9leGlzdHMoJFBOR19URU1QX0RJUikpDQogICAgICAgIG1rZGlyKCRQTkdfVEVNUF9ESVIpOwogICAgDQogICAgDQogICAgJGZpbGVuYW1lID0gJFBOR19URU1QX0RJUi4ndGVzdC5wbmcnOw0KICAgIA0KICAgIC8vcHJvY2Vzc2luZyBmb3JtIGlucHV0DQogICAgLy9yZW1lbWJlciB0byBzYW5pdGl6ZSB1c2VyIGlucHV0IGluIHJlYWwtbGlmZSBzb2x1dGlvbiAhISENCiAgICAkZXJyb3JDb3JyZWN0aW9uTGV2ZWwgPSAnTCc7DQogICAgaWYgKGlzc2V0KCRfUkVRVUVTVFsnbGV2ZWwnXSkgJiYgaW5fYXJyYXkoJF9SRVFVRVNUWydsZXZlbCddLCBhcnJheSgnTCcsJ00nLCdRJywnSCcpKSkNCiAgICAgICAgJGVycm9yQ29ycmVjdGlvbkxldmVsID0gJF9SRVFVRVNUWydsZXZlbCddOyAgICANCg0KICAgICRtYXRyaXhQb2ludFNpemUgPSA0Ow0KICAgIGlmIChpc3NldCgkX1JFUVVFU1RbJ3NpemUnXSkpDQogICAgICAgICRtYXRyaXhQb2ludFNpemUgPSBtaW4obWF4KChpbnQpJF9SRVFVRVNUWydzaXplJ10sIDEpLCAxMCk7DQoNCgogICAgaWYgKGlzc2V0KCRfUkVRVUVTVFsnZGF0YSddKSkgeyANCiAgICANCiAgICAgICAgLy9pdCdzIHZlcnkgaW1wb3J0YW50IQ0KICAgICAgICBpZiAodHJpbSgkX1JFUVVFU1RbJ2RhdGEnXSkgPT0gJycpDQogICAgICAgICAgICBkaWUoJ2RhdGEgY2Fubm90IGJlIGVtcHR5ISA8YSBocmVmPSI/Ij5iYWNrPC9hPicpOw0KICAgICAgICAgICAgCiAgICAgICAgLy8gdXNlciBkYXRhDQogICAgICAgICRmaWxlbmFtZSA9ICRQTkdfVEVNUF9ESVIuJ3Rlc3QnLm1kNSgkX1JFUVVFU1RbJ2RhdGEnXS4nfCcuJGVycm9yQ29ycmVjdGlvbkxldmVsLid8Jy4kbWF0cml4UG9pbnRTaXplKS4nLnBuZyc7CiAgICAgICAgUVJjb2RlOjpwbmcoJF9SRVFVRVNUWydkYXRhJ10sICRmaWxlbmFtZSwgJGVycm9yQ29ycmVjdGlvbkxldmVsLCAkbWF0cml4UG9pbnRTaXplLCAyKTsgICAgDQogICAgICAgIAogICAgfSBlbHNlIHsgICAgDQogICAgDQogICAgICAgIC8vZGVmYXVsdCBkYXRhCiAgICAgICAgZWNobyAnWW91IGNhbiBwcm92aWRlIGRhdGEgaW4gR0VUIHBhcmFtZXRlcjogPGEgaHJlZj0iP2RhdGE9bGlrZV90aGF0Ij5saWtlIHRoYXQ8L2E+PGhyLz4nOyAgICAKICAgICAgICBRUmNvZGU6OnBuZygnUEhQIFFSIENvZGUgOiknLCAkZmlsZW5hbWUsICRlcnJvckNvcnJlY3Rpb25MZXZlbCwgJG1hdHJpeFBvaW50U2l6ZSwgMik7ICAgIA0KICAgICAgICAKICAgIH0gICAgCiAgICAgICAgDQogICAgLy9kaXNwbGF5IGdlbmVyYXRlZCBmaWxlCiAgICBlY2hvICc8aW1nIHNyYz0iJy4kUE5HX1dFQl9ESVIuYmFzZW5hbWUoJGZpbGVuYW1lKS4nIiAvPjxoci8+JzsgIA0KICAgIA0KICAgIC8vY29uZmlnIGZvcm0NCiAgICBlY2hvICc8Zm9ybSBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgRGF0YTombmJzcDs8aW5wdXQgbmFtZT0iZGF0YSIgdmFsdWU9IicuKGlzc2V0KCRfUkVRVUVTVFsnZGF0YSddKT9odG1sc3BlY2lhbGNoYXJzKCRfUkVRVUVTVFsnZGF0YSddKTonUEhQIFFSIENvZGUgOiknKS4nIiAvPiZuYnNwOw0KICAgICAgICBFQ0M6Jm5ic3A7PHNlbGVjdCBuYW1lPSJsZXZlbCI+DQogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJMIicuKCgkZXJyb3JDb3JyZWN0aW9uTGV2ZWw9PSdMJyk/JyBzZWxlY3RlZCc6JycpLic+TCAtIHNtYWxsZXN0PC9vcHRpb24+DQogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJNIicuKCgkZXJyb3JDb3JyZWN0aW9uTGV2ZWw9PSdNJyk/JyBzZWxlY3RlZCc6JycpLic+TTwvb3B0aW9uPg0KICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iUSInLigoJGVycm9yQ29ycmVjdGlvbkxldmVsPT0nUScpPycgc2VsZWN0ZWQnOicnKS4nPlE8L29wdGlvbj4NCiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IkgiJy4oKCRlcnJvckNvcnJlY3Rpb25MZXZlbD09J0gnKT8nIHNlbGVjdGVkJzonJykuJz5IIC0gYmVzdDwvb3B0aW9uPg0KICAgICAgICA8L3NlbGVjdD4mbmJzcDsNCiAgICAgICAgU2l6ZTombmJzcDs8c2VsZWN0IG5hbWU9InNpemUiPic7DQogICAgICAgIA0KICAgIGZvcigkaT0xOyRpPD0xMDskaSsrKQ0KICAgICAgICBlY2hvICc8b3B0aW9uIHZhbHVlPSInLiRpLiciJy4oKCRtYXRyaXhQb2ludFNpemU9PSRpKT8nIHNlbGVjdGVkJzonJykuJz4nLiRpLic8L29wdGlvbj4nOw0KICAgICAgICANCiAgICBlY2hvICc8L3NlbGVjdD4mbmJzcDsNCiAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdFTkVSQVRFIj48L2Zvcm0+PGhyLz4nOw0KICAgICAgICANCiAgICAvLyBiZW5jaG1hcmsKICAgIFFSdG9vbHM6OnRpbWVCZW5jaG1hcmsoKTsgICAgCgogICAg]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/INSTALL</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PT0gUkVRVUlSRU1FTlRTID09DQoNCiAqIFBIUDUNCiAqIFBIUCBHRDIgZXh0ZW5zaW9uIHdpdGggSlBFRyBhbmQgUE5HIHN1cHBvcnQNCiANCj09IElOU1RBTExBVElPTiA9PQ0KDQpJZiB5b3Ugd2FudCB0byByZWNyZWF0ZSBjYWNoZSBieSB5b3Vyc2VsZiBtYWtlIHN1cmUgY2FjaGUgZGlyZWN0b3J5IGlzDQp3cml0YWJsZSBhbmQgeW91IGhhdmUgcGVybWlzaW9ucyB0byB3cml0ZSBpbnRvIGl0LiBBbHNvIG1ha2Ugc3VyZSB5b3UgYXJlDQphYmxlIHRvIHJlYWQgZmlsZXMgaW4gaXQgaWYgeW91IGhhdmUgY2FjaGUgb3B0aW9uIGVuYWJsZWQNCiANCj09IENPTkZJR1VSQVRJT04gPT0NCg0KRmVlbCBmcmVlIHRvIG1vZGlmeSBjb25maWcgY29uc3RhbnRzIGluIHFyY29uZmlnLnBocCBmaWxlLiBSZWFkIGFib3V0IGl0IGluDQpwcm92aWRlZCBjb21tZW50cyBhbmQgcHJvamVjdCB3aWtpIHBhZ2UgKGxpbmtzIGluIFJFQURNRSBmaWxlKQ0KDQo9PSBRVUlDSyBTVEFSVCA9PQ0KDQpOb3RpY2U6IHByb2JhYmx5IHlvdSBzaG91bGQnbnQgdXNlIGFsbCBvZiB0aGlzIGluIHNhbWUgc2NyaXB0IDopDQoNCjw/cGhwYg0KDQovL2luY2x1ZGUgb25seSB0aGF0IG9uZSwgcmVzdCByZXF1aXJlZCBmaWxlcyB3aWxsIGJlIGluY2x1ZGVkIGZyb20gaXQNCmluY2x1ZGUgInFybGliLnBocCINCg0KLy93cml0ZSBjb2RlIGludG8gZmlsZSwgRXJyb3IgY29yZWN0aW9uIGxlY2VyIGlzIGxvd2VzdCwgTCAob25lIGZvcm06IEwsTSxRLEgpDQovL2VhY2ggY29kZSBzcXVhcmUgd2lsbCBiZSA0eDQgcGl4ZWxzICg0eCB6b29tKQ0KLy9jb2RlIHdpbGwgaGF2ZSAyIGNvZGUgc3F1YXJlcyB3aGl0ZSBib3VuZGFyeSBhcm91bmQgDQoNClFSY29kZTo6cG5nKCdQSFAgUVIgQ29kZSA6KScsICd0ZXN0LnBuZycsICdMJywgNCwgMik7DQoNCi8vc2FtZSBhcyBhYm92ZSBidXQgb3V0cHV0cyBmaWxlIGRpcmVjdGx5IGludG8gYnJvd3NlciAod2l0aCBhcHByLiBoZWFkZXIgZXRjLikNCi8vYWxsIG90aGVyIHNldHRpbmdzIGFyZSBkZWZhdWx0DQovL1dBUk5JTkchIGl0IHNob3VsZCBiZSBGSVJTVCBhbmQgT05MWSBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHNjcmlwdCwgb3RoZXJ3aXNlDQovL3Jlc3Qgb2Ygb3V0cHV0IHdpbGwgbGFuZCBpbnNpZGUgUE5HIGJpbmFyeSwgYnJlYWtpbmcgaXQgZm9yIHN1cmUNClFSY29kZTo6cG5nKCdQSFAgUVIgQ29kZSA6KScpOw0KDQovL3Nob3cgYmVuY2htYXJrDQpRUnRvb2xzOjp0aW1lQmVuY2htYXJrKCk7DQoNCi8vcmVidWlsZCBjYWNoZQ0KUVJ0b29sczo6YnVpbGRDYWNoZSgpOw0KDQovL2NvZGUgZ2VuZXJhdGVkIGluIHRleHQgbW9kZSAtIGFzIGEgYmluYXJ5IHRhYmxlDQovL3RoZW4gZGlzcGxheWVkIG91dCBhcyBIVE1MIHVzaW5nIFVuaWNvZGUgYmxvY2sgYnVpbGRpbmcgY2hhcnMgOikNCiR0YWIgPSAkcXItPmVuY29kZSgnUEhQIFFSIENvZGUgOiknKTsNClFSc3BlYzo6ZGVidWcoJHRhYiwgdHJ1ZSk7DQoNCj09IFRDUERGIElOVEVHUkFUSU9OID09DQoNCkluc2lkZSBiaW5kaW5ncy90Y3BkZiB5b3Ugd2lsbCBmaW5kIHNsaWdodGx5IG1vZGlmaWVkIDJkYmFyY29kZXMucGhwLg0KSW5zdGFsIHBocHFyY29kZSBsaWJsYXR5IGluc2lkZSB0Y3BkZiBmb2xkZXIsIHRoZW4gb3ZlcndyaXRlIChvciBtZXJnZSkNCjJkYmFyY29kZXMucGhwIA0KDQpUaGVuIHVzZSBzaW1pbGFyIGFzIGV4YW1wbGUgIzUwIGZyb20gVENQREYgZXhhbXBsZXM6DQoNCjw/cGhwDQoNCiRzdHlsZSA9IGFycmF5KA0KICAgICdib3JkZXInID0+IHRydWUsDQogICAgJ3BhZGRpbmcnID0+IDQsDQogICAgJ2ZnY29sb3InID0+IGFycmF5KDAsMCwwKSwNCiAgICAnYmdjb2xvcicgPT4gZmFsc2UsIC8vYXJyYXkoMjU1LDI1NSwyNTUpDQopOw0KDQovL2NvZGUgbmFtZTogUVIsIHNwZWNpZnkgZXJyb3IgY29ycmVjdGlvbiBsZXZlbCBhZnRlciBzZW1pY29sb24gKEwsTSxRLEgpDQokcGRmLT53cml0ZTJEQmFyY29kZSgnUEhQIFFSIENvZGUgOiknLCAnUVIsTCcsICcnLCAnJywgMzAsIDMwLCAkc3R5bGUsICdOJyk7DQo=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFDQogICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3DQoNCiBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+DQogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzDQogb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuDQoNCg0KICBUaGlzIHZlcnNpb24gb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbmNvcnBvcmF0ZXMNCnRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KTGljZW5zZSwgc3VwcGxlbWVudGVkIGJ5IHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGxpc3RlZCBiZWxvdy4NCg0KICAwLiBBZGRpdGlvbmFsIERlZmluaXRpb25zLg0KDQogIEFzIHVzZWQgaGVyZWluLCAidGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgTGVzc2VyDQpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlICJHTlUgR1BMIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUNCkdlbmVyYWwgUHVibGljIExpY2Vuc2UuDQoNCiAgIlRoZSBMaWJyYXJ5IiByZWZlcnMgdG8gYSBjb3ZlcmVkIHdvcmsgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLA0Kb3RoZXIgdGhhbiBhbiBBcHBsaWNhdGlvbiBvciBhIENvbWJpbmVkIFdvcmsgYXMgZGVmaW5lZCBiZWxvdy4NCg0KICBBbiAiQXBwbGljYXRpb24iIGlzIGFueSB3b3JrIHRoYXQgbWFrZXMgdXNlIG9mIGFuIGludGVyZmFjZSBwcm92aWRlZA0KYnkgdGhlIExpYnJhcnksIGJ1dCB3aGljaCBpcyBub3Qgb3RoZXJ3aXNlIGJhc2VkIG9uIHRoZSBMaWJyYXJ5Lg0KRGVmaW5pbmcgYSBzdWJjbGFzcyBvZiBhIGNsYXNzIGRlZmluZWQgYnkgdGhlIExpYnJhcnkgaXMgZGVlbWVkIGEgbW9kZQ0Kb2YgdXNpbmcgYW4gaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IHRoZSBMaWJyYXJ5Lg0KDQogIEEgIkNvbWJpbmVkIFdvcmsiIGlzIGEgd29yayBwcm9kdWNlZCBieSBjb21iaW5pbmcgb3IgbGlua2luZyBhbg0KQXBwbGljYXRpb24gd2l0aCB0aGUgTGlicmFyeS4gIFRoZSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpYnJhcnkNCndpdGggd2hpY2ggdGhlIENvbWJpbmVkIFdvcmsgd2FzIG1hZGUgaXMgYWxzbyBjYWxsZWQgdGhlICJMaW5rZWQNClZlcnNpb24iLg0KDQogIFRoZSAiTWluaW1hbCBDb3JyZXNwb25kaW5nIFNvdXJjZSIgZm9yIGEgQ29tYmluZWQgV29yayBtZWFucyB0aGUNCkNvcnJlc3BvbmRpbmcgU291cmNlIGZvciB0aGUgQ29tYmluZWQgV29yaywgZXhjbHVkaW5nIGFueSBzb3VyY2UgY29kZQ0KZm9yIHBvcnRpb25zIG9mIHRoZSBDb21iaW5lZCBXb3JrIHRoYXQsIGNvbnNpZGVyZWQgaW4gaXNvbGF0aW9uLCBhcmUNCmJhc2VkIG9uIHRoZSBBcHBsaWNhdGlvbiwgYW5kIG5vdCBvbiB0aGUgTGlua2VkIFZlcnNpb24uDQoNCiAgVGhlICJDb3JyZXNwb25kaW5nIEFwcGxpY2F0aW9uIENvZGUiIGZvciBhIENvbWJpbmVkIFdvcmsgbWVhbnMgdGhlDQpvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUgZm9yIHRoZSBBcHBsaWNhdGlvbiwgaW5jbHVkaW5nIGFueSBkYXRhDQphbmQgdXRpbGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yIHJlcHJvZHVjaW5nIHRoZSBDb21iaW5lZCBXb3JrIGZyb20gdGhlDQpBcHBsaWNhdGlvbiwgYnV0IGV4Y2x1ZGluZyB0aGUgU3lzdGVtIExpYnJhcmllcyBvZiB0aGUgQ29tYmluZWQgV29yay4NCg0KICAxLiBFeGNlcHRpb24gdG8gU2VjdGlvbiAzIG9mIHRoZSBHTlUgR1BMLg0KDQogIFlvdSBtYXkgY29udmV5IGEgY292ZXJlZCB3b3JrIHVuZGVyIHNlY3Rpb25zIDMgYW5kIDQgb2YgdGhpcyBMaWNlbnNlDQp3aXRob3V0IGJlaW5nIGJvdW5kIGJ5IHNlY3Rpb24gMyBvZiB0aGUgR05VIEdQTC4NCg0KICAyLiBDb252ZXlpbmcgTW9kaWZpZWQgVmVyc2lvbnMuDQoNCiAgSWYgeW91IG1vZGlmeSBhIGNvcHkgb2YgdGhlIExpYnJhcnksIGFuZCwgaW4geW91ciBtb2RpZmljYXRpb25zLCBhDQpmYWNpbGl0eSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIEFwcGxpY2F0aW9uDQp0aGF0IHVzZXMgdGhlIGZhY2lsaXR5IChvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZQ0KZmFjaWxpdHkgaXMgaW52b2tlZCksIHRoZW4geW91IG1heSBjb252ZXkgYSBjb3B5IG9mIHRoZSBtb2RpZmllZA0KdmVyc2lvbjoNCg0KICAgYSkgdW5kZXIgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IHlvdSBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8NCiAgIGVuc3VyZSB0aGF0LCBpbiB0aGUgZXZlbnQgYW4gQXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHRoZQ0KICAgZnVuY3Rpb24gb3IgZGF0YSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMNCiAgIHdoYXRldmVyIHBhcnQgb2YgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLCBvcg0KDQogICBiKSB1bmRlciB0aGUgR05VIEdQTCwgd2l0aCBub25lIG9mIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9mDQogICB0aGlzIExpY2Vuc2UgYXBwbGljYWJsZSB0byB0aGF0IGNvcHkuDQoNCiAgMy4gT2JqZWN0IENvZGUgSW5jb3Jwb3JhdGluZyBNYXRlcmlhbCBmcm9tIExpYnJhcnkgSGVhZGVyIEZpbGVzLg0KDQogIFRoZSBvYmplY3QgY29kZSBmb3JtIG9mIGFuIEFwcGxpY2F0aW9uIG1heSBpbmNvcnBvcmF0ZSBtYXRlcmlhbCBmcm9tDQphIGhlYWRlciBmaWxlIHRoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeS4gIFlvdSBtYXkgY29udmV5IHN1Y2ggb2JqZWN0DQpjb2RlIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0LCBpZiB0aGUgaW5jb3Jwb3JhdGVkDQptYXRlcmlhbCBpcyBub3QgbGltaXRlZCB0byBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YSBzdHJ1Y3R1cmUNCmxheW91dHMgYW5kIGFjY2Vzc29ycywgb3Igc21hbGwgbWFjcm9zLCBpbmxpbmUgZnVuY3Rpb25zIGFuZCB0ZW1wbGF0ZXMNCih0ZW4gb3IgZmV3ZXIgbGluZXMgaW4gbGVuZ3RoKSwgeW91IGRvIGJvdGggb2YgdGhlIGZvbGxvd2luZzoNCg0KICAgYSkgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBvYmplY3QgY29kZSB0aGF0IHRoZQ0KICAgTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZQ0KICAgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuDQoNCiAgIGIpIEFjY29tcGFueSB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlIEdOVSBHUEwgYW5kIHRoaXMgbGljZW5zZQ0KICAgZG9jdW1lbnQuDQoNCiAgNC4gQ29tYmluZWQgV29ya3MuDQoNCiAgWW91IG1heSBjb252ZXkgYSBDb21iaW5lZCBXb3JrIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlIHRoYXQsDQp0YWtlbiB0b2dldGhlciwgZWZmZWN0aXZlbHkgZG8gbm90IHJlc3RyaWN0IG1vZGlmaWNhdGlvbiBvZiB0aGUNCnBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5IGNvbnRhaW5lZCBpbiB0aGUgQ29tYmluZWQgV29yayBhbmQgcmV2ZXJzZQ0KZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMsIGlmIHlvdSBhbHNvIGRvIGVhY2ggb2YNCnRoZSBmb2xsb3dpbmc6DQoNCiAgIGEpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgQ29tYmluZWQgV29yayB0aGF0DQogICB0aGUgTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZQ0KICAgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuDQoNCiAgIGIpIEFjY29tcGFueSB0aGUgQ29tYmluZWQgV29yayB3aXRoIGEgY29weSBvZiB0aGUgR05VIEdQTCBhbmQgdGhpcyBsaWNlbnNlDQogICBkb2N1bWVudC4NCg0KICAgYykgRm9yIGEgQ29tYmluZWQgV29yayB0aGF0IGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzIGR1cmluZw0KICAgZXhlY3V0aW9uLCBpbmNsdWRlIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZw0KICAgdGhlc2Ugbm90aWNlcywgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZSBkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlDQogICBjb3BpZXMgb2YgdGhlIEdOVSBHUEwgYW5kIHRoaXMgbGljZW5zZSBkb2N1bWVudC4NCg0KICAgZCkgRG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6DQoNCiAgICAgICAwKSBDb252ZXkgdGhlIE1pbmltYWwgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMNCiAgICAgICBMaWNlbnNlLCBhbmQgdGhlIENvcnJlc3BvbmRpbmcgQXBwbGljYXRpb24gQ29kZSBpbiBhIGZvcm0NCiAgICAgICBzdWl0YWJsZSBmb3IsIGFuZCB1bmRlciB0ZXJtcyB0aGF0IHBlcm1pdCwgdGhlIHVzZXIgdG8NCiAgICAgICByZWNvbWJpbmUgb3IgcmVsaW5rIHRoZSBBcHBsaWNhdGlvbiB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZg0KICAgICAgIHRoZSBMaW5rZWQgVmVyc2lvbiB0byBwcm9kdWNlIGEgbW9kaWZpZWQgQ29tYmluZWQgV29yaywgaW4gdGhlDQogICAgICAgbWFubmVyIHNwZWNpZmllZCBieSBzZWN0aW9uIDYgb2YgdGhlIEdOVSBHUEwgZm9yIGNvbnZleWluZw0KICAgICAgIENvcnJlc3BvbmRpbmcgU291cmNlLg0KDQogICAgICAgMSkgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlDQogICAgICAgTGlicmFyeS4gIEEgc3VpdGFibGUgbWVjaGFuaXNtIGlzIG9uZSB0aGF0IChhKSB1c2VzIGF0IHJ1biB0aW1lDQogICAgICAgYSBjb3B5IG9mIHRoZSBMaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyDQogICAgICAgc3lzdGVtLCBhbmQgKGIpIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbg0KICAgICAgIG9mIHRoZSBMaWJyYXJ5IHRoYXQgaXMgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUgTGlua2VkDQogICAgICAgVmVyc2lvbi4NCg0KICAgZSkgUHJvdmlkZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24sIGJ1dCBvbmx5IGlmIHlvdSB3b3VsZCBvdGhlcndpc2UNCiAgIGJlIHJlcXVpcmVkIHRvIHByb3ZpZGUgc3VjaCBpbmZvcm1hdGlvbiB1bmRlciBzZWN0aW9uIDYgb2YgdGhlDQogICBHTlUgR1BMLCBhbmQgb25seSB0byB0aGUgZXh0ZW50IHRoYXQgc3VjaCBpbmZvcm1hdGlvbiBpcw0KICAgbmVjZXNzYXJ5IHRvIGluc3RhbGwgYW5kIGV4ZWN1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZQ0KICAgQ29tYmluZWQgV29yayBwcm9kdWNlZCBieSByZWNvbWJpbmluZyBvciByZWxpbmtpbmcgdGhlDQogICBBcHBsaWNhdGlvbiB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlua2VkIFZlcnNpb24uIChJZg0KICAgeW91IHVzZSBvcHRpb24gNGQwLCB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIG11c3QgYWNjb21wYW55DQogICB0aGUgTWluaW1hbCBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbmQgQ29ycmVzcG9uZGluZyBBcHBsaWNhdGlvbg0KICAgQ29kZS4gSWYgeW91IHVzZSBvcHRpb24gNGQxLCB5b3UgbXVzdCBwcm92aWRlIHRoZSBJbnN0YWxsYXRpb24NCiAgIEluZm9ybWF0aW9uIGluIHRoZSBtYW5uZXIgc3BlY2lmaWVkIGJ5IHNlY3Rpb24gNiBvZiB0aGUgR05VIEdQTA0KICAgZm9yIGNvbnZleWluZyBDb3JyZXNwb25kaW5nIFNvdXJjZS4pDQoNCiAgNS4gQ29tYmluZWQgTGlicmFyaWVzLg0KDQogIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUNCkxpYnJhcnkgc2lkZSBieSBzaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5DQpmYWNpbGl0aWVzIHRoYXQgYXJlIG5vdCBBcHBsaWNhdGlvbnMgYW5kIGFyZSBub3QgY292ZXJlZCBieSB0aGlzDQpMaWNlbnNlLCBhbmQgY29udmV5IHN1Y2ggYSBjb21iaW5lZCBsaWJyYXJ5IHVuZGVyIHRlcm1zIG9mIHlvdXINCmNob2ljZSwgaWYgeW91IGRvIGJvdGggb2YgdGhlIGZvbGxvd2luZzoNCg0KICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsgYmFzZWQNCiAgIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcywNCiAgIGNvbnZleWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuDQoNCiAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IHRoYXQgcGFydCBvZiBpdA0KICAgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZyB3aGVyZSB0byBmaW5kIHRoZQ0KICAgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLg0KDQogIDYuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4NCg0KICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucw0Kb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcNCnZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heQ0KZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4NCg0KICBFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlDQpMaWJyYXJ5IGFzIHlvdSByZWNlaXZlZCBpdCBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbg0Kb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iDQphcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kDQpjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHB1Ymxpc2hlZCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uDQpwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSWYgdGhlIExpYnJhcnkgYXMgeW91DQpyZWNlaXZlZCBpdCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEdOVSBMZXNzZXINCkdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIG9mIHRoZSBHTlUgTGVzc2VyDQpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQoNCiAgSWYgdGhlIExpYnJhcnkgYXMgeW91IHJlY2VpdmVkIGl0IHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZQ0Kd2hldGhlciBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBzaGFsbA0KYXBwbHksIHRoYXQgcHJveHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYW55IHZlcnNpb24gaXMNCnBlcm1hbmVudCBhdXRob3JpemF0aW9uIGZvciB5b3UgdG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlDQpMaWJyYXJ5Lg0K]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/phpqrcode.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoNCiAqIFBIUCBRUiBDb2RlIGVuY29kZXINCiAqDQogKiBUaGlzIGZpbGUgY29udGFpbnMgTUVSR0VEIHZlcnNpb24gb2YgUEhQIFFSIENvZGUgbGlicmFyeS4NCiAqIEl0IHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9tIGZ1bGwgdmVyc2lvbiBmb3IgeW91ciBjb252ZW5pZW5jZS4NCiAqDQogKiBUaGlzIG1lcmdlZCB2ZXJzaW9uIHdhcyBjb25maWd1cmVkIHRvIG5vdCByZXF1cmUgYW55IGV4dGVybmFsIGZpbGVzLA0KICogd2l0aCBkaXNhYmxlZCBjYWNoZSwgZXJyb3IgbG9naW5nIGFuZCB3ZWtlciBidXQgZmFzdGVyIG1hc2sgbWF0Y2hpbmcuDQogKiBJZiB5b3UgbmVlZCB0dW5lIGl0IHVwIHBsZWFzZSB1c2Ugbm9uLW1lcmdlZCB2ZXJzaW9uLg0KICoNCiAqIEZvciBmdWxsIHZlcnNpb24sIGRvY3VtZW50YXRpb24sIGV4YW1wbGVzIG9mIHVzZSBwbGVhc2UgdmlzaXQ6DQogKg0KICogICAgaHR0cDovL3BocHFyY29kZS5zb3VyY2Vmb3JnZS5uZXQvDQogKiAgICBodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9waHBxcmNvZGUvDQogKg0KICogUEhQIFFSIENvZGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgTEdQTCAzDQogKiBDb3B5cmlnaHQgKEMpIDIwMTAgRG9taW5payBEemllbmlhIDxkZWx0YWxhYiBhdCBwb2N6dGEgZG90IGZtPg0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KICogdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciBhbnkgbGF0ZXIgdmVyc2lvbi4NCiAqDQogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VDQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KICoNCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQ0KICovDQogDQogCgovKgogKiBWZXJzaW9uOiAxLjEuNAogKiBCdWlsZDogMjAxMDEwMDcyMQogKi8KCgoKLy8tLS0tIHFyY29uc3QucGhwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKCg0KDQovKg0KICogUEhQIFFSIENvZGUgZW5jb2Rlcg0KICoNCiAqIENvbW1vbiBjb25zdGFudHMNCiAqDQogKiBCYXNlZCBvbiBsaWJxcmVuY29kZSBDIGxpYnJhcnkgZGlzdHJpYnV0ZWQgdW5kZXIgTEdQTCAyLjENCiAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBLZW50YXJvIEZ1a3VjaGkgPGZ1a3VjaGlAbWVnYXVpLm5ldD4NCiAqDQogKiBQSFAgUVIgQ29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBMR1BMIDMNCiAqIENvcHlyaWdodCAoQykgMjAxMCBEb21pbmlrIER6aWVuaWEgPGRlbHRhbGFiIGF0IHBvY3p0YSBkb3QgZm0+DQogKg0KICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQogKiB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIGFueSBsYXRlciB2ZXJzaW9uLg0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUNCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQogKg0KICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBDQogKi8NCiANCgkvLyBFbmNvZGluZyBtb2Rlcw0KCSANCglkZWZpbmUoJ1FSX01PREVfTlVMJywgLTEpOw0KCWRlZmluZSgnUVJfTU9ERV9OVU0nLCAwKTsNCglkZWZpbmUoJ1FSX01PREVfQU4nLCAxKTsNCglkZWZpbmUoJ1FSX01PREVfOCcsIDIpOw0KCWRlZmluZSgnUVJfTU9ERV9LQU5KSScsIDMpOw0KCWRlZmluZSgnUVJfTU9ERV9TVFJVQ1RVUkUnLCA0KTsNCg0KCS8vIExldmVscyBvZiBlcnJvciBjb3JyZWN0aW9uLg0KDQoJZGVmaW5lKCdRUl9FQ0xFVkVMX0wnLCAwKTsNCglkZWZpbmUoJ1FSX0VDTEVWRUxfTScsIDEpOw0KCWRlZmluZSgnUVJfRUNMRVZFTF9RJywgMik7DQoJZGVmaW5lKCdRUl9FQ0xFVkVMX0gnLCAzKTsNCgkNCgkvLyBTdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdHMNCgkNCglkZWZpbmUoJ1FSX0ZPUk1BVF9URVhUJywgMCk7DQoJZGVmaW5lKCdRUl9GT1JNQVRfUE5HJywgIDEpOw0KCQ0KCWNsYXNzIHFyc3RyIHsNCgkJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXQoJiRzcmN0YWIsICR4LCAkeSwgJHJlcGwsICRyZXBsTGVuID0gZmFsc2UpIHsNCgkJCSRzcmN0YWJbJHldID0gc3Vic3RyX3JlcGxhY2UoJHNyY3RhYlskeV0sICgkcmVwbExlbiAhPT0gZmFsc2UpP3N1YnN0cigkcmVwbCwwLCRyZXBsTGVuKTokcmVwbCwgJHgsICgkcmVwbExlbiAhPT0gZmFsc2UpPyRyZXBsTGVuOnN0cmxlbigkcmVwbCkpOw0KCQl9DQoJfQkKCgoKLy8tLS0tIG1lcmdlZF9jb25maWcucGhwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKCg0KLyoNCiAqIFBIUCBRUiBDb2RlIGVuY29kZXINCiAqDQogKiBDb25maWcgZmlsZSwgdHVuZWQtdXAgZm9yIG1lcmdlZCB2ZXJpb24NCiAqLw0KICAgICANCiAgICBkZWZpbmUoJ1FSX0NBQ0hFQUJMRScsIGZhbHNlKTsgICAgICAgLy8gdXNlIGNhY2hlIC0gbW9yZSBkaXNrIHJlYWRzIGJ1dCBsZXNzIENQVSBwb3dlciwgbWFza3MgYW5kIGZvcm1hdCB0ZW1wbGF0ZXMgYXJlIHN0b3JlZCB0aGVyZQ0KICAgIGRlZmluZSgnUVJfQ0FDSEVfRElSJywgZmFsc2UpOyAgICAgICAvLyB1c2VkIHdoZW4gUVJfQ0FDSEVBQkxFID09PSB0cnVlDQogICAgZGVmaW5lKCdRUl9MT0dfRElSJywgZmFsc2UpOyAgICAgICAgIC8vIGRlZmF1bHQgZXJyb3IgbG9ncyBkaXIgICANCiAgICANCiAgICBkZWZpbmUoJ1FSX0ZJTkRfQkVTVF9NQVNLJywgdHJ1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRydWUsIGVzdGltYXRlcyBiZXN0IG1hc2sgKHNwZWMuIGRlZmF1bHQsIGJ1dCBleHRyZW1hbGx5IHNsb3c7IHNldCB0byBmYWxzZSB0byBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBib29zdCBidXQgKHByb3BhYmx5KSB3b3JzdCBxdWFsaXR5IGNvZGUNCiAgICBkZWZpbmUoJ1FSX0ZJTkRfRlJPTV9SQU5ET00nLCAyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgZmFsc2UsIGNoZWNrcyBhbGwgbWFza3MgYXZhaWxhYmxlLCBvdGhlcndpc2UgdmFsdWUgdGVsbHMgY291bnQgb2YgbWFza3MgbmVlZCB0byBiZSBjaGVja2VkLCBtYXNrIGlkIGFyZSBnb3QgcmFuZG9tbHkNCiAgICBkZWZpbmUoJ1FSX0RFRkFVTFRfTUFTSycsIDIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gUVJfRklORF9CRVNUX01BU0sgPT09IGZhbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIGRlZmluZSgnUVJfUE5HX01BWElNVU1fU0laRScsICAxMDI0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4aW11bSBhbGxvd2VkIHBuZyBpbWFnZSB3aWR0aCAoaW4gcGl4ZWxzKSwgdHVuZSB0byBtYWtlIHN1cmUgR0QgYW5kIFBIUCBjYW4gaGFuZGxlIHN1Y2ggYmlnIGltYWdlcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCgoKLy8tLS0tIHFydG9vbHMucGhwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKCg0KLyoNCiAqIFBIUCBRUiBDb2RlIGVuY29kZXINCiAqDQogKiBUb29sc2V0LCBoYW5keSBhbmQgZGVidWcgdXRpbGl0ZXMuDQogKg0KICogUEhQIFFSIENvZGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgTEdQTCAzDQogKiBDb3B5cmlnaHQgKEMpIDIwMTAgRG9taW5payBEemllbmlhIDxkZWx0YWxhYiBhdCBwb2N6dGEgZG90IGZtPg0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KICogdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciBhbnkgbGF0ZXIgdmVyc2lvbi4NCiAqDQogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VDQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KICoNCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQ0KICovDQoNCiAgICBjbGFzcyBRUnRvb2xzIHsNCiAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYmluYXJpemUoJGZyYW1lKQ0KICAgICAgICB7DQogICAgICAgICAgICAkbGVuID0gY291bnQoJGZyYW1lKTsNCiAgICAgICAgICAgIGZvcmVhY2ggKCRmcmFtZSBhcyAmJGZyYW1lTGluZSkgew0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGZvcigkaT0wOyAkaTwkbGVuOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICRmcmFtZUxpbmVbJGldID0gKG9yZCgkZnJhbWVMaW5lWyRpXSkmMSk/JzEnOicwJzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIHJldHVybiAkZnJhbWU7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRjcGRmQmFyY29kZUFycmF5KCRjb2RlLCAkbW9kZSA9ICdRUixMJywgJHRjUGRmVmVyc2lvbiA9ICc0LjUuMDM3JykNCiAgICAgICAgew0KICAgICAgICAgICAgJGJhcmNvZGVfYXJyYXkgPSBhcnJheSgpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZiAoIWlzX2FycmF5KCRtb2RlKSkNCiAgICAgICAgICAgICAgICAkbW9kZSA9IGV4cGxvZGUoJywnLCAkbW9kZSk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAkZWNjTGV2ZWwgPSAnTCc7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICBpZiAoY291bnQoJG1vZGUpID4gMSkgew0KICAgICAgICAgICAgICAgICRlY2NMZXZlbCA9ICRtb2RlWzFdOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgJHFyVGFiID0gUVJjb2RlOjp0ZXh0KCRjb2RlLCBmYWxzZSwgJGVjY0xldmVsKTsNCiAgICAgICAgICAgICRzaXplID0gY291bnQoJHFyVGFiKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICRiYXJjb2RlX2FycmF5WydudW1fcm93cyddID0gJHNpemU7DQogICAgICAgICAgICAkYmFyY29kZV9hcnJheVsnbnVtX2NvbHMnXSA9ICRzaXplOw0KICAgICAgICAgICAgJGJhcmNvZGVfYXJyYXlbJ2Jjb2RlJ10gPSBhcnJheSgpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yZWFjaCAoJHFyVGFiIGFzICRsaW5lKSB7DQogICAgICAgICAgICAgICAgJGFyckFkZCA9IGFycmF5KCk7DQogICAgICAgICAgICAgICAgZm9yZWFjaChzdHJfc3BsaXQoJGxpbmUpIGFzICRjaGFyKQ0KICAgICAgICAgICAgICAgICAgICAkYXJyQWRkW10gPSAoJGNoYXI9PScxJyk/MTowOw0KICAgICAgICAgICAgICAgICRiYXJjb2RlX2FycmF5WydiY29kZSddW10gPSAkYXJyQWRkOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIHJldHVybiAkYmFyY29kZV9hcnJheTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2xlYXJDYWNoZSgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHNlbGY6OiRmcmFtZXMgPSBhcnJheSgpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBidWlsZENhY2hlKCkNCiAgICAgICAgew0KCQkJUVJ0b29sczo6bWFya1RpbWUoJ2JlZm9yZV9idWlsZF9jYWNoZScpOw0KCQkJDQoJCQkkbWFzayA9IG5ldyBRUm1hc2soKTsNCiAgICAgICAgICAgIGZvciAoJGE9MTsgJGEgPD0gUVJTUEVDX1ZFUlNJT05fTUFYOyAkYSsrKSB7DQogICAgICAgICAgICAgICAgJGZyYW1lID0gUVJzcGVjOjpuZXdGcmFtZSgkYSk7DQogICAgICAgICAgICAgICAgaWYgKFFSX0lNQUdFKSB7DQogICAgICAgICAgICAgICAgICAgICRmaWxlTmFtZSA9IFFSX0NBQ0hFX0RJUi4nZnJhbWVfJy4kYS4nLnBuZyc7DQogICAgICAgICAgICAgICAgICAgIFFSaW1hZ2U6OnBuZyhzZWxmOjpiaW5hcml6ZSgkZnJhbWUpLCAkZmlsZU5hbWUsIDEsIDApOw0KICAgICAgICAgICAgICAgIH0NCgkJCQkNCgkJCQkkd2lkdGggPSBjb3VudCgkZnJhbWUpOw0KCQkJCSRiaXRNYXNrID0gYXJyYXlfZmlsbCgwLCAkd2lkdGgsIGFycmF5X2ZpbGwoMCwgJHdpZHRoLCAwKSk7DQoJCQkJZm9yICgkbWFza05vPTA7ICRtYXNrTm88ODsgJG1hc2tObysrKQ0KCQkJCQkkbWFzay0+bWFrZU1hc2tObygkbWFza05vLCAkd2lkdGgsICRmcmFtZSwgJGJpdE1hc2ssIHRydWUpOw0KICAgICAgICAgICAgfQ0KCQkJDQoJCQlRUnRvb2xzOjptYXJrVGltZSgnYWZ0ZXJfYnVpbGRfY2FjaGUnKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvZygkb3V0ZmlsZSwgJGVycikNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKFFSX0xPR19ESVIgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgaWYgKCRlcnIgIT0gJycpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRvdXRmaWxlICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9wdXRfY29udGVudHMoUVJfTE9HX0RJUi5iYXNlbmFtZSgkb3V0ZmlsZSkuJy1lcnJvcnMudHh0JywgZGF0ZSgnWS1tLWQgSDppOnMnKS4nOiAnLiRlcnIsIEZJTEVfQVBQRU5EKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKFFSX0xPR19ESVIuJ2Vycm9ycy50eHQnLCBkYXRlKCdZLW0tZCBIOmk6cycpLic6ICcuJGVyciwgRklMRV9BUFBFTkQpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSAgICANCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZHVtcE1hc2soJGZyYW1lKSANCiAgICAgICAgew0KICAgICAgICAgICAgJHdpZHRoID0gY291bnQoJGZyYW1lKTsNCiAgICAgICAgICAgIGZvcigkeT0wOyR5PCR3aWR0aDskeSsrKSB7DQogICAgICAgICAgICAgICAgZm9yKCR4PTA7JHg8JHdpZHRoOyR4KyspIHsNCiAgICAgICAgICAgICAgICAgICAgZWNobyBvcmQoJGZyYW1lWyR5XVskeF0pLicsJzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1hcmtUaW1lKCRtYXJrZXJJZCkNCiAgICAgICAgew0KICAgICAgICAgICAgbGlzdCgkdXNlYywgJHNlYykgPSBleHBsb2RlKCIgIiwgbWljcm90aW1lKCkpOw0KICAgICAgICAgICAgJHRpbWUgPSAoKGZsb2F0KSR1c2VjICsgKGZsb2F0KSRzZWMpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZiAoIWlzc2V0KCRHTE9CQUxTWydxcl90aW1lX2JlbmNoJ10pKQ0KICAgICAgICAgICAgICAgICRHTE9CQUxTWydxcl90aW1lX2JlbmNoJ10gPSBhcnJheSgpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAkR0xPQkFMU1sncXJfdGltZV9iZW5jaCddWyRtYXJrZXJJZF0gPSAkdGltZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdGltZUJlbmNobWFyaygpDQogICAgICAgIHsNCiAgICAgICAgICAgIHNlbGY6Om1hcmtUaW1lKCdmaW5pc2gnKTsNCiAgICAgICAgDQogICAgICAgICAgICAkbGFzdFRpbWUgPSAwOw0KICAgICAgICAgICAgJHN0YXJ0VGltZSA9IDA7DQogICAgICAgICAgICAkcCA9IDA7DQoNCiAgICAgICAgICAgIGVjaG8gJzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjEiPg0KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+PHRyIHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBzb2xpZCBzaWx2ZXIiPjx0ZCBjb2xzcGFuPSIyIiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPkJFTkNITUFSSzwvdGQ+PC90cj48L3RoZWFkPg0KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+JzsNCg0KICAgICAgICAgICAgZm9yZWFjaCgkR0xPQkFMU1sncXJfdGltZV9iZW5jaCddIGFzICRtYXJrZXJJZD0+JHRoaXNUaW1lKSB7DQogICAgICAgICAgICAgICAgaWYgKCRwID4gMCkgew0KICAgICAgICAgICAgICAgICAgICBlY2hvICc8dHI+PHRoIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij50aWxsICcuJG1hcmtlcklkLic6IDwvdGg+PHRkPicubnVtYmVyX2Zvcm1hdCgkdGhpc1RpbWUtJGxhc3RUaW1lLCA2KS4nczwvdGQ+PC90cj4nOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRzdGFydFRpbWUgPSAkdGhpc1RpbWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICRwKys7DQogICAgICAgICAgICAgICAgJGxhc3RUaW1lID0gJHRoaXNUaW1lOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBlY2hvICc8L3Rib2R5Pjx0Zm9vdD4NCiAgICAgICAgICAgICAgICA8dHIgc3R5bGU9ImJvcmRlci10b3A6MnB4IHNvbGlkIGJsYWNrIj48dGggc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPlRPVEFMOiA8L3RoPjx0ZD4nLm51bWJlcl9mb3JtYXQoJGxhc3RUaW1lLSRzdGFydFRpbWUsIDYpLidzPC90ZD48L3RyPg0KICAgICAgICAgICAgPC90Zm9vdD4NCiAgICAgICAgICAgIDwvdGFibGU+JzsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICB9DQogICAgDQogICAgLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgIA0KICAgIFFSdG9vbHM6Om1hcmtUaW1lKCdzdGFydCcpOw0KICAgIAoKCgovLy0tLS0gcXJzcGVjLnBocCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCgoNCi8qDQogKiBQSFAgUVIgQ29kZSBlbmNvZGVyDQogKg0KICogUVIgQ29kZSBzcGVjaWZpY2F0aW9ucw0KICoNCiAqIEJhc2VkIG9uIGxpYnFyZW5jb2RlIEMgbGlicmFyeSBkaXN0cmlidXRlZCB1bmRlciBMR1BMIDIuMQ0KICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEtlbnRhcm8gRnVrdWNoaSA8ZnVrdWNoaUBtZWdhdWkubmV0Pg0KICoNCiAqIFBIUCBRUiBDb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIExHUEwgMw0KICogQ29weXJpZ2h0IChDKSAyMDEwIERvbWluaWsgRHppZW5pYSA8ZGVsdGFsYWIgYXQgcG9jenRhIGRvdCBmbT4NCiAqDQogKiBUaGUgZm9sbG93aW5nIGRhdGEgLyBzcGVjaWZpY2F0aW9ucyBhcmUgdGFrZW4gZnJvbQ0KICogIlR3byBkaW1lbnNpb25hbCBzeW1ib2wgLS0gUVItY29kZSAtLSBCYXNpYyBTcGVjaWZpY2F0aW9uIiAoSklTIFgwNTEwOjIwMDQpDQogKiAgb3INCiAqICJBdXRvbWF0aWMgaWRlbnRpZmljYXRpb24gYW5kIGRhdGEgY2FwdHVyZSB0ZWNobmlxdWVzIC0tIA0KICogIFFSIENvZGUgMjAwNSBiYXIgY29kZSBzeW1ib2xvZ3kgc3BlY2lmaWNhdGlvbiIgKElTTy9JRUMgMTgwMDQ6MjAwNikNCiAqDQogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCiAqIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgYW55IGxhdGVyIHZlcnNpb24uDQogKg0KICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQ0KICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiAqDQogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0ENCiAqLw0KIA0KICAgIGRlZmluZSgnUVJTUEVDX1ZFUlNJT05fTUFYJywgNDApOw0KICAgIGRlZmluZSgnUVJTUEVDX1dJRFRIX01BWCcsICAgMTc3KTsNCg0KICAgIGRlZmluZSgnUVJDQVBfV0lEVEgnLCAgICAgICAgMCk7DQogICAgZGVmaW5lKCdRUkNBUF9XT1JEUycsICAgICAgICAxKTsNCiAgICBkZWZpbmUoJ1FSQ0FQX1JFTUlOREVSJywgICAgIDIpOw0KICAgIGRlZmluZSgnUVJDQVBfRUMnLCAgICAgICAgICAgMyk7DQoNCiAgICBjbGFzcyBRUnNwZWMgew0KICAgIA0KICAgICAgICBwdWJsaWMgc3RhdGljICRjYXBhY2l0eSA9IGFycmF5KA0KICAgICAgICAgICAgYXJyYXkoICAwLCAgICAwLCAwLCBhcnJheSggICAwLCAgICAwLCAgICAwLCAgICAwKSksDQogICAgICAgICAgICBhcnJheSggMjEsICAgMjYsIDAsIGFycmF5KCAgIDcsICAgMTAsICAgMTMsICAgMTcpKSwgLy8gMQ0KICAgICAgICAgICAgYXJyYXkoIDI1LCAgIDQ0LCA3LCBhcnJheSggIDEwLCAgIDE2LCAgIDIyLCAgIDI4KSksDQogICAgICAgICAgICBhcnJheSggMjksICAgNzAsIDcsIGFycmF5KCAgMTUsICAgMjYsICAgMzYsICAgNDQpKSwNCiAgICAgICAgICAgIGFycmF5KCAzMywgIDEwMCwgNywgYXJyYXkoICAyMCwgICAzNiwgICA1MiwgICA2NCkpLA0KICAgICAgICAgICAgYXJyYXkoIDM3LCAgMTM0LCA3LCBhcnJheSggIDI2LCAgIDQ4LCAgIDcyLCAgIDg4KSksIC8vIDUNCiAgICAgICAgICAgIGFycmF5KCA0MSwgIDE3MiwgNywgYXJyYXkoICAzNiwgICA2NCwgICA5NiwgIDExMikpLA0KICAgICAgICAgICAgYXJyYXkoIDQ1LCAgMTk2LCAwLCBhcnJheSggIDQwLCAgIDcyLCAgMTA4LCAgMTMwKSksDQogICAgICAgICAgICBhcnJheSggNDksICAyNDIsIDAsIGFycmF5KCAgNDgsICAgODgsICAxMzIsICAxNTYpKSwNCiAgICAgICAgICAgIGFycmF5KCA1MywgIDI5MiwgMCwgYXJyYXkoICA2MCwgIDExMCwgIDE2MCwgIDE5MikpLA0KICAgICAgICAgICAgYXJyYXkoIDU3LCAgMzQ2LCAwLCBhcnJheSggIDcyLCAgMTMwLCAgMTkyLCAgMjI0KSksIC8vMTANCiAgICAgICAgICAgIGFycmF5KCA2MSwgIDQwNCwgMCwgYXJyYXkoICA4MCwgIDE1MCwgIDIyNCwgIDI2NCkpLA0KICAgICAgICAgICAgYXJyYXkoIDY1LCAgNDY2LCAwLCBhcnJheSggIDk2LCAgMTc2LCAgMjYwLCAgMzA4KSksDQogICAgICAgICAgICBhcnJheSggNjksICA1MzIsIDAsIGFycmF5KCAxMDQsICAxOTgsICAyODgsICAzNTIpKSwNCiAgICAgICAgICAgIGFycmF5KCA3MywgIDU4MSwgMywgYXJyYXkoIDEyMCwgIDIxNiwgIDMyMCwgIDM4NCkpLA0KICAgICAgICAgICAgYXJyYXkoIDc3LCAgNjU1LCAzLCBhcnJheSggMTMyLCAgMjQwLCAgMzYwLCAgNDMyKSksIC8vMTUNCiAgICAgICAgICAgIGFycmF5KCA4MSwgIDczMywgMywgYXJyYXkoIDE0NCwgIDI4MCwgIDQwOCwgIDQ4MCkpLA0KICAgICAgICAgICAgYXJyYXkoIDg1LCAgODE1LCAzLCBhcnJheSggMTY4LCAgMzA4LCAgNDQ4LCAgNTMyKSksDQogICAgICAgICAgICBhcnJheSggODksICA5MDEsIDMsIGFycmF5KCAxODAsICAzMzgsICA1MDQsICA1ODgpKSwNCiAgICAgICAgICAgIGFycmF5KCA5MywgIDk5MSwgMywgYXJyYXkoIDE5NiwgIDM2NCwgIDU0NiwgIDY1MCkpLA0KICAgICAgICAgICAgYXJyYXkoIDk3LCAxMDg1LCAzLCBhcnJheSggMjI0LCAgNDE2LCAgNjAwLCAgNzAwKSksIC8vMjANCiAgICAgICAgICAgIGFycmF5KDEwMSwgMTE1NiwgNCwgYXJyYXkoIDIyNCwgIDQ0MiwgIDY0NCwgIDc1MCkpLA0KICAgICAgICAgICAgYXJyYXkoMTA1LCAxMjU4LCA0LCBhcnJheSggMjUyLCAgNDc2LCAgNjkwLCAgODE2KSksDQogICAgICAgICAgICBhcnJheSgxMDksIDEzNjQsIDQsIGFycmF5KCAyNzAsICA1MDQsICA3NTAsICA5MDApKSwNCiAgICAgICAgICAgIGFycmF5KDExMywgMTQ3NCwgNCwgYXJyYXkoIDMwMCwgIDU2MCwgIDgxMCwgIDk2MCkpLA0KICAgICAgICAgICAgYXJyYXkoMTE3LCAxNTg4LCA0LCBhcnJheSggMzEyLCAgNTg4LCAgODcwLCAxMDUwKSksIC8vMjUNCiAgICAgICAgICAgIGFycmF5KDEyMSwgMTcwNiwgNCwgYXJyYXkoIDMzNiwgIDY0NCwgIDk1MiwgMTExMCkpLA0KICAgICAgICAgICAgYXJyYXkoMTI1LCAxODI4LCA0LCBhcnJheSggMzYwLCAgNzAwLCAxMDIwLCAxMjAwKSksDQogICAgICAgICAgICBhcnJheSgxMjksIDE5MjEsIDMsIGFycmF5KCAzOTAsICA3MjgsIDEwNTAsIDEyNjApKSwNCiAgICAgICAgICAgIGFycmF5KDEzMywgMjA1MSwgMywgYXJyYXkoIDQyMCwgIDc4NCwgMTE0MCwgMTM1MCkpLA0KICAgICAgICAgICAgYXJyYXkoMTM3LCAyMTg1LCAzLCBhcnJheSggNDUwLCAgODEyLCAxMjAwLCAxNDQwKSksIC8vMzANCiAgICAgICAgICAgIGFycmF5KDE0MSwgMjMyMywgMywgYXJyYXkoIDQ4MCwgIDg2OCwgMTI5MCwgMTUzMCkpLA0KICAgICAgICAgICAgYXJyYXkoMTQ1LCAyNDY1LCAzLCBhcnJheSggNTEwLCAgOTI0LCAxMzUwLCAxNjIwKSksDQogICAgICAgICAgICBhcnJheSgxNDksIDI2MTEsIDMsIGFycmF5KCA1NDAsICA5ODAsIDE0NDAsIDE3MTApKSwNCiAgICAgICAgICAgIGFycmF5KDE1MywgMjc2MSwgMywgYXJyYXkoIDU3MCwgMTAzNiwgMTUzMCwgMTgwMCkpLA0KICAgICAgICAgICAgYXJyYXkoMTU3LCAyODc2LCAwLCBhcnJheSggNTcwLCAxMDY0LCAxNTkwLCAxODkwKSksIC8vMzUNCiAgICAgICAgICAgIGFycmF5KDE2MSwgMzAzNCwgMCwgYXJyYXkoIDYwMCwgMTEyMCwgMTY4MCwgMTk4MCkpLA0KICAgICAgICAgICAgYXJyYXkoMTY1LCAzMTk2LCAwLCBhcnJheSggNjMwLCAxMjA0LCAxNzcwLCAyMTAwKSksDQogICAgICAgICAgICBhcnJheSgxNjksIDMzNjIsIDAsIGFycmF5KCA2NjAsIDEyNjAsIDE4NjAsIDIyMjApKSwNCiAgICAgICAgICAgIGFycmF5KDE3MywgMzUzMiwgMCwgYXJyYXkoIDcyMCwgMTMxNiwgMTk1MCwgMjMxMCkpLA0KICAgICAgICAgICAgYXJyYXkoMTc3LCAzNzA2LCAwLCBhcnJheSggNzUwLCAxMzcyLCAyMDQwLCAyNDMwKSkgLy80MA0KICAgICAgICApOw0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RGF0YUxlbmd0aCgkdmVyc2lvbiwgJGxldmVsKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gc2VsZjo6JGNhcGFjaXR5WyR2ZXJzaW9uXVtRUkNBUF9XT1JEU10gLSBzZWxmOjokY2FwYWNpdHlbJHZlcnNpb25dW1FSQ0FQX0VDXVskbGV2ZWxdOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFQ0NMZW5ndGgoJHZlcnNpb24sICRsZXZlbCkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuIHNlbGY6OiRjYXBhY2l0eVskdmVyc2lvbl1bUVJDQVBfRUNdWyRsZXZlbF07DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFdpZHRoKCR2ZXJzaW9uKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gc2VsZjo6JGNhcGFjaXR5WyR2ZXJzaW9uXVtRUkNBUF9XSURUSF07DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJlbWFpbmRlcigkdmVyc2lvbikNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuIHNlbGY6OiRjYXBhY2l0eVskdmVyc2lvbl1bUVJDQVBfUkVNSU5ERVJdOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRNaW5pbXVtVmVyc2lvbigkc2l6ZSwgJGxldmVsKQ0KICAgICAgICB7DQoNCiAgICAgICAgICAgIGZvcigkaT0xOyAkaTw9IFFSU1BFQ19WRVJTSU9OX01BWDsgJGkrKykgew0KICAgICAgICAgICAgICAgICR3b3JkcyAgPSBzZWxmOjokY2FwYWNpdHlbJGldW1FSQ0FQX1dPUkRTXSAtIHNlbGY6OiRjYXBhY2l0eVskaV1bUVJDQVBfRUNdWyRsZXZlbF07DQogICAgICAgICAgICAgICAgaWYoJHdvcmRzID49ICRzaXplKSANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgIH0NCiAgICANCiAgICAgICAgLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgIA0KICAgICAgICBwdWJsaWMgc3RhdGljICRsZW5ndGhUYWJsZUJpdHMgPSBhcnJheSgNCiAgICAgICAgICAgIGFycmF5KDEwLCAxMiwgMTQpLA0KICAgICAgICAgICAgYXJyYXkoIDksIDExLCAxMyksDQogICAgICAgICAgICBhcnJheSggOCwgMTYsIDE2KSwNCiAgICAgICAgICAgIGFycmF5KCA4LCAxMCwgMTIpDQogICAgICAgICk7DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsZW5ndGhJbmRpY2F0b3IoJG1vZGUsICR2ZXJzaW9uKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoJG1vZGUgPT0gUVJfTU9ERV9TVFJVQ1RVUkUpDQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICBpZiAoJHZlcnNpb24gPD0gOSkgew0KICAgICAgICAgICAgICAgICRsID0gMDsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHZlcnNpb24gPD0gMjYpIHsNCiAgICAgICAgICAgICAgICAkbCA9IDE7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRsID0gMjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcmV0dXJuIHNlbGY6OiRsZW5ndGhUYWJsZUJpdHNbJG1vZGVdWyRsXTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWF4aW11bVdvcmRzKCRtb2RlLCAkdmVyc2lvbikNCiAgICAgICAgew0KICAgICAgICAgICAgaWYoJG1vZGUgPT0gUVJfTU9ERV9TVFJVQ1RVUkUpIA0KICAgICAgICAgICAgICAgIHJldHVybiAzOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoJHZlcnNpb24gPD0gOSkgew0KICAgICAgICAgICAgICAgICRsID0gMDsNCiAgICAgICAgICAgIH0gZWxzZSBpZigkdmVyc2lvbiA8PSAyNikgew0KICAgICAgICAgICAgICAgICRsID0gMTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJGwgPSAyOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkYml0cyA9IHNlbGY6OiRsZW5ndGhUYWJsZUJpdHNbJG1vZGVdWyRsXTsNCiAgICAgICAgICAgICR3b3JkcyA9ICgxIDw8ICRiaXRzKSAtIDE7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmKCRtb2RlID09IFFSX01PREVfS0FOSkkpIHsNCiAgICAgICAgICAgICAgICAkd29yZHMgKj0gMjsgLy8gdGhlIG51bWJlciBvZiBieXRlcyBpcyByZXF1aXJlZA0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gJHdvcmRzOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gRXJyb3IgY29ycmVjdGlvbiBjb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIC8vIFRhYmxlIG9mIHRoZSBlcnJvciBjb3JyZWN0aW9uIGNvZGUgKFJlZWQtU29sb21vbiBibG9jaykNCiAgICAgICAgLy8gU2VlIFRhYmxlIDEyLTE2IChwcC4zMC0zNiksIEpJUyBYMDUxMDoyMDA0Lg0KDQogICAgICAgIHB1YmxpYyBzdGF0aWMgJGVjY1RhYmxlID0gYXJyYXkoDQogICAgICAgICAgICBhcnJheShhcnJheSggMCwgIDApLCBhcnJheSggMCwgIDApLCBhcnJheSggMCwgIDApLCBhcnJheSggMCwgIDApKSwNCiAgICAgICAgICAgIGFycmF5KGFycmF5KCAxLCAgMCksIGFycmF5KCAxLCAgMCksIGFycmF5KCAxLCAgMCksIGFycmF5KCAxLCAgMCkpLCAvLyAxDQogICAgICAgICAgICBhcnJheShhcnJheSggMSwgIDApLCBhcnJheSggMSwgIDApLCBhcnJheSggMSwgIDApLCBhcnJheSggMSwgIDApKSwNCiAgICAgICAgICAgIGFycmF5KGFycmF5KCAxLCAgMCksIGFycmF5KCAxLCAgMCksIGFycmF5KCAyLCAgMCksIGFycmF5KCAyLCAgMCkpLA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDEsICAwKSwgYXJyYXkoIDIsICAwKSwgYXJyYXkoIDIsICAwKSwgYXJyYXkoIDQsICAwKSksDQogICAgICAgICAgICBhcnJheShhcnJheSggMSwgIDApLCBhcnJheSggMiwgIDApLCBhcnJheSggMiwgIDIpLCBhcnJheSggMiwgIDIpKSwgLy8gNQ0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDIsICAwKSwgYXJyYXkoIDQsICAwKSwgYXJyYXkoIDQsICAwKSwgYXJyYXkoIDQsICAwKSksDQogICAgICAgICAgICBhcnJheShhcnJheSggMiwgIDApLCBhcnJheSggNCwgIDApLCBhcnJheSggMiwgIDQpLCBhcnJheSggNCwgIDEpKSwNCiAgICAgICAgICAgIGFycmF5KGFycmF5KCAyLCAgMCksIGFycmF5KCAyLCAgMiksIGFycmF5KCA0LCAgMiksIGFycmF5KCA0LCAgMikpLA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDIsICAwKSwgYXJyYXkoIDMsICAyKSwgYXJyYXkoIDQsICA0KSwgYXJyYXkoIDQsICA0KSksDQogICAgICAgICAgICBhcnJheShhcnJheSggMiwgIDIpLCBhcnJheSggNCwgIDEpLCBhcnJheSggNiwgIDIpLCBhcnJheSggNiwgIDIpKSwgLy8xMA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDQsICAwKSwgYXJyYXkoIDEsICA0KSwgYXJyYXkoIDQsICA0KSwgYXJyYXkoIDMsICA4KSksDQogICAgICAgICAgICBhcnJheShhcnJheSggMiwgIDIpLCBhcnJheSggNiwgIDIpLCBhcnJheSggNCwgIDYpLCBhcnJheSggNywgIDQpKSwNCiAgICAgICAgICAgIGFycmF5KGFycmF5KCA0LCAgMCksIGFycmF5KCA4LCAgMSksIGFycmF5KCA4LCAgNCksIGFycmF5KDEyLCAgNCkpLA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDMsICAxKSwgYXJyYXkoIDQsICA1KSwgYXJyYXkoMTEsICA1KSwgYXJyYXkoMTEsICA1KSksDQogICAgICAgICAgICBhcnJheShhcnJheSggNSwgIDEpLCBhcnJheSggNSwgIDUpLCBhcnJheSggNSwgIDcpLCBhcnJheSgxMSwgIDcpKSwgLy8xNQ0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDUsICAxKSwgYXJyYXkoIDcsICAzKSwgYXJyYXkoMTUsICAyKSwgYXJyYXkoIDMsIDEzKSksDQogICAgICAgICAgICBhcnJheShhcnJheSggMSwgIDUpLCBhcnJheSgxMCwgIDEpLCBhcnJheSggMSwgMTUpLCBhcnJheSggMiwgMTcpKSwNCiAgICAgICAgICAgIGFycmF5KGFycmF5KCA1LCAgMSksIGFycmF5KCA5LCAgNCksIGFycmF5KDE3LCAgMSksIGFycmF5KCAyLCAxOSkpLA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDMsICA0KSwgYXJyYXkoIDMsIDExKSwgYXJyYXkoMTcsICA0KSwgYXJyYXkoIDksIDE2KSksDQogICAgICAgICAgICBhcnJheShhcnJheSggMywgIDUpLCBhcnJheSggMywgMTMpLCBhcnJheSgxNSwgIDUpLCBhcnJheSgxNSwgMTApKSwgLy8yMA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDQsICA0KSwgYXJyYXkoMTcsICAwKSwgYXJyYXkoMTcsICA2KSwgYXJyYXkoMTksICA2KSksDQogICAgICAgICAgICBhcnJheShhcnJheSggMiwgIDcpLCBhcnJheSgxNywgIDApLCBhcnJheSggNywgMTYpLCBhcnJheSgzNCwgIDApKSwNCiAgICAgICAgICAgIGFycmF5KGFycmF5KCA0LCAgNSksIGFycmF5KCA0LCAxNCksIGFycmF5KDExLCAxNCksIGFycmF5KDE2LCAxNCkpLA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDYsICA0KSwgYXJyYXkoIDYsIDE0KSwgYXJyYXkoMTEsIDE2KSwgYXJyYXkoMzAsICAyKSksDQogICAgICAgICAgICBhcnJheShhcnJheSggOCwgIDQpLCBhcnJheSggOCwgMTMpLCBhcnJheSggNywgMjIpLCBhcnJheSgyMiwgMTMpKSwgLy8yNQ0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoMTAsICAyKSwgYXJyYXkoMTksICA0KSwgYXJyYXkoMjgsICA2KSwgYXJyYXkoMzMsICA0KSksDQogICAgICAgICAgICBhcnJheShhcnJheSggOCwgIDQpLCBhcnJheSgyMiwgIDMpLCBhcnJheSggOCwgMjYpLCBhcnJheSgxMiwgMjgpKSwNCiAgICAgICAgICAgIGFycmF5KGFycmF5KCAzLCAxMCksIGFycmF5KCAzLCAyMyksIGFycmF5KCA0LCAzMSksIGFycmF5KDExLCAzMSkpLA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDcsICA3KSwgYXJyYXkoMjEsICA3KSwgYXJyYXkoIDEsIDM3KSwgYXJyYXkoMTksIDI2KSksDQogICAgICAgICAgICBhcnJheShhcnJheSggNSwgMTApLCBhcnJheSgxOSwgMTApLCBhcnJheSgxNSwgMjUpLCBhcnJheSgyMywgMjUpKSwgLy8zMA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoMTMsICAzKSwgYXJyYXkoIDIsIDI5KSwgYXJyYXkoNDIsICAxKSwgYXJyYXkoMjMsIDI4KSksDQogICAgICAgICAgICBhcnJheShhcnJheSgxNywgIDApLCBhcnJheSgxMCwgMjMpLCBhcnJheSgxMCwgMzUpLCBhcnJheSgxOSwgMzUpKSwNCiAgICAgICAgICAgIGFycmF5KGFycmF5KDE3LCAgMSksIGFycmF5KDE0LCAyMSksIGFycmF5KDI5LCAxOSksIGFycmF5KDExLCA0NikpLA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoMTMsICA2KSwgYXJyYXkoMTQsIDIzKSwgYXJyYXkoNDQsICA3KSwgYXJyYXkoNTksICAxKSksDQogICAgICAgICAgICBhcnJheShhcnJheSgxMiwgIDcpLCBhcnJheSgxMiwgMjYpLCBhcnJheSgzOSwgMTQpLCBhcnJheSgyMiwgNDEpKSwgLy8zNQ0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDYsIDE0KSwgYXJyYXkoIDYsIDM0KSwgYXJyYXkoNDYsIDEwKSwgYXJyYXkoIDIsIDY0KSksDQogICAgICAgICAgICBhcnJheShhcnJheSgxNywgIDQpLCBhcnJheSgyOSwgMTQpLCBhcnJheSg0OSwgMTApLCBhcnJheSgyNCwgNDYpKSwNCiAgICAgICAgICAgIGFycmF5KGFycmF5KCA0LCAxOCksIGFycmF5KDEzLCAzMiksIGFycmF5KDQ4LCAxNCksIGFycmF5KDQyLCAzMikpLA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoMjAsICA0KSwgYXJyYXkoNDAsICA3KSwgYXJyYXkoNDMsIDIyKSwgYXJyYXkoMTAsIDY3KSksDQogICAgICAgICAgICBhcnJheShhcnJheSgxOSwgIDYpLCBhcnJheSgxOCwgMzEpLCBhcnJheSgzNCwgMzQpLCBhcnJheSgyMCwgNjEpKSwvLzQwDQogICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgLy8gQ0FDSEVBQkxFISEhDQogICAgICAgIA0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEVjY1NwZWMoJHZlcnNpb24sICRsZXZlbCwgYXJyYXkgJiRzcGVjKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoY291bnQoJHNwZWMpIDwgNSkgew0KICAgICAgICAgICAgICAgICRzcGVjID0gYXJyYXkoMCwwLDAsMCwwKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGIxICAgPSBzZWxmOjokZWNjVGFibGVbJHZlcnNpb25dWyRsZXZlbF1bMF07DQogICAgICAgICAgICAkYjIgICA9IHNlbGY6OiRlY2NUYWJsZVskdmVyc2lvbl1bJGxldmVsXVsxXTsNCiAgICAgICAgICAgICRkYXRhID0gc2VsZjo6Z2V0RGF0YUxlbmd0aCgkdmVyc2lvbiwgJGxldmVsKTsNCiAgICAgICAgICAgICRlY2MgID0gc2VsZjo6Z2V0RUNDTGVuZ3RoKCR2ZXJzaW9uLCAkbGV2ZWwpOw0KDQogICAgICAgICAgICBpZigkYjIgPT0gMCkgew0KICAgICAgICAgICAgICAgICRzcGVjWzBdID0gJGIxOw0KICAgICAgICAgICAgICAgICRzcGVjWzFdID0gKGludCkoJGRhdGEgLyAkYjEpOw0KICAgICAgICAgICAgICAgICRzcGVjWzJdID0gKGludCkoJGVjYyAvICRiMSk7DQogICAgICAgICAgICAgICAgJHNwZWNbM10gPSAwOyANCiAgICAgICAgICAgICAgICAkc3BlY1s0XSA9IDA7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRzcGVjWzBdID0gJGIxOw0KICAgICAgICAgICAgICAgICRzcGVjWzFdID0gKGludCkoJGRhdGEgLyAoJGIxICsgJGIyKSk7DQogICAgICAgICAgICAgICAgJHNwZWNbMl0gPSAoaW50KSgkZWNjICAvICgkYjEgKyAkYjIpKTsNCiAgICAgICAgICAgICAgICAkc3BlY1szXSA9ICRiMjsNCiAgICAgICAgICAgICAgICAkc3BlY1s0XSA9ICRzcGVjWzFdICsgMTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vIEFsaWdubWVudCBwYXR0ZXJuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogICAgICAgIC8vIFBvc2l0aW9ucyBvZiBhbGlnbm1lbnQgcGF0dGVybnMuDQogICAgICAgIC8vIFRoaXMgYXJyYXkgaW5jbHVkZXMgb25seSB0aGUgc2Vjb25kIGFuZCB0aGUgdGhpcmQgcG9zaXRpb24gb2YgdGhlIA0KICAgICAgICAvLyBhbGlnbm1lbnQgcGF0dGVybnMuIFJlc3Qgb2YgdGhlbSBjYW4gYmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBkaXN0YW5jZSANCiAgICAgICAgLy8gYmV0d2VlbiB0aGVtLg0KICAgICAgICAgDQogICAgICAgIC8vIFNlZSBUYWJsZSAxIGluIEFwcGVuZGl4IEUgKHBwLjcxKSBvZiBKSVMgWDA1MTA6MjAwNC4NCiAgICAgICAgIA0KICAgICAgICBwdWJsaWMgc3RhdGljICRhbGlnbm1lbnRQYXR0ZXJuID0gYXJyYXkoICAgICAgDQogICAgICAgICAgICBhcnJheSggMCwgIDApLA0KICAgICAgICAgICAgYXJyYXkoIDAsICAwKSwgYXJyYXkoMTgsICAwKSwgYXJyYXkoMjIsICAwKSwgYXJyYXkoMjYsICAwKSwgYXJyYXkoMzAsICAwKSwgLy8gMS0gNQ0KICAgICAgICAgICAgYXJyYXkoMzQsICAwKSwgYXJyYXkoMjIsIDM4KSwgYXJyYXkoMjQsIDQyKSwgYXJyYXkoMjYsIDQ2KSwgYXJyYXkoMjgsIDUwKSwgLy8gNi0xMA0KICAgICAgICAgICAgYXJyYXkoMzAsIDU0KSwgYXJyYXkoMzIsIDU4KSwgYXJyYXkoMzQsIDYyKSwgYXJyYXkoMjYsIDQ2KSwgYXJyYXkoMjYsIDQ4KSwgLy8xMS0xNQ0KICAgICAgICAgICAgYXJyYXkoMjYsIDUwKSwgYXJyYXkoMzAsIDU0KSwgYXJyYXkoMzAsIDU2KSwgYXJyYXkoMzAsIDU4KSwgYXJyYXkoMzQsIDYyKSwgLy8xNi0yMA0KICAgICAgICAgICAgYXJyYXkoMjgsIDUwKSwgYXJyYXkoMjYsIDUwKSwgYXJyYXkoMzAsIDU0KSwgYXJyYXkoMjgsIDU0KSwgYXJyYXkoMzIsIDU4KSwgLy8yMS0yNQ0KICAgICAgICAgICAgYXJyYXkoMzAsIDU4KSwgYXJyYXkoMzQsIDYyKSwgYXJyYXkoMjYsIDUwKSwgYXJyYXkoMzAsIDU0KSwgYXJyYXkoMjYsIDUyKSwgLy8yNi0zMA0KICAgICAgICAgICAgYXJyYXkoMzAsIDU2KSwgYXJyYXkoMzQsIDYwKSwgYXJyYXkoMzAsIDU4KSwgYXJyYXkoMzQsIDYyKSwgYXJyYXkoMzAsIDU0KSwgLy8zMS0zNQ0KICAgICAgICAgICAgYXJyYXkoMjQsIDUwKSwgYXJyYXkoMjgsIDU0KSwgYXJyYXkoMzIsIDU4KSwgYXJyYXkoMjYsIDU0KSwgYXJyYXkoMzAsIDU4KSwgLy8zNS00MA0KICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICANCiAgICAgICAgLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgICAqIFB1dCBhbiBhbGlnbm1lbnQgbWFya2VyLg0KICAgICAgICAgKiBAcGFyYW0gZnJhbWUNCiAgICAgICAgICogQHBhcmFtIHdpZHRoDQogICAgICAgICAqIEBwYXJhbSBveCxveSBjZW50ZXIgY29vcmRpbmF0ZSBvZiB0aGUgcGF0dGVybg0KICAgICAgICAgKi8NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwdXRBbGlnbm1lbnRNYXJrZXIoYXJyYXkgJiRmcmFtZSwgJG94LCAkb3kpDQogICAgICAgIHsNCiAgICAgICAgICAgICRmaW5kZXIgPSBhcnJheSgNCiAgICAgICAgICAgICAgICAiXHhhMVx4YTFceGExXHhhMVx4YTEiLA0KICAgICAgICAgICAgICAgICJceGExXHhhMFx4YTBceGEwXHhhMSIsDQogICAgICAgICAgICAgICAgIlx4YTFceGEwXHhhMVx4YTBceGExIiwNCiAgICAgICAgICAgICAgICAiXHhhMVx4YTBceGEwXHhhMFx4YTEiLA0KICAgICAgICAgICAgICAgICJceGExXHhhMVx4YTFceGExXHhhMSINCiAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICR5U3RhcnQgPSAkb3ktMjsgICAgICAgICANCiAgICAgICAgICAgICR4U3RhcnQgPSAkb3gtMjsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yKCR5PTA7ICR5PDU7ICR5KyspIHsNCiAgICAgICAgICAgICAgICBRUnN0cjo6c2V0KCRmcmFtZSwgJHhTdGFydCwgJHlTdGFydCskeSwgJGZpbmRlclskeV0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHV0QWxpZ25tZW50UGF0dGVybigkdmVyc2lvbiwgJiRmcmFtZSwgJHdpZHRoKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZigkdmVyc2lvbiA8IDIpDQogICAgICAgICAgICAgICAgcmV0dXJuOw0KDQogICAgICAgICAgICAkZCA9IHNlbGY6OiRhbGlnbm1lbnRQYXR0ZXJuWyR2ZXJzaW9uXVsxXSAtIHNlbGY6OiRhbGlnbm1lbnRQYXR0ZXJuWyR2ZXJzaW9uXVswXTsNCiAgICAgICAgICAgIGlmKCRkIDwgMCkgew0KICAgICAgICAgICAgICAgICR3ID0gMjsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJHcgPSAoaW50KSgoJHdpZHRoIC0gc2VsZjo6JGFsaWdubWVudFBhdHRlcm5bJHZlcnNpb25dWzBdKSAvICRkICsgMik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmKCR3ICogJHcgLSAzID09IDEpIHsNCiAgICAgICAgICAgICAgICAkeCA9IHNlbGY6OiRhbGlnbm1lbnRQYXR0ZXJuWyR2ZXJzaW9uXVswXTsNCiAgICAgICAgICAgICAgICAkeSA9IHNlbGY6OiRhbGlnbm1lbnRQYXR0ZXJuWyR2ZXJzaW9uXVswXTsNCiAgICAgICAgICAgICAgICBzZWxmOjpwdXRBbGlnbm1lbnRNYXJrZXIoJGZyYW1lLCAkeCwgJHkpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGN4ID0gc2VsZjo6JGFsaWdubWVudFBhdHRlcm5bJHZlcnNpb25dWzBdOw0KICAgICAgICAgICAgZm9yKCR4PTE7ICR4PCR3IC0gMTsgJHgrKykgew0KICAgICAgICAgICAgICAgIHNlbGY6OnB1dEFsaWdubWVudE1hcmtlcigkZnJhbWUsIDYsICRjeCk7DQogICAgICAgICAgICAgICAgc2VsZjo6cHV0QWxpZ25tZW50TWFya2VyKCRmcmFtZSwgJGN4LCAgNik7DQogICAgICAgICAgICAgICAgJGN4ICs9ICRkOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkY3kgPSBzZWxmOjokYWxpZ25tZW50UGF0dGVyblskdmVyc2lvbl1bMF07DQogICAgICAgICAgICBmb3IoJHk9MDsgJHk8JHctMTsgJHkrKykgew0KICAgICAgICAgICAgICAgICRjeCA9IHNlbGY6OiRhbGlnbm1lbnRQYXR0ZXJuWyR2ZXJzaW9uXVswXTsNCiAgICAgICAgICAgICAgICBmb3IoJHg9MDsgJHg8JHctMTsgJHgrKykgew0KICAgICAgICAgICAgICAgICAgICBzZWxmOjpwdXRBbGlnbm1lbnRNYXJrZXIoJGZyYW1lLCAkY3gsICRjeSk7DQogICAgICAgICAgICAgICAgICAgICRjeCArPSAkZDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGN5ICs9ICRkOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy8gVmVyc2lvbiBpbmZvcm1hdGlvbiBwYXR0ZXJuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCgkJLy8gVmVyc2lvbiBpbmZvcm1hdGlvbiBwYXR0ZXJuIChCQ0ggY29kZWQpLg0KICAgICAgICAvLyBTZWUgVGFibGUgMSBpbiBBcHBlbmRpeCBEIChwcC42OCkgb2YgSklTIFgwNTEwOjIwMDQuDQogICAgICAgIA0KCQkvLyBzaXplOiBbUVJTUEVDX1ZFUlNJT05fTUFYIC0gNl0NCgkJDQogICAgICAgIHB1YmxpYyBzdGF0aWMgJHZlcnNpb25QYXR0ZXJuID0gYXJyYXkoDQogICAgICAgICAgICAweDA3Yzk0LCAweDA4NWJjLCAweDA5YTk5LCAweDBhNGQzLCAweDBiYmY2LCAweDBjNzYyLCAweDBkODQ3LCAweDBlNjBkLA0KICAgICAgICAgICAgMHgwZjkyOCwgMHgxMGI3OCwgMHgxMTQ1ZCwgMHgxMmExNywgMHgxMzUzMiwgMHgxNDlhNiwgMHgxNTY4MywgMHgxNjhjOSwNCiAgICAgICAgICAgIDB4MTc3ZWMsIDB4MThlYzQsIDB4MTkxZTEsIDB4MWFmYWIsIDB4MWIwOGUsIDB4MWNjMWEsIDB4MWQzM2YsIDB4MWVkNzUsDQogICAgICAgICAgICAweDFmMjUwLCAweDIwOWQ1LCAweDIxNmYwLCAweDIyOGJhLCAweDIzNzlmLCAweDI0YjBiLCAweDI1NDJlLCAweDI2YTY0LA0KICAgICAgICAgICAgMHgyNzU0MSwgMHgyOGM2OQ0KICAgICAgICApOw0KDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFZlcnNpb25QYXR0ZXJuKCR2ZXJzaW9uKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZigkdmVyc2lvbiA8IDcgfHwgJHZlcnNpb24gPiBRUlNQRUNfVkVSU0lPTl9NQVgpDQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQoNCiAgICAgICAgICAgIHJldHVybiBzZWxmOjokdmVyc2lvblBhdHRlcm5bJHZlcnNpb24gLTddOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gRm9ybWF0IGluZm9ybWF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIC8vIFNlZSBjYWxjRm9ybWF0SW5mbyBpbiB0ZXN0cy90ZXN0X3Fyc3BlYy5jIChvcmdpbmFsIHFyZW5jb2RlIGMgbGliKQ0KICAgICAgICANCiAgICAgICAgcHVibGljIHN0YXRpYyAkZm9ybWF0SW5mbyA9IGFycmF5KA0KICAgICAgICAgICAgYXJyYXkoMHg3N2M0LCAweDcyZjMsIDB4N2RhYSwgMHg3ODlkLCAweDY2MmYsIDB4NjMxOCwgMHg2YzQxLCAweDY5NzYpLA0KICAgICAgICAgICAgYXJyYXkoMHg1NDEyLCAweDUxMjUsIDB4NWU3YywgMHg1YjRiLCAweDQ1ZjksIDB4NDBjZSwgMHg0Zjk3LCAweDRhYTApLA0KICAgICAgICAgICAgYXJyYXkoMHgzNTVmLCAweDMwNjgsIDB4M2YzMSwgMHgzYTA2LCAweDI0YjQsIDB4MjE4MywgMHgyZWRhLCAweDJiZWQpLA0KICAgICAgICAgICAgYXJyYXkoMHgxNjg5LCAweDEzYmUsIDB4MWNlNywgMHgxOWQwLCAweDA3NjIsIDB4MDI1NSwgMHgwZDBjLCAweDA4M2IpDQogICAgICAgICk7DQoNCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRGb3JtYXRJbmZvKCRtYXNrLCAkbGV2ZWwpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmKCRtYXNrIDwgMCB8fCAkbWFzayA+IDcpDQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICBpZigkbGV2ZWwgPCAwIHx8ICRsZXZlbCA+IDMpDQogICAgICAgICAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICByZXR1cm4gc2VsZjo6JGZvcm1hdEluZm9bJGxldmVsXVskbWFza107DQogICAgICAgIH0NCg0KICAgICAgICAvLyBGcmFtZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgLy8gQ2FjaGUgb2YgaW5pdGlhbCBmcmFtZXMuDQogICAgICAgICANCiAgICAgICAgcHVibGljIHN0YXRpYyAkZnJhbWVzID0gYXJyYXkoKTsNCg0KICAgICAgICAvKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgICogUHV0IGEgZmluZGVyIHBhdHRlcm4uDQogICAgICAgICAqIEBwYXJhbSBmcmFtZQ0KICAgICAgICAgKiBAcGFyYW0gd2lkdGgNCiAgICAgICAgICogQHBhcmFtIG94LG95IHVwcGVyLWxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgcGF0dGVybg0KICAgICAgICAgKi8NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwdXRGaW5kZXJQYXR0ZXJuKCYkZnJhbWUsICRveCwgJG95KQ0KICAgICAgICB7DQogICAgICAgICAgICAkZmluZGVyID0gYXJyYXkoDQogICAgICAgICAgICAgICAgIlx4YzFceGMxXHhjMVx4YzFceGMxXHhjMVx4YzEiLA0KICAgICAgICAgICAgICAgICJceGMxXHhjMFx4YzBceGMwXHhjMFx4YzBceGMxIiwNCiAgICAgICAgICAgICAgICAiXHhjMVx4YzBceGMxXHhjMVx4YzFceGMwXHhjMSIsDQogICAgICAgICAgICAgICAgIlx4YzFceGMwXHhjMVx4YzFceGMxXHhjMFx4YzEiLA0KICAgICAgICAgICAgICAgICJceGMxXHhjMFx4YzFceGMxXHhjMVx4YzBceGMxIiwNCiAgICAgICAgICAgICAgICAiXHhjMVx4YzBceGMwXHhjMFx4YzBceGMwXHhjMSIsDQogICAgICAgICAgICAgICAgIlx4YzFceGMxXHhjMVx4YzFceGMxXHhjMVx4YzEiDQogICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yKCR5PTA7ICR5PDc7ICR5KyspIHsNCiAgICAgICAgICAgICAgICBRUnN0cjo6c2V0KCRmcmFtZSwgJG94LCAkb3krJHksICRmaW5kZXJbJHldKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyYW1lKCR2ZXJzaW9uKQ0KICAgICAgICB7DQogICAgICAgICAgICAkd2lkdGggPSBzZWxmOjokY2FwYWNpdHlbJHZlcnNpb25dW1FSQ0FQX1dJRFRIXTsNCiAgICAgICAgICAgICRmcmFtZUxpbmUgPSBzdHJfcmVwZWF0ICgiXDAiLCAkd2lkdGgpOw0KICAgICAgICAgICAgJGZyYW1lID0gYXJyYXlfZmlsbCgwLCAkd2lkdGgsICRmcmFtZUxpbmUpOw0KDQogICAgICAgICAgICAvLyBGaW5kZXIgcGF0dGVybg0KICAgICAgICAgICAgc2VsZjo6cHV0RmluZGVyUGF0dGVybigkZnJhbWUsIDAsIDApOw0KICAgICAgICAgICAgc2VsZjo6cHV0RmluZGVyUGF0dGVybigkZnJhbWUsICR3aWR0aCAtIDcsIDApOw0KICAgICAgICAgICAgc2VsZjo6cHV0RmluZGVyUGF0dGVybigkZnJhbWUsIDAsICR3aWR0aCAtIDcpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAvLyBTZXBhcmF0b3INCiAgICAgICAgICAgICR5T2Zmc2V0ID0gJHdpZHRoIC0gNzsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yKCR5PTA7ICR5PDc7ICR5KyspIHsNCiAgICAgICAgICAgICAgICAkZnJhbWVbJHldWzddID0gIlx4YzAiOw0KICAgICAgICAgICAgICAgICRmcmFtZVskeV1bJHdpZHRoIC0gOF0gPSAiXHhjMCI7DQogICAgICAgICAgICAgICAgJGZyYW1lWyR5T2Zmc2V0XVs3XSA9ICJceGMwIjsNCiAgICAgICAgICAgICAgICAkeU9mZnNldCsrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAkc2V0UGF0dGVybiA9IHN0cl9yZXBlYXQoIlx4YzAiLCA4KTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgUVJzdHI6OnNldCgkZnJhbWUsIDAsIDcsICRzZXRQYXR0ZXJuKTsNCiAgICAgICAgICAgIFFSc3RyOjpzZXQoJGZyYW1lLCAkd2lkdGgtOCwgNywgJHNldFBhdHRlcm4pOw0KICAgICAgICAgICAgUVJzdHI6OnNldCgkZnJhbWUsIDAsICR3aWR0aCAtIDgsICRzZXRQYXR0ZXJuKTsNCiAgICAgICAgDQogICAgICAgICAgICAvLyBGb3JtYXQgaW5mbw0KICAgICAgICAgICAgJHNldFBhdHRlcm4gPSBzdHJfcmVwZWF0KCJceDg0IiwgOSk7DQogICAgICAgICAgICBRUnN0cjo6c2V0KCRmcmFtZSwgMCwgOCwgJHNldFBhdHRlcm4pOw0KICAgICAgICAgICAgUVJzdHI6OnNldCgkZnJhbWUsICR3aWR0aCAtIDgsIDgsICRzZXRQYXR0ZXJuLCA4KTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHlPZmZzZXQgPSAkd2lkdGggLSA4Ow0KDQogICAgICAgICAgICBmb3IoJHk9MDsgJHk8ODsgJHkrKywkeU9mZnNldCsrKSB7DQogICAgICAgICAgICAgICAgJGZyYW1lWyR5XVs4XSA9ICJceDg0IjsNCiAgICAgICAgICAgICAgICAkZnJhbWVbJHlPZmZzZXRdWzhdID0gIlx4ODQiOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBUaW1pbmcgcGF0dGVybiAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIGZvcigkaT0xOyAkaTwkd2lkdGgtMTU7ICRpKyspIHsNCiAgICAgICAgICAgICAgICAkZnJhbWVbNl1bNyskaV0gPSBjaHIoMHg5MCB8ICgkaSAmIDEpKTsNCiAgICAgICAgICAgICAgICAkZnJhbWVbNyskaV1bNl0gPSBjaHIoMHg5MCB8ICgkaSAmIDEpKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gQWxpZ25tZW50IHBhdHRlcm4gIA0KICAgICAgICAgICAgc2VsZjo6cHV0QWxpZ25tZW50UGF0dGVybigkdmVyc2lvbiwgJGZyYW1lLCAkd2lkdGgpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAvLyBWZXJzaW9uIGluZm9ybWF0aW9uIA0KICAgICAgICAgICAgaWYoJHZlcnNpb24gPj0gNykgew0KICAgICAgICAgICAgICAgICR2aW5mID0gc2VsZjo6Z2V0VmVyc2lvblBhdHRlcm4oJHZlcnNpb24pOw0KDQogICAgICAgICAgICAgICAgJHYgPSAkdmluZjsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBmb3IoJHg9MDsgJHg8NjsgJHgrKykgew0KICAgICAgICAgICAgICAgICAgICBmb3IoJHk9MDsgJHk8MzsgJHkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGZyYW1lWygkd2lkdGggLSAxMSkrJHldWyR4XSA9IGNocigweDg4IHwgKCR2ICYgMSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHYgPSAkdiA+PiAxOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJHYgPSAkdmluZjsNCiAgICAgICAgICAgICAgICBmb3IoJHk9MDsgJHk8NjsgJHkrKykgew0KICAgICAgICAgICAgICAgICAgICBmb3IoJHg9MDsgJHg8MzsgJHgrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGZyYW1lWyR5XVskeCsoJHdpZHRoIC0gMTEpXSA9IGNocigweDg4IHwgKCR2ICYgMSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHYgPSAkdiA+PiAxOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgIA0KICAgICAgICAgICAgLy8gYW5kIGEgbGl0dGxlIGJpdC4uLiAgDQogICAgICAgICAgICAkZnJhbWVbJHdpZHRoIC0gOF1bOF0gPSAiXHg4MSI7DQogICAgICAgICAgICANCiAgICAgICAgICAgIHJldHVybiAkZnJhbWU7DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWJ1ZygkZnJhbWUsICRiaW5hcnlfbW9kZSA9IGZhbHNlKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoJGJpbmFyeV9tb2RlKSB7DQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGZyYW1lIGFzICYkZnJhbWVMaW5lKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZnJhbWVMaW5lID0gam9pbignPHNwYW4gY2xhc3M9Im0iPiZuYnNwOyZuYnNwOzwvc3Bhbj4nLCBleHBsb2RlKCcwJywgJGZyYW1lTGluZSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGZyYW1lTGluZSA9IGpvaW4oJyYjOTYwODsmIzk2MDg7JywgZXhwbG9kZSgnMScsICRmcmFtZUxpbmUpKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgPz4NCiAgICAgICAgICAgICAgICA8c3R5bGU+DQogICAgICAgICAgICAgICAgICAgIC5tIHsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IH0NCiAgICAgICAgICAgICAgICA8L3N0eWxlPg0KICAgICAgICAgICAgICAgIDw/cGhwDQogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwcmU+PHR0Pjxici8gPjxici8gPjxici8gPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyc7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gam9pbigiPGJyLyA+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IiwgJGZyYW1lKTsNCiAgICAgICAgICAgICAgICAgICAgZWNobyAnPC90dD48L3ByZT48YnIvID48YnIvID48YnIvID48YnIvID48YnIvID48YnIvID4nOw0KICAgICAgICAgICAgDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGZyYW1lIGFzICYkZnJhbWVMaW5lKSB7DQogICAgICAgICAgICAgICAgICAgICRmcmFtZUxpbmUgPSBqb2luKCc8c3BhbiBjbGFzcz0ibSI+Jm5ic3A7PC9zcGFuPicsICBleHBsb2RlKCJceGMwIiwgJGZyYW1lTGluZSkpOw0KICAgICAgICAgICAgICAgICAgICAkZnJhbWVMaW5lID0gam9pbignPHNwYW4gY2xhc3M9Im0iPiYjOTYxODs8L3NwYW4+JywgZXhwbG9kZSgiXHhjMSIsICRmcmFtZUxpbmUpKTsNCiAgICAgICAgICAgICAgICAgICAgJGZyYW1lTGluZSA9IGpvaW4oJzxzcGFuIGNsYXNzPSJwIj4mbmJzcDs8L3NwYW4+JywgIGV4cGxvZGUoIlx4YTAiLCAkZnJhbWVMaW5lKSk7DQogICAgICAgICAgICAgICAgICAgICRmcmFtZUxpbmUgPSBqb2luKCc8c3BhbiBjbGFzcz0icCI+JiM5NjE4Ozwvc3Bhbj4nLCBleHBsb2RlKCJceGExIiwgJGZyYW1lTGluZSkpOw0KICAgICAgICAgICAgICAgICAgICAkZnJhbWVMaW5lID0gam9pbignPHNwYW4gY2xhc3M9InMiPiYjOTY3MTs8L3NwYW4+JywgZXhwbG9kZSgiXHg4NCIsICRmcmFtZUxpbmUpKTsgLy9mb3JtYXQgMA0KICAgICAgICAgICAgICAgICAgICAkZnJhbWVMaW5lID0gam9pbignPHNwYW4gY2xhc3M9InMiPiYjOTY3MDs8L3NwYW4+JywgZXhwbG9kZSgiXHg4NSIsICRmcmFtZUxpbmUpKTsgLy9mb3JtYXQgMQ0KICAgICAgICAgICAgICAgICAgICAkZnJhbWVMaW5lID0gam9pbignPHNwYW4gY2xhc3M9IngiPiYjOTc2Mjs8L3NwYW4+JywgZXhwbG9kZSgiXHg4MSIsICRmcmFtZUxpbmUpKTsgLy9zcGVjaWFsIGJpdA0KICAgICAgICAgICAgICAgICAgICAkZnJhbWVMaW5lID0gam9pbignPHNwYW4gY2xhc3M9ImMiPiZuYnNwOzwvc3Bhbj4nLCAgZXhwbG9kZSgiXHg5MCIsICRmcmFtZUxpbmUpKTsgLy9jbG9jayAwDQogICAgICAgICAgICAgICAgICAgICRmcmFtZUxpbmUgPSBqb2luKCc8c3BhbiBjbGFzcz0iYyI+JiM5NzE5Ozwvc3Bhbj4nLCBleHBsb2RlKCJceDkxIiwgJGZyYW1lTGluZSkpOyAvL2Nsb2NrIDENCiAgICAgICAgICAgICAgICAgICAgJGZyYW1lTGluZSA9IGpvaW4oJzxzcGFuIGNsYXNzPSJmIj4mbmJzcDs8L3NwYW4+JywgIGV4cGxvZGUoIlx4ODgiLCAkZnJhbWVMaW5lKSk7IC8vdmVyc2lvbg0KICAgICAgICAgICAgICAgICAgICAkZnJhbWVMaW5lID0gam9pbignPHNwYW4gY2xhc3M9ImYiPiYjOTYxODs8L3NwYW4+JywgZXhwbG9kZSgiXHg4OSIsICRmcmFtZUxpbmUpKTsgLy92ZXJzaW9uDQogICAgICAgICAgICAgICAgICAgICRmcmFtZUxpbmUgPSBqb2luKCcmIzk4MzA7JywgZXhwbG9kZSgiXHgwMSIsICRmcmFtZUxpbmUpKTsNCiAgICAgICAgICAgICAgICAgICAgJGZyYW1lTGluZSA9IGpvaW4oJyYjODkwMTsnLCBleHBsb2RlKCJcMCIsICRmcmFtZUxpbmUpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPz4NCiAgICAgICAgICAgICAgICA8c3R5bGU+DQogICAgICAgICAgICAgICAgICAgIC5wIHsgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OyB9DQogICAgICAgICAgICAgICAgICAgIC5tIHsgYmFja2dyb3VuZC1jb2xvcjogIzAwRkYwMDsgfQ0KICAgICAgICAgICAgICAgICAgICAucyB7IGJhY2tncm91bmQtY29sb3I6ICNGRjAwMDA7IH0NCiAgICAgICAgICAgICAgICAgICAgLmMgeyBiYWNrZ3JvdW5kLWNvbG9yOiBhcXVhOyB9DQogICAgICAgICAgICAgICAgICAgIC54IHsgYmFja2dyb3VuZC1jb2xvcjogcGluazsgfQ0KICAgICAgICAgICAgICAgICAgICAuZiB7IGJhY2tncm91bmQtY29sb3I6IGdvbGQ7IH0NCiAgICAgICAgICAgICAgICA8L3N0eWxlPg0KICAgICAgICAgICAgICAgIDw/cGhwDQogICAgICAgICAgICAgICAgZWNobyAiPHByZT48dHQ+IjsNCiAgICAgICAgICAgICAgICBlY2hvIGpvaW4oIjxici8gPiIsICRmcmFtZSk7DQogICAgICAgICAgICAgICAgZWNobyAiPC90dD48L3ByZT4iOw0KICAgICAgICAgICAgDQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXJpYWwoJGZyYW1lKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gZ3pjb21wcmVzcyhqb2luKCJcbiIsICRmcmFtZSksIDkpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1bnNlcmlhbCgkY29kZSkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuIGV4cGxvZGUoIlxuIiwgZ3p1bmNvbXByZXNzKCRjb2RlKSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5ld0ZyYW1lKCR2ZXJzaW9uKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZigkdmVyc2lvbiA8IDEgfHwgJHZlcnNpb24gPiBRUlNQRUNfVkVSU0lPTl9NQVgpIA0KICAgICAgICAgICAgICAgIHJldHVybiBudWxsOw0KDQogICAgICAgICAgICBpZighaXNzZXQoc2VsZjo6JGZyYW1lc1skdmVyc2lvbl0pKSB7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGZpbGVOYW1lID0gUVJfQ0FDSEVfRElSLidmcmFtZV8nLiR2ZXJzaW9uLicuZGF0JzsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAoUVJfQ0FDSEVBQkxFKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZU5hbWUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjokZnJhbWVzWyR2ZXJzaW9uXSA9IHNlbGY6OnVuc2VyaWFsKGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlTmFtZSkpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6JGZyYW1lc1skdmVyc2lvbl0gPSBzZWxmOjpjcmVhdGVGcmFtZSgkdmVyc2lvbik7DQogICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkZmlsZU5hbWUsIHNlbGY6OnNlcmlhbChzZWxmOjokZnJhbWVzWyR2ZXJzaW9uXSkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgc2VsZjo6JGZyYW1lc1skdmVyc2lvbl0gPSBzZWxmOjpjcmVhdGVGcmFtZSgkdmVyc2lvbik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZihpc19udWxsKHNlbGY6OiRmcmFtZXNbJHZlcnNpb25dKSkNCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsNCg0KICAgICAgICAgICAgcmV0dXJuIHNlbGY6OiRmcmFtZXNbJHZlcnNpb25dOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcnNCbG9ja051bSgkc3BlYykgICAgIHsgcmV0dXJuICRzcGVjWzBdICsgJHNwZWNbM107IH0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByc0Jsb2NrTnVtMSgkc3BlYykgICAgeyByZXR1cm4gJHNwZWNbMF07IH0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByc0RhdGFDb2RlczEoJHNwZWMpICAgeyByZXR1cm4gJHNwZWNbMV07IH0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByc0VjY0NvZGVzMSgkc3BlYykgICAgeyByZXR1cm4gJHNwZWNbMl07IH0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByc0Jsb2NrTnVtMigkc3BlYykgICAgeyByZXR1cm4gJHNwZWNbM107IH0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByc0RhdGFDb2RlczIoJHNwZWMpICAgeyByZXR1cm4gJHNwZWNbNF07IH0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByc0VjY0NvZGVzMigkc3BlYykgICAgeyByZXR1cm4gJHNwZWNbMl07IH0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByc0RhdGFMZW5ndGgoJHNwZWMpICAgeyByZXR1cm4gKCRzcGVjWzBdICogJHNwZWNbMV0pICsgKCRzcGVjWzNdICogJHNwZWNbNF0pOyAgICB9DQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcnNFY2NMZW5ndGgoJHNwZWMpICAgIHsgcmV0dXJuICgkc3BlY1swXSArICRzcGVjWzNdKSAqICRzcGVjWzJdOyB9DQogICAgICAgIA0KICAgIH0KCgoKLy8tLS0tIHFyaW1hZ2UucGhwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKCg0KLyoNCiAqIFBIUCBRUiBDb2RlIGVuY29kZXINCiAqDQogKiBJbWFnZSBvdXRwdXQgb2YgY29kZSB1c2luZyBHRDINCiAqDQogKiBQSFAgUVIgQ29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBMR1BMIDMNCiAqIENvcHlyaWdodCAoQykgMjAxMCBEb21pbmlrIER6aWVuaWEgPGRlbHRhbGFiIGF0IHBvY3p0YSBkb3QgZm0+DQogKg0KICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQogKiB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIGFueSBsYXRlciB2ZXJzaW9uLg0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUNCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQogKg0KICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBDQogKi8NCiANCiAgICBkZWZpbmUoJ1FSX0lNQUdFJywgdHJ1ZSk7DQoNCiAgICBjbGFzcyBRUmltYWdlIHsNCiAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcG5nKCRmcmFtZSwgJGZpbGVuYW1lID0gZmFsc2UsICRwaXhlbFBlclBvaW50ID0gNCwgJG91dGVyRnJhbWUgPSA0LCRzYXZlYW5kcHJpbnQ9RkFMU0UpIA0KICAgICAgICB7DQogICAgICAgICAgICAkaW1hZ2UgPSBzZWxmOjppbWFnZSgkZnJhbWUsICRwaXhlbFBlclBvaW50LCAkb3V0ZXJGcmFtZSk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmICgkZmlsZW5hbWUgPT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgSGVhZGVyKCJDb250ZW50LXR5cGU6IGltYWdlL3BuZyIpOw0KICAgICAgICAgICAgICAgIEltYWdlUG5nKCRpbWFnZSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGlmKCRzYXZlYW5kcHJpbnQ9PT1UUlVFKXsNCiAgICAgICAgICAgICAgICAgICAgSW1hZ2VQbmcoJGltYWdlLCAkZmlsZW5hbWUpOw0KICAgICAgICAgICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogaW1hZ2UvcG5nIik7DQogICAgICAgICAgICAgICAgICAgIEltYWdlUG5nKCRpbWFnZSk7DQogICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgIEltYWdlUG5nKCRpbWFnZSwgJGZpbGVuYW1lKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIEltYWdlRGVzdHJveSgkaW1hZ2UpOw0KICAgICAgICB9DQogICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGpwZygkZnJhbWUsICRmaWxlbmFtZSA9IGZhbHNlLCAkcGl4ZWxQZXJQb2ludCA9IDgsICRvdXRlckZyYW1lID0gNCwgJHEgPSA4NSkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRpbWFnZSA9IHNlbGY6OmltYWdlKCRmcmFtZSwgJHBpeGVsUGVyUG9pbnQsICRvdXRlckZyYW1lKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKCRmaWxlbmFtZSA9PT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICBIZWFkZXIoIkNvbnRlbnQtdHlwZTogaW1hZ2UvanBlZyIpOw0KICAgICAgICAgICAgICAgIEltYWdlSnBlZygkaW1hZ2UsIG51bGwsICRxKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgSW1hZ2VKcGVnKCRpbWFnZSwgJGZpbGVuYW1lLCAkcSk7ICAgICAgICAgICAgDQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIEltYWdlRGVzdHJveSgkaW1hZ2UpOw0KICAgICAgICB9DQogICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBpbWFnZSgkZnJhbWUsICRwaXhlbFBlclBvaW50ID0gNCwgJG91dGVyRnJhbWUgPSA0KSANCiAgICAgICAgew0KICAgICAgICAgICAgJGggPSBjb3VudCgkZnJhbWUpOw0KICAgICAgICAgICAgJHcgPSBzdHJsZW4oJGZyYW1lWzBdKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJGltZ1cgPSAkdyArIDIqJG91dGVyRnJhbWU7DQogICAgICAgICAgICAkaW1nSCA9ICRoICsgMiokb3V0ZXJGcmFtZTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJGJhc2VfaW1hZ2UgPUltYWdlQ3JlYXRlKCRpbWdXLCAkaW1nSCk7DQogICAgICAgICAgICANCiAgICAgICAgICAgICRjb2xbMF0gPSBJbWFnZUNvbG9yQWxsb2NhdGUoJGJhc2VfaW1hZ2UsMjU1LDI1NSwyNTUpOw0KICAgICAgICAgICAgJGNvbFsxXSA9IEltYWdlQ29sb3JBbGxvY2F0ZSgkYmFzZV9pbWFnZSwwLDAsMCk7DQoNCiAgICAgICAgICAgIGltYWdlZmlsbCgkYmFzZV9pbWFnZSwgMCwgMCwgJGNvbFswXSk7DQoNCiAgICAgICAgICAgIGZvcigkeT0wOyAkeTwkaDsgJHkrKykgew0KICAgICAgICAgICAgICAgIGZvcigkeD0wOyAkeDwkdzsgJHgrKykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJGZyYW1lWyR5XVskeF0gPT0gJzEnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBJbWFnZVNldFBpeGVsKCRiYXNlX2ltYWdlLCR4KyRvdXRlckZyYW1lLCR5KyRvdXRlckZyYW1lLCRjb2xbMV0pOyANCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHRhcmdldF9pbWFnZSA9SW1hZ2VDcmVhdGUoJGltZ1cgKiAkcGl4ZWxQZXJQb2ludCwgJGltZ0ggKiAkcGl4ZWxQZXJQb2ludCk7DQogICAgICAgICAgICBJbWFnZUNvcHlSZXNpemVkKCR0YXJnZXRfaW1hZ2UsICRiYXNlX2ltYWdlLCAwLCAwLCAwLCAwLCAkaW1nVyAqICRwaXhlbFBlclBvaW50LCAkaW1nSCAqICRwaXhlbFBlclBvaW50LCAkaW1nVywgJGltZ0gpOw0KICAgICAgICAgICAgSW1hZ2VEZXN0cm95KCRiYXNlX2ltYWdlKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgcmV0dXJuICR0YXJnZXRfaW1hZ2U7DQogICAgICAgIH0NCiAgICB9CgoKCi8vLS0tLSBxcmlucHV0LnBocCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCgoNCi8qDQogKiBQSFAgUVIgQ29kZSBlbmNvZGVyDQogKg0KICogSW5wdXQgZW5jb2RpbmcgY2xhc3MNCiAqDQogKiBCYXNlZCBvbiBsaWJxcmVuY29kZSBDIGxpYnJhcnkgZGlzdHJpYnV0ZWQgdW5kZXIgTEdQTCAyLjENCiAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBLZW50YXJvIEZ1a3VjaGkgPGZ1a3VjaGlAbWVnYXVpLm5ldD4NCiAqDQogKiBQSFAgUVIgQ29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBMR1BMIDMNCiAqIENvcHlyaWdodCAoQykgMjAxMCBEb21pbmlrIER6aWVuaWEgPGRlbHRhbGFiIGF0IHBvY3p0YSBkb3QgZm0+DQogKg0KICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQogKiB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIGFueSBsYXRlciB2ZXJzaW9uLg0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUNCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQogKg0KICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBDQogKi8NCiANCiAgICBkZWZpbmUoJ1NUUlVDVFVSRV9IRUFERVJfQklUUycsICAyMCk7DQogICAgZGVmaW5lKCdNQVhfU1RSVUNUVVJFRF9TWU1CT0xTJywgMTYpOw0KDQogICAgY2xhc3MgUVJpbnB1dEl0ZW0gew0KICAgIA0KICAgICAgICBwdWJsaWMgJG1vZGU7DQogICAgICAgIHB1YmxpYyAkc2l6ZTsNCiAgICAgICAgcHVibGljICRkYXRhOw0KICAgICAgICBwdWJsaWMgJGJzdHJlYW07DQoNCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtb2RlLCAkc2l6ZSwgJGRhdGEsICRic3RyZWFtID0gbnVsbCkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRzZXREYXRhID0gYXJyYXlfc2xpY2UoJGRhdGEsIDAsICRzaXplKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKGNvdW50KCRzZXREYXRhKSA8ICRzaXplKSB7DQogICAgICAgICAgICAgICAgJHNldERhdGEgPSBhcnJheV9tZXJnZSgkc2V0RGF0YSwgYXJyYXlfZmlsbCgwLCRzaXplLWNvdW50KCRzZXREYXRhKSwwKSk7DQogICAgICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAgICAgaWYoIVFSaW5wdXQ6OmNoZWNrKCRtb2RlLCAkc2l6ZSwgJHNldERhdGEpKSB7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3IgbTonLiRtb2RlLicsczonLiRzaXplLicsZDonLmpvaW4oJywnLCRzZXREYXRhKSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgICR0aGlzLT5tb2RlID0gJG1vZGU7DQogICAgICAgICAgICAkdGhpcy0+c2l6ZSA9ICRzaXplOw0KICAgICAgICAgICAgJHRoaXMtPmRhdGEgPSAkc2V0RGF0YTsNCiAgICAgICAgICAgICR0aGlzLT5ic3RyZWFtID0gJGJzdHJlYW07DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlTW9kZU51bSgkdmVyc2lvbikNCiAgICAgICAgew0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICR3b3JkcyA9IChpbnQpKCR0aGlzLT5zaXplIC8gMyk7DQogICAgICAgICAgICAgICAgJGJzID0gbmV3IFFSYml0c3RyZWFtKCk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJHZhbCA9IDB4MTsNCiAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bSg0LCAkdmFsKTsNCiAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bShRUnNwZWM6Omxlbmd0aEluZGljYXRvcihRUl9NT0RFX05VTSwgJHZlcnNpb24pLCAkdGhpcy0+c2l6ZSk7DQoNCiAgICAgICAgICAgICAgICBmb3IoJGk9MDsgJGk8JHdvcmRzOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICR2YWwgID0gKG9yZCgkdGhpcy0+ZGF0YVskaSozICBdKSAtIG9yZCgnMCcpKSAqIDEwMDsNCiAgICAgICAgICAgICAgICAgICAgJHZhbCArPSAob3JkKCR0aGlzLT5kYXRhWyRpKjMrMV0pIC0gb3JkKCcwJykpICogMTA7DQogICAgICAgICAgICAgICAgICAgICR2YWwgKz0gKG9yZCgkdGhpcy0+ZGF0YVskaSozKzJdKSAtIG9yZCgnMCcpKTsNCiAgICAgICAgICAgICAgICAgICAgJGJzLT5hcHBlbmROdW0oMTAsICR2YWwpOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmKCR0aGlzLT5zaXplIC0gJHdvcmRzICogMyA9PSAxKSB7DQogICAgICAgICAgICAgICAgICAgICR2YWwgPSBvcmQoJHRoaXMtPmRhdGFbJHdvcmRzKjNdKSAtIG9yZCgnMCcpOw0KICAgICAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bSg0LCAkdmFsKTsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYoJHRoaXMtPnNpemUgLSAkd29yZHMgKiAzID09IDIpIHsNCiAgICAgICAgICAgICAgICAgICAgJHZhbCAgPSAob3JkKCR0aGlzLT5kYXRhWyR3b3JkcyozICBdKSAtIG9yZCgnMCcpKSAqIDEwOw0KICAgICAgICAgICAgICAgICAgICAkdmFsICs9IChvcmQoJHRoaXMtPmRhdGFbJHdvcmRzKjMrMV0pIC0gb3JkKCcwJykpOw0KICAgICAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bSg3LCAkdmFsKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAkdGhpcy0+YnN0cmVhbSA9ICRiczsNCiAgICAgICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGVNb2RlQW4oJHZlcnNpb24pDQogICAgICAgIHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgJHdvcmRzID0gKGludCkoJHRoaXMtPnNpemUgLyAyKTsNCiAgICAgICAgICAgICAgICAkYnMgPSBuZXcgUVJiaXRzdHJlYW0oKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bSg0LCAweDAyKTsNCiAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bShRUnNwZWM6Omxlbmd0aEluZGljYXRvcihRUl9NT0RFX0FOLCAkdmVyc2lvbiksICR0aGlzLT5zaXplKTsNCg0KICAgICAgICAgICAgICAgIGZvcigkaT0wOyAkaTwkd29yZHM7ICRpKyspIHsNCiAgICAgICAgICAgICAgICAgICAgJHZhbCAgPSAoaW50KVFSaW5wdXQ6Omxvb2tBblRhYmxlKG9yZCgkdGhpcy0+ZGF0YVskaSoyICBdKSkgKiA0NTsNCiAgICAgICAgICAgICAgICAgICAgJHZhbCArPSAoaW50KVFSaW5wdXQ6Omxvb2tBblRhYmxlKG9yZCgkdGhpcy0+ZGF0YVskaSoyKzFdKSk7DQoNCiAgICAgICAgICAgICAgICAgICAgJGJzLT5hcHBlbmROdW0oMTEsICR2YWwpOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmKCR0aGlzLT5zaXplICYgMSkgew0KICAgICAgICAgICAgICAgICAgICAkdmFsID0gUVJpbnB1dDo6bG9va0FuVGFibGUob3JkKCR0aGlzLT5kYXRhWyR3b3JkcyAqIDJdKSk7DQogICAgICAgICAgICAgICAgICAgICRicy0+YXBwZW5kTnVtKDYsICR2YWwpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICAgICAgICAgJHRoaXMtPmJzdHJlYW0gPSAkYnM7DQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICANCiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGVNb2RlOCgkdmVyc2lvbikNCiAgICAgICAgew0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAkYnMgPSBuZXcgUVJiaXRzdHJlYW0oKTsNCg0KICAgICAgICAgICAgICAgICRicy0+YXBwZW5kTnVtKDQsIDB4NCk7DQogICAgICAgICAgICAgICAgJGJzLT5hcHBlbmROdW0oUVJzcGVjOjpsZW5ndGhJbmRpY2F0b3IoUVJfTU9ERV84LCAkdmVyc2lvbiksICR0aGlzLT5zaXplKTsNCg0KICAgICAgICAgICAgICAgIGZvcigkaT0wOyAkaTwkdGhpcy0+c2l6ZTsgJGkrKykgew0KICAgICAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bSg4LCBvcmQoJHRoaXMtPmRhdGFbJGldKSk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJHRoaXMtPmJzdHJlYW0gPSAkYnM7DQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICANCiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGVNb2RlS2FuamkoJHZlcnNpb24pDQogICAgICAgIHsNCiAgICAgICAgICAgIHRyeSB7DQoNCiAgICAgICAgICAgICAgICAkYnMgPSBuZXcgUVJiaXRydHJlYW0oKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bSg0LCAweDgpOw0KICAgICAgICAgICAgICAgICRicy0+YXBwZW5kTnVtKFFSc3BlYzo6bGVuZ3RoSW5kaWNhdG9yKFFSX01PREVfS0FOSkksICR2ZXJzaW9uKSwgKGludCkoJHRoaXMtPnNpemUgLyAyKSk7DQoNCiAgICAgICAgICAgICAgICBmb3IoJGk9MDsgJGk8JHRoaXMtPnNpemU7ICRpKz0yKSB7DQogICAgICAgICAgICAgICAgICAgICR2YWwgPSAob3JkKCR0aGlzLT5kYXRhWyRpXSkgPDwgOCkgfCBvcmQoJHRoaXMtPmRhdGFbJGkrMV0pOw0KICAgICAgICAgICAgICAgICAgICBpZigkdmFsIDw9IDB4OWZmYykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHZhbCAtPSAweDgxNDA7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkdmFsIC09IDB4YzE0MDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgJGggPSAoJHZhbCA+PiA4KSAqIDB4YzA7DQogICAgICAgICAgICAgICAgICAgICR2YWwgPSAoJHZhbCAmIDB4ZmYpICsgJGg7DQoNCiAgICAgICAgICAgICAgICAgICAgJGJzLT5hcHBlbmROdW0oMTMsICR2YWwpOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICR0aGlzLT5ic3RyZWFtID0gJGJzOw0KICAgICAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICAgICAgDQogICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGVuY29kZU1vZGVTdHJ1Y3R1cmUoKQ0KICAgICAgICB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICRicyA9ICBuZXcgUVJiaXRzdHJlYW0oKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bSg0LCAweDAzKTsNCiAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bSg0LCBvcmQoJHRoaXMtPmRhdGFbMV0pIC0gMSk7DQogICAgICAgICAgICAgICAgJGJzLT5hcHBlbmROdW0oNCwgb3JkKCR0aGlzLT5kYXRhWzBdKSAtIDEpOw0KICAgICAgICAgICAgICAgICRicy0+YXBwZW5kTnVtKDgsIG9yZCgkdGhpcy0+ZGF0YVsyXSkpOw0KDQogICAgICAgICAgICAgICAgJHRoaXMtPmJzdHJlYW0gPSAkYnM7DQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICANCiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlc3RpbWF0ZUJpdFN0cmVhbVNpemVPZkVudHJ5KCR2ZXJzaW9uKQ0KICAgICAgICB7DQogICAgICAgICAgICAkYml0cyA9IDA7DQoNCiAgICAgICAgICAgIGlmKCR2ZXJzaW9uID09IDApIA0KICAgICAgICAgICAgICAgICR2ZXJzaW9uID0gMTsNCg0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT5tb2RlKSB7DQogICAgICAgICAgICAgICAgY2FzZSBRUl9NT0RFX05VTTogICAgICAgICRiaXRzID0gUVJpbnB1dDo6ZXN0aW1hdGVCaXRzTW9kZU51bSgkdGhpcy0+c2l6ZSk7ICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV9BTjogICAgICAgICRiaXRzID0gUVJpbnB1dDo6ZXN0aW1hdGVCaXRzTW9kZUFuKCR0aGlzLT5zaXplKTsgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBRUl9NT0RFXzg6ICAgICAgICAgICAgJGJpdHMgPSBRUmlucHV0Ojplc3RpbWF0ZUJpdHNNb2RlOCgkdGhpcy0+c2l6ZSk7ICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV9LQU5KSTogICAgICAgICRiaXRzID0gUVJpbnB1dDo6ZXN0aW1hdGVCaXRzTW9kZUthbmppKCR0aGlzLT5zaXplKTticmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIFFSX01PREVfU1RSVUNUVVJFOiAgICByZXR1cm4gU1RSVUNUVVJFX0hFQURFUl9CSVRTOyAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkbCA9IFFSc3BlYzo6bGVuZ3RoSW5kaWNhdG9yKCR0aGlzLT5tb2RlLCAkdmVyc2lvbik7DQogICAgICAgICAgICAkbSA9IDEgPDwgJGw7DQogICAgICAgICAgICAkbnVtID0gKGludCkoKCR0aGlzLT5zaXplICsgJG0gLSAxKSAvICRtKTsNCg0KICAgICAgICAgICAgJGJpdHMgKz0gJG51bSAqICg0ICsgJGwpOw0KDQogICAgICAgICAgICByZXR1cm4gJGJpdHM7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlQml0U3RyZWFtKCR2ZXJzaW9uKQ0KICAgICAgICB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmJzdHJlYW0pOw0KICAgICAgICAgICAgICAgICR3b3JkcyA9IFFSc3BlYzo6bWF4aW11bVdvcmRzKCR0aGlzLT5tb2RlLCAkdmVyc2lvbik7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYoJHRoaXMtPnNpemUgPiAkd29yZHMpIHsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgJHN0MSA9IG5ldyBRUmlucHV0SXRlbSgkdGhpcy0+bW9kZSwgJHdvcmRzLCAkdGhpcy0+ZGF0YSk7DQogICAgICAgICAgICAgICAgICAgICRzdDIgPSBuZXcgUVJpbnB1dEl0ZW0oJHRoaXMtPm1vZGUsICR0aGlzLT5zaXplIC0gJHdvcmRzLCBhcnJheV9zbGljZSgkdGhpcy0+ZGF0YSwgJHdvcmRzKSk7DQoNCiAgICAgICAgICAgICAgICAgICAgJHN0MS0+ZW5jb2RlQml0U3RyZWFtKCR2ZXJzaW9uKTsNCiAgICAgICAgICAgICAgICAgICAgJHN0Mi0+ZW5jb2RlQml0U3RyZWFtKCR2ZXJzaW9uKTsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5ic3RyZWFtID0gbmV3IFFSYml0c3RyZWFtKCk7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5ic3RyZWFtLT5hcHBlbmQoJHN0MS0+YnN0cmVhbSk7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5ic3RyZWFtLT5hcHBlbmQoJHN0Mi0+YnN0cmVhbSk7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICB1bnNldCgkc3QxKTsNCiAgICAgICAgICAgICAgICAgICAgdW5zZXQoJHN0Mik7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAkcmV0ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+bW9kZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBRUl9NT0RFX05VTTogICAgICAgICRyZXQgPSAkdGhpcy0+ZW5jb2RlTW9kZU51bSgkdmVyc2lvbik7ICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBRUl9NT0RFX0FOOiAgICAgICAgJHJldCA9ICR0aGlzLT5lbmNvZGVNb2RlQW4oJHZlcnNpb24pOyAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV84OiAgICAgICAgICAgICRyZXQgPSAkdGhpcy0+ZW5jb2RlTW9kZTgoJHZlcnNpb24pOyAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV9LQU5KSTogICAgICAgICRyZXQgPSAkdGhpcy0+ZW5jb2RlTW9kZUthbmppKCR2ZXJzaW9uKTticmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV9TVFJVQ1RVUkU6ICAgICRyZXQgPSAkdGhpcy0+ZW5jb2RlTW9kZVN0cnVjdHVyZSgpOyAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgaWYoJHJldCA8IDApDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5ic3RyZWFtLT5zaXplKCk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH07DQogICAgDQogICAgLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQogICAgY2xhc3MgUVJpbnB1dCB7DQoNCiAgICAgICAgcHVibGljICRpdGVtczsNCiAgICAgICAgDQogICAgICAgIHByaXZhdGUgJHZlcnNpb247DQogICAgICAgIHByaXZhdGUgJGxldmVsOw0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmVyc2lvbiA9IDAsICRsZXZlbCA9IFFSX0VDTEVWRUxfTCkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKCR2ZXJzaW9uIDwgMCB8fCAkdmVyc2lvbiA+IFFSU1BFQ19WRVJTSU9OX01BWCB8fCAkbGV2ZWwgPiBRUl9FQ0xFVkVMX0gpIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHZlcnNpb24gbm8nKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHRoaXMtPnZlcnNpb24gPSAkdmVyc2lvbjsNCiAgICAgICAgICAgICR0aGlzLT5sZXZlbCA9ICRsZXZlbDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWZXJzaW9uKCkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuICR0aGlzLT52ZXJzaW9uOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHNldFZlcnNpb24oJHZlcnNpb24pDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmKCR2ZXJzaW9uIDwgMCB8fCAkdmVyc2lvbiA+IFFSU1BFQ19WRVJTSU9OX01BWCkgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgdmVyc2lvbiBubycpOw0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHRoaXMtPnZlcnNpb24gPSAkdmVyc2lvbjsNCg0KICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JDb3JyZWN0aW9uTGV2ZWwoKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmxldmVsOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRFcnJvckNvcnJlY3Rpb25MZXZlbCgkbGV2ZWwpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmKCRsZXZlbCA+IFFSX0VDTEVWRUxfSCkgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgRUNMRVZFTCcpOw0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHRoaXMtPmxldmVsID0gJGxldmVsOw0KDQogICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmRFbnRyeShRUmlucHV0SXRlbSAkZW50cnkpDQogICAgICAgIHsNCiAgICAgICAgICAgICR0aGlzLT5pdGVtc1tdID0gJGVudHJ5Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZCgkbW9kZSwgJHNpemUsICRkYXRhKQ0KICAgICAgICB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICRlbnRyeSA9IG5ldyBRUmlucHV0SXRlbSgkbW9kZSwgJHNpemUsICRkYXRhKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+aXRlbXNbXSA9ICRlbnRyeTsNCiAgICAgICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIA0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaW5zZXJ0U3RydWN0dXJlZEFwcGVuZEhlYWRlcigkc2l6ZSwgJGluZGV4LCAkcGFyaXR5KQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiggJHNpemUgPiBNQVhfU1RSVUNUVVJFRF9TWU1CT0xTICkgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ2luc2VydFN0cnVjdHVyZWRBcHBlbmRIZWFkZXIgd3Jvbmcgc2l6ZScpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZiggJGluZGV4IDw9IDAgfHwgJGluZGV4ID4gTUFYX1NUUlVDVFVSRURfU1lNQk9MUyApIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdpbnNlcnRTdHJ1Y3R1cmVkQXBwZW5kSGVhZGVyIHdyb25nIGluZGV4Jyk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRidWYgPSBhcnJheSgkc2l6ZSwgJGluZGV4LCAkcGFyaXR5KTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAkZW50cnkgPSBuZXcgUVJpbnB1dEl0ZW0oUVJfTU9ERV9TVFJVQ1RVUkUsIDMsIGJ1Zik7DQogICAgICAgICAgICAgICAgYXJyYXlfdW5zaGlmdCgkdGhpcy0+aXRlbXMsICRlbnRyeSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGNhbGNQYXJpdHkoKQ0KICAgICAgICB7DQogICAgICAgICAgICAkcGFyaXR5ID0gMDsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yZWFjaCgkdGhpcy0+aXRlbXMgYXMgJGl0ZW0pIHsNCiAgICAgICAgICAgICAgICBpZigkaXRlbS0+bW9kZSAhPSBRUl9NT0RFX1NUUlVDVFVSRSkgew0KICAgICAgICAgICAgICAgICAgICBmb3IoJGk9JGl0ZW0tPnNpemUtMTsgJGk+PTA7ICRpLS0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJpdHkgXj0gJGl0ZW0tPmRhdGFbJGldOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gJHBhcml0eTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tNb2RlTnVtKCRzaXplLCAkZGF0YSkNCiAgICAgICAgew0KICAgICAgICAgICAgZm9yKCRpPTA7ICRpPCRzaXplOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgaWYoKG9yZCgkZGF0YVskaV0pIDwgb3JkKCcwJykpIHx8IChvcmQoJGRhdGFbJGldKSA+IG9yZCgnOScpKSl7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXN0aW1hdGVCaXRzTW9kZU51bSgkc2l6ZSkNCiAgICAgICAgew0KICAgICAgICAgICAgJHcgPSAoaW50KSRzaXplIC8gMzsNCiAgICAgICAgICAgICRiaXRzID0gJHcgKiAxMDsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgc3dpdGNoKCRzaXplIC0gJHcgKiAzKSB7DQogICAgICAgICAgICAgICAgY2FzZSAxOg0KICAgICAgICAgICAgICAgICAgICAkYml0cyArPSA0Ow0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDI6DQogICAgICAgICAgICAgICAgICAgICRiaXRzICs9IDc7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gJGJpdHM7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljICRhblRhYmxlID0gYXJyYXkoDQogICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwNCiAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLA0KICAgICAgICAgICAgMzYsIC0xLCAtMSwgLTEsIDM3LCAzOCwgLTEsIC0xLCAtMSwgLTEsIDM5LCA0MCwgLTEsIDQxLCA0MiwgNDMsDQogICAgICAgICAgICAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgNDQsIC0xLCAtMSwgLTEsIC0xLCAtMSwNCiAgICAgICAgICAgIC0xLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LA0KICAgICAgICAgICAgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAtMSwgLTEsIC0xLCAtMSwgLTEsDQogICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwNCiAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xDQogICAgICAgICk7DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb29rQW5UYWJsZSgkYykNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuICgoJGMgPiAxMjcpPy0xOnNlbGY6OiRhblRhYmxlWyRjXSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrTW9kZUFuKCRzaXplLCAkZGF0YSkNCiAgICAgICAgew0KICAgICAgICAgICAgZm9yKCRpPTA7ICRpPCRzaXplOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgaWYgKHNlbGY6Omxvb2tBblRhYmxlKG9yZCgkZGF0YVskaV0pKSA9PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXN0aW1hdGVCaXRzTW9kZUFuKCRzaXplKQ0KICAgICAgICB7DQogICAgICAgICAgICAkdyA9IChpbnQpKCRzaXplIC8gMik7DQogICAgICAgICAgICAkYml0cyA9ICR3ICogMTE7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmKCRzaXplICYgMSkgew0KICAgICAgICAgICAgICAgICRiaXRzICs9IDY7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAkYml0czsNCiAgICAgICAgfQ0KICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlc3RpbWF0ZUJpdHNNb2RlOCgkc2l6ZSkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuICRzaXplICogODsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlc3RpbWF0ZUJpdHNNb2RlS2FuamkoJHNpemUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldHVybiAoaW50KSgoJHNpemUgLyAyKSAqIDEzKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tNb2RlS2FuamkoJHNpemUsICRkYXRhKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZigkc2l6ZSAmIDEpDQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KDQogICAgICAgICAgICBmb3IoJGk9MDsgJGk8JHNpemU7ICRpKz0yKSB7DQogICAgICAgICAgICAgICAgJHZhbCA9IChvcmQoJGRhdGFbJGldKSA8PCA4KSB8IG9yZCgkZGF0YVskaSsxXSk7DQogICAgICAgICAgICAgICAgaWYoICR2YWwgPCAweDgxNDAgDQogICAgICAgICAgICAgICAgfHwgKCR2YWwgPiAweDlmZmMgJiYgJHZhbCA8IDB4ZTA0MCkgDQogICAgICAgICAgICAgICAgfHwgJHZhbCA+IDB4ZWJiZikgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICAgKiBWYWxpZGF0aW9uDQogICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2soJG1vZGUsICRzaXplLCAkZGF0YSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYoJHNpemUgPD0gMCkgDQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KDQogICAgICAgICAgICBzd2l0Y2goJG1vZGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlIFFSX01PREVfTlVNOiAgICAgICByZXR1cm4gc2VsZjo6Y2hlY2tNb2RlTnVtKCRzaXplLCAkZGF0YSk7ICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBRUl9NT0RFX0FOOiAgICAgICAgcmV0dXJuIHNlbGY6OmNoZWNrTW9kZUFuKCRzaXplLCAkZGF0YSk7ICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV9LQU5KSTogICAgIHJldHVybiBzZWxmOjpjaGVja01vZGVLYW5qaSgkc2l6ZSwgJGRhdGEpOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIFFSX01PREVfODogICAgICAgICByZXR1cm4gdHJ1ZTsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBRUl9NT0RFX1NUUlVDVFVSRTogcmV0dXJuIHRydWU7IGJyZWFrOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGVzdGltYXRlQml0U3RyZWFtU2l6ZSgkdmVyc2lvbikNCiAgICAgICAgew0KICAgICAgICAgICAgJGJpdHMgPSAwOw0KDQogICAgICAgICAgICBmb3JlYWNoKCR0aGlzLT5pdGVtcyBhcyAkaXRlbSkgew0KICAgICAgICAgICAgICAgICRiaXRzICs9ICRpdGVtLT5lc3RpbWF0ZUJpdFN0cmVhbVNpemVPZkVudHJ5KCR2ZXJzaW9uKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcmV0dXJuICRiaXRzOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGVzdGltYXRlVmVyc2lvbigpDQogICAgICAgIHsNCiAgICAgICAgICAgICR2ZXJzaW9uID0gMDsNCiAgICAgICAgICAgICRwcmV2ID0gMDsNCiAgICAgICAgICAgIGRvIHsNCiAgICAgICAgICAgICAgICAkcHJldiA9ICR2ZXJzaW9uOw0KICAgICAgICAgICAgICAgICRiaXRzID0gJHRoaXMtPmVzdGltYXRlQml0U3RyZWFtU2l6ZSgkcHJldik7DQogICAgICAgICAgICAgICAgJHZlcnNpb24gPSBRUnNwZWM6OmdldE1pbmltdW1WZXJzaW9uKChpbnQpKCgkYml0cyArIDcpIC8gOCksICR0aGlzLT5sZXZlbCk7DQogICAgICAgICAgICAgICAgaWYgKCR2ZXJzaW9uIDwgMCkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSB3aGlsZSAoJHZlcnNpb24gPiAkcHJldik7DQoNCiAgICAgICAgICAgIHJldHVybiAkdmVyc2lvbjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbGVuZ3RoT2ZDb2RlKCRtb2RlLCAkdmVyc2lvbiwgJGJpdHMpDQogICAgICAgIHsNCiAgICAgICAgICAgICRwYXlsb2FkID0gJGJpdHMgLSA0IC0gUVJzcGVjOjpsZW5ndGhJbmRpY2F0b3IoJG1vZGUsICR2ZXJzaW9uKTsNCiAgICAgICAgICAgIHN3aXRjaCgkbW9kZSkgew0KICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV9OVU06DQogICAgICAgICAgICAgICAgICAgICRjaHVua3MgPSAoaW50KSgkcGF5bG9hZCAvIDEwKTsNCiAgICAgICAgICAgICAgICAgICAgJHJlbWFpbiA9ICRwYXlsb2FkIC0gJGNodW5rcyAqIDEwOw0KICAgICAgICAgICAgICAgICAgICAkc2l6ZSA9ICRjaHVua3MgKiAzOw0KICAgICAgICAgICAgICAgICAgICBpZigkcmVtYWluID49IDcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRzaXplICs9IDI7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZigkcmVtYWluID49IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRzaXplICs9IDE7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBRUl9NT0RFX0FOOg0KICAgICAgICAgICAgICAgICAgICAkY2h1bmtzID0gKGludCkoJHBheWxvYWQgLyAxMSk7DQogICAgICAgICAgICAgICAgICAgICRyZW1haW4gPSAkcGF5bG9hZCAtICRjaHVua3MgKiAxMTsNCiAgICAgICAgICAgICAgICAgICAgJHNpemUgPSAkY2h1bmtzICogMjsNCiAgICAgICAgICAgICAgICAgICAgaWYoJHJlbWFpbiA+PSA2KSANCiAgICAgICAgICAgICAgICAgICAgICAgICRzaXplKys7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV84Og0KICAgICAgICAgICAgICAgICAgICAkc2l6ZSA9IChpbnQpKCRwYXlsb2FkIC8gOCk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV9LQU5KSToNCiAgICAgICAgICAgICAgICAgICAgJHNpemUgPSAoaW50KSgoJHBheWxvYWQgLyAxMykgKiAyKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBRUl9NT0RFX1NUUlVDVFVSRToNCiAgICAgICAgICAgICAgICAgICAgJHNpemUgPSAoaW50KSgkcGF5bG9hZCAvIDgpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAkc2l6ZSA9IDA7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAkbWF4c2l6ZSA9IFFSc3BlYzo6bWF4aW11bVdvcmRzKCRtb2RlLCAkdmVyc2lvbik7DQogICAgICAgICAgICBpZigkc2l6ZSA8IDApICRzaXplID0gMDsNCiAgICAgICAgICAgIGlmKCRzaXplID4gJG1heHNpemUpICRzaXplID0gJG1heHNpemU7DQoNCiAgICAgICAgICAgIHJldHVybiAkc2l6ZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVCaXRTdHJlYW0oKQ0KICAgICAgICB7DQogICAgICAgICAgICAkdG90YWwgPSAwOw0KDQogICAgICAgICAgICBmb3JlYWNoKCR0aGlzLT5pdGVtcyBhcyAkaXRlbSkgew0KICAgICAgICAgICAgICAgICRiaXRzID0gJGl0ZW0tPmVuY29kZUJpdFN0cmVhbSgkdGhpcy0+dmVyc2lvbik7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYoJGJpdHMgPCAwKSANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkdG90YWwgKz0gJGJpdHM7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAkdG90YWw7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gY29udmVydERhdGEoKQ0KICAgICAgICB7DQogICAgICAgICAgICAkdmVyID0gJHRoaXMtPmVzdGltYXRlVmVyc2lvbigpOw0KICAgICAgICAgICAgaWYoJHZlciA+ICR0aGlzLT5nZXRWZXJzaW9uKCkpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkdmVyKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgZm9yKDs7KSB7DQogICAgICAgICAgICAgICAgJGJpdHMgPSAkdGhpcy0+Y3JlYXRlQml0U3RyZWFtKCk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYoJGJpdHMgPCAwKSANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkdmVyID0gUVJzcGVjOjpnZXRNaW5pbXVtVmVyc2lvbigoaW50KSgoJGJpdHMgKyA3KSAvIDgpLCAkdGhpcy0+bGV2ZWwpOw0KICAgICAgICAgICAgICAgIGlmKCR2ZXIgPCAwKSB7DQogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1dST05HIFZFUlNJT04nKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZigkdmVyID4gJHRoaXMtPmdldFZlcnNpb24oKSkgew0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkdmVyKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZFBhZGRpbmdCaXQoJiRic3RyZWFtKQ0KICAgICAgICB7DQogICAgICAgICAgICAkYml0cyA9ICRic3RyZWFtLT5zaXplKCk7DQogICAgICAgICAgICAkbWF4d29yZHMgPSBRUnNwZWM6OmdldERhdGFMZW5ndGgoJHRoaXMtPnZlcnNpb24sICR0aGlzLT5sZXZlbCk7DQogICAgICAgICAgICAkbWF4Yml0cyA9ICRtYXh3b3JkcyAqIDg7DQoNCiAgICAgICAgICAgIGlmICgkbWF4Yml0cyA9PSAkYml0cykgew0KICAgICAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoJG1heGJpdHMgLSAkYml0cyA8IDUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gJGJzdHJlYW0tPmFwcGVuZE51bSgkbWF4Yml0cyAtICRiaXRzLCAwKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGJpdHMgKz0gNDsNCiAgICAgICAgICAgICR3b3JkcyA9IChpbnQpKCgkYml0cyArIDcpIC8gOCk7DQoNCiAgICAgICAgICAgICRwYWRkaW5nID0gbmV3IFFSYml0c3RyZWFtKCk7DQogICAgICAgICAgICAkcmV0ID0gJHBhZGRpbmctPmFwcGVuZE51bSgkd29yZHMgKiA4IC0gJGJpdHMgKyA0LCAwKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoJHJldCA8IDApIA0KICAgICAgICAgICAgICAgIHJldHVybiAkcmV0Ow0KDQogICAgICAgICAgICAkcGFkbGVuID0gJG1heHdvcmRzIC0gJHdvcmRzOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZigkcGFkbGVuID4gMCkgew0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICRwYWRidWYgPSBhcnJheSgpOw0KICAgICAgICAgICAgICAgIGZvcigkaT0wOyAkaTwkcGFkbGVuOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICRwYWRidWZbJGldID0gKCRpJjEpPzB4MTE6MHhlYzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJHJldCA9ICRwYWRkaW5nLT5hcHBlbmRCeXRlcygkcGFkbGVuLCAkcGFkYnVmKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZigkcmV0IDwgMCkNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRyZXQ7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRyZXQgPSAkYnN0cmVhbS0+YXBwZW5kKCRwYWRkaW5nKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgcmV0dXJuICRyZXQ7DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIG1lcmdlQml0U3RyZWFtKCkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYoJHRoaXMtPmNvbnZlcnREYXRhKCkgPCAwKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRic3RyZWFtID0gbmV3IFFSYml0c3RyZWFtKCk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGZvcmVhY2goJHRoaXMtPml0ZW1zIGFzICRpdGVtKSB7DQogICAgICAgICAgICAgICAgJHJldCA9ICRic3RyZWFtLT5hcHBlbmQoJGl0ZW0tPmJzdHJlYW0pOw0KICAgICAgICAgICAgICAgIGlmKCRyZXQgPCAwKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcmV0dXJuICRic3RyZWFtOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCaXRTdHJlYW0oKQ0KICAgICAgICB7DQoNCiAgICAgICAgICAgICRic3RyZWFtID0gJHRoaXMtPm1lcmdlQml0U3RyZWFtKCk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmKCRic3RyZWFtID09IG51bGwpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHJldCA9ICR0aGlzLT5hcHBlbmRQYWRkaW5nQml0KCRic3RyZWFtKTsNCiAgICAgICAgICAgIGlmKCRyZXQgPCAwKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAkYnN0cmVhbTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCeXRlU3RyZWFtKCkNCiAgICAgICAgew0KICAgICAgICAgICAgJGJzdHJlYW0gPSAkdGhpcy0+Z2V0Qml0U3RyZWFtKCk7DQogICAgICAgICAgICBpZigkYnN0cmVhbSA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIHJldHVybiAkYnN0cmVhbS0+dG9CeXRlKCk7DQogICAgICAgIH0NCiAgICB9DQogICAgICAgIA0KICAgICAgICANCiAgICAKCgoKLy8tLS0tIHFyYml0c3RyZWFtLnBocCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCgoNCi8qDQogKiBQSFAgUVIgQ29kZSBlbmNvZGVyDQogKg0KICogQml0c3RyZWFtIGNsYXNzDQogKg0KICogQmFzZWQgb24gbGlicXJlbmNvZGUgQyBsaWJyYXJ5IGRpc3RyaWJ1dGVkIHVuZGVyIExHUEwgMi4xDQogKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgS2VudGFybyBGdWt1Y2hpIDxmdWt1Y2hpQG1lZ2F1aS5uZXQ+DQogKg0KICogUEhQIFFSIENvZGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgTEdQTCAzDQogKiBDb3B5cmlnaHQgKEMpIDIwMTAgRG9taW5payBEemllbmlhIDxkZWx0YWxhYiBhdCBwb2N6dGEgZG90IGZtPg0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KICogdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciBhbnkgbGF0ZXIgdmVyc2lvbi4NCiAqDQogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VDQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KICoNCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQ0KICovDQogICAgIA0KICAgIGNsYXNzIFFSYml0c3RyZWFtIHsNCiAgICANCiAgICAgICAgcHVibGljICRkYXRhID0gYXJyYXkoKTsNCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gc2l6ZSgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldHVybiBjb3VudCgkdGhpcy0+ZGF0YSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gYWxsb2NhdGUoJHNldExlbmd0aCkNCiAgICAgICAgew0KICAgICAgICAgICAgJHRoaXMtPmRhdGEgPSBhcnJheV9maWxsKDAsICRzZXRMZW5ndGgsIDApOw0KICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgIH0NCiAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbmV3RnJvbU51bSgkYml0cywgJG51bSkNCiAgICAgICAgew0KICAgICAgICAgICAgJGJzdHJlYW0gPSBuZXcgUVJiaXRzdHJlYW0oKTsNCiAgICAgICAgICAgICRic3RyZWFtLT5hbGxvY2F0ZSgkYml0cyk7DQogICAgICAgICAgICANCiAgICAgICAgICAgICRtYXNrID0gMSA8PCAoJGJpdHMgLSAxKTsNCiAgICAgICAgICAgIGZvcigkaT0wOyAkaTwkYml0czsgJGkrKykgew0KICAgICAgICAgICAgICAgIGlmKCRudW0gJiAkbWFzaykgew0KICAgICAgICAgICAgICAgICAgICAkYnN0cmVhbS0+ZGF0YVskaV0gPSAxOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRic3RyZWFtLT5kYXRhWyRpXSA9IDA7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRtYXNrID0gJG1hc2sgPj4gMTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcmV0dXJuICRic3RyZWFtOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBuZXdGcm9tQnl0ZXMoJHNpemUsICRkYXRhKQ0KICAgICAgICB7DQogICAgICAgICAgICAkYnN0cmVhbSA9IG5ldyBRUmJpdHN0cmVhbSgpOw0KICAgICAgICAgICAgJGJzdHJlYW0tPmFsbG9jYXRlKCRzaXplICogOCk7DQogICAgICAgICAgICAkcD0wOw0KDQogICAgICAgICAgICBmb3IoJGk9MDsgJGk8JHNpemU7ICRpKyspIHsNCiAgICAgICAgICAgICAgICAkbWFzayA9IDB4ODA7DQogICAgICAgICAgICAgICAgZm9yKCRqPTA7ICRqPDg7ICRqKyspIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoJGRhdGFbJGldICYgJG1hc2spIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRic3RyZWFtLT5kYXRhWyRwXSA9IDE7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYnN0cmVhbS0+ZGF0YVskcF0gPSAwOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICRwKys7DQogICAgICAgICAgICAgICAgICAgICRtYXNrID0gJG1hc2sgPj4gMTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAkYnN0cmVhbTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmQoUVJiaXRzdHJlYW0gJGFyZykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKGlzX251bGwoJGFyZykpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmKCRhcmctPnNpemUoKSA9PSAwKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmKCR0aGlzLT5zaXplKCkgPT0gMCkgew0KICAgICAgICAgICAgICAgICR0aGlzLT5kYXRhID0gJGFyZy0+ZGF0YTsNCiAgICAgICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHRoaXMtPmRhdGEgPSBhcnJheV92YWx1ZXMoYXJyYXlfbWVyZ2UoJHRoaXMtPmRhdGEsICRhcmctPmRhdGEpKTsNCg0KICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kTnVtKCRiaXRzLCAkbnVtKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoJGJpdHMgPT0gMCkgDQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQoNCiAgICAgICAgICAgICRiID0gUVJiaXRzdHJlYW06Om5ld0Zyb21OdW0oJGJpdHMsICRudW0pOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZihpc19udWxsKCRiKSkNCiAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQoNCiAgICAgICAgICAgICRyZXQgPSAkdGhpcy0+YXBwZW5kKCRiKTsNCiAgICAgICAgICAgIHVuc2V0KCRiKTsNCg0KICAgICAgICAgICAgcmV0dXJuICRyZXQ7DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZEJ5dGVzKCRzaXplLCAkZGF0YSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKCRzaXplID09IDApIA0KICAgICAgICAgICAgICAgIHJldHVybiAwOw0KDQogICAgICAgICAgICAkYiA9IFFSYml0c3RyZWFtOjpuZXdGcm9tQnl0ZXMoJHNpemUsICRkYXRhKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoaXNfbnVsbCgkYikpDQogICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KDQogICAgICAgICAgICAkcmV0ID0gJHRoaXMtPmFwcGVuZCgkYik7DQogICAgICAgICAgICB1bnNldCgkYik7DQoNCiAgICAgICAgICAgIHJldHVybiAkcmV0Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHRvQnl0ZSgpDQogICAgICAgIHsNCiAgICAgICAgDQogICAgICAgICAgICAkc2l6ZSA9ICR0aGlzLT5zaXplKCk7DQoNCiAgICAgICAgICAgIGlmKCRzaXplID09IDApIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJGRhdGEgPSBhcnJheV9maWxsKDAsIChpbnQpKCgkc2l6ZSArIDcpIC8gOCksIDApOw0KICAgICAgICAgICAgJGJ5dGVzID0gKGludCkoJHNpemUgLyA4KTsNCg0KICAgICAgICAgICAgJHAgPSAwOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBmb3IoJGk9MDsgJGk8JGJ5dGVzOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgJHYgPSAwOw0KICAgICAgICAgICAgICAgIGZvcigkaj0wOyAkajw4OyAkaisrKSB7DQogICAgICAgICAgICAgICAgICAgICR2ID0gJHYgPDwgMTsNCiAgICAgICAgICAgICAgICAgICAgJHYgfD0gJHRoaXMtPmRhdGFbJHBdOw0KICAgICAgICAgICAgICAgICAgICAkcCsrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkZGF0YVskaV0gPSAkdjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoJHNpemUgJiA3KSB7DQogICAgICAgICAgICAgICAgJHYgPSAwOw0KICAgICAgICAgICAgICAgIGZvcigkaj0wOyAkajwoJHNpemUgJiA3KTsgJGorKykgew0KICAgICAgICAgICAgICAgICAgICAkdiA9ICR2IDw8IDE7DQogICAgICAgICAgICAgICAgICAgICR2IHw9ICR0aGlzLT5kYXRhWyRwXTsNCiAgICAgICAgICAgICAgICAgICAgJHArKzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGRhdGFbJGJ5dGVzXSA9ICR2Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gJGRhdGE7DQogICAgICAgIH0NCg0KICAgIH0NCgoKCgovLy0tLS0gcXJzcGxpdC5waHAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKDQovKg0KICogUEhQIFFSIENvZGUgZW5jb2Rlcg0KICoNCiAqIElucHV0IHNwbGl0dGluZyBjbGFzc2VzDQogKg0KICogQmFzZWQgb24gbGlicXJlbmNvZGUgQyBsaWJyYXJ5IGRpc3RyaWJ1dGVkIHVuZGVyIExHUEwgMi4xDQogKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgS2VudGFybyBGdWt1Y2hpIDxmdWt1Y2hpQG1lZ2F1aS5uZXQ+DQogKg0KICogUEhQIFFSIENvZGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgTEdQTCAzDQogKiBDb3B5cmlnaHQgKEMpIDIwMTAgRG9taW5payBEemllbmlhIDxkZWx0YWxhYiBhdCBwb2N6dGEgZG90IGZtPg0KICoNCiAqIFRoZSBmb2xsb3dpbmcgZGF0YSAvIHNwZWNpZmljYXRpb25zIGFyZSB0YWtlbiBmcm9tDQogKiAiVHdvIGRpbWVuc2lvbmFsIHN5bWJvbCAtLSBRUi1jb2RlIC0tIEJhc2ljIFNwZWNpZmljYXRpb24iIChKSVMgWDA1MTA6MjAwNCkNCiAqICBvcg0KICogIkF1dG9tYXRpYyBpZGVudGlmaWNhdGlvbiBhbmQgZGF0YSBjYXB0dXJlIHRlY2huaXF1ZXMgLS0gDQogKiAgUVIgQ29kZSAyMDA1IGJhciBjb2RlIHN5bWJvbG9neSBzcGVjaWZpY2F0aW9uIiAoSVNPL0lFQyAxODAwNDoyMDA2KQ0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KICogdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciBhbnkgbGF0ZXIgdmVyc2lvbi4NCiAqDQogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VDQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KICoNCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQ0KICovDQogICAgY2xhc3MgUVJzcGxpdCB7DQoNCiAgICAgICAgcHVibGljICRkYXRhU3RyID0gJyc7DQogICAgICAgIHB1YmxpYyAkaW5wdXQ7DQogICAgICAgIHB1YmxpYyAkbW9kZUhpbnQ7DQoNCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZGF0YVN0ciwgJGlucHV0LCAkbW9kZUhpbnQpIA0KICAgICAgICB7DQogICAgICAgICAgICAkdGhpcy0+ZGF0YVN0ciAgPSAkZGF0YVN0cjsNCiAgICAgICAgICAgICR0aGlzLT5pbnB1dCAgICA9ICRpbnB1dDsNCiAgICAgICAgICAgICR0aGlzLT5tb2RlSGludCA9ICRtb2RlSGludDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNkaWdpdGF0KCRzdHIsICRwb3MpDQogICAgICAgIHsgICAgDQogICAgICAgICAgICBpZiAoJHBvcyA+PSBzdHJsZW4oJHN0cikpDQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgDQogICAgICAgICAgICByZXR1cm4gKChvcmQoJHN0clskcG9zXSkgPj0gb3JkKCcwJykpJiYob3JkKCRzdHJbJHBvc10pIDw9IG9yZCgnOScpKSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzYWxudW1hdCgkc3RyLCAkcG9zKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoJHBvcyA+PSBzdHJsZW4oJHN0cikpDQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgcmV0dXJuIChRUmlucHV0Ojpsb29rQW5UYWJsZShvcmQoJHN0clskcG9zXSkpID49IDApOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBpZGVudGlmeU1vZGUoJHBvcykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKCRwb3MgPj0gc3RybGVuKCR0aGlzLT5kYXRhU3RyKSkgDQogICAgICAgICAgICAgICAgcmV0dXJuIFFSX01PREVfTlVMOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgJGMgPSAkdGhpcy0+ZGF0YVN0clskcG9zXTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoc2VsZjo6aXNkaWdpdGF0KCR0aGlzLT5kYXRhU3RyLCAkcG9zKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBRUl9NT0RFX05VTTsNCiAgICAgICAgICAgIH0gZWxzZSBpZihzZWxmOjppc2FsbnVtYXQoJHRoaXMtPmRhdGFTdHIsICRwb3MpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIFFSX01PREVfQU47DQogICAgICAgICAgICB9IGVsc2UgaWYoJHRoaXMtPm1vZGVIaW50ID09IFFSX01PREVfS0FOSkkpIHsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICgkcG9zKzEgPCBzdHJsZW4oJHRoaXMtPmRhdGFTdHIpKSANCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICRkID0gJHRoaXMtPmRhdGFTdHJbJHBvcysxXTsNCiAgICAgICAgICAgICAgICAgICAgJHdvcmQgPSAob3JkKCRjKSA8PCA4KSB8IG9yZCgkZCk7DQogICAgICAgICAgICAgICAgICAgIGlmKCgkd29yZCA+PSAweDgxNDAgJiYgJHdvcmQgPD0gMHg5ZmZjKSB8fCAoJHdvcmQgPj0gMHhlMDQwICYmICR3b3JkIDw9IDB4ZWJiZikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBRUl9NT0RFX0tBTkpJOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gUVJfTU9ERV84Ow0KICAgICAgICB9IA0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlYXROdW0oKQ0KICAgICAgICB7DQogICAgICAgICAgICAkbG4gPSBRUnNwZWM6Omxlbmd0aEluZGljYXRvcihRUl9NT0RFX05VTSwgJHRoaXMtPmlucHV0LT5nZXRWZXJzaW9uKCkpOw0KDQogICAgICAgICAgICAkcCA9IDA7DQogICAgICAgICAgICB3aGlsZShzZWxmOjppc2RpZ2l0YXQoJHRoaXMtPmRhdGFTdHIsICRwKSkgew0KICAgICAgICAgICAgICAgICRwKys7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgICRydW4gPSAkcDsNCiAgICAgICAgICAgICRtb2RlID0gJHRoaXMtPmlkZW50aWZ5TW9kZSgkcCk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmKCRtb2RlID09IFFSX01PREVfOCkgew0KICAgICAgICAgICAgICAgICRkaWYgPSBRUmlucHV0Ojplc3RpbWF0ZUJpdHNNb2RlTnVtKCRydW4pICsgNCArICRsbg0KICAgICAgICAgICAgICAgICAgICAgKyBRUmlucHV0Ojplc3RpbWF0ZUJpdHNNb2RlOCgxKSAgICAgICAgIC8vICsgNCArIGw4DQogICAgICAgICAgICAgICAgICAgICAtIFFSaW5wdXQ6OmVzdGltYXRlQml0c01vZGU4KCRydW4gKyAxKTsgLy8gLSA0IC0gbDgNCiAgICAgICAgICAgICAgICBpZigkZGlmID4gMCkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmVhdDgoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZigkbW9kZSA9PSBRUl9NT0RFX0FOKSB7DQogICAgICAgICAgICAgICAgJGRpZiA9IFFSaW5wdXQ6OmVzdGltYXRlQml0c01vZGVOdW0oJHJ1bikgKyA0ICsgJGxuDQogICAgICAgICAgICAgICAgICAgICArIFFSaW5wdXQ6OmVzdGltYXRlQml0c01vZGVBbigxKSAgICAgICAgLy8gKyA0ICsgbGENCiAgICAgICAgICAgICAgICAgICAgIC0gUVJpbnB1dDo6ZXN0aW1hdGVCaXRzTW9kZUFuKCRydW4gKyAxKTsvLyAtIDQgLSBsYQ0KICAgICAgICAgICAgICAgIGlmKCRkaWYgPiAwKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZWF0QW4oKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgICRyZXQgPSAkdGhpcy0+aW5wdXQtPmFwcGVuZChRUl9NT0RFX05VTSwgJHJ1biwgc3RyX3NwbGl0KCR0aGlzLT5kYXRhU3RyKSk7DQogICAgICAgICAgICBpZigkcmV0IDwgMCkNCiAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQoNCiAgICAgICAgICAgIHJldHVybiAkcnVuOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGVhdEFuKCkNCiAgICAgICAgew0KICAgICAgICAgICAgJGxhID0gUVJzcGVjOjpsZW5ndGhJbmRpY2F0b3IoUVJfTU9ERV9BTiwgICR0aGlzLT5pbnB1dC0+Z2V0VmVyc2lvbigpKTsNCiAgICAgICAgICAgICRsbiA9IFFSc3BlYzo6bGVuZ3RoSW5kaWNhdG9yKFFSX01PREVfTlVNLCAkdGhpcy0+aW5wdXQtPmdldFZlcnNpb24oKSk7DQoNCiAgICAgICAgICAgICRwID0gMDsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgd2hpbGUoc2VsZjo6aXNhbG51bWF0KCR0aGlzLT5kYXRhU3RyLCAkcCkpIHsNCiAgICAgICAgICAgICAgICBpZihzZWxmOjppc2RpZ2l0YXQoJHRoaXMtPmRhdGFTdHIsICRwKSkgew0KICAgICAgICAgICAgICAgICAgICAkcSA9ICRwOw0KICAgICAgICAgICAgICAgICAgICB3aGlsZShzZWxmOjppc2RpZ2l0YXQoJHRoaXMtPmRhdGFTdHIsICRxKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHErKzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgJGRpZiA9IFFSaW5wdXQ6OmVzdGltYXRlQml0c01vZGVBbigkcCkgLy8gKyA0ICsgbGENCiAgICAgICAgICAgICAgICAgICAgICAgICArIFFSaW5wdXQ6OmVzdGltYXRlQml0c01vZGVOdW0oJHEgLSAkcCkgKyA0ICsgJGxuDQogICAgICAgICAgICAgICAgICAgICAgICAgLSBRUmlucHV0Ojplc3RpbWF0ZUJpdHNNb2RlQW4oJHEpOyAvLyAtIDQgLSBsYQ0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICBpZigkZGlmIDwgMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcCA9ICRxOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJHArKzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRydW4gPSAkcDsNCg0KICAgICAgICAgICAgaWYoIXNlbGY6OmlzYWxudW1hdCgkdGhpcy0+ZGF0YVN0ciwgJHApKSB7DQogICAgICAgICAgICAgICAgJGRpZiA9IFFSaW5wdXQ6OmVzdGltYXRlQml0c01vZGVBbigkcnVuKSArIDQgKyAkbGENCiAgICAgICAgICAgICAgICAgICAgICsgUVJpbnB1dDo6ZXN0aW1hdGVCaXRzTW9kZTgoMSkgLy8gKyA0ICsgbDgNCiAgICAgICAgICAgICAgICAgICAgICAtIFFSaW5wdXQ6OmVzdGltYXRlQml0c01vZGU4KCRydW4gKyAxKTsgLy8gLSA0IC0gbDgNCiAgICAgICAgICAgICAgICBpZigkZGlmID4gMCkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmVhdDgoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRyZXQgPSAkdGhpcy0+aW5wdXQtPmFwcGVuZChRUl9NT0RFX0FOLCAkcnVuLCBzdHJfc3BsaXQoJHRoaXMtPmRhdGFTdHIpKTsNCiAgICAgICAgICAgIGlmKCRyZXQgPCAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCg0KICAgICAgICAgICAgcmV0dXJuICRydW47DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZWF0S2FuamkoKQ0KICAgICAgICB7DQogICAgICAgICAgICAkcCA9IDA7DQogICAgICAgICAgICANCiAgICAgICAgICAgIHdoaWxlKCR0aGlzLT5pZGVudGlmeU1vZGUoJHApID09IFFSX01PREVfS0FOSkkpIHsNCiAgICAgICAgICAgICAgICAkcCArPSAyOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAkcmV0ID0gJHRoaXMtPmlucHV0LT5hcHBlbmQoUVJfTU9ERV9LQU5KSSwgJHAsIHN0cl9zcGxpdCgkdGhpcy0+ZGF0YVN0cikpOw0KICAgICAgICAgICAgaWYoJHJldCA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KDQogICAgICAgICAgICByZXR1cm4gJHJ1bjsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZWF0OCgpDQogICAgICAgIHsNCiAgICAgICAgICAgICRsYSA9IFFSc3BlYzo6bGVuZ3RoSW5kaWNhdG9yKFFSX01PREVfQU4sICR0aGlzLT5pbnB1dC0+Z2V0VmVyc2lvbigpKTsNCiAgICAgICAgICAgICRsbiA9IFFSc3BlYzo6bGVuZ3RoSW5kaWNhdG9yKFFSX01PREVfTlVNLCAkdGhpcy0+aW5wdXQtPmdldFZlcnNpb24oKSk7DQoNCiAgICAgICAgICAgICRwID0gMTsNCiAgICAgICAgICAgICRkYXRhU3RyTGVuID0gc3RybGVuKCR0aGlzLT5kYXRhU3RyKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgd2hpbGUoJHAgPCAkZGF0YVN0ckxlbikgew0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICRtb2RlID0gJHRoaXMtPmlkZW50aWZ5TW9kZSgkcCk7DQogICAgICAgICAgICAgICAgaWYoJG1vZGUgPT0gUVJfTU9ERV9LQU5KSSkgew0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYoJG1vZGUgPT0gUVJfTU9ERV9OVU0pIHsNCiAgICAgICAgICAgICAgICAgICAgJHEgPSAkcDsNCiAgICAgICAgICAgICAgICAgICAgd2hpbGUoc2VsZjo6aXNkaWdpdGF0KCR0aGlzLT5kYXRhU3RyLCAkcSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRxKys7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJGRpZiA9IFFSaW5wdXQ6OmVzdGltYXRlQml0c01vZGU4KCRwKSAvLyArIDQgKyBsOA0KICAgICAgICAgICAgICAgICAgICAgICAgICsgUVJpbnB1dDo6ZXN0aW1hdGVCaXRzTW9kZU51bSgkcSAtICRwKSArIDQgKyAkbG4NCiAgICAgICAgICAgICAgICAgICAgICAgICAtIFFSaW5wdXQ6OmVzdGltYXRlQml0c01vZGU4KCRxKTsgLy8gLSA0IC0gbDgNCiAgICAgICAgICAgICAgICAgICAgaWYoJGRpZiA8IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgJHAgPSAkcTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZigkbW9kZSA9PSBRUl9NT0RFX0FOKSB7DQogICAgICAgICAgICAgICAgICAgICRxID0gJHA7DQogICAgICAgICAgICAgICAgICAgIHdoaWxlKHNlbGY6OmlzYWxudW1hdCgkdGhpcy0+ZGF0YVN0ciwgJHEpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcSsrOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICRkaWYgPSBRUmlucHV0Ojplc3RpbWF0ZUJpdHNNb2RlOCgkcCkgIC8vICsgNCArIGw4DQogICAgICAgICAgICAgICAgICAgICAgICAgKyBRUmlucHV0Ojplc3RpbWF0ZUJpdHNNb2RlQW4oJHEgLSAkcCkgKyA0ICsgJGxhDQogICAgICAgICAgICAgICAgICAgICAgICAgLSBRUmlucHV0Ojplc3RpbWF0ZUJpdHNNb2RlOCgkcSk7IC8vIC0gNCAtIGw4DQogICAgICAgICAgICAgICAgICAgIGlmKCRkaWYgPCAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwID0gJHE7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkcCsrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHJ1biA9ICRwOw0KICAgICAgICAgICAgJHJldCA9ICR0aGlzLT5pbnB1dC0+YXBwZW5kKFFSX01PREVfOCwgJHJ1biwgc3RyX3NwbGl0KCR0aGlzLT5kYXRhU3RyKSk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmKCRyZXQgPCAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCg0KICAgICAgICAgICAgcmV0dXJuICRydW47DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHNwbGl0U3RyaW5nKCkNCiAgICAgICAgew0KICAgICAgICAgICAgd2hpbGUgKHN0cmxlbigkdGhpcy0+ZGF0YVN0cikgPiAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmKCR0aGlzLT5kYXRhU3RyID09ICcnKQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCg0KICAgICAgICAgICAgICAgICRtb2RlID0gJHRoaXMtPmlkZW50aWZ5TW9kZSgwKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBzd2l0Y2ggKCRtb2RlKSB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV9OVU06ICRsZW5ndGggPSAkdGhpcy0+ZWF0TnVtKCk7IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIFFSX01PREVfQU46ICAkbGVuZ3RoID0gJHRoaXMtPmVhdEFuKCk7IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIFFSX01PREVfS0FOSkk6DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGhpbnQgPT0gUVJfTU9ERV9LQU5KSSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxlbmd0aCA9ICR0aGlzLT5lYXRLYW5qaSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAgICAkbGVuZ3RoID0gJHRoaXMtPmVhdDgoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAkbGVuZ3RoID0gJHRoaXMtPmVhdDgoKTsgYnJlYWs7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaWYoJGxlbmd0aCA9PSAwKSByZXR1cm4gMDsNCiAgICAgICAgICAgICAgICBpZigkbGVuZ3RoIDwgMCkgIHJldHVybiAtMTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkdGhpcy0+ZGF0YVN0ciA9IHN1YnN0cigkdGhpcy0+ZGF0YVN0ciwgJGxlbmd0aCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHRvVXBwZXIoKQ0KICAgICAgICB7DQogICAgICAgICAgICAkc3RyaW5nTGVuID0gc3RybGVuKCR0aGlzLT5kYXRhU3RyKTsNCiAgICAgICAgICAgICRwID0gMDsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgd2hpbGUgKCRwPCRzdHJpbmdMZW4pIHsNCiAgICAgICAgICAgICAgICAkbW9kZSA9IHNlbGY6OmlkZW50aWZ5TW9kZShzdWJzdHIoJHRoaXMtPmRhdGFTdHIsICRwKSwgJHRoaXMtPm1vZGVIaW50KTsNCiAgICAgICAgICAgICAgICBpZigkbW9kZSA9PSBRUl9NT0RFX0tBTkpJKSB7DQogICAgICAgICAgICAgICAgICAgICRwICs9IDI7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKG9yZCgkdGhpcy0+ZGF0YVN0clskcF0pID49IG9yZCgnYScpICYmIG9yZCgkdGhpcy0+ZGF0YVN0clskcF0pIDw9IG9yZCgneicpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZGF0YVN0clskcF0gPSBjaHIob3JkKCR0aGlzLT5kYXRhU3RyWyRwXSkgLSAzMik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHArKzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVN0cjsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNwbGl0U3RyaW5nVG9RUmlucHV0KCRzdHJpbmcsIFFSaW5wdXQgJGlucHV0LCAkbW9kZUhpbnQsICRjYXNlc2Vuc2l0aXZlID0gdHJ1ZSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYoaXNfbnVsbCgkc3RyaW5nKSB8fCAkc3RyaW5nID09ICdcMCcgfHwgJHN0cmluZyA9PSAnJykgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ2VtcHR5IHN0cmluZyEhIScpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkc3BsaXQgPSBuZXcgUVJzcGxpdCgkc3RyaW5nLCAkaW5wdXQsICRtb2RlSGludCk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmKCEkY2FzZXNlbnNpdGl2ZSkNCiAgICAgICAgICAgICAgICAkc3BsaXQtPnRvVXBwZXIoKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIHJldHVybiAkc3BsaXQtPnNwbGl0U3RyaW5nKCk7DQogICAgICAgIH0NCiAgICB9CgoKCi8vLS0tLSBxcnJzY29kZS5waHAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKDQovKg0KICogUEhQIFFSIENvZGUgZW5jb2Rlcg0KICoNCiAqIFJlZWQtU29sb21vbiBlcnJvciBjb3JyZWN0aW9uIHN1cHBvcnQNCiAqIA0KICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA2IFBoaWwgS2FybiwgS0E5UQ0KICogKGxpYmZlYyBpcyByZWxlYXNlZCB1bmRlciB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLikNCiAqDQogKiBCYXNlZCBvbiBsaWJxcmVuY29kZSBDIGxpYnJhcnkgZGlzdHJpYnV0ZWQgdW5kZXIgTEdQTCAyLjENCiAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBLZW50YXJvIEZ1a3VjaGkgPGZ1a3VjaGlAbWVnYXVpLm5ldD4NCiAqDQogKiBQSFAgUVIgQ29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBMR1BMIDMNCiAqIENvcHlyaWdodCAoQykgMjAxMCBEb21pbmlrIER6aWVuaWEgPGRlbHRhbGFiIGF0IHBvY3p0YSBkb3QgZm0+DQogKg0KICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQogKiB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIGFueSBsYXRlciB2ZXJzaW9uLg0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUNCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQogKg0KICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBDQogKi8NCiANCiAgICBjbGFzcyBRUnJzSXRlbSB7DQogICAgDQogICAgICAgIHB1YmxpYyAkbW07ICAgICAgICAgICAgICAgICAgLy8gQml0cyBwZXIgc3ltYm9sIA0KICAgICAgICBwdWJsaWMgJG5uOyAgICAgICAgICAgICAgICAgIC8vIFN5bWJvbHMgcGVyIGJsb2NrICg9ICgxPDxtbSktMSkgDQogICAgICAgIHB1YmxpYyAkYWxwaGFfdG8gPSBhcnJheSgpOyAgLy8gbG9nIGxvb2t1cCB0YWJsZSANCiAgICAgICAgcHVibGljICRpbmRleF9vZiA9IGFycmF5KCk7ICAvLyBBbnRpbG9nIGxvb2t1cCB0YWJsZSANCiAgICAgICAgcHVibGljICRnZW5wb2x5ID0gYXJyYXkoKTsgICAvLyBHZW5lcmF0b3IgcG9seW5vbWlhbCANCiAgICAgICAgcHVibGljICRucm9vdHM7ICAgICAgICAgICAgICAvLyBOdW1iZXIgb2YgZ2VuZXJhdG9yIHJvb3RzID0gbnVtYmVyIG9mIHBhcml0eSBzeW1ib2xzIA0KICAgICAgICBwdWJsaWMgJGZjcjsgICAgICAgICAgICAgICAgIC8vIEZpcnN0IGNvbnNlY3V0aXZlIHJvb3QsIGluZGV4IGZvcm0gDQogICAgICAgIHB1YmxpYyAkcHJpbTsgICAgICAgICAgICAgICAgLy8gUHJpbWl0aXZlIGVsZW1lbnQsIGluZGV4IGZvcm0gDQogICAgICAgIHB1YmxpYyAkaXByaW07ICAgICAgICAgICAgICAgLy8gcHJpbS10aCByb290IG9mIDEsIGluZGV4IGZvcm0gDQogICAgICAgIHB1YmxpYyAkcGFkOyAgICAgICAgICAgICAgICAgLy8gUGFkZGluZyBieXRlcyBpbiBzaG9ydGVuZWQgYmxvY2sgDQogICAgICAgIHB1YmxpYyAkZ2Zwb2x5Ow0KICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIG1vZG5uKCR4KQ0KICAgICAgICB7DQogICAgICAgICAgICB3aGlsZSAoJHggPj0gJHRoaXMtPm5uKSB7DQogICAgICAgICAgICAgICAgJHggLT0gJHRoaXMtPm5uOw0KICAgICAgICAgICAgICAgICR4ID0gKCR4ID4+ICR0aGlzLT5tbSkgKyAoJHggJiAkdGhpcy0+bm4pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICByZXR1cm4gJHg7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGluaXRfcnNfY2hhcigkc3ltc2l6ZSwgJGdmcG9seSwgJGZjciwgJHByaW0sICRucm9vdHMsICRwYWQpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIENvbW1vbiBjb2RlIGZvciBpbnRpYWxpemluZyBhIFJlZWQtU29sb21vbiBjb250cm9sIGJsb2NrIChjaGFyIG9yIGludCBzeW1ib2xzKQ0KICAgICAgICAgICAgLy8gQ29weXJpZ2h0IDIwMDQgUGhpbCBLYXJuLCBLQTlRDQogICAgICAgICAgICAvLyBNYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoTEdQTCkNCg0KICAgICAgICAgICAgJHJzID0gbnVsbDsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gQ2hlY2sgcGFyYW1ldGVyIHJhbmdlcw0KICAgICAgICAgICAgaWYoJHN5bXNpemUgPCAwIHx8ICRzeW1zaXplID4gOCkgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHJzOw0KICAgICAgICAgICAgaWYoJGZjciA8IDAgfHwgJGZjciA+PSAoMTw8JHN5bXNpemUpKSAgICAgICAgICAgICAgICByZXR1cm4gJHJzOw0KICAgICAgICAgICAgaWYoJHByaW0gPD0gMCB8fCAkcHJpbSA+PSAoMTw8JHN5bXNpemUpKSAgICAgICAgICAgICByZXR1cm4gJHJzOw0KICAgICAgICAgICAgaWYoJG5yb290cyA8IDAgfHwgJG5yb290cyA+PSAoMTw8JHN5bXNpemUpKSAgICAgICAgICByZXR1cm4gJHJzOyAvLyBDYW4ndCBoYXZlIG1vcmUgcm9vdHMgdGhhbiBzeW1ib2wgdmFsdWVzIQ0KICAgICAgICAgICAgaWYoJHBhZCA8IDAgfHwgJHBhZCA+PSAoKDE8PCRzeW1zaXplKSAtMSAtICRucm9vdHMpKSByZXR1cm4gJHJzOyAvLyBUb28gbXVjaCBwYWRkaW5nDQoNCiAgICAgICAgICAgICRycyA9IG5ldyBRUnJzSXRlbSgpOw0KICAgICAgICAgICAgJHJzLT5tbSA9ICRzeW1zaXplOw0KICAgICAgICAgICAgJHJzLT5ubiA9ICgxPDwkc3ltc2l6ZSktMTsNCiAgICAgICAgICAgICRycy0+cGFkID0gJHBhZDsNCg0KICAgICAgICAgICAgJHJzLT5hbHBoYV90byA9IGFycmF5X2ZpbGwoMCwgJHJzLT5ubisxLCAwKTsNCiAgICAgICAgICAgICRycy0+aW5kZXhfb2YgPSBhcnJheV9maWxsKDAsICRycy0+bm4rMSwgMCk7DQogICAgICAgICAgDQogICAgICAgICAgICAvLyBQSFAgc3R5bGUgbWFjcm8gcmVwbGFjZW1lbnQgOykNCiAgICAgICAgICAgICROTiA9JiAkcnMtPm5uOw0KICAgICAgICAgICAgJEEwID0mICROTjsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gR2VuZXJhdGUgR2Fsb2lzIGZpZWxkIGxvb2t1cCB0YWJsZXMNCiAgICAgICAgICAgICRycy0+aW5kZXhfb2ZbMF0gPSAkQTA7IC8vIGxvZyh6ZXJvKSA9IC1pbmYNCiAgICAgICAgICAgICRycy0+YWxwaGFfdG9bJEEwXSA9IDA7IC8vIGFscGhhKiotaW5mID0gMA0KICAgICAgICAgICAgJHNyID0gMTsNCiAgICAgICAgICANCiAgICAgICAgICAgIGZvcigkaT0wOyAkaTwkcnMtPm5uOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgJHJzLT5pbmRleF9vZlskc3JdID0gJGk7DQogICAgICAgICAgICAgICAgJHJzLT5hbHBoYV90b1skaV0gPSAkc3I7DQogICAgICAgICAgICAgICAgJHNyIDw8PSAxOw0KICAgICAgICAgICAgICAgIGlmKCRzciAmICgxPDwkc3ltc2l6ZSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJHNyIF49ICRnZnBvbHk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRzciAmPSAkcnMtPm5uOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZigkc3IgIT0gMSl7DQogICAgICAgICAgICAgICAgLy8gZmllbGQgZ2VuZXJhdG9yIHBvbHlub21pYWwgaXMgbm90IHByaW1pdGl2ZSENCiAgICAgICAgICAgICAgICAkcnMgPSBOVUxMOw0KICAgICAgICAgICAgICAgIHJldHVybiAkcnM7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8qIEZvcm0gUlMgY29kZSBnZW5lcmF0b3IgcG9seW5vbWlhbCBmcm9tIGl0cyByb290cyAqLw0KICAgICAgICAgICAgJHJzLT5nZW5wb2x5ID0gYXJyYXlfZmlsbCgwLCAkbnJvb3RzKzEsIDApOw0KICAgICAgICANCiAgICAgICAgICAgICRycy0+ZmNyID0gJGZjcjsNCiAgICAgICAgICAgICRycy0+cHJpbSA9ICRwcmltOw0KICAgICAgICAgICAgJHJzLT5ucm9vdHMgPSAkbnJvb3RzOw0KICAgICAgICAgICAgJHJzLT5nZnBvbHkgPSAkZ2Zwb2x5Ow0KDQogICAgICAgICAgICAvKiBGaW5kIHByaW0tdGggcm9vdCBvZiAxLCB1c2VkIGluIGRlY29kaW5nICovDQogICAgICAgICAgICBmb3IoJGlwcmltPTE7KCRpcHJpbSAlICRwcmltKSAhPSAwOyRpcHJpbSArPSAkcnMtPm5uKQ0KICAgICAgICAgICAgOyAvLyBpbnRlbnRpb25hbCBlbXB0eS1ib2R5IGxvb3AhDQogICAgICAgICAgICANCiAgICAgICAgICAgICRycy0+aXByaW0gPSAoaW50KSgkaXByaW0gLyAkcHJpbSk7DQogICAgICAgICAgICAkcnMtPmdlbnBvbHlbMF0gPSAxOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBmb3IgKCRpID0gMCwkcm9vdD0kZmNyKiRwcmltOyAkaSA8ICRucm9vdHM7ICRpKyssICRyb290ICs9ICRwcmltKSB7DQogICAgICAgICAgICAgICAgJHJzLT5nZW5wb2x5WyRpKzFdID0gMTsNCg0KICAgICAgICAgICAgICAgIC8vIE11bHRpcGx5IHJzLT5nZW5wb2x5W10gYnkgIEAqKihyb290ICsgeCkNCiAgICAgICAgICAgICAgICBmb3IgKCRqID0gJGk7ICRqID4gMDsgJGotLSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJHJzLT5nZW5wb2x5WyRqXSAhPSAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcnMtPmdlbnBvbHlbJGpdID0gJHJzLT5nZW5wb2x5WyRqLTFdIF4gJHJzLT5hbHBoYV90b1skcnMtPm1vZG5uKCRycy0+aW5kZXhfb2ZbJHJzLT5nZW5wb2x5WyRqXV0gKyAkcm9vdCldOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgJHJzLT5nZW5wb2x5WyRqXSA9ICRycy0+Z2VucG9seVskai0xXTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyBycy0+Z2VucG9seVswXSBjYW4gbmV2ZXIgYmUgemVybw0KICAgICAgICAgICAgICAgICRycy0+Z2VucG9seVswXSA9ICRycy0+YWxwaGFfdG9bJHJzLT5tb2RubigkcnMtPmluZGV4X29mWyRycy0+Z2VucG9seVswXV0gKyAkcm9vdCldOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAvLyBjb252ZXJ0IHJzLT5nZW5wb2x5W10gdG8gaW5kZXggZm9ybSBmb3IgcXVpY2tlciBlbmNvZGluZw0KICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDw9ICRucm9vdHM7ICRpKyspDQogICAgICAgICAgICAgICAgJHJzLT5nZW5wb2x5WyRpXSA9ICRycy0+aW5kZXhfb2ZbJHJzLT5nZW5wb2x5WyRpXV07DQoNCiAgICAgICAgICAgIHJldHVybiAkcnM7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlX3JzX2NoYXIoJGRhdGEsICYkcGFyaXR5KQ0KICAgICAgICB7DQogICAgICAgICAgICAkTU0gICAgICAgPSYgJHRoaXMtPm1tOw0KICAgICAgICAgICAgJE5OICAgICAgID0mICR0aGlzLT5ubjsNCiAgICAgICAgICAgICRBTFBIQV9UTyA9JiAkdGhpcy0+YWxwaGFfdG87DQogICAgICAgICAgICAkSU5ERVhfT0YgPSYgJHRoaXMtPmluZGV4X29mOw0KICAgICAgICAgICAgJEdFTlBPTFkgID0mICR0aGlzLT5nZW5wb2x5Ow0KICAgICAgICAgICAgJE5ST09UUyAgID0mICR0aGlzLT5ucm9vdHM7DQogICAgICAgICAgICAkRkNSICAgICAgPSYgJHRoaXMtPmZjcjsNCiAgICAgICAgICAgICRQUklNICAgICA9JiAkdGhpcy0+cHJpbTsNCiAgICAgICAgICAgICRJUFJJTSAgICA9JiAkdGhpcy0+aXByaW07DQogICAgICAgICAgICAkUEFEICAgICAgPSYgJHRoaXMtPnBhZDsNCiAgICAgICAgICAgICRBMCAgICAgICA9JiAkTk47DQoNCiAgICAgICAgICAgICRwYXJpdHkgPSBhcnJheV9maWxsKDAsICROUk9PVFMsIDApOw0KDQogICAgICAgICAgICBmb3IoJGk9MDsgJGk8ICgkTk4tJE5ST09UUy0kUEFEKTsgJGkrKykgew0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICRmZWVkYmFjayA9ICRJTkRFWF9PRlskZGF0YVskaV0gXiAkcGFyaXR5WzBdXTsNCiAgICAgICAgICAgICAgICBpZigkZmVlZGJhY2sgIT0gJEEwKSB7ICAgICAgDQogICAgICAgICAgICAgICAgICAgIC8vIGZlZWRiYWNrIHRlcm0gaXMgbm9uLXplcm8NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGxpbmUgaXMgdW5uZWNlc3Nhcnkgd2hlbiBHRU5QT0xZW05ST09UU10gaXMgdW5pdHksIGFzIGl0IG11c3QNCiAgICAgICAgICAgICAgICAgICAgLy8gYWx3YXlzIGJlIGZvciB0aGUgcG9seW5vbWlhbHMgY29uc3RydWN0ZWQgYnkgaW5pdF9ycygpDQogICAgICAgICAgICAgICAgICAgICRmZWVkYmFjayA9ICR0aGlzLT5tb2RubigkTk4gLSAkR0VOUE9MWVskTlJPT1RTXSArICRmZWVkYmFjayk7DQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgZm9yKCRqPTE7JGo8JE5ST09UUzskaisrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcGFyaXR5WyRqXSBePSAkQUxQSEFfVE9bJHRoaXMtPm1vZG5uKCRmZWVkYmFjayArICRHRU5QT0xZWyROUk9PVFMtJGpdKV07DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLy8gU2hpZnQgDQogICAgICAgICAgICAgICAgYXJyYXlfc2hpZnQoJHBhcml0eSk7DQogICAgICAgICAgICAgICAgaWYoJGZlZWRiYWNrICE9ICRBMCkgew0KICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRwYXJpdHksICRBTFBIQV9UT1skdGhpcy0+bW9kbm4oJGZlZWRiYWNrICsgJEdFTlBPTFlbMF0pXSk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkcGFyaXR5LCAwKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgIA0KICAgIGNsYXNzIFFScnMgew0KICAgIA0KICAgICAgICBwdWJsaWMgc3RhdGljICRpdGVtcyA9IGFycmF5KCk7DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbml0X3JzKCRzeW1zaXplLCAkZ2Zwb2x5LCAkZmNyLCAkcHJpbSwgJG5yb290cywgJHBhZCkNCiAgICAgICAgew0KICAgICAgICAgICAgZm9yZWFjaChzZWxmOjokaXRlbXMgYXMgJHJzKSB7DQogICAgICAgICAgICAgICAgaWYoJHJzLT5wYWQgIT0gJHBhZCkgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgaWYoJHJzLT5ucm9vdHMgIT0gJG5yb290cykgY29udGludWU7DQogICAgICAgICAgICAgICAgaWYoJHJzLT5tbSAhPSAkc3ltc2l6ZSkgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgaWYoJHJzLT5nZnBvbHkgIT0gJGdmcG9seSkgY29udGludWU7DQogICAgICAgICAgICAgICAgaWYoJHJzLT5mY3IgIT0gJGZjcikgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgaWYoJHJzLT5wcmltICE9ICRwcmltKSAgICAgY29udGludWU7DQoNCiAgICAgICAgICAgICAgICByZXR1cm4gJHJzOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkcnMgPSBRUnJzSXRlbTo6aW5pdF9yc19jaGFyKCRzeW1zaXplLCAkZ2Zwb2x5LCAkZmNyLCAkcHJpbSwgJG5yb290cywgJHBhZCk7DQogICAgICAgICAgICBhcnJheV91bnNoaWZ0KHNlbGY6OiRpdGVtcywgJHJzKTsNCg0KICAgICAgICAgICAgcmV0dXJuICRyczsNCiAgICAgICAgfQ0KICAgIH0KCgoKLy8tLS0tIHFybWFzay5waHAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKDQovKg0KICogUEhQIFFSIENvZGUgZW5jb2Rlcg0KICoNCiAqIE1hc2tpbmcNCiAqDQogKiBCYXNlZCBvbiBsaWJxcmVuY29kZSBDIGxpYnJhcnkgZGlzdHJpYnV0ZWQgdW5kZXIgTEdQTCAyLjENCiAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBLZW50YXJvIEZ1a3VjaGkgPGZ1a3VjaGlAbWVnYXVpLm5ldD4NCiAqDQogKiBQSFAgUVIgQ29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBMR1BMIDMNCiAqIENvcHlyaWdodCAoQykgMjAxMCBEb21pbmlrIER6aWVuaWEgPGRlbHRhbGFiIGF0IHBvY3p0YSBkb3QgZm0+DQogKg0KICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQogKiB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIGFueSBsYXRlciB2ZXJzaW9uLg0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUNCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQogKg0KICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBDQogKi8NCiANCglkZWZpbmUoJ04xJywgMyk7DQoJZGVmaW5lKCdOMicsIDMpOw0KCWRlZmluZSgnTjMnLCA0MCk7DQoJZGVmaW5lKCdONCcsIDEwKTsNCg0KCWNsYXNzIFFSbWFzayB7DQoJDQoJCXB1YmxpYyAkcnVuTGVuZ3RoID0gYXJyYXkoKTsNCgkJDQoJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KCQlwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSANCiAgICAgICAgew0KICAgICAgICAgICAgJHRoaXMtPnJ1bkxlbmd0aCA9IGFycmF5X2ZpbGwoMCwgUVJTUEVDX1dJRFRIX01BWCArIDEsIDApOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlRm9ybWF0SW5mb3JtYXRpb24oJHdpZHRoLCAmJGZyYW1lLCAkbWFzaywgJGxldmVsKQ0KICAgICAgICB7DQogICAgICAgICAgICAkYmxhY2tzID0gMDsNCiAgICAgICAgICAgICRmb3JtYXQgPSAgUVJzcGVjOjpnZXRGb3JtYXRJbmZvKCRtYXNrLCAkbGV2ZWwpOw0KDQogICAgICAgICAgICBmb3IoJGk9MDsgJGk8ODsgJGkrKykgew0KICAgICAgICAgICAgICAgIGlmKCRmb3JtYXQgJiAxKSB7DQogICAgICAgICAgICAgICAgICAgICRibGFja3MgKz0gMjsNCiAgICAgICAgICAgICAgICAgICAgJHYgPSAweDg1Ow0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICR2ID0gMHg4NDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGZyYW1lWzhdWyR3aWR0aCAtIDEgLSAkaV0gPSBjaHIoJHYpOw0KICAgICAgICAgICAgICAgIGlmKCRpIDwgNikgew0KICAgICAgICAgICAgICAgICAgICAkZnJhbWVbJGldWzhdID0gY2hyKCR2KTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkZnJhbWVbJGkgKyAxXVs4XSA9IGNocigkdik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRmb3JtYXQgPSAkZm9ybWF0ID4+IDE7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIGZvcigkaT0wOyAkaTw3OyAkaSsrKSB7DQogICAgICAgICAgICAgICAgaWYoJGZvcm1hdCAmIDEpIHsNCiAgICAgICAgICAgICAgICAgICAgJGJsYWNrcyArPSAyOw0KICAgICAgICAgICAgICAgICAgICAkdiA9IDB4ODU7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJHYgPSAweDg0Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkZnJhbWVbJHdpZHRoIC0gNyArICRpXVs4XSA9IGNocigkdik7DQogICAgICAgICAgICAgICAgaWYoJGkgPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICAkZnJhbWVbOF1bN10gPSBjaHIoJHYpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRmcmFtZVs4XVs2IC0gJGldID0gY2hyKCR2KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGZvcm1hdCA9ICRmb3JtYXQgPj4gMTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcmV0dXJuICRibGFja3M7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gbWFzazAoJHgsICR5KSB7IHJldHVybiAoJHgrJHkpJjE7ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBtYXNrMSgkeCwgJHkpIHsgcmV0dXJuICgkeSYxKTsgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIG1hc2syKCR4LCAkeSkgeyByZXR1cm4gKCR4JTMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gbWFzazMoJHgsICR5KSB7IHJldHVybiAoJHgrJHkpJTM7ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBtYXNrNCgkeCwgJHkpIHsgcmV0dXJuICgoKGludCkoJHkvMikpKygoaW50KSgkeC8zKSkpJjE7IH0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIG1hc2s1KCR4LCAkeSkgeyByZXR1cm4gKCgkeCokeSkmMSkrKCR4KiR5KSUzOyAgICAgICAgICAgfQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gbWFzazYoJHgsICR5KSB7IHJldHVybiAoKCgkeCokeSkmMSkrKCR4KiR5KSUzKSYxOyAgICAgICB9DQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBtYXNrNygkeCwgJHkpIHsgcmV0dXJuICgoKCR4KiR5KSUzKSsoKCR4KyR5KSYxKSkmMTsgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwcml2YXRlIGZ1bmN0aW9uIGdlbmVyYXRlTWFza05vKCRtYXNrTm8sICR3aWR0aCwgJGZyYW1lKQ0KICAgICAgICB7DQogICAgICAgICAgICAkYml0TWFzayA9IGFycmF5X2ZpbGwoMCwgJHdpZHRoLCBhcnJheV9maWxsKDAsICR3aWR0aCwgMCkpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBmb3IoJHk9MDsgJHk8JHdpZHRoOyAkeSsrKSB7DQogICAgICAgICAgICAgICAgZm9yKCR4PTA7ICR4PCR3aWR0aDsgJHgrKykgew0KICAgICAgICAgICAgICAgICAgICBpZihvcmQoJGZyYW1lWyR5XVskeF0pICYgMHg4MCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGJpdE1hc2tbJHldWyR4XSA9IDA7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkbWFza0Z1bmMgPSBjYWxsX3VzZXJfZnVuYyhhcnJheSgkdGhpcywgJ21hc2snLiRtYXNrTm8pLCAkeCwgJHkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGJpdE1hc2tbJHldWyR4XSA9ICgkbWFza0Z1bmMgPT0gMCk/MTowOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgcmV0dXJuICRiaXRNYXNrOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXJpYWwoJGJpdEZyYW1lKQ0KICAgICAgICB7DQogICAgICAgICAgICAkY29kZUFyciA9IGFycmF5KCk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGZvcmVhY2ggKCRiaXRGcmFtZSBhcyAkbGluZSkNCiAgICAgICAgICAgICAgICAkY29kZUFycltdID0gam9pbignJywgJGxpbmUpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgcmV0dXJuIGd6Y29tcHJlc3Moam9pbigiXG4iLCAkY29kZUFyciksIDkpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1bnNlcmlhbCgkY29kZSkNCiAgICAgICAgew0KICAgICAgICAgICAgJGNvZGVBcnIgPSBhcnJheSgpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAkY29kZUxpbmVzID0gZXhwbG9kZSgiXG4iLCBnenVuY29tcHJlc3MoJGNvZGUpKTsNCiAgICAgICAgICAgIGZvcmVhY2ggKCRjb2RlTGluZXMgYXMgJGxpbmUpDQogICAgICAgICAgICAgICAgJGNvZGVBcnJbXSA9IHN0cl9zcGxpdCgkbGluZSk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIHJldHVybiAkY29kZUFycjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBtYWtlTWFza05vKCRtYXNrTm8sICR3aWR0aCwgJHMsICYkZCwgJG1hc2tHZW5Pbmx5ID0gZmFsc2UpIA0KICAgICAgICB7DQogICAgICAgICAgICAkYiA9IDA7DQogICAgICAgICAgICAkYml0TWFzayA9IGFycmF5KCk7DQogICAgICAgICAgICANCiAgICAgICAgICAgICRmaWxlTmFtZSA9IFFSX0NBQ0hFX0RJUi4nbWFza18nLiRtYXNrTm8uRElSRUNUT1JZX1NFUEFSQVRPUi4nbWFza18nLiR3aWR0aC4nXycuJG1hc2tOby4nLmRhdCc7DQoNCiAgICAgICAgICAgIGlmIChRUl9DQUNIRUFCTEUpIHsNCiAgICAgICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGZpbGVOYW1lKSkgew0KICAgICAgICAgICAgICAgICAgICAkYml0TWFzayA9IHNlbGY6OnVuc2VyaWFsKGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlTmFtZSkpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRiaXRNYXNrID0gJHRoaXMtPmdlbmVyYXRlTWFza05vKCRtYXNrTm8sICR3aWR0aCwgJHMsICRkKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cyhRUl9DQUNIRV9ESVIuJ21hc2tfJy4kbWFza05vKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIG1rZGlyKFFSX0NBQ0hFX0RJUi4nbWFza18nLiRtYXNrTm8pOw0KICAgICAgICAgICAgICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkZmlsZU5hbWUsIHNlbGY6OnNlcmlhbCgkYml0TWFzaykpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJGJpdE1hc2sgPSAkdGhpcy0+Z2VuZXJhdGVNYXNrTm8oJG1hc2tObywgJHdpZHRoLCAkcywgJGQpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoJG1hc2tHZW5Pbmx5KQ0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICRkID0gJHM7DQoNCiAgICAgICAgICAgIGZvcigkeT0wOyAkeTwkd2lkdGg7ICR5KyspIHsNCiAgICAgICAgICAgICAgICBmb3IoJHg9MDsgJHg8JHdpZHRoOyAkeCsrKSB7DQogICAgICAgICAgICAgICAgICAgIGlmKCRiaXRNYXNrWyR5XVskeF0gPT0gMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGRbJHldWyR4XSA9IGNocihvcmQoJHNbJHldWyR4XSkgXiAoaW50KSRiaXRNYXNrWyR5XVskeF0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICRiICs9IChpbnQpKG9yZCgkZFskeV1bJHhdKSAmIDEpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcmV0dXJuICRiOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIG1ha2VNYXNrKCR3aWR0aCwgJGZyYW1lLCAkbWFza05vLCAkbGV2ZWwpDQogICAgICAgIHsNCiAgICAgICAgICAgICRtYXNrZWQgPSBhcnJheV9maWxsKDAsICR3aWR0aCwgc3RyX3JlcGVhdCgiXDAiLCAkd2lkdGgpKTsNCiAgICAgICAgICAgICR0aGlzLT5tYWtlTWFza05vKCRtYXNrTm8sICR3aWR0aCwgJGZyYW1lLCAkbWFza2VkKTsNCiAgICAgICAgICAgICR0aGlzLT53cml0ZUZvcm1hdEluZm9ybWF0aW9uKCR3aWR0aCwgJG1hc2tlZCwgJG1hc2tObywgJGxldmVsKTsNCiAgICAgICANCiAgICAgICAgICAgIHJldHVybiAkbWFza2VkOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGNhbGNOMU4zKCRsZW5ndGgpDQogICAgICAgIHsNCiAgICAgICAgICAgICRkZW1lcml0ID0gMDsNCg0KICAgICAgICAgICAgZm9yKCRpPTA7ICRpPCRsZW5ndGg7ICRpKyspIHsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZigkdGhpcy0+cnVuTGVuZ3RoWyRpXSA+PSA1KSB7DQogICAgICAgICAgICAgICAgICAgICRkZW1lcml0ICs9IChOMSArICgkdGhpcy0+cnVuTGVuZ3RoWyRpXSAtIDUpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYoJGkgJiAxKSB7DQogICAgICAgICAgICAgICAgICAgIGlmKCgkaSA+PSAzKSAmJiAoJGkgPCAoJGxlbmd0aC0yKSkgJiYgKCR0aGlzLT5ydW5MZW5ndGhbJGldICUgMyA9PSAwKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGZhY3QgPSAoaW50KSgkdGhpcy0+cnVuTGVuZ3RoWyRpXSAvIDMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoKCR0aGlzLT5ydW5MZW5ndGhbJGktMl0gPT0gJGZhY3QpICYmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAoJHRoaXMtPnJ1bkxlbmd0aFskaS0xXSA9PSAkZmFjdCkgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgkdGhpcy0+cnVuTGVuZ3RoWyRpKzFdID09ICRmYWN0KSAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKCR0aGlzLT5ydW5MZW5ndGhbJGkrMl0gPT0gJGZhY3QpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoKCR0aGlzLT5ydW5MZW5ndGhbJGktM10gPCAwKSB8fCAoJHRoaXMtPnJ1bkxlbmd0aFskaS0zXSA+PSAoNCAqICRmYWN0KSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRlbWVyaXQgKz0gTjM7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKCgoJGkrMykgPj0gJGxlbmd0aCkgfHwgKCR0aGlzLT5ydW5MZW5ndGhbJGkrM10gPj0gKDQgKiAkZmFjdCkpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkZW1lcml0ICs9IE4zOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiAkZGVtZXJpdDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBldmFsdWF0ZVN5bWJvbCgkd2lkdGgsICRmcmFtZSkNCiAgICAgICAgew0KICAgICAgICAgICAgJGhlYWQgPSAwOw0KICAgICAgICAgICAgJGRlbWVyaXQgPSAwOw0KDQogICAgICAgICAgICBmb3IoJHk9MDsgJHk8JHdpZHRoOyAkeSsrKSB7DQogICAgICAgICAgICAgICAgJGhlYWQgPSAwOw0KICAgICAgICAgICAgICAgICR0aGlzLT5ydW5MZW5ndGhbMF0gPSAxOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICRmcmFtZVkgPSAkZnJhbWVbJHldOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICgkeT4wKQ0KICAgICAgICAgICAgICAgICAgICAkZnJhbWVZTSA9ICRmcmFtZVskeS0xXTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBmb3IoJHg9MDsgJHg8JHdpZHRoOyAkeCsrKSB7DQogICAgICAgICAgICAgICAgICAgIGlmKCgkeCA+IDApICYmICgkeSA+IDApKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYjIyID0gb3JkKCRmcmFtZVlbJHhdKSAmIG9yZCgkZnJhbWVZWyR4LTFdKSAmIG9yZCgkZnJhbWVZTVskeF0pICYgb3JkKCRmcmFtZVlNWyR4LTFdKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICR3MjIgPSBvcmQoJGZyYW1lWVskeF0pIHwgb3JkKCRmcmFtZVlbJHgtMV0pIHwgb3JkKCRmcmFtZVlNWyR4XSkgfCBvcmQoJGZyYW1lWU1bJHgtMV0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICBpZigoJGIyMiB8ICgkdzIyIF4gMSkpJjEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGVtZXJpdCArPSBOMjsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZigoJHggPT0gMCkgJiYgKG9yZCgkZnJhbWVZWyR4XSkgJiAxKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJ1bkxlbmd0aFswXSA9IC0xOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGhlYWQgPSAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJ1bkxlbmd0aFskaGVhZF0gPSAxOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYoJHggPiAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZigob3JkKCRmcmFtZVlbJHhdKSBeIG9yZCgkZnJhbWVZWyR4LTFdKSkgJiAxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhlYWQrKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cnVuTGVuZ3RoWyRoZWFkXSA9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5ydW5MZW5ndGhbJGhlYWRdKys7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgDQogICAgICAgICAgICAgICAgJGRlbWVyaXQgKz0gJHRoaXMtPmNhbGNOMU4zKCRoZWFkKzEpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBmb3IoJHg9MDsgJHg8JHdpZHRoOyAkeCsrKSB7DQogICAgICAgICAgICAgICAgJGhlYWQgPSAwOw0KICAgICAgICAgICAgICAgICR0aGlzLT5ydW5MZW5ndGhbMF0gPSAxOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGZvcigkeT0wOyAkeTwkd2lkdGg7ICR5KyspIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoJHkgPT0gMCAmJiAob3JkKCRmcmFtZVskeV1bJHhdKSAmIDEpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cnVuTGVuZ3RoWzBdID0gLTE7DQogICAgICAgICAgICAgICAgICAgICAgICAkaGVhZCA9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cnVuTGVuZ3RoWyRoZWFkXSA9IDE7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZigkeSA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKChvcmQoJGZyYW1lWyR5XVskeF0pIF4gb3JkKCRmcmFtZVskeS0xXVskeF0pKSAmIDEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGVhZCsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5ydW5MZW5ndGhbJGhlYWRdID0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJ1bkxlbmd0aFskaGVhZF0rKzsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICRkZW1lcml0ICs9ICR0aGlzLT5jYWxjTjFOMygkaGVhZCsxKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcmV0dXJuICRkZW1lcml0Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBtYXNrKCR3aWR0aCwgJGZyYW1lLCAkbGV2ZWwpDQogICAgICAgIHsNCiAgICAgICAgICAgICRtaW5EZW1lcml0ID0gUEhQX0lOVF9NQVg7DQogICAgICAgICAgICAkYmVzdE1hc2tOdW0gPSAwOw0KICAgICAgICAgICAgJGJlc3RNYXNrID0gYXJyYXkoKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJGNoZWNrZWRfbWFza3MgPSBhcnJheSgwLDEsMiwzLDQsNSw2LDcpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZiAoUVJfRklORF9GUk9NX1JBTkRPTSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICRob3dNYW51T3V0ID0gOC0oUVJfRklORF9GUk9NX1JBTkRPTSAlIDkpOw0KICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICAkaG93TWFudU91dDsgJGkrKykgew0KICAgICAgICAgICAgICAgICAgICAkcmVtUG9zID0gcmFuZCAoMCwgY291bnQoJGNoZWNrZWRfbWFza3MpLTEpOw0KICAgICAgICAgICAgICAgICAgICB1bnNldCgkY2hlY2tlZF9tYXNrc1skcmVtUG9zXSk7DQogICAgICAgICAgICAgICAgICAgICRjaGVja2VkX21hc2tzID0gYXJyYXlfdmFsdWVzKCRjaGVja2VkX21hc2tzKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJGJlc3RNYXNrID0gJGZyYW1lOw0KICAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yZWFjaCgkY2hlY2tlZF9tYXNrcyBhcyAkaSkgew0KICAgICAgICAgICAgICAgICRtYXNrID0gYXJyYXlfZmlsbCgwLCAkd2lkdGgsIHN0cl9yZXBlYXQoIlwwIiwgJHdpZHRoKSk7DQoNCiAgICAgICAgICAgICAgICAkZGVtZXJpdCA9IDA7DQogICAgICAgICAgICAgICAgJGJsYWNrcyA9IDA7DQogICAgICAgICAgICAgICAgJGJsYWNrcyAgPSAkdGhpcy0+bWFrZU1hc2tObygkaSwgJHdpZHRoLCAkZnJhbWUsICRtYXNrKTsNCiAgICAgICAgICAgICAgICAkYmxhY2tzICs9ICR0aGlzLT53cml0ZUZvcm1hdEluZm9ybWF0aW9uKCR3aWR0aCwgJG1hc2ssICRpLCAkbGV2ZWwpOw0KICAgICAgICAgICAgICAgICRibGFja3MgID0gKGludCkoMTAwICogJGJsYWNrcyAvICgkd2lkdGggKiAkd2lkdGgpKTsNCiAgICAgICAgICAgICAgICAkZGVtZXJpdCA9IChpbnQpKChpbnQpKGFicygkYmxhY2tzIC0gNTApIC8gNSkgKiBONCk7DQogICAgICAgICAgICAgICAgJGRlbWVyaXQgKz0gJHRoaXMtPmV2YWx1YXRlU3ltYm9sKCR3aWR0aCwgJG1hc2spOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmKCRkZW1lcml0IDwgJG1pbkRlbWVyaXQpIHsNCiAgICAgICAgICAgICAgICAgICAgJG1pbkRlbWVyaXQgPSAkZGVtZXJpdDsNCiAgICAgICAgICAgICAgICAgICAgJGJlc3RNYXNrID0gJG1hc2s7DQogICAgICAgICAgICAgICAgICAgICRiZXN0TWFza051bSA9ICRpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgcmV0dXJuICRiZXN0TWFzazsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgfQ0KCgoKCi8vLS0tLSBxcmVuY29kZS5waHAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKDQovKg0KICogUEhQIFFSIENvZGUgZW5jb2Rlcg0KICoNCiAqIE1haW4gZW5jb2RlciBjbGFzc2VzLg0KICoNCiAqIEJhc2VkIG9uIGxpYnFyZW5jb2RlIEMgbGlicmFyeSBkaXN0cmlidXRlZCB1bmRlciBMR1BMIDIuMQ0KICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEtlbnRhcm8gRnVrdWNoaSA8ZnVrdWNoaUBtZWdhdWkubmV0Pg0KICoNCiAqIFBIUCBRUiBDb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIExHUEwgMw0KICogQ29weXJpZ2h0IChDKSAyMDEwIERvbWluaWsgRHppZW5pYSA8ZGVsdGFsYWIgYXQgcG9jenRhIGRvdCBmbT4NCiAqDQogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCiAqIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgYW55IGxhdGVyIHZlcnNpb24uDQogKg0KICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQ0KICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiAqDQogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0ENCiAqLw0KIA0KICAgIGNsYXNzIFFScnNibG9jayB7DQogICAgICAgIHB1YmxpYyAkZGF0YUxlbmd0aDsNCiAgICAgICAgcHVibGljICRkYXRhID0gYXJyYXkoKTsNCiAgICAgICAgcHVibGljICRlY2NMZW5ndGg7DQogICAgICAgIHB1YmxpYyAkZWNjID0gYXJyYXkoKTsNCiAgICAgICAgDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZGwsICRkYXRhLCAkZWwsICYkZWNjLCBRUnJzSXRlbSAkcnMpDQogICAgICAgIHsNCiAgICAgICAgICAgICRycy0+ZW5jb2RlX3JzX2NoYXIoJGRhdGEsICRlY2MpOw0KICAgICAgICANCiAgICAgICAgICAgICR0aGlzLT5kYXRhTGVuZ3RoID0gJGRsOw0KICAgICAgICAgICAgJHRoaXMtPmRhdGEgPSAkZGF0YTsNCiAgICAgICAgICAgICR0aGlzLT5lY2NMZW5ndGggPSAkZWw7DQogICAgICAgICAgICAkdGhpcy0+ZWNjID0gJGVjYzsNCiAgICAgICAgfQ0KICAgIH07DQogICAgDQogICAgLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQogICAgY2xhc3MgUVJyYXdjb2RlIHsNCiAgICAgICAgcHVibGljICR2ZXJzaW9uOw0KICAgICAgICBwdWJsaWMgJGRhdGFjb2RlID0gYXJyYXkoKTsNCiAgICAgICAgcHVibGljICRlY2Njb2RlID0gYXJyYXkoKTsNCiAgICAgICAgcHVibGljICRibG9ja3M7DQogICAgICAgIHB1YmxpYyAkcnNibG9ja3MgPSBhcnJheSgpOyAvL29mIFJTYmxvY2sNCiAgICAgICAgcHVibGljICRjb3VudDsNCiAgICAgICAgcHVibGljICRkYXRhTGVuZ3RoOw0KICAgICAgICBwdWJsaWMgJGVjY0xlbmd0aDsNCiAgICAgICAgcHVibGljICRiMTsNCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoUVJpbnB1dCAkaW5wdXQpDQogICAgICAgIHsNCiAgICAgICAgICAgICRzcGVjID0gYXJyYXkoMCwwLDAsMCwwKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHRoaXMtPmRhdGFjb2RlID0gJGlucHV0LT5nZXRCeXRlU3RyZWFtKCk7DQogICAgICAgICAgICBpZihpc19udWxsKCR0aGlzLT5kYXRhY29kZSkpIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdudWxsIGltcHV0IHN0cmluZycpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBRUnNwZWM6OmdldEVjY1NwZWMoJGlucHV0LT5nZXRWZXJzaW9uKCksICRpbnB1dC0+Z2V0RXJyb3JDb3JyZWN0aW9uTGV2ZWwoKSwgJHNwZWMpOw0KDQogICAgICAgICAgICAkdGhpcy0+dmVyc2lvbiA9ICRpbnB1dC0+Z2V0VmVyc2lvbigpOw0KICAgICAgICAgICAgJHRoaXMtPmIxID0gUVJzcGVjOjpyc0Jsb2NrTnVtMSgkc3BlYyk7DQogICAgICAgICAgICAkdGhpcy0+ZGF0YUxlbmd0aCA9IFFSc3BlYzo6cnNEYXRhTGVuZ3RoKCRzcGVjKTsNCiAgICAgICAgICAgICR0aGlzLT5lY2NMZW5ndGggPSBRUnNwZWM6OnJzRWNjTGVuZ3RoKCRzcGVjKTsNCiAgICAgICAgICAgICR0aGlzLT5lY2Njb2RlID0gYXJyYXlfZmlsbCgwLCAkdGhpcy0+ZWNjTGVuZ3RoLCAwKTsNCiAgICAgICAgICAgICR0aGlzLT5ibG9ja3MgPSBRUnNwZWM6OnJzQmxvY2tOdW0oJHNwZWMpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAkcmV0ID0gJHRoaXMtPmluaXQoJHNwZWMpOw0KICAgICAgICAgICAgaWYoJHJldCA8IDApIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdibG9jayBhbGxvYyBlcnJvcicpOw0KICAgICAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkdGhpcy0+Y291bnQgPSAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGluaXQoYXJyYXkgJHNwZWMpDQogICAgICAgIHsNCiAgICAgICAgICAgICRkbCA9IFFSc3BlYzo6cnNEYXRhQ29kZXMxKCRzcGVjKTsNCiAgICAgICAgICAgICRlbCA9IFFSc3BlYzo6cnNFY2NDb2RlczEoJHNwZWMpOw0KICAgICAgICAgICAgJHJzID0gUVJyczo6aW5pdF9ycyg4LCAweDExZCwgMCwgMSwgJGVsLCAyNTUgLSAkZGwgLSAkZWwpOw0KICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICRibG9ja05vID0gMDsNCiAgICAgICAgICAgICRkYXRhUG9zID0gMDsNCiAgICAgICAgICAgICRlY2NQb3MgPSAwOw0KICAgICAgICAgICAgZm9yKCRpPTA7ICRpPFFSc3BlYzo6cnNCbG9ja051bTEoJHNwZWMpOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgJGVjYyA9IGFycmF5X3NsaWNlKCR0aGlzLT5lY2Njb2RlLCRlY2NQb3MpOw0KICAgICAgICAgICAgICAgICR0aGlzLT5yc2Jsb2Nrc1skYmxvY2tOb10gPSBuZXcgUVJyc2Jsb2NrKCRkbCwgYXJyYXlfc2xpY2UoJHRoaXMtPmRhdGFjb2RlLCAkZGF0YVBvcyksICRlbCwgICRlY2MsICRycyk7DQogICAgICAgICAgICAgICAgJHRoaXMtPmVjY2NvZGUgPSBhcnJheV9tZXJnZShhcnJheV9zbGljZSgkdGhpcy0+ZWNjY29kZSwwLCAkZWNjUG9zKSwgJGVjYyk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGRhdGFQb3MgKz0gJGRsOw0KICAgICAgICAgICAgICAgICRlY2NQb3MgKz0gJGVsOw0KICAgICAgICAgICAgICAgICRibG9ja05vKys7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmKFFSc3BlYzo6cnNCbG9ja051bTIoJHNwZWMpID09IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQoNCiAgICAgICAgICAgICRkbCA9IFFSc3BlYzo6cnNEYXRhQ29kZXMyKCRzcGVjKTsNCiAgICAgICAgICAgICRlbCA9IFFSc3BlYzo6cnNFY2NDb2RlczIoJHNwZWMpOw0KICAgICAgICAgICAgJHJzID0gUVJyczo6aW5pdF9ycyg4LCAweDExZCwgMCwgMSwgJGVsLCAyNTUgLSAkZGwgLSAkZWwpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZigkcnMgPT0gTlVMTCkgcmV0dXJuIC0xOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBmb3IoJGk9MDsgJGk8UVJzcGVjOjpyc0Jsb2NrTnVtMigkc3BlYyk7ICRpKyspIHsNCiAgICAgICAgICAgICAgICAkZWNjID0gYXJyYXlfc2xpY2UoJHRoaXMtPmVjY2NvZGUsJGVjY1Bvcyk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnJzYmxvY2tzWyRibG9ja05vXSA9IG5ldyBRUnJzYmxvY2soJGRsLCBhcnJheV9zbGljZSgkdGhpcy0+ZGF0YWNvZGUsICRkYXRhUG9zKSwgJGVsLCAkZWNjLCAkcnMpOw0KICAgICAgICAgICAgICAgICR0aGlzLT5lY2Njb2RlID0gYXJyYXlfbWVyZ2UoYXJyYXlfc2xpY2UoJHRoaXMtPmVjY2NvZGUsMCwgJGVjY1BvcyksICRlY2MpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICRkYXRhUG9zICs9ICRkbDsNCiAgICAgICAgICAgICAgICAkZWNjUG9zICs9ICRlbDsNCiAgICAgICAgICAgICAgICAkYmxvY2tObysrOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb2RlKCkNCiAgICAgICAgew0KICAgICAgICAgICAgJHJldDsNCg0KICAgICAgICAgICAgaWYoJHRoaXMtPmNvdW50IDwgJHRoaXMtPmRhdGFMZW5ndGgpIHsNCiAgICAgICAgICAgICAgICAkcm93ID0gJHRoaXMtPmNvdW50ICUgJHRoaXMtPmJsb2NrczsNCiAgICAgICAgICAgICAgICAkY29sID0gJHRoaXMtPmNvdW50IC8gJHRoaXMtPmJsb2NrczsNCiAgICAgICAgICAgICAgICBpZigkY29sID49ICR0aGlzLT5yc2Jsb2Nrc1swXS0+ZGF0YUxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICAkcm93ICs9ICR0aGlzLT5iMTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHJldCA9ICR0aGlzLT5yc2Jsb2Nrc1skcm93XS0+ZGF0YVskY29sXTsNCiAgICAgICAgICAgIH0gZWxzZSBpZigkdGhpcy0+Y291bnQgPCAkdGhpcy0+ZGF0YUxlbmd0aCArICR0aGlzLT5lY2NMZW5ndGgpIHsNCiAgICAgICAgICAgICAgICAkcm93ID0gKCR0aGlzLT5jb3VudCAtICR0aGlzLT5kYXRhTGVuZ3RoKSAlICR0aGlzLT5ibG9ja3M7DQogICAgICAgICAgICAgICAgJGNvbCA9ICgkdGhpcy0+Y291bnQgLSAkdGhpcy0+ZGF0YUxlbmd0aCkgLyAkdGhpcy0+YmxvY2tzOw0KICAgICAgICAgICAgICAgICRyZXQgPSAkdGhpcy0+cnNibG9ja3NbJHJvd10tPmVjY1skY29sXTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGhpcy0+Y291bnQrKzsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgcmV0dXJuICRyZXQ7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgDQogICAgY2xhc3MgUVJjb2RlIHsNCiAgICANCiAgICAgICAgcHVibGljICR2ZXJzaW9uOw0KICAgICAgICBwdWJsaWMgJHdpZHRoOw0KICAgICAgICBwdWJsaWMgJGRhdGE7IA0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGVNYXNrKFFSaW5wdXQgJGlucHV0LCAkbWFzaykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYoJGlucHV0LT5nZXRWZXJzaW9uKCkgPCAwIHx8ICRpbnB1dC0+Z2V0VmVyc2lvbigpID4gUVJTUEVDX1ZFUlNJT05fTUFYKSB7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignd3JvbmcgdmVyc2lvbicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYoJGlucHV0LT5nZXRFcnJvckNvcnJlY3Rpb25MZXZlbCgpID4gUVJfRUNMRVZFTF9IKSB7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignd3JvbmcgbGV2ZWwnKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHJhdyA9IG5ldyBRUnJhd2NvZGUoJGlucHV0KTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgUVJ0b29sczo6bWFya1RpbWUoJ2FmdGVyX3JhdycpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAkdmVyc2lvbiA9ICRyYXctPnZlcnNpb247DQogICAgICAgICAgICAkd2lkdGggPSBRUnNwZWM6OmdldFdpZHRoKCR2ZXJzaW9uKTsNCiAgICAgICAgICAgICRmcmFtZSA9IFFSc3BlYzo6bmV3RnJhbWUoJHZlcnNpb24pOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAkZmlsbGVyID0gbmV3IEZyYW1lRmlsbGVyKCR3aWR0aCwgJGZyYW1lKTsNCiAgICAgICAgICAgIGlmKGlzX251bGwoJGZpbGxlcikpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8gaW50ZWxlYXZlZCBkYXRhIGFuZCBlY2MgY29kZXMNCiAgICAgICAgICAgIGZvcigkaT0wOyAkaTwkcmF3LT5kYXRhTGVuZ3RoICsgJHJhdy0+ZWNjTGVuZ3RoOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgJGNvZGUgPSAkcmF3LT5nZXRDb2RlKCk7DQogICAgICAgICAgICAgICAgJGJpdCA9IDB4ODA7DQogICAgICAgICAgICAgICAgZm9yKCRqPTA7ICRqPDg7ICRqKyspIHsNCiAgICAgICAgICAgICAgICAgICAgJGFkZHIgPSAkZmlsbGVyLT5uZXh0KCk7DQogICAgICAgICAgICAgICAgICAgICRmaWxsZXItPnNldEZyYW1lQXQoJGFkZHIsIDB4MDIgfCAoKCRiaXQgJiAkY29kZSkgIT0gMCkpOw0KICAgICAgICAgICAgICAgICAgICAkYml0ID0gJGJpdCA+PiAxOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgUVJ0b29sczo6bWFya1RpbWUoJ2FmdGVyX2ZpbGxlcicpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICB1bnNldCgkcmF3KTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gcmVtYWluZGVyIGJpdHMNCiAgICAgICAgICAgICRqID0gUVJzcGVjOjpnZXRSZW1haW5kZXIoJHZlcnNpb24pOw0KICAgICAgICAgICAgZm9yKCRpPTA7ICRpPCRqOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgJGFkZHIgPSAkZmlsbGVyLT5uZXh0KCk7DQogICAgICAgICAgICAgICAgJGZpbGxlci0+c2V0RnJhbWVBdCgkYWRkciwgMHgwMik7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgICRmcmFtZSA9ICRmaWxsZXItPmZyYW1lOw0KICAgICAgICAgICAgdW5zZXQoJGZpbGxlcik7DQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gbWFza2luZw0KICAgICAgICAgICAgJG1hc2tPYmogPSBuZXcgUVJtYXNrKCk7DQogICAgICAgICAgICBpZigkbWFzayA8IDApIHsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmIChRUl9GSU5EX0JFU1RfTUFTSykgew0KICAgICAgICAgICAgICAgICAgICAkbWFza2VkID0gJG1hc2tPYmotPm1hc2soJHdpZHRoLCAkZnJhbWUsICRpbnB1dC0+Z2V0RXJyb3JDb3JyZWN0aW9uTGV2ZWwoKSk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJG1hc2tlZCA9ICRtYXNrT2JqLT5tYWtlTWFzaygkd2lkdGgsICRmcmFtZSwgKGludHZhbChRUl9ERUZBVUxUX01BU0spICUgOCksICRpbnB1dC0+Z2V0RXJyb3JDb3JyZWN0aW9uTGV2ZWwoKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkbWFza2VkID0gJG1hc2tPYmotPm1ha2VNYXNrKCR3aWR0aCwgJGZyYW1lLCAkbWFzaywgJGlucHV0LT5nZXRFcnJvckNvcnJlY3Rpb25MZXZlbCgpKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoJG1hc2tlZCA9PSBOVUxMKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIFFSdG9vbHM6Om1hcmtUaW1lKCdhZnRlcl9tYXNrJyk7DQogICAgICAgICAgICANCiAgICAgICAgICAgICR0aGlzLT52ZXJzaW9uID0gJHZlcnNpb247DQogICAgICAgICAgICAkdGhpcy0+d2lkdGggPSAkd2lkdGg7DQogICAgICAgICAgICAkdGhpcy0+ZGF0YSA9ICRtYXNrZWQ7DQogICAgICAgICAgICANCiAgICAgICAgICAgIHJldHVybiAkdGhpczsNCiAgICAgICAgfQ0KICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGVuY29kZUlucHV0KFFSaW5wdXQgJGlucHV0KQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmVuY29kZU1hc2soJGlucHV0LCAtMSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlU3RyaW5nOGJpdCgkc3RyaW5nLCAkdmVyc2lvbiwgJGxldmVsKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZihzdHJpbmcgPT0gTlVMTCkgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ2VtcHR5IHN0cmluZyEnKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGlucHV0ID0gbmV3IFFSaW5wdXQoJHZlcnNpb24sICRsZXZlbCk7DQogICAgICAgICAgICBpZigkaW5wdXQgPT0gTlVMTCkgcmV0dXJuIE5VTEw7DQoNCiAgICAgICAgICAgICRyZXQgPSAkaW5wdXQtPmFwcGVuZCgkaW5wdXQsIFFSX01PREVfOCwgc3RybGVuKCRzdHJpbmcpLCBzdHJfc3BsaXQoJHN0cmluZykpOw0KICAgICAgICAgICAgaWYoJHJldCA8IDApIHsNCiAgICAgICAgICAgICAgICB1bnNldCgkaW5wdXQpOw0KICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5lbmNvZGVJbnB1dCgkaW5wdXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGVTdHJpbmcoJHN0cmluZywgJHZlcnNpb24sICRsZXZlbCwgJGhpbnQsICRjYXNlc2Vuc2l0aXZlKQ0KICAgICAgICB7DQoNCiAgICAgICAgICAgIGlmKCRoaW50ICE9IFFSX01PREVfOCAmJiAkaGludCAhPSBRUl9NT0RFX0tBTkpJKSB7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignYmFkIGhpbnQnKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGlucHV0ID0gbmV3IFFSaW5wdXQoJHZlcnNpb24sICRsZXZlbCk7DQogICAgICAgICAgICBpZigkaW5wdXQgPT0gTlVMTCkgcmV0dXJuIE5VTEw7DQoNCiAgICAgICAgICAgICRyZXQgPSBRUnNwbGl0OjpzcGxpdFN0cmluZ1RvUVJpbnB1dCgkc3RyaW5nLCAkaW5wdXQsICRoaW50LCAkY2FzZXNlbnNpdGl2ZSk7DQogICAgICAgICAgICBpZigkcmV0IDwgMCkgew0KICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmVuY29kZUlucHV0KCRpbnB1dCk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBuZygkdGV4dCwgJG91dGZpbGUgPSBmYWxzZSwgJGxldmVsID0gUVJfRUNMRVZFTF9MLCAkc2l6ZSA9IDMsICRtYXJnaW4gPSA0LCAkc2F2ZWFuZHByaW50PWZhbHNlKSANCiAgICAgICAgew0KICAgICAgICAgICAgJGVuYyA9IFFSZW5jb2RlOjpmYWN0b3J5KCRsZXZlbCwgJHNpemUsICRtYXJnaW4pOw0KICAgICAgICAgICAgcmV0dXJuICRlbmMtPmVuY29kZVBORygkdGV4dCwgJG91dGZpbGUsICRzYXZlYW5kcHJpbnQ9ZmFsc2UpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdGV4dCgkdGV4dCwgJG91dGZpbGUgPSBmYWxzZSwgJGxldmVsID0gUVJfRUNMRVZFTF9MLCAkc2l6ZSA9IDMsICRtYXJnaW4gPSA0KSANCiAgICAgICAgew0KICAgICAgICAgICAgJGVuYyA9IFFSZW5jb2RlOjpmYWN0b3J5KCRsZXZlbCwgJHNpemUsICRtYXJnaW4pOw0KICAgICAgICAgICAgcmV0dXJuICRlbmMtPmVuY29kZSgkdGV4dCwgJG91dGZpbGUpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmF3KCR0ZXh0LCAkb3V0ZmlsZSA9IGZhbHNlLCAkbGV2ZWwgPSBRUl9FQ0xFVkVMX0wsICRzaXplID0gMywgJG1hcmdpbiA9IDQpIA0KICAgICAgICB7DQogICAgICAgICAgICAkZW5jID0gUVJlbmNvZGU6OmZhY3RvcnkoJGxldmVsLCAkc2l6ZSwgJG1hcmdpbik7DQogICAgICAgICAgICByZXR1cm4gJGVuYy0+ZW5jb2RlUkFXKCR0ZXh0LCAkb3V0ZmlsZSk7DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgIA0KICAgIGNsYXNzIEZyYW1lRmlsbGVyIHsNCiAgICANCiAgICAgICAgcHVibGljICR3aWR0aDsNCiAgICAgICAgcHVibGljICRmcmFtZTsNCiAgICAgICAgcHVibGljICR4Ow0KICAgICAgICBwdWJsaWMgJHk7DQogICAgICAgIHB1YmxpYyAkZGlyOw0KICAgICAgICBwdWJsaWMgJGJpdDsNCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHdpZHRoLCAmJGZyYW1lKQ0KICAgICAgICB7DQogICAgICAgICAgICAkdGhpcy0+d2lkdGggPSAkd2lkdGg7DQogICAgICAgICAgICAkdGhpcy0+ZnJhbWUgPSAkZnJhbWU7DQogICAgICAgICAgICAkdGhpcy0+eCA9ICR3aWR0aCAtIDE7DQogICAgICAgICAgICAkdGhpcy0+eSA9ICR3aWR0aCAtIDE7DQogICAgICAgICAgICAkdGhpcy0+ZGlyID0gLTE7DQogICAgICAgICAgICAkdGhpcy0+Yml0ID0gLTE7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RnJhbWVBdCgkYXQsICR2YWwpDQogICAgICAgIHsNCiAgICAgICAgICAgICR0aGlzLT5mcmFtZVskYXRbJ3knXV1bJGF0Wyd4J11dID0gY2hyKCR2YWwpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGdldEZyYW1lQXQoJGF0KQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gb3JkKCR0aGlzLT5mcmFtZVskYXRbJ3knXV1bJGF0Wyd4J11dKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0KCkNCiAgICAgICAgew0KICAgICAgICAgICAgZG8gew0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYoJHRoaXMtPmJpdCA9PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Yml0ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5KCd4Jz0+JHRoaXMtPngsICd5Jz0+JHRoaXMtPnkpOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICR4ID0gJHRoaXMtPng7DQogICAgICAgICAgICAgICAgJHkgPSAkdGhpcy0+eTsNCiAgICAgICAgICAgICAgICAkdyA9ICR0aGlzLT53aWR0aDsNCg0KICAgICAgICAgICAgICAgIGlmKCR0aGlzLT5iaXQgPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICAkeC0tOw0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Yml0Kys7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJHgrKzsNCiAgICAgICAgICAgICAgICAgICAgJHkgKz0gJHRoaXMtPmRpcjsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmJpdC0tOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmKCR0aGlzLT5kaXIgPCAwKSB7DQogICAgICAgICAgICAgICAgICAgIGlmKCR5IDwgMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHkgPSAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHggLT0gMjsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kaXIgPSAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHggPT0gNikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR4LS07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHkgPSA5Ow0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoJHkgPT0gJHcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR5ID0gJHcgLSAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHggLT0gMjsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kaXIgPSAtMTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR4ID09IDYpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeC0tOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5IC09IDg7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYoJHggPCAwIHx8ICR5IDwgMCkgcmV0dXJuIG51bGw7DQoNCiAgICAgICAgICAgICAgICAkdGhpcy0+eCA9ICR4Ow0KICAgICAgICAgICAgICAgICR0aGlzLT55ID0gJHk7DQoNCiAgICAgICAgICAgIH0gd2hpbGUob3JkKCR0aGlzLT5mcmFtZVskeV1bJHhdKSAmIDB4ODApOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ3gnPT4keCwgJ3knPT4keSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgfSA7DQogICAgDQogICAgLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICANCiAgICANCiAgICBjbGFzcyBRUmVuY29kZSB7DQogICAgDQogICAgICAgIHB1YmxpYyAkY2FzZXNlbnNpdGl2ZSA9IHRydWU7DQogICAgICAgIHB1YmxpYyAkZWlnaHRiaXQgPSBmYWxzZTsNCiAgICAgICAgDQogICAgICAgIHB1YmxpYyAkdmVyc2lvbiA9IDA7DQogICAgICAgIHB1YmxpYyAkc2l6ZSA9IDM7DQogICAgICAgIHB1YmxpYyAkbWFyZ2luID0gNDsNCiAgICAgICAgDQogICAgICAgIHB1YmxpYyAkc3RydWN0dXJlZCA9IDA7IC8vIG5vdCBzdXBwb3J0ZWQgeWV0DQogICAgICAgIA0KICAgICAgICBwdWJsaWMgJGxldmVsID0gUVJfRUNMRVZFTF9MOw0KICAgICAgICBwdWJsaWMgJGhpbnQgPSBRUl9NT0RFXzg7DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmYWN0b3J5KCRsZXZlbCA9IFFSX0VDTEVWRUxfTCwgJHNpemUgPSAzLCAkbWFyZ2luID0gNCkNCiAgICAgICAgew0KICAgICAgICAgICAgJGVuYyA9IG5ldyBRUmVuY29kZSgpOw0KICAgICAgICAgICAgJGVuYy0+c2l6ZSA9ICRzaXplOw0KICAgICAgICAgICAgJGVuYy0+bWFyZ2luID0gJG1hcmdpbjsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgc3dpdGNoICgkbGV2ZWwuJycpIHsNCiAgICAgICAgICAgICAgICBjYXNlICcwJzoNCiAgICAgICAgICAgICAgICBjYXNlICcxJzoNCiAgICAgICAgICAgICAgICBjYXNlICcyJzoNCiAgICAgICAgICAgICAgICBjYXNlICczJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICRlbmMtPmxldmVsID0gJGxldmVsOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdsJzoNCiAgICAgICAgICAgICAgICBjYXNlICdMJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICRlbmMtPmxldmVsID0gUVJfRUNMRVZFTF9MOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdtJzoNCiAgICAgICAgICAgICAgICBjYXNlICdNJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICRlbmMtPmxldmVsID0gUVJfRUNMRVZFTF9NOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdxJzoNCiAgICAgICAgICAgICAgICBjYXNlICdRJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICRlbmMtPmxldmVsID0gUVJfRUNMRVZFTF9ROw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdoJzoNCiAgICAgICAgICAgICAgICBjYXNlICdIJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICRlbmMtPmxldmVsID0gUVJfRUNMRVZFTF9IOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgcmV0dXJuICRlbmM7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlUkFXKCRpbnRleHQsICRvdXRmaWxlID0gZmFsc2UpIA0KICAgICAgICB7DQogICAgICAgICAgICAkY29kZSA9IG5ldyBRUmNvZGUoKTsNCg0KICAgICAgICAgICAgaWYoJHRoaXMtPmVpZ2h0Yml0KSB7DQogICAgICAgICAgICAgICAgJGNvZGUtPmVuY29kZVN0cmluZzhiaXQoJGludGV4dCwgJHRoaXMtPnZlcnNpb24sICR0aGlzLT5sZXZlbCk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRjb2RlLT5lbmNvZGVTdHJpbmcoJGludGV4dCwgJHRoaXMtPnZlcnNpb24sICR0aGlzLT5sZXZlbCwgJHRoaXMtPmhpbnQsICR0aGlzLT5jYXNlc2Vuc2l0aXZlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgcmV0dXJuICRjb2RlLT5kYXRhOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGUoJGludGV4dCwgJG91dGZpbGUgPSBmYWxzZSkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRjb2RlID0gbmV3IFFSY29kZSgpOw0KDQogICAgICAgICAgICBpZigkdGhpcy0+ZWlnaHRiaXQpIHsNCiAgICAgICAgICAgICAgICAkY29kZS0+ZW5jb2RlU3RyaW5nOGJpdCgkaW50ZXh0LCAkdGhpcy0+dmVyc2lvbiwgJHRoaXMtPmxldmVsKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJGNvZGUtPmVuY29kZVN0cmluZygkaW50ZXh0LCAkdGhpcy0+dmVyc2lvbiwgJHRoaXMtPmxldmVsLCAkdGhpcy0+aGludCwgJHRoaXMtPmNhc2VzZW5zaXRpdmUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBRUnRvb2xzOjptYXJrVGltZSgnYWZ0ZXJfZW5jb2RlJyk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmICgkb3V0ZmlsZSE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRvdXRmaWxlLCBqb2luKCJcbiIsIFFSdG9vbHM6OmJpbmFyaXplKCRjb2RlLT5kYXRhKSkpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gUVJ0b29sczo6YmluYXJpemUoJGNvZGUtPmRhdGEpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGVuY29kZVBORygkaW50ZXh0LCAkb3V0ZmlsZSA9IGZhbHNlLCRzYXZlYW5kcHJpbnQ9ZmFsc2UpIA0KICAgICAgICB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgb2Jfc3RhcnQoKTsNCiAgICAgICAgICAgICAgICAkdGFiID0gJHRoaXMtPmVuY29kZSgkaW50ZXh0KTsNCiAgICAgICAgICAgICAgICAkZXJyID0gb2JfZ2V0X2NvbnRlbnRzKCk7DQogICAgICAgICAgICAgICAgb2JfZW5kX2NsZWFuKCk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKCRlcnIgIT0gJycpDQogICAgICAgICAgICAgICAgICAgIFFSdG9vbHM6OmxvZygkb3V0ZmlsZSwgJGVycik7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJG1heFNpemUgPSAoaW50KShRUl9QTkdfTUFYSU1VTV9TSVpFIC8gKGNvdW50KCR0YWIpKzIqJHRoaXMtPm1hcmdpbikpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIFFSaW1hZ2U6OnBuZygkdGFiLCAkb3V0ZmlsZSwgbWluKG1heCgxLCAkdGhpcy0+c2l6ZSksICRtYXhTaXplKSwgJHRoaXMtPm1hcmdpbiwkc2F2ZWFuZHByaW50KTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7DQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICBRUnRvb2xzOjpsb2coJG91dGZpbGUsICRlLT5nZXRNZXNzYWdlKCkpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoKCg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/qrbitstream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qDQogKiBQSFAgUVIgQ29kZSBlbmNvZGVyDQogKg0KICogQml0c3RyZWFtIGNsYXNzDQogKg0KICogQmFzZWQgb24gbGlicXJlbmNvZGUgQyBsaWJyYXJ5IGRpc3RyaWJ1dGVkIHVuZGVyIExHUEwgMi4xDQogKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgS2VudGFybyBGdWt1Y2hpIDxmdWt1Y2hpQG1lZ2F1aS5uZXQ+DQogKg0KICogUEhQIFFSIENvZGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgTEdQTCAzDQogKiBDb3B5cmlnaHQgKEMpIDIwMTAgRG9taW5payBEemllbmlhIDxkZWx0YWxhYiBhdCBwb2N6dGEgZG90IGZtPg0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KICogdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciBhbnkgbGF0ZXIgdmVyc2lvbi4NCiAqDQogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VDQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KICoNCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQ0KICovDQogICAgIA0KICAgIGNsYXNzIFFSYml0c3RyZWFtIHsNCiAgICANCiAgICAgICAgcHVibGljICRkYXRhID0gYXJyYXkoKTsNCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gc2l6ZSgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldHVybiBjb3VudCgkdGhpcy0+ZGF0YSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gYWxsb2NhdGUoJHNldExlbmd0aCkNCiAgICAgICAgew0KICAgICAgICAgICAgJHRoaXMtPmRhdGEgPSBhcnJheV9maWxsKDAsICRzZXRMZW5ndGgsIDApOw0KICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgIH0NCiAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbmV3RnJvbU51bSgkYml0cywgJG51bSkNCiAgICAgICAgew0KICAgICAgICAgICAgJGJzdHJlYW0gPSBuZXcgUVJiaXRzdHJlYW0oKTsNCiAgICAgICAgICAgICRic3RyZWFtLT5hbGxvY2F0ZSgkYml0cyk7DQogICAgICAgICAgICANCiAgICAgICAgICAgICRtYXNrID0gMSA8PCAoJGJpdHMgLSAxKTsNCiAgICAgICAgICAgIGZvcigkaT0wOyAkaTwkYml0czsgJGkrKykgew0KICAgICAgICAgICAgICAgIGlmKCRudW0gJiAkbWFzaykgew0KICAgICAgICAgICAgICAgICAgICAkYnN0cmVhbS0+ZGF0YVskaV0gPSAxOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRic3RyZWFtLT5kYXRhWyRpXSA9IDA7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRtYXNrID0gJG1hc2sgPj4gMTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcmV0dXJuICRic3RyZWFtOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBuZXdGcm9tQnl0ZXMoJHNpemUsICRkYXRhKQ0KICAgICAgICB7DQogICAgICAgICAgICAkYnN0cmVhbSA9IG5ldyBRUmJpdHN0cmVhbSgpOw0KICAgICAgICAgICAgJGJzdHJlYW0tPmFsbG9jYXRlKCRzaXplICogOCk7DQogICAgICAgICAgICAkcD0wOw0KDQogICAgICAgICAgICBmb3IoJGk9MDsgJGk8JHNpemU7ICRpKyspIHsNCiAgICAgICAgICAgICAgICAkbWFzayA9IDB4ODA7DQogICAgICAgICAgICAgICAgZm9yKCRqPTA7ICRqPDg7ICRqKyspIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoJGRhdGFbJGldICYgJG1hc2spIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRic3RyZWFtLT5kYXRhWyRwXSA9IDE7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYnN0cmVhbS0+ZGF0YVskcF0gPSAwOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICRwKys7DQogICAgICAgICAgICAgICAgICAgICRtYXNrID0gJG1hc2sgPj4gMTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAkYnN0cmVhbTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmQoUVJiaXRzdHJlYW0gJGFyZykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKGlzX251bGwoJGFyZykpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmKCRhcmctPnNpemUoKSA9PSAwKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmKCR0aGlzLT5zaXplKCkgPT0gMCkgew0KICAgICAgICAgICAgICAgICR0aGlzLT5kYXRhID0gJGFyZy0+ZGF0YTsNCiAgICAgICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHRoaXMtPmRhdGEgPSBhcnJheV92YWx1ZXMoYXJyYXlfbWVyZ2UoJHRoaXMtPmRhdGEsICRhcmctPmRhdGEpKTsNCg0KICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kTnVtKCRiaXRzLCAkbnVtKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoJGJpdHMgPT0gMCkgDQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQoNCiAgICAgICAgICAgICRiID0gUVJiaXRzdHJlYW06Om5ld0Zyb21OdW0oJGJpdHMsICRudW0pOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZihpc19udWxsKCRiKSkNCiAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQoNCiAgICAgICAgICAgICRyZXQgPSAkdGhpcy0+YXBwZW5kKCRiKTsNCiAgICAgICAgICAgIHVuc2V0KCRiKTsNCg0KICAgICAgICAgICAgcmV0dXJuICRyZXQ7DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZEJ5dGVzKCRzaXplLCAkZGF0YSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKCRzaXplID09IDApIA0KICAgICAgICAgICAgICAgIHJldHVybiAwOw0KDQogICAgICAgICAgICAkYiA9IFFSYml0c3RyZWFtOjpuZXdGcm9tQnl0ZXMoJHNpemUsICRkYXRhKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoaXNfbnVsbCgkYikpDQogICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KDQogICAgICAgICAgICAkcmV0ID0gJHRoaXMtPmFwcGVuZCgkYik7DQogICAgICAgICAgICB1bnNldCgkYik7DQoNCiAgICAgICAgICAgIHJldHVybiAkcmV0Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHRvQnl0ZSgpDQogICAgICAgIHsNCiAgICAgICAgDQogICAgICAgICAgICAkc2l6ZSA9ICR0aGlzLT5zaXplKCk7DQoNCiAgICAgICAgICAgIGlmKCRzaXplID09IDApIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJGRhdGEgPSBhcnJheV9maWxsKDAsIChpbnQpKCgkc2l6ZSArIDcpIC8gOCksIDApOw0KICAgICAgICAgICAgJGJ5dGVzID0gKGludCkoJHNpemUgLyA4KTsNCg0KICAgICAgICAgICAgJHAgPSAwOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBmb3IoJGk9MDsgJGk8JGJ5dGVzOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgJHYgPSAwOw0KICAgICAgICAgICAgICAgIGZvcigkaj0wOyAkajw4OyAkaisrKSB7DQogICAgICAgICAgICAgICAgICAgICR2ID0gJHYgPDwgMTsNCiAgICAgICAgICAgICAgICAgICAgJHYgfD0gJHRoaXMtPmRhdGFbJHBdOw0KICAgICAgICAgICAgICAgICAgICAkcCsrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkZGF0YVskaV0gPSAkdjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoJHNpemUgJiA3KSB7DQogICAgICAgICAgICAgICAgJHYgPSAwOw0KICAgICAgICAgICAgICAgIGZvcigkaj0wOyAkajwoJHNpemUgJiA3KTsgJGorKykgew0KICAgICAgICAgICAgICAgICAgICAkdiA9ICR2IDw8IDE7DQogICAgICAgICAgICAgICAgICAgICR2IHw9ICR0aGlzLT5kYXRhWyRwXTsNCiAgICAgICAgICAgICAgICAgICAgJHArKzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGRhdGFbJGJ5dGVzXSA9ICR2Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gJGRhdGE7DQogICAgICAgIH0NCg0KICAgIH0NCg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/qrconfig.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qDQogKiBQSFAgUVIgQ29kZSBlbmNvZGVyDQogKg0KICogQ29uZmlnIGZpbGUsIGZlZWwgZnJlZSB0byBtb2RpZnkNCiAqLw0KICAgICANCiAgICBkZWZpbmUoJ1FSX0NBQ0hFQUJMRScsIHRydWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSBjYWNoZSAtIG1vcmUgZGlzayByZWFkcyBidXQgbGVzcyBDUFUgcG93ZXIsIG1hc2tzIGFuZCBmb3JtYXQgdGVtcGxhdGVzIGFyZSBzdG9yZWQgdGhlcmUNCiAgICBkZWZpbmUoJ1FSX0NBQ0hFX0RJUicsIGRpcm5hbWUoX19GSUxFX18pLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ2NhY2hlJy5ESVJFQ1RPUllfU0VQQVJBVE9SKTsgIC8vIHVzZWQgd2hlbiBRUl9DQUNIRUFCTEUgPT09IHRydWUNCiAgICBkZWZpbmUoJ1FSX0xPR19ESVInLCBkaXJuYW1lKF9fRklMRV9fKS5ESVJFQ1RPUllfU0VQQVJBVE9SKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgZXJyb3IgbG9ncyBkaXIgICANCiAgICANCiAgICBkZWZpbmUoJ1FSX0ZJTkRfQkVTVF9NQVNLJywgdHJ1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRydWUsIGVzdGltYXRlcyBiZXN0IG1hc2sgKHNwZWMuIGRlZmF1bHQsIGJ1dCBleHRyZW1hbGx5IHNsb3c7IHNldCB0byBmYWxzZSB0byBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBib29zdCBidXQgKHByb3BhYmx5KSB3b3JzdCBxdWFsaXR5IGNvZGUNCiAgICBkZWZpbmUoJ1FSX0ZJTkRfRlJPTV9SQU5ET00nLCBmYWxzZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGZhbHNlLCBjaGVja3MgYWxsIG1hc2tzIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHZhbHVlIHRlbGxzIGNvdW50IG9mIG1hc2tzIG5lZWQgdG8gYmUgY2hlY2tlZCwgbWFzayBpZCBhcmUgZ290IHJhbmRvbWx5DQogICAgZGVmaW5lKCdRUl9ERUZBVUxUX01BU0snLCAyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIFFSX0ZJTkRfQkVTVF9NQVNLID09PSBmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICBkZWZpbmUoJ1FSX1BOR19NQVhJTVVNX1NJWkUnLCAgMTAyNCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heGltdW0gYWxsb3dlZCBwbmcgaW1hZ2Ugd2lkdGggKGluIHBpeGVscyksIHR1bmUgdG8gbWFrZSBzdXJlIEdEIGFuZCBQSFAgY2FuIGhhbmRsZSBzdWNoIGJpZyBpbWFnZXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/qrconst.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoNCiAqIFBIUCBRUiBDb2RlIGVuY29kZXINCiAqDQogKiBDb21tb24gY29uc3RhbnRzDQogKg0KICogQmFzZWQgb24gbGlicXJlbmNvZGUgQyBsaWJyYXJ5IGRpc3RyaWJ1dGVkIHVuZGVyIExHUEwgMi4xDQogKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgS2VudGFybyBGdWt1Y2hpIDxmdWt1Y2hpQG1lZ2F1aS5uZXQ+DQogKg0KICogUEhQIFFSIENvZGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgTEdQTCAzDQogKiBDb3B5cmlnaHQgKEMpIDIwMTAgRG9taW5payBEemllbmlhIDxkZWx0YWxhYiBhdCBwb2N6dGEgZG90IGZtPg0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KICogdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciBhbnkgbGF0ZXIgdmVyc2lvbi4NCiAqDQogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VDQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KICoNCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQ0KICovDQogDQoJLy8gRW5jb2RpbmcgbW9kZXMNCgkgDQoJZGVmaW5lKCdRUl9NT0RFX05VTCcsIC0xKTsNCglkZWZpbmUoJ1FSX01PREVfTlVNJywgMCk7DQoJZGVmaW5lKCdRUl9NT0RFX0FOJywgMSk7DQoJZGVmaW5lKCdRUl9NT0RFXzgnLCAyKTsNCglkZWZpbmUoJ1FSX01PREVfS0FOSkknLCAzKTsNCglkZWZpbmUoJ1FSX01PREVfU1RSVUNUVVJFJywgNCk7DQoNCgkvLyBMZXZlbHMgb2YgZXJyb3IgY29ycmVjdGlvbi4NCg0KCWRlZmluZSgnUVJfRUNMRVZFTF9MJywgMCk7DQoJZGVmaW5lKCdRUl9FQ0xFVkVMX00nLCAxKTsNCglkZWZpbmUoJ1FSX0VDTEVWRUxfUScsIDIpOw0KCWRlZmluZSgnUVJfRUNMRVZFTF9IJywgMyk7DQoJDQoJLy8gU3VwcG9ydGVkIG91dHB1dCBmb3JtYXRzDQoJDQoJZGVmaW5lKCdRUl9GT1JNQVRfVEVYVCcsIDApOw0KCWRlZmluZSgnUVJfRk9STUFUX1BORycsICAxKTsNCgkNCgljbGFzcyBxcnN0ciB7DQoJCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0KCYkc3JjdGFiLCAkeCwgJHksICRyZXBsLCAkcmVwbExlbiA9IGZhbHNlKSB7DQoJCQkkc3JjdGFiWyR5XSA9IHN1YnN0cl9yZXBsYWNlKCRzcmN0YWJbJHldLCAoJHJlcGxMZW4gIT09IGZhbHNlKT9zdWJzdHIoJHJlcGwsMCwkcmVwbExlbik6JHJlcGwsICR4LCAoJHJlcGxMZW4gIT09IGZhbHNlKT8kcmVwbExlbjpzdHJsZW4oJHJlcGwpKTsNCgkJfQ0KCX0J]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/qrencode.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qDQogKiBQSFAgUVIgQ29kZSBlbmNvZGVyDQogKg0KICogTWFpbiBlbmNvZGVyIGNsYXNzZXMuDQogKg0KICogQmFzZWQgb24gbGlicXJlbmNvZGUgQyBsaWJyYXJ5IGRpc3RyaWJ1dGVkIHVuZGVyIExHUEwgMi4xDQogKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgS2VudGFybyBGdWt1Y2hpIDxmdWt1Y2hpQG1lZ2F1aS5uZXQ+DQogKg0KICogUEhQIFFSIENvZGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgTEdQTCAzDQogKiBDb3B5cmlnaHQgKEMpIDIwMTAgRG9taW5payBEemllbmlhIDxkZWx0YWxhYiBhdCBwb2N6dGEgZG90IGZtPg0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KICogdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciBhbnkgbGF0ZXIgdmVyc2lvbi4NCiAqDQogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VDQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KICoNCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQ0KICovDQogDQogICAgY2xhc3MgUVJyc2Jsb2NrIHsNCiAgICAgICAgcHVibGljICRkYXRhTGVuZ3RoOw0KICAgICAgICBwdWJsaWMgJGRhdGEgPSBhcnJheSgpOw0KICAgICAgICBwdWJsaWMgJGVjY0xlbmd0aDsNCiAgICAgICAgcHVibGljICRlY2MgPSBhcnJheSgpOw0KICAgICAgICANCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRkbCwgJGRhdGEsICRlbCwgJiRlY2MsIFFScnNJdGVtICRycykNCiAgICAgICAgew0KICAgICAgICAgICAgJHJzLT5lbmNvZGVfcnNfY2hhcigkZGF0YSwgJGVjYyk7DQogICAgICAgIA0KICAgICAgICAgICAgJHRoaXMtPmRhdGFMZW5ndGggPSAkZGw7DQogICAgICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOw0KICAgICAgICAgICAgJHRoaXMtPmVjY0xlbmd0aCA9ICRlbDsNCiAgICAgICAgICAgICR0aGlzLT5lY2MgPSAkZWNjOw0KICAgICAgICB9DQogICAgfTsNCiAgICANCiAgICAvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiAgICBjbGFzcyBRUnJhd2NvZGUgew0KICAgICAgICBwdWJsaWMgJHZlcnNpb247DQogICAgICAgIHB1YmxpYyAkZGF0YWNvZGUgPSBhcnJheSgpOw0KICAgICAgICBwdWJsaWMgJGVjY2NvZGUgPSBhcnJheSgpOw0KICAgICAgICBwdWJsaWMgJGJsb2NrczsNCiAgICAgICAgcHVibGljICRyc2Jsb2NrcyA9IGFycmF5KCk7IC8vb2YgUlNibG9jaw0KICAgICAgICBwdWJsaWMgJGNvdW50Ow0KICAgICAgICBwdWJsaWMgJGRhdGFMZW5ndGg7DQogICAgICAgIHB1YmxpYyAkZWNjTGVuZ3RoOw0KICAgICAgICBwdWJsaWMgJGIxOw0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChRUmlucHV0ICRpbnB1dCkNCiAgICAgICAgew0KICAgICAgICAgICAgJHNwZWMgPSBhcnJheSgwLDAsMCwwLDApOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAkdGhpcy0+ZGF0YWNvZGUgPSAkaW5wdXQtPmdldEJ5dGVTdHJlYW0oKTsNCiAgICAgICAgICAgIGlmKGlzX251bGwoJHRoaXMtPmRhdGFjb2RlKSkgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ251bGwgaW1wdXQgc3RyaW5nJyk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIFFSc3BlYzo6Z2V0RWNjU3BlYygkaW5wdXQtPmdldFZlcnNpb24oKSwgJGlucHV0LT5nZXRFcnJvckNvcnJlY3Rpb25MZXZlbCgpLCAkc3BlYyk7DQoNCiAgICAgICAgICAgICR0aGlzLT52ZXJzaW9uID0gJGlucHV0LT5nZXRWZXJzaW9uKCk7DQogICAgICAgICAgICAkdGhpcy0+YjEgPSBRUnNwZWM6OnJzQmxvY2tOdW0xKCRzcGVjKTsNCiAgICAgICAgICAgICR0aGlzLT5kYXRhTGVuZ3RoID0gUVJzcGVjOjpyc0RhdGFMZW5ndGgoJHNwZWMpOw0KICAgICAgICAgICAgJHRoaXMtPmVjY0xlbmd0aCA9IFFSc3BlYzo6cnNFY2NMZW5ndGgoJHNwZWMpOw0KICAgICAgICAgICAgJHRoaXMtPmVjY2NvZGUgPSBhcnJheV9maWxsKDAsICR0aGlzLT5lY2NMZW5ndGgsIDApOw0KICAgICAgICAgICAgJHRoaXMtPmJsb2NrcyA9IFFSc3BlYzo6cnNCbG9ja051bSgkc3BlYyk7DQogICAgICAgICAgICANCiAgICAgICAgICAgICRyZXQgPSAkdGhpcy0+aW5pdCgkc3BlYyk7DQogICAgICAgICAgICBpZigkcmV0IDwgMCkgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ2Jsb2NrIGFsbG9jIGVycm9yJyk7DQogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICR0aGlzLT5jb3VudCA9IDA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaW5pdChhcnJheSAkc3BlYykNCiAgICAgICAgew0KICAgICAgICAgICAgJGRsID0gUVJzcGVjOjpyc0RhdGFDb2RlczEoJHNwZWMpOw0KICAgICAgICAgICAgJGVsID0gUVJzcGVjOjpyc0VjY0NvZGVzMSgkc3BlYyk7DQogICAgICAgICAgICAkcnMgPSBRUnJzOjppbml0X3JzKDgsIDB4MTFkLCAwLCAxLCAkZWwsIDI1NSAtICRkbCAtICRlbCk7DQogICAgICAgICAgICANCg0KICAgICAgICAgICAgJGJsb2NrTm8gPSAwOw0KICAgICAgICAgICAgJGRhdGFQb3MgPSAwOw0KICAgICAgICAgICAgJGVjY1BvcyA9IDA7DQogICAgICAgICAgICBmb3IoJGk9MDsgJGk8UVJzcGVjOjpyc0Jsb2NrTnVtMSgkc3BlYyk7ICRpKyspIHsNCiAgICAgICAgICAgICAgICAkZWNjID0gYXJyYXlfc2xpY2UoJHRoaXMtPmVjY2NvZGUsJGVjY1Bvcyk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnJzYmxvY2tzWyRibG9ja05vXSA9IG5ldyBRUnJzYmxvY2soJGRsLCBhcnJheV9zbGljZSgkdGhpcy0+ZGF0YWNvZGUsICRkYXRhUG9zKSwgJGVsLCAgJGVjYywgJHJzKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+ZWNjY29kZSA9IGFycmF5X21lcmdlKGFycmF5X3NsaWNlKCR0aGlzLT5lY2Njb2RlLDAsICRlY2NQb3MpLCAkZWNjKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkZGF0YVBvcyArPSAkZGw7DQogICAgICAgICAgICAgICAgJGVjY1BvcyArPSAkZWw7DQogICAgICAgICAgICAgICAgJGJsb2NrTm8rKzsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYoUVJzcGVjOjpyc0Jsb2NrTnVtMigkc3BlYykgPT0gMCkNCiAgICAgICAgICAgICAgICByZXR1cm4gMDsNCg0KICAgICAgICAgICAgJGRsID0gUVJzcGVjOjpyc0RhdGFDb2RlczIoJHNwZWMpOw0KICAgICAgICAgICAgJGVsID0gUVJzcGVjOjpyc0VjY0NvZGVzMigkc3BlYyk7DQogICAgICAgICAgICAkcnMgPSBRUnJzOjppbml0X3JzKDgsIDB4MTFkLCAwLCAxLCAkZWwsIDI1NSAtICRkbCAtICRlbCk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmKCRycyA9PSBOVUxMKSByZXR1cm4gLTE7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGZvcigkaT0wOyAkaTxRUnNwZWM6OnJzQmxvY2tOdW0yKCRzcGVjKTsgJGkrKykgew0KICAgICAgICAgICAgICAgICRlY2MgPSBhcnJheV9zbGljZSgkdGhpcy0+ZWNjY29kZSwkZWNjUG9zKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+cnNibG9ja3NbJGJsb2NrTm9dID0gbmV3IFFScnNibG9jaygkZGwsIGFycmF5X3NsaWNlKCR0aGlzLT5kYXRhY29kZSwgJGRhdGFQb3MpLCAkZWwsICRlY2MsICRycyk7DQogICAgICAgICAgICAgICAgJHRoaXMtPmVjY2NvZGUgPSBhcnJheV9tZXJnZShhcnJheV9zbGljZSgkdGhpcy0+ZWNjY29kZSwwLCAkZWNjUG9zKSwgJGVjYyk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGRhdGFQb3MgKz0gJGRsOw0KICAgICAgICAgICAgICAgICRlY2NQb3MgKz0gJGVsOw0KICAgICAgICAgICAgICAgICRibG9ja05vKys7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGdldENvZGUoKQ0KICAgICAgICB7DQogICAgICAgICAgICAkcmV0Ow0KDQogICAgICAgICAgICBpZigkdGhpcy0+Y291bnQgPCAkdGhpcy0+ZGF0YUxlbmd0aCkgew0KICAgICAgICAgICAgICAgICRyb3cgPSAkdGhpcy0+Y291bnQgJSAkdGhpcy0+YmxvY2tzOw0KICAgICAgICAgICAgICAgICRjb2wgPSAkdGhpcy0+Y291bnQgLyAkdGhpcy0+YmxvY2tzOw0KICAgICAgICAgICAgICAgIGlmKCRjb2wgPj0gJHRoaXMtPnJzYmxvY2tzWzBdLT5kYXRhTGVuZ3RoKSB7DQogICAgICAgICAgICAgICAgICAgICRyb3cgKz0gJHRoaXMtPmIxOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcmV0ID0gJHRoaXMtPnJzYmxvY2tzWyRyb3ddLT5kYXRhWyRjb2xdOw0KICAgICAgICAgICAgfSBlbHNlIGlmKCR0aGlzLT5jb3VudCA8ICR0aGlzLT5kYXRhTGVuZ3RoICsgJHRoaXMtPmVjY0xlbmd0aCkgew0KICAgICAgICAgICAgICAgICRyb3cgPSAoJHRoaXMtPmNvdW50IC0gJHRoaXMtPmRhdGFMZW5ndGgpICUgJHRoaXMtPmJsb2NrczsNCiAgICAgICAgICAgICAgICAkY29sID0gKCR0aGlzLT5jb3VudCAtICR0aGlzLT5kYXRhTGVuZ3RoKSAvICR0aGlzLT5ibG9ja3M7DQogICAgICAgICAgICAgICAgJHJldCA9ICR0aGlzLT5yc2Jsb2Nrc1skcm93XS0+ZWNjWyRjb2xdOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0aGlzLT5jb3VudCsrOw0KICAgICAgICAgICAgDQogICAgICAgICAgICByZXR1cm4gJHJldDsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICANCiAgICBjbGFzcyBRUmNvZGUgew0KICAgIA0KICAgICAgICBwdWJsaWMgJHZlcnNpb247DQogICAgICAgIHB1YmxpYyAkd2lkdGg7DQogICAgICAgIHB1YmxpYyAkZGF0YTsgDQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGVuY29kZU1hc2soUVJpbnB1dCAkaW5wdXQsICRtYXNrKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZigkaW5wdXQtPmdldFZlcnNpb24oKSA8IDAgfHwgJGlucHV0LT5nZXRWZXJzaW9uKCkgPiBRUlNQRUNfVkVSU0lPTl9NQVgpIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCd3cm9uZyB2ZXJzaW9uJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZigkaW5wdXQtPmdldEVycm9yQ29ycmVjdGlvbkxldmVsKCkgPiBRUl9FQ0xFVkVMX0gpIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCd3cm9uZyBsZXZlbCcpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkcmF3ID0gbmV3IFFScmF3Y29kZSgkaW5wdXQpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBRUnRvb2xzOjptYXJrVGltZSgnYWZ0ZXJfcmF3Jyk7DQogICAgICAgICAgICANCiAgICAgICAgICAgICR2ZXJzaW9uID0gJHJhdy0+dmVyc2lvbjsNCiAgICAgICAgICAgICR3aWR0aCA9IFFSc3BlYzo6Z2V0V2lkdGgoJHZlcnNpb24pOw0KICAgICAgICAgICAgJGZyYW1lID0gUVJzcGVjOjpuZXdGcmFtZSgkdmVyc2lvbik7DQogICAgICAgICAgICANCiAgICAgICAgICAgICRmaWxsZXIgPSBuZXcgRnJhbWVGaWxsZXIoJHdpZHRoLCAkZnJhbWUpOw0KICAgICAgICAgICAgaWYoaXNfbnVsbCgkZmlsbGVyKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBpbnRlbGVhdmVkIGRhdGEgYW5kIGVjYyBjb2Rlcw0KICAgICAgICAgICAgZm9yKCRpPTA7ICRpPCRyYXctPmRhdGFMZW5ndGggKyAkcmF3LT5lY2NMZW5ndGg7ICRpKyspIHsNCiAgICAgICAgICAgICAgICAkY29kZSA9ICRyYXctPmdldENvZGUoKTsNCiAgICAgICAgICAgICAgICAkYml0ID0gMHg4MDsNCiAgICAgICAgICAgICAgICBmb3IoJGo9MDsgJGo8ODsgJGorKykgew0KICAgICAgICAgICAgICAgICAgICAkYWRkciA9ICRmaWxsZXItPm5leHQoKTsNCiAgICAgICAgICAgICAgICAgICAgJGZpbGxlci0+c2V0RnJhbWVBdCgkYWRkciwgMHgwMiB8ICgoJGJpdCAmICRjb2RlKSAhPSAwKSk7DQogICAgICAgICAgICAgICAgICAgICRiaXQgPSAkYml0ID4+IDE7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBRUnRvb2xzOjptYXJrVGltZSgnYWZ0ZXJfZmlsbGVyJyk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIHVuc2V0KCRyYXcpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAvLyByZW1haW5kZXIgYml0cw0KICAgICAgICAgICAgJGogPSBRUnNwZWM6OmdldFJlbWFpbmRlcigkdmVyc2lvbik7DQogICAgICAgICAgICBmb3IoJGk9MDsgJGk8JGo7ICRpKyspIHsNCiAgICAgICAgICAgICAgICAkYWRkciA9ICRmaWxsZXItPm5leHQoKTsNCiAgICAgICAgICAgICAgICAkZmlsbGVyLT5zZXRGcmFtZUF0KCRhZGRyLCAweDAyKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJGZyYW1lID0gJGZpbGxlci0+ZnJhbWU7DQogICAgICAgICAgICB1bnNldCgkZmlsbGVyKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICAvLyBtYXNraW5nDQogICAgICAgICAgICAkbWFza09iaiA9IG5ldyBRUm1hc2soKTsNCiAgICAgICAgICAgIGlmKCRtYXNrIDwgMCkgew0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKFFSX0ZJTkRfQkVTVF9NQVNLKSB7DQogICAgICAgICAgICAgICAgICAgICRtYXNrZWQgPSAkbWFza09iai0+bWFzaygkd2lkdGgsICRmcmFtZSwgJGlucHV0LT5nZXRFcnJvckNvcnJlY3Rpb25MZXZlbCgpKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkbWFza2VkID0gJG1hc2tPYmotPm1ha2VNYXNrKCR3aWR0aCwgJGZyYW1lLCAoaW50dmFsKFFSX0RFRkFVTFRfTUFTSykgJSA4KSwgJGlucHV0LT5nZXRFcnJvckNvcnJlY3Rpb25MZXZlbCgpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRtYXNrZWQgPSAkbWFza09iai0+bWFrZU1hc2soJHdpZHRoLCAkZnJhbWUsICRtYXNrLCAkaW5wdXQtPmdldEVycm9yQ29ycmVjdGlvbkxldmVsKCkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZigkbWFza2VkID09IE5VTEwpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgUVJ0b29sczo6bWFya1RpbWUoJ2FmdGVyX21hc2snKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHRoaXMtPnZlcnNpb24gPSAkdmVyc2lvbjsNCiAgICAgICAgICAgICR0aGlzLT53aWR0aCA9ICR3aWR0aDsNCiAgICAgICAgICAgICR0aGlzLT5kYXRhID0gJG1hc2tlZDsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgcmV0dXJuICR0aGlzOw0KICAgICAgICB9DQogICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlSW5wdXQoUVJpbnB1dCAkaW5wdXQpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZW5jb2RlTWFzaygkaW5wdXQsIC0xKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGVTdHJpbmc4Yml0KCRzdHJpbmcsICR2ZXJzaW9uLCAkbGV2ZWwpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmKHN0cmluZyA9PSBOVUxMKSB7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignZW1wdHkgc3RyaW5nIScpOw0KICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkaW5wdXQgPSBuZXcgUVJpbnB1dCgkdmVyc2lvbiwgJGxldmVsKTsNCiAgICAgICAgICAgIGlmKCRpbnB1dCA9PSBOVUxMKSByZXR1cm4gTlVMTDsNCg0KICAgICAgICAgICAgJHJldCA9ICRpbnB1dC0+YXBwZW5kKCRpbnB1dCwgUVJfTU9ERV84LCBzdHJsZW4oJHN0cmluZyksIHN0cl9zcGxpdCgkc3RyaW5nKSk7DQogICAgICAgICAgICBpZigkcmV0IDwgMCkgew0KICAgICAgICAgICAgICAgIHVuc2V0KCRpbnB1dCk7DQogICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmVuY29kZUlucHV0KCRpbnB1dCk7DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGVuY29kZVN0cmluZygkc3RyaW5nLCAkdmVyc2lvbiwgJGxldmVsLCAkaGludCwgJGNhc2VzZW5zaXRpdmUpDQogICAgICAgIHsNCg0KICAgICAgICAgICAgaWYoJGhpbnQgIT0gUVJfTU9ERV84ICYmICRoaW50ICE9IFFSX01PREVfS0FOSkkpIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdiYWQgaGludCcpOw0KICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkaW5wdXQgPSBuZXcgUVJpbnB1dCgkdmVyc2lvbiwgJGxldmVsKTsNCiAgICAgICAgICAgIGlmKCRpbnB1dCA9PSBOVUxMKSByZXR1cm4gTlVMTDsNCg0KICAgICAgICAgICAgJHJldCA9IFFSc3BsaXQ6OnNwbGl0U3RyaW5nVG9RUmlucHV0KCRzdHJpbmcsICRpbnB1dCwgJGhpbnQsICRjYXNlc2Vuc2l0aXZlKTsNCiAgICAgICAgICAgIGlmKCRyZXQgPCAwKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZW5jb2RlSW5wdXQoJGlucHV0KTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcG5nKCR0ZXh0LCAkb3V0ZmlsZSA9IGZhbHNlLCAkbGV2ZWwgPSBRUl9FQ0xFVkVMX0wsICRzaXplID0gMywgJG1hcmdpbiA9IDQsICRzYXZlYW5kcHJpbnQ9ZmFsc2UpIA0KICAgICAgICB7DQogICAgICAgICAgICAkZW5jID0gUVJlbmNvZGU6OmZhY3RvcnkoJGxldmVsLCAkc2l6ZSwgJG1hcmdpbik7DQogICAgICAgICAgICByZXR1cm4gJGVuYy0+ZW5jb2RlUE5HKCR0ZXh0LCAkb3V0ZmlsZSwgJHNhdmVhbmRwcmludD1mYWxzZSk7DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0ZXh0KCR0ZXh0LCAkb3V0ZmlsZSA9IGZhbHNlLCAkbGV2ZWwgPSBRUl9FQ0xFVkVMX0wsICRzaXplID0gMywgJG1hcmdpbiA9IDQpIA0KICAgICAgICB7DQogICAgICAgICAgICAkZW5jID0gUVJlbmNvZGU6OmZhY3RvcnkoJGxldmVsLCAkc2l6ZSwgJG1hcmdpbik7DQogICAgICAgICAgICByZXR1cm4gJGVuYy0+ZW5jb2RlKCR0ZXh0LCAkb3V0ZmlsZSk7DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByYXcoJHRleHQsICRvdXRmaWxlID0gZmFsc2UsICRsZXZlbCA9IFFSX0VDTEVWRUxfTCwgJHNpemUgPSAzLCAkbWFyZ2luID0gNCkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRlbmMgPSBRUmVuY29kZTo6ZmFjdG9yeSgkbGV2ZWwsICRzaXplLCAkbWFyZ2luKTsNCiAgICAgICAgICAgIHJldHVybiAkZW5jLT5lbmNvZGVSQVcoJHRleHQsICRvdXRmaWxlKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgDQogICAgY2xhc3MgRnJhbWVGaWxsZXIgew0KICAgIA0KICAgICAgICBwdWJsaWMgJHdpZHRoOw0KICAgICAgICBwdWJsaWMgJGZyYW1lOw0KICAgICAgICBwdWJsaWMgJHg7DQogICAgICAgIHB1YmxpYyAkeTsNCiAgICAgICAgcHVibGljICRkaXI7DQogICAgICAgIHB1YmxpYyAkYml0Ow0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkd2lkdGgsICYkZnJhbWUpDQogICAgICAgIHsNCiAgICAgICAgICAgICR0aGlzLT53aWR0aCA9ICR3aWR0aDsNCiAgICAgICAgICAgICR0aGlzLT5mcmFtZSA9ICRmcmFtZTsNCiAgICAgICAgICAgICR0aGlzLT54ID0gJHdpZHRoIC0gMTsNCiAgICAgICAgICAgICR0aGlzLT55ID0gJHdpZHRoIC0gMTsNCiAgICAgICAgICAgICR0aGlzLT5kaXIgPSAtMTsNCiAgICAgICAgICAgICR0aGlzLT5iaXQgPSAtMTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRGcmFtZUF0KCRhdCwgJHZhbCkNCiAgICAgICAgew0KICAgICAgICAgICAgJHRoaXMtPmZyYW1lWyRhdFsneSddXVskYXRbJ3gnXV0gPSBjaHIoJHZhbCk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RnJhbWVBdCgkYXQpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldHVybiBvcmQoJHRoaXMtPmZyYW1lWyRhdFsneSddXVskYXRbJ3gnXV0pOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIG5leHQoKQ0KICAgICAgICB7DQogICAgICAgICAgICBkbyB7DQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZigkdGhpcy0+Yml0ID09IC0xKSB7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5iaXQgPSAwOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkoJ3gnPT4kdGhpcy0+eCwgJ3knPT4kdGhpcy0+eSk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJHggPSAkdGhpcy0+eDsNCiAgICAgICAgICAgICAgICAkeSA9ICR0aGlzLT55Ow0KICAgICAgICAgICAgICAgICR3ID0gJHRoaXMtPndpZHRoOw0KDQogICAgICAgICAgICAgICAgaWYoJHRoaXMtPmJpdCA9PSAwKSB7DQogICAgICAgICAgICAgICAgICAgICR4LS07DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5iaXQrKzsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkeCsrOw0KICAgICAgICAgICAgICAgICAgICAkeSArPSAkdGhpcy0+ZGlyOw0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Yml0LS07DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaWYoJHRoaXMtPmRpciA8IDApIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoJHkgPCAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkeSA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICAkeCAtPSAyOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRpciA9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICBpZigkeCA9PSA2KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHgtLTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeSA9IDk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBpZigkeSA9PSAkdykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHkgPSAkdyAtIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAkeCAtPSAyOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRpciA9IC0xOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHggPT0gNikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR4LS07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHkgLT0gODsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZigkeCA8IDAgfHwgJHkgPCAwKSByZXR1cm4gbnVsbDsNCg0KICAgICAgICAgICAgICAgICR0aGlzLT54ID0gJHg7DQogICAgICAgICAgICAgICAgJHRoaXMtPnkgPSAkeTsNCg0KICAgICAgICAgICAgfSB3aGlsZShvcmQoJHRoaXMtPmZyYW1lWyR5XVskeF0pICYgMHg4MCk7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIHJldHVybiBhcnJheSgneCc9PiR4LCAneSc9PiR5KTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICB9IDsNCiAgICANCiAgICAvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgIA0KICAgIA0KICAgIGNsYXNzIFFSZW5jb2RlIHsNCiAgICANCiAgICAgICAgcHVibGljICRjYXNlc2Vuc2l0aXZlID0gdHJ1ZTsNCiAgICAgICAgcHVibGljICRlaWdodGJpdCA9IGZhbHNlOw0KICAgICAgICANCiAgICAgICAgcHVibGljICR2ZXJzaW9uID0gMDsNCiAgICAgICAgcHVibGljICRzaXplID0gMzsNCiAgICAgICAgcHVibGljICRtYXJnaW4gPSA0Ow0KICAgICAgICANCiAgICAgICAgcHVibGljICRzdHJ1Y3R1cmVkID0gMDsgLy8gbm90IHN1cHBvcnRlZCB5ZXQNCiAgICAgICAgDQogICAgICAgIHB1YmxpYyAkbGV2ZWwgPSBRUl9FQ0xFVkVMX0w7DQogICAgICAgIHB1YmxpYyAkaGludCA9IFFSX01PREVfODsNCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZhY3RvcnkoJGxldmVsID0gUVJfRUNMRVZFTF9MLCAkc2l6ZSA9IDMsICRtYXJnaW4gPSA0KQ0KICAgICAgICB7DQogICAgICAgICAgICAkZW5jID0gbmV3IFFSZW5jb2RlKCk7DQogICAgICAgICAgICAkZW5jLT5zaXplID0gJHNpemU7DQogICAgICAgICAgICAkZW5jLT5tYXJnaW4gPSAkbWFyZ2luOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBzd2l0Y2ggKCRsZXZlbC4nJykgew0KICAgICAgICAgICAgICAgIGNhc2UgJzAnOg0KICAgICAgICAgICAgICAgIGNhc2UgJzEnOg0KICAgICAgICAgICAgICAgIGNhc2UgJzInOg0KICAgICAgICAgICAgICAgIGNhc2UgJzMnOg0KICAgICAgICAgICAgICAgICAgICAgICAgJGVuYy0+bGV2ZWwgPSAkbGV2ZWw7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ2wnOg0KICAgICAgICAgICAgICAgIGNhc2UgJ0wnOg0KICAgICAgICAgICAgICAgICAgICAgICAgJGVuYy0+bGV2ZWwgPSBRUl9FQ0xFVkVMX0w7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ20nOg0KICAgICAgICAgICAgICAgIGNhc2UgJ00nOg0KICAgICAgICAgICAgICAgICAgICAgICAgJGVuYy0+bGV2ZWwgPSBRUl9FQ0xFVkVMX007DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ3EnOg0KICAgICAgICAgICAgICAgIGNhc2UgJ1EnOg0KICAgICAgICAgICAgICAgICAgICAgICAgJGVuYy0+bGV2ZWwgPSBRUl9FQ0xFVkVMX1E7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ2gnOg0KICAgICAgICAgICAgICAgIGNhc2UgJ0gnOg0KICAgICAgICAgICAgICAgICAgICAgICAgJGVuYy0+bGV2ZWwgPSBRUl9FQ0xFVkVMX0g7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICByZXR1cm4gJGVuYzsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGVSQVcoJGludGV4dCwgJG91dGZpbGUgPSBmYWxzZSkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRjb2RlID0gbmV3IFFSY29kZSgpOw0KDQogICAgICAgICAgICBpZigkdGhpcy0+ZWlnaHRiaXQpIHsNCiAgICAgICAgICAgICAgICAkY29kZS0+ZW5jb2RlU3RyaW5nOGJpdCgkaW50ZXh0LCAkdGhpcy0+dmVyc2lvbiwgJHRoaXMtPmxldmVsKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJGNvZGUtPmVuY29kZVN0cmluZygkaW50ZXh0LCAkdGhpcy0+dmVyc2lvbiwgJHRoaXMtPmxldmVsLCAkdGhpcy0+aGludCwgJHRoaXMtPmNhc2VzZW5zaXRpdmUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICByZXR1cm4gJGNvZGUtPmRhdGE7DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGVuY29kZSgkaW50ZXh0LCAkb3V0ZmlsZSA9IGZhbHNlKSANCiAgICAgICAgew0KICAgICAgICAgICAgJGNvZGUgPSBuZXcgUVJjb2RlKCk7DQoNCiAgICAgICAgICAgIGlmKCR0aGlzLT5laWdodGJpdCkgew0KICAgICAgICAgICAgICAgICRjb2RlLT5lbmNvZGVTdHJpbmc4Yml0KCRpbnRleHQsICR0aGlzLT52ZXJzaW9uLCAkdGhpcy0+bGV2ZWwpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkY29kZS0+ZW5jb2RlU3RyaW5nKCRpbnRleHQsICR0aGlzLT52ZXJzaW9uLCAkdGhpcy0+bGV2ZWwsICR0aGlzLT5oaW50LCAkdGhpcy0+Y2FzZXNlbnNpdGl2ZSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIFFSdG9vbHM6Om1hcmtUaW1lKCdhZnRlcl9lbmNvZGUnKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKCRvdXRmaWxlIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJG91dGZpbGUsIGpvaW4oIlxuIiwgUVJ0b29sczo6YmluYXJpemUoJGNvZGUtPmRhdGEpKSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHJldHVybiBRUnRvb2xzOjpiaW5hcml6ZSgkY29kZS0+ZGF0YSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlUE5HKCRpbnRleHQsICRvdXRmaWxlID0gZmFsc2UsJHNhdmVhbmRwcmludD1mYWxzZSkgDQogICAgICAgIHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICBvYl9zdGFydCgpOw0KICAgICAgICAgICAgICAgICR0YWIgPSAkdGhpcy0+ZW5jb2RlKCRpbnRleHQpOw0KICAgICAgICAgICAgICAgICRlcnIgPSBvYl9nZXRfY29udGVudHMoKTsNCiAgICAgICAgICAgICAgICBvYl9lbmRfY2xlYW4oKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAoJGVyciAhPSAnJykNCiAgICAgICAgICAgICAgICAgICAgUVJ0b29sczo6bG9nKCRvdXRmaWxlLCAkZXJyKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkbWF4U2l6ZSA9IChpbnQpKFFSX1BOR19NQVhJTVVNX1NJWkUgLyAoY291bnQoJHRhYikrMiokdGhpcy0+bWFyZ2luKSk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgUVJpbWFnZTo6cG5nKCR0YWIsICRvdXRmaWxlLCBtaW4obWF4KDEsICR0aGlzLT5zaXplKSwgJG1heFNpemUpLCAkdGhpcy0+bWFyZ2luLCRzYXZlYW5kcHJpbnQpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIFFSdG9vbHM6OmxvZygkb3V0ZmlsZSwgJGUtPmdldE1lc3NhZ2UoKSk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/qrimage.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qDQogKiBQSFAgUVIgQ29kZSBlbmNvZGVyDQogKg0KICogSW1hZ2Ugb3V0cHV0IG9mIGNvZGUgdXNpbmcgR0QyDQogKg0KICogUEhQIFFSIENvZGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgTEdQTCAzDQogKiBDb3B5cmlnaHQgKEMpIDIwMTAgRG9taW5payBEemllbmlhIDxkZWx0YWxhYiBhdCBwb2N6dGEgZG90IGZtPg0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KICogdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciBhbnkgbGF0ZXIgdmVyc2lvbi4NCiAqDQogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VDQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KICoNCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQ0KICovDQogDQogICAgZGVmaW5lKCdRUl9JTUFHRScsIHRydWUpOw0KDQogICAgY2xhc3MgUVJpbWFnZSB7DQogICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBuZygkZnJhbWUsICRmaWxlbmFtZSA9IGZhbHNlLCAkcGl4ZWxQZXJQb2ludCA9IDQsICRvdXRlckZyYW1lID0gNCwkc2F2ZWFuZHByaW50PUZBTFNFKSANCiAgICAgICAgew0KICAgICAgICAgICAgJGltYWdlID0gc2VsZjo6aW1hZ2UoJGZyYW1lLCAkcGl4ZWxQZXJQb2ludCwgJG91dGVyRnJhbWUpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZiAoJGZpbGVuYW1lID09PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIEhlYWRlcigiQ29udGVudC10eXBlOiBpbWFnZS9wbmciKTsNCiAgICAgICAgICAgICAgICBJbWFnZVBuZygkaW1hZ2UpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBpZigkc2F2ZWFuZHByaW50PT09VFJVRSl7DQogICAgICAgICAgICAgICAgICAgIEltYWdlUG5nKCRpbWFnZSwgJGZpbGVuYW1lKTsNCiAgICAgICAgICAgICAgICAgICAgaGVhZGVyKCJDb250ZW50LXR5cGU6IGltYWdlL3BuZyIpOw0KICAgICAgICAgICAgICAgICAgICBJbWFnZVBuZygkaW1hZ2UpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICBJbWFnZVBuZygkaW1hZ2UsICRmaWxlbmFtZSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBJbWFnZURlc3Ryb3koJGltYWdlKTsNCiAgICAgICAgfQ0KICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBqcGcoJGZyYW1lLCAkZmlsZW5hbWUgPSBmYWxzZSwgJHBpeGVsUGVyUG9pbnQgPSA4LCAkb3V0ZXJGcmFtZSA9IDQsICRxID0gODUpIA0KICAgICAgICB7DQogICAgICAgICAgICAkaW1hZ2UgPSBzZWxmOjppbWFnZSgkZnJhbWUsICRwaXhlbFBlclBvaW50LCAkb3V0ZXJGcmFtZSk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmICgkZmlsZW5hbWUgPT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgSGVhZGVyKCJDb250ZW50LXR5cGU6IGltYWdlL2pwZWciKTsNCiAgICAgICAgICAgICAgICBJbWFnZUpwZWcoJGltYWdlLCBudWxsLCAkcSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIEltYWdlSnBlZygkaW1hZ2UsICRmaWxlbmFtZSwgJHEpOyAgICAgICAgICAgIA0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBJbWFnZURlc3Ryb3koJGltYWdlKTsNCiAgICAgICAgfQ0KICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaW1hZ2UoJGZyYW1lLCAkcGl4ZWxQZXJQb2ludCA9IDQsICRvdXRlckZyYW1lID0gNCkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRoID0gY291bnQoJGZyYW1lKTsNCiAgICAgICAgICAgICR3ID0gc3RybGVuKCRmcmFtZVswXSk7DQogICAgICAgICAgICANCiAgICAgICAgICAgICRpbWdXID0gJHcgKyAyKiRvdXRlckZyYW1lOw0KICAgICAgICAgICAgJGltZ0ggPSAkaCArIDIqJG91dGVyRnJhbWU7DQogICAgICAgICAgICANCiAgICAgICAgICAgICRiYXNlX2ltYWdlID1JbWFnZUNyZWF0ZSgkaW1nVywgJGltZ0gpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAkY29sWzBdID0gSW1hZ2VDb2xvckFsbG9jYXRlKCRiYXNlX2ltYWdlLDI1NSwyNTUsMjU1KTsNCiAgICAgICAgICAgICRjb2xbMV0gPSBJbWFnZUNvbG9yQWxsb2NhdGUoJGJhc2VfaW1hZ2UsMCwwLDApOw0KDQogICAgICAgICAgICBpbWFnZWZpbGwoJGJhc2VfaW1hZ2UsIDAsIDAsICRjb2xbMF0pOw0KDQogICAgICAgICAgICBmb3IoJHk9MDsgJHk8JGg7ICR5KyspIHsNCiAgICAgICAgICAgICAgICBmb3IoJHg9MDsgJHg8JHc7ICR4KyspIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRmcmFtZVskeV1bJHhdID09ICcxJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VTZXRQaXhlbCgkYmFzZV9pbWFnZSwkeCskb3V0ZXJGcmFtZSwkeSskb3V0ZXJGcmFtZSwkY29sWzFdKTsgDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgICR0YXJnZXRfaW1hZ2UgPUltYWdlQ3JlYXRlKCRpbWdXICogJHBpeGVsUGVyUG9pbnQsICRpbWdIICogJHBpeGVsUGVyUG9pbnQpOw0KICAgICAgICAgICAgSW1hZ2VDb3B5UmVzaXplZCgkdGFyZ2V0X2ltYWdlLCAkYmFzZV9pbWFnZSwgMCwgMCwgMCwgMCwgJGltZ1cgKiAkcGl4ZWxQZXJQb2ludCwgJGltZ0ggKiAkcGl4ZWxQZXJQb2ludCwgJGltZ1csICRpbWdIKTsNCiAgICAgICAgICAgIEltYWdlRGVzdHJveSgkYmFzZV9pbWFnZSk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIHJldHVybiAkdGFyZ2V0X2ltYWdlOw0KICAgICAgICB9DQogICAgfQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/qrinput.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qDQogKiBQSFAgUVIgQ29kZSBlbmNvZGVyDQogKg0KICogSW5wdXQgZW5jb2RpbmcgY2xhc3MNCiAqDQogKiBCYXNlZCBvbiBsaWJxcmVuY29kZSBDIGxpYnJhcnkgZGlzdHJpYnV0ZWQgdW5kZXIgTEdQTCAyLjENCiAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBLZW50YXJvIEZ1a3VjaGkgPGZ1a3VjaGlAbWVnYXVpLm5ldD4NCiAqDQogKiBQSFAgUVIgQ29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBMR1BMIDMNCiAqIENvcHlyaWdodCAoQykgMjAxMCBEb21pbmlrIER6aWVuaWEgPGRlbHRhbGFiIGF0IHBvY3p0YSBkb3QgZm0+DQogKg0KICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQogKiB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIGFueSBsYXRlciB2ZXJzaW9uLg0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUNCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQogKg0KICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBDQogKi8NCiANCiAgICBkZWZpbmUoJ1NUUlVDVFVSRV9IRUFERVJfQklUUycsICAyMCk7DQogICAgZGVmaW5lKCdNQVhfU1RSVUNUVVJFRF9TWU1CT0xTJywgMTYpOw0KDQogICAgY2xhc3MgUVJpbnB1dEl0ZW0gew0KICAgIA0KICAgICAgICBwdWJsaWMgJG1vZGU7DQogICAgICAgIHB1YmxpYyAkc2l6ZTsNCiAgICAgICAgcHVibGljICRkYXRhOw0KICAgICAgICBwdWJsaWMgJGJzdHJlYW07DQoNCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtb2RlLCAkc2l6ZSwgJGRhdGEsICRic3RyZWFtID0gbnVsbCkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRzZXREYXRhID0gYXJyYXlfc2xpY2UoJGRhdGEsIDAsICRzaXplKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKGNvdW50KCRzZXREYXRhKSA8ICRzaXplKSB7DQogICAgICAgICAgICAgICAgJHNldERhdGEgPSBhcnJheV9tZXJnZSgkc2V0RGF0YSwgYXJyYXlfZmlsbCgwLCRzaXplLWNvdW50KCRzZXREYXRhKSwwKSk7DQogICAgICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAgICAgaWYoIVFSaW5wdXQ6OmNoZWNrKCRtb2RlLCAkc2l6ZSwgJHNldERhdGEpKSB7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3IgbTonLiRtb2RlLicsczonLiRzaXplLicsZDonLmpvaW4oJywnLCRzZXREYXRhKSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgICR0aGlzLT5tb2RlID0gJG1vZGU7DQogICAgICAgICAgICAkdGhpcy0+c2l6ZSA9ICRzaXplOw0KICAgICAgICAgICAgJHRoaXMtPmRhdGEgPSAkc2V0RGF0YTsNCiAgICAgICAgICAgICR0aGlzLT5ic3RyZWFtID0gJGJzdHJlYW07DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlTW9kZU51bSgkdmVyc2lvbikNCiAgICAgICAgew0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICR3b3JkcyA9IChpbnQpKCR0aGlzLT5zaXplIC8gMyk7DQogICAgICAgICAgICAgICAgJGJzID0gbmV3IFFSYml0c3RyZWFtKCk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJHZhbCA9IDB4MTsNCiAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bSg0LCAkdmFsKTsNCiAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bShRUnNwZWM6Omxlbmd0aEluZGljYXRvcihRUl9NT0RFX05VTSwgJHZlcnNpb24pLCAkdGhpcy0+c2l6ZSk7DQoNCiAgICAgICAgICAgICAgICBmb3IoJGk9MDsgJGk8JHdvcmRzOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICR2YWwgID0gKG9yZCgkdGhpcy0+ZGF0YVskaSozICBdKSAtIG9yZCgnMCcpKSAqIDEwMDsNCiAgICAgICAgICAgICAgICAgICAgJHZhbCArPSAob3JkKCR0aGlzLT5kYXRhWyRpKjMrMV0pIC0gb3JkKCcwJykpICogMTA7DQogICAgICAgICAgICAgICAgICAgICR2YWwgKz0gKG9yZCgkdGhpcy0+ZGF0YVskaSozKzJdKSAtIG9yZCgnMCcpKTsNCiAgICAgICAgICAgICAgICAgICAgJGJzLT5hcHBlbmROdW0oMTAsICR2YWwpOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmKCR0aGlzLT5zaXplIC0gJHdvcmRzICogMyA9PSAxKSB7DQogICAgICAgICAgICAgICAgICAgICR2YWwgPSBvcmQoJHRoaXMtPmRhdGFbJHdvcmRzKjNdKSAtIG9yZCgnMCcpOw0KICAgICAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bSg0LCAkdmFsKTsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYoJHRoaXMtPnNpemUgLSAkd29yZHMgKiAzID09IDIpIHsNCiAgICAgICAgICAgICAgICAgICAgJHZhbCAgPSAob3JkKCR0aGlzLT5kYXRhWyR3b3JkcyozICBdKSAtIG9yZCgnMCcpKSAqIDEwOw0KICAgICAgICAgICAgICAgICAgICAkdmFsICs9IChvcmQoJHRoaXMtPmRhdGFbJHdvcmRzKjMrMV0pIC0gb3JkKCcwJykpOw0KICAgICAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bSg3LCAkdmFsKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAkdGhpcy0+YnN0cmVhbSA9ICRiczsNCiAgICAgICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGVNb2RlQW4oJHZlcnNpb24pDQogICAgICAgIHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgJHdvcmRzID0gKGludCkoJHRoaXMtPnNpemUgLyAyKTsNCiAgICAgICAgICAgICAgICAkYnMgPSBuZXcgUVJiaXRzdHJlYW0oKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bSg0LCAweDAyKTsNCiAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bShRUnNwZWM6Omxlbmd0aEluZGljYXRvcihRUl9NT0RFX0FOLCAkdmVyc2lvbiksICR0aGlzLT5zaXplKTsNCg0KICAgICAgICAgICAgICAgIGZvcigkaT0wOyAkaTwkd29yZHM7ICRpKyspIHsNCiAgICAgICAgICAgICAgICAgICAgJHZhbCAgPSAoaW50KVFSaW5wdXQ6Omxvb2tBblRhYmxlKG9yZCgkdGhpcy0+ZGF0YVskaSoyICBdKSkgKiA0NTsNCiAgICAgICAgICAgICAgICAgICAgJHZhbCArPSAoaW50KVFSaW5wdXQ6Omxvb2tBblRhYmxlKG9yZCgkdGhpcy0+ZGF0YVskaSoyKzFdKSk7DQoNCiAgICAgICAgICAgICAgICAgICAgJGJzLT5hcHBlbmROdW0oMTEsICR2YWwpOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmKCR0aGlzLT5zaXplICYgMSkgew0KICAgICAgICAgICAgICAgICAgICAkdmFsID0gUVJpbnB1dDo6bG9va0FuVGFibGUob3JkKCR0aGlzLT5kYXRhWyR3b3JkcyAqIDJdKSk7DQogICAgICAgICAgICAgICAgICAgICRicy0+YXBwZW5kTnVtKDYsICR2YWwpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICAgICAgICAgJHRoaXMtPmJzdHJlYW0gPSAkYnM7DQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICANCiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGVNb2RlOCgkdmVyc2lvbikNCiAgICAgICAgew0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAkYnMgPSBuZXcgUVJiaXRzdHJlYW0oKTsNCg0KICAgICAgICAgICAgICAgICRicy0+YXBwZW5kTnVtKDQsIDB4NCk7DQogICAgICAgICAgICAgICAgJGJzLT5hcHBlbmROdW0oUVJzcGVjOjpsZW5ndGhJbmRpY2F0b3IoUVJfTU9ERV84LCAkdmVyc2lvbiksICR0aGlzLT5zaXplKTsNCg0KICAgICAgICAgICAgICAgIGZvcigkaT0wOyAkaTwkdGhpcy0+c2l6ZTsgJGkrKykgew0KICAgICAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bSg4LCBvcmQoJHRoaXMtPmRhdGFbJGldKSk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJHRoaXMtPmJzdHJlYW0gPSAkYnM7DQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICANCiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGVNb2RlS2FuamkoJHZlcnNpb24pDQogICAgICAgIHsNCiAgICAgICAgICAgIHRyeSB7DQoNCiAgICAgICAgICAgICAgICAkYnMgPSBuZXcgUVJiaXRydHJlYW0oKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bSg0LCAweDgpOw0KICAgICAgICAgICAgICAgICRicy0+YXBwZW5kTnVtKFFSc3BlYzo6bGVuZ3RoSW5kaWNhdG9yKFFSX01PREVfS0FOSkksICR2ZXJzaW9uKSwgKGludCkoJHRoaXMtPnNpemUgLyAyKSk7DQoNCiAgICAgICAgICAgICAgICBmb3IoJGk9MDsgJGk8JHRoaXMtPnNpemU7ICRpKz0yKSB7DQogICAgICAgICAgICAgICAgICAgICR2YWwgPSAob3JkKCR0aGlzLT5kYXRhWyRpXSkgPDwgOCkgfCBvcmQoJHRoaXMtPmRhdGFbJGkrMV0pOw0KICAgICAgICAgICAgICAgICAgICBpZigkdmFsIDw9IDB4OWZmYykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHZhbCAtPSAweDgxNDA7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkdmFsIC09IDB4YzE0MDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgJGggPSAoJHZhbCA+PiA4KSAqIDB4YzA7DQogICAgICAgICAgICAgICAgICAgICR2YWwgPSAoJHZhbCAmIDB4ZmYpICsgJGg7DQoNCiAgICAgICAgICAgICAgICAgICAgJGJzLT5hcHBlbmROdW0oMTMsICR2YWwpOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICR0aGlzLT5ic3RyZWFtID0gJGJzOw0KICAgICAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICAgICAgDQogICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGVuY29kZU1vZGVTdHJ1Y3R1cmUoKQ0KICAgICAgICB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICRicyA9ICBuZXcgUVJiaXRzdHJlYW0oKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bSg0LCAweDAzKTsNCiAgICAgICAgICAgICAgICAkYnMtPmFwcGVuZE51bSg0LCBvcmQoJHRoaXMtPmRhdGFbMV0pIC0gMSk7DQogICAgICAgICAgICAgICAgJGJzLT5hcHBlbmROdW0oNCwgb3JkKCR0aGlzLT5kYXRhWzBdKSAtIDEpOw0KICAgICAgICAgICAgICAgICRicy0+YXBwZW5kTnVtKDgsIG9yZCgkdGhpcy0+ZGF0YVsyXSkpOw0KDQogICAgICAgICAgICAgICAgJHRoaXMtPmJzdHJlYW0gPSAkYnM7DQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICANCiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlc3RpbWF0ZUJpdFN0cmVhbVNpemVPZkVudHJ5KCR2ZXJzaW9uKQ0KICAgICAgICB7DQogICAgICAgICAgICAkYml0cyA9IDA7DQoNCiAgICAgICAgICAgIGlmKCR2ZXJzaW9uID09IDApIA0KICAgICAgICAgICAgICAgICR2ZXJzaW9uID0gMTsNCg0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT5tb2RlKSB7DQogICAgICAgICAgICAgICAgY2FzZSBRUl9NT0RFX05VTTogICAgICAgICRiaXRzID0gUVJpbnB1dDo6ZXN0aW1hdGVCaXRzTW9kZU51bSgkdGhpcy0+c2l6ZSk7ICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV9BTjogICAgICAgICRiaXRzID0gUVJpbnB1dDo6ZXN0aW1hdGVCaXRzTW9kZUFuKCR0aGlzLT5zaXplKTsgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBRUl9NT0RFXzg6ICAgICAgICAgICAgJGJpdHMgPSBRUmlucHV0Ojplc3RpbWF0ZUJpdHNNb2RlOCgkdGhpcy0+c2l6ZSk7ICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV9LQU5KSTogICAgICAgICRiaXRzID0gUVJpbnB1dDo6ZXN0aW1hdGVCaXRzTW9kZUthbmppKCR0aGlzLT5zaXplKTticmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIFFSX01PREVfU1RSVUNUVVJFOiAgICByZXR1cm4gU1RSVUNUVVJFX0hFQURFUl9CSVRTOyAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkbCA9IFFSc3BlYzo6bGVuZ3RoSW5kaWNhdG9yKCR0aGlzLT5tb2RlLCAkdmVyc2lvbik7DQogICAgICAgICAgICAkbSA9IDEgPDwgJGw7DQogICAgICAgICAgICAkbnVtID0gKGludCkoKCR0aGlzLT5zaXplICsgJG0gLSAxKSAvICRtKTsNCg0KICAgICAgICAgICAgJGJpdHMgKz0gJG51bSAqICg0ICsgJGwpOw0KDQogICAgICAgICAgICByZXR1cm4gJGJpdHM7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlQml0U3RyZWFtKCR2ZXJzaW9uKQ0KICAgICAgICB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmJzdHJlYW0pOw0KICAgICAgICAgICAgICAgICR3b3JkcyA9IFFSc3BlYzo6bWF4aW11bVdvcmRzKCR0aGlzLT5tb2RlLCAkdmVyc2lvbik7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYoJHRoaXMtPnNpemUgPiAkd29yZHMpIHsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgJHN0MSA9IG5ldyBRUmlucHV0SXRlbSgkdGhpcy0+bW9kZSwgJHdvcmRzLCAkdGhpcy0+ZGF0YSk7DQogICAgICAgICAgICAgICAgICAgICRzdDIgPSBuZXcgUVJpbnB1dEl0ZW0oJHRoaXMtPm1vZGUsICR0aGlzLT5zaXplIC0gJHdvcmRzLCBhcnJheV9zbGljZSgkdGhpcy0+ZGF0YSwgJHdvcmRzKSk7DQoNCiAgICAgICAgICAgICAgICAgICAgJHN0MS0+ZW5jb2RlQml0U3RyZWFtKCR2ZXJzaW9uKTsNCiAgICAgICAgICAgICAgICAgICAgJHN0Mi0+ZW5jb2RlQml0U3RyZWFtKCR2ZXJzaW9uKTsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5ic3RyZWFtID0gbmV3IFFSYml0c3RyZWFtKCk7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5ic3RyZWFtLT5hcHBlbmQoJHN0MS0+YnN0cmVhbSk7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5ic3RyZWFtLT5hcHBlbmQoJHN0Mi0+YnN0cmVhbSk7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICB1bnNldCgkc3QxKTsNCiAgICAgICAgICAgICAgICAgICAgdW5zZXQoJHN0Mik7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAkcmV0ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+bW9kZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBRUl9NT0RFX05VTTogICAgICAgICRyZXQgPSAkdGhpcy0+ZW5jb2RlTW9kZU51bSgkdmVyc2lvbik7ICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBRUl9NT0RFX0FOOiAgICAgICAgJHJldCA9ICR0aGlzLT5lbmNvZGVNb2RlQW4oJHZlcnNpb24pOyAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV84OiAgICAgICAgICAgICRyZXQgPSAkdGhpcy0+ZW5jb2RlTW9kZTgoJHZlcnNpb24pOyAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV9LQU5KSTogICAgICAgICRyZXQgPSAkdGhpcy0+ZW5jb2RlTW9kZUthbmppKCR2ZXJzaW9uKTticmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV9TVFJVQ1RVUkU6ICAgICRyZXQgPSAkdGhpcy0+ZW5jb2RlTW9kZVN0cnVjdHVyZSgpOyAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgaWYoJHJldCA8IDApDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5ic3RyZWFtLT5zaXplKCk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH07DQogICAgDQogICAgLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQogICAgY2xhc3MgUVJpbnB1dCB7DQoNCiAgICAgICAgcHVibGljICRpdGVtczsNCiAgICAgICAgDQogICAgICAgIHByaXZhdGUgJHZlcnNpb247DQogICAgICAgIHByaXZhdGUgJGxldmVsOw0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmVyc2lvbiA9IDAsICRsZXZlbCA9IFFSX0VDTEVWRUxfTCkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKCR2ZXJzaW9uIDwgMCB8fCAkdmVyc2lvbiA+IFFSU1BFQ19WRVJTSU9OX01BWCB8fCAkbGV2ZWwgPiBRUl9FQ0xFVkVMX0gpIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHZlcnNpb24gbm8nKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHRoaXMtPnZlcnNpb24gPSAkdmVyc2lvbjsNCiAgICAgICAgICAgICR0aGlzLT5sZXZlbCA9ICRsZXZlbDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWZXJzaW9uKCkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuICR0aGlzLT52ZXJzaW9uOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHNldFZlcnNpb24oJHZlcnNpb24pDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmKCR2ZXJzaW9uIDwgMCB8fCAkdmVyc2lvbiA+IFFSU1BFQ19WRVJTSU9OX01BWCkgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgdmVyc2lvbiBubycpOw0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHRoaXMtPnZlcnNpb24gPSAkdmVyc2lvbjsNCg0KICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JDb3JyZWN0aW9uTGV2ZWwoKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmxldmVsOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRFcnJvckNvcnJlY3Rpb25MZXZlbCgkbGV2ZWwpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmKCRsZXZlbCA+IFFSX0VDTEVWRUxfSCkgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgRUNMRVZFTCcpOw0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHRoaXMtPmxldmVsID0gJGxldmVsOw0KDQogICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmRFbnRyeShRUmlucHV0SXRlbSAkZW50cnkpDQogICAgICAgIHsNCiAgICAgICAgICAgICR0aGlzLT5pdGVtc1tdID0gJGVudHJ5Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZCgkbW9kZSwgJHNpemUsICRkYXRhKQ0KICAgICAgICB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICRlbnRyeSA9IG5ldyBRUmlucHV0SXRlbSgkbW9kZSwgJHNpemUsICRkYXRhKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+aXRlbXNbXSA9ICRlbnRyeTsNCiAgICAgICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIA0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaW5zZXJ0U3RydWN0dXJlZEFwcGVuZEhlYWRlcigkc2l6ZSwgJGluZGV4LCAkcGFyaXR5KQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiggJHNpemUgPiBNQVhfU1RSVUNUVVJFRF9TWU1CT0xTICkgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ2luc2VydFN0cnVjdHVyZWRBcHBlbmRIZWFkZXIgd3Jvbmcgc2l6ZScpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZiggJGluZGV4IDw9IDAgfHwgJGluZGV4ID4gTUFYX1NUUlVDVFVSRURfU1lNQk9MUyApIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdpbnNlcnRTdHJ1Y3R1cmVkQXBwZW5kSGVhZGVyIHdyb25nIGluZGV4Jyk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRidWYgPSBhcnJheSgkc2l6ZSwgJGluZGV4LCAkcGFyaXR5KTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAkZW50cnkgPSBuZXcgUVJpbnB1dEl0ZW0oUVJfTU9ERV9TVFJVQ1RVUkUsIDMsIGJ1Zik7DQogICAgICAgICAgICAgICAgYXJyYXlfdW5zaGlmdCgkdGhpcy0+aXRlbXMsICRlbnRyeSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGNhbGNQYXJpdHkoKQ0KICAgICAgICB7DQogICAgICAgICAgICAkcGFyaXR5ID0gMDsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yZWFjaCgkdGhpcy0+aXRlbXMgYXMgJGl0ZW0pIHsNCiAgICAgICAgICAgICAgICBpZigkaXRlbS0+bW9kZSAhPSBRUl9NT0RFX1NUUlVDVFVSRSkgew0KICAgICAgICAgICAgICAgICAgICBmb3IoJGk9JGl0ZW0tPnNpemUtMTsgJGk+PTA7ICRpLS0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJpdHkgXj0gJGl0ZW0tPmRhdGFbJGldOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gJHBhcml0eTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tNb2RlTnVtKCRzaXplLCAkZGF0YSkNCiAgICAgICAgew0KICAgICAgICAgICAgZm9yKCRpPTA7ICRpPCRzaXplOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgaWYoKG9yZCgkZGF0YVskaV0pIDwgb3JkKCcwJykpIHx8IChvcmQoJGRhdGFbJGldKSA+IG9yZCgnOScpKSl7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXN0aW1hdGVCaXRzTW9kZU51bSgkc2l6ZSkNCiAgICAgICAgew0KICAgICAgICAgICAgJHcgPSAoaW50KSRzaXplIC8gMzsNCiAgICAgICAgICAgICRiaXRzID0gJHcgKiAxMDsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgc3dpdGNoKCRzaXplIC0gJHcgKiAzKSB7DQogICAgICAgICAgICAgICAgY2FzZSAxOg0KICAgICAgICAgICAgICAgICAgICAkYml0cyArPSA0Ow0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDI6DQogICAgICAgICAgICAgICAgICAgICRiaXRzICs9IDc7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gJGJpdHM7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljICRhblRhYmxlID0gYXJyYXkoDQogICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwNCiAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLA0KICAgICAgICAgICAgMzYsIC0xLCAtMSwgLTEsIDM3LCAzOCwgLTEsIC0xLCAtMSwgLTEsIDM5LCA0MCwgLTEsIDQxLCA0MiwgNDMsDQogICAgICAgICAgICAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgNDQsIC0xLCAtMSwgLTEsIC0xLCAtMSwNCiAgICAgICAgICAgIC0xLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LA0KICAgICAgICAgICAgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAtMSwgLTEsIC0xLCAtMSwgLTEsDQogICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwNCiAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xDQogICAgICAgICk7DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb29rQW5UYWJsZSgkYykNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuICgoJGMgPiAxMjcpPy0xOnNlbGY6OiRhblRhYmxlWyRjXSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrTW9kZUFuKCRzaXplLCAkZGF0YSkNCiAgICAgICAgew0KICAgICAgICAgICAgZm9yKCRpPTA7ICRpPCRzaXplOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgaWYgKHNlbGY6Omxvb2tBblRhYmxlKG9yZCgkZGF0YVskaV0pKSA9PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXN0aW1hdGVCaXRzTW9kZUFuKCRzaXplKQ0KICAgICAgICB7DQogICAgICAgICAgICAkdyA9IChpbnQpKCRzaXplIC8gMik7DQogICAgICAgICAgICAkYml0cyA9ICR3ICogMTE7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmKCRzaXplICYgMSkgew0KICAgICAgICAgICAgICAgICRiaXRzICs9IDY7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAkYml0czsNCiAgICAgICAgfQ0KICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlc3RpbWF0ZUJpdHNNb2RlOCgkc2l6ZSkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuICRzaXplICogODsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlc3RpbWF0ZUJpdHNNb2RlS2FuamkoJHNpemUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldHVybiAoaW50KSgoJHNpemUgLyAyKSAqIDEzKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tNb2RlS2FuamkoJHNpemUsICRkYXRhKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZigkc2l6ZSAmIDEpDQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KDQogICAgICAgICAgICBmb3IoJGk9MDsgJGk8JHNpemU7ICRpKz0yKSB7DQogICAgICAgICAgICAgICAgJHZhbCA9IChvcmQoJGRhdGFbJGldKSA8PCA4KSB8IG9yZCgkZGF0YVskaSsxXSk7DQogICAgICAgICAgICAgICAgaWYoICR2YWwgPCAweDgxNDAgDQogICAgICAgICAgICAgICAgfHwgKCR2YWwgPiAweDlmZmMgJiYgJHZhbCA8IDB4ZTA0MCkgDQogICAgICAgICAgICAgICAgfHwgJHZhbCA+IDB4ZWJiZikgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICAgKiBWYWxpZGF0aW9uDQogICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2soJG1vZGUsICRzaXplLCAkZGF0YSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYoJHNpemUgPD0gMCkgDQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KDQogICAgICAgICAgICBzd2l0Y2goJG1vZGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlIFFSX01PREVfTlVNOiAgICAgICByZXR1cm4gc2VsZjo6Y2hlY2tNb2RlTnVtKCRzaXplLCAkZGF0YSk7ICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBRUl9NT0RFX0FOOiAgICAgICAgcmV0dXJuIHNlbGY6OmNoZWNrTW9kZUFuKCRzaXplLCAkZGF0YSk7ICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV9LQU5KSTogICAgIHJldHVybiBzZWxmOjpjaGVja01vZGVLYW5qaSgkc2l6ZSwgJGRhdGEpOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIFFSX01PREVfODogICAgICAgICByZXR1cm4gdHJ1ZTsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBRUl9NT0RFX1NUUlVDVFVSRTogcmV0dXJuIHRydWU7IGJyZWFrOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGVzdGltYXRlQml0U3RyZWFtU2l6ZSgkdmVyc2lvbikNCiAgICAgICAgew0KICAgICAgICAgICAgJGJpdHMgPSAwOw0KDQogICAgICAgICAgICBmb3JlYWNoKCR0aGlzLT5pdGVtcyBhcyAkaXRlbSkgew0KICAgICAgICAgICAgICAgICRiaXRzICs9ICRpdGVtLT5lc3RpbWF0ZUJpdFN0cmVhbVNpemVPZkVudHJ5KCR2ZXJzaW9uKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcmV0dXJuICRiaXRzOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGVzdGltYXRlVmVyc2lvbigpDQogICAgICAgIHsNCiAgICAgICAgICAgICR2ZXJzaW9uID0gMDsNCiAgICAgICAgICAgICRwcmV2ID0gMDsNCiAgICAgICAgICAgIGRvIHsNCiAgICAgICAgICAgICAgICAkcHJldiA9ICR2ZXJzaW9uOw0KICAgICAgICAgICAgICAgICRiaXRzID0gJHRoaXMtPmVzdGltYXRlQml0U3RyZWFtU2l6ZSgkcHJldik7DQogICAgICAgICAgICAgICAgJHZlcnNpb24gPSBRUnNwZWM6OmdldE1pbmltdW1WZXJzaW9uKChpbnQpKCgkYml0cyArIDcpIC8gOCksICR0aGlzLT5sZXZlbCk7DQogICAgICAgICAgICAgICAgaWYgKCR2ZXJzaW9uIDwgMCkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSB3aGlsZSAoJHZlcnNpb24gPiAkcHJldik7DQoNCiAgICAgICAgICAgIHJldHVybiAkdmVyc2lvbjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbGVuZ3RoT2ZDb2RlKCRtb2RlLCAkdmVyc2lvbiwgJGJpdHMpDQogICAgICAgIHsNCiAgICAgICAgICAgICRwYXlsb2FkID0gJGJpdHMgLSA0IC0gUVJzcGVjOjpsZW5ndGhJbmRpY2F0b3IoJG1vZGUsICR2ZXJzaW9uKTsNCiAgICAgICAgICAgIHN3aXRjaCgkbW9kZSkgew0KICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV9OVU06DQogICAgICAgICAgICAgICAgICAgICRjaHVua3MgPSAoaW50KSgkcGF5bG9hZCAvIDEwKTsNCiAgICAgICAgICAgICAgICAgICAgJHJlbWFpbiA9ICRwYXlsb2FkIC0gJGNodW5rcyAqIDEwOw0KICAgICAgICAgICAgICAgICAgICAkc2l6ZSA9ICRjaHVua3MgKiAzOw0KICAgICAgICAgICAgICAgICAgICBpZigkcmVtYWluID49IDcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRzaXplICs9IDI7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZigkcmVtYWluID49IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRzaXplICs9IDE7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBRUl9NT0RFX0FOOg0KICAgICAgICAgICAgICAgICAgICAkY2h1bmtzID0gKGludCkoJHBheWxvYWQgLyAxMSk7DQogICAgICAgICAgICAgICAgICAgICRyZW1haW4gPSAkcGF5bG9hZCAtICRjaHVua3MgKiAxMTsNCiAgICAgICAgICAgICAgICAgICAgJHNpemUgPSAkY2h1bmtzICogMjsNCiAgICAgICAgICAgICAgICAgICAgaWYoJHJlbWFpbiA+PSA2KSANCiAgICAgICAgICAgICAgICAgICAgICAgICRzaXplKys7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV84Og0KICAgICAgICAgICAgICAgICAgICAkc2l6ZSA9IChpbnQpKCRwYXlsb2FkIC8gOCk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV9LQU5KSToNCiAgICAgICAgICAgICAgICAgICAgJHNpemUgPSAoaW50KSgoJHBheWxvYWQgLyAxMykgKiAyKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBRUl9NT0RFX1NUUlVDVFVSRToNCiAgICAgICAgICAgICAgICAgICAgJHNpemUgPSAoaW50KSgkcGF5bG9hZCAvIDgpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAkc2l6ZSA9IDA7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAkbWF4c2l6ZSA9IFFSc3BlYzo6bWF4aW11bVdvcmRzKCRtb2RlLCAkdmVyc2lvbik7DQogICAgICAgICAgICBpZigkc2l6ZSA8IDApICRzaXplID0gMDsNCiAgICAgICAgICAgIGlmKCRzaXplID4gJG1heHNpemUpICRzaXplID0gJG1heHNpemU7DQoNCiAgICAgICAgICAgIHJldHVybiAkc2l6ZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVCaXRTdHJlYW0oKQ0KICAgICAgICB7DQogICAgICAgICAgICAkdG90YWwgPSAwOw0KDQogICAgICAgICAgICBmb3JlYWNoKCR0aGlzLT5pdGVtcyBhcyAkaXRlbSkgew0KICAgICAgICAgICAgICAgICRiaXRzID0gJGl0ZW0tPmVuY29kZUJpdFN0cmVhbSgkdGhpcy0+dmVyc2lvbik7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYoJGJpdHMgPCAwKSANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkdG90YWwgKz0gJGJpdHM7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAkdG90YWw7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gY29udmVydERhdGEoKQ0KICAgICAgICB7DQogICAgICAgICAgICAkdmVyID0gJHRoaXMtPmVzdGltYXRlVmVyc2lvbigpOw0KICAgICAgICAgICAgaWYoJHZlciA+ICR0aGlzLT5nZXRWZXJzaW9uKCkpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkdmVyKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgZm9yKDs7KSB7DQogICAgICAgICAgICAgICAgJGJpdHMgPSAkdGhpcy0+Y3JlYXRlQml0U3RyZWFtKCk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYoJGJpdHMgPCAwKSANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkdmVyID0gUVJzcGVjOjpnZXRNaW5pbXVtVmVyc2lvbigoaW50KSgoJGJpdHMgKyA3KSAvIDgpLCAkdGhpcy0+bGV2ZWwpOw0KICAgICAgICAgICAgICAgIGlmKCR2ZXIgPCAwKSB7DQogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1dST05HIFZFUlNJT04nKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZigkdmVyID4gJHRoaXMtPmdldFZlcnNpb24oKSkgew0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkdmVyKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZFBhZGRpbmdCaXQoJiRic3RyZWFtKQ0KICAgICAgICB7DQogICAgICAgICAgICAkYml0cyA9ICRic3RyZWFtLT5zaXplKCk7DQogICAgICAgICAgICAkbWF4d29yZHMgPSBRUnNwZWM6OmdldERhdGFMZW5ndGgoJHRoaXMtPnZlcnNpb24sICR0aGlzLT5sZXZlbCk7DQogICAgICAgICAgICAkbWF4Yml0cyA9ICRtYXh3b3JkcyAqIDg7DQoNCiAgICAgICAgICAgIGlmICgkbWF4Yml0cyA9PSAkYml0cykgew0KICAgICAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoJG1heGJpdHMgLSAkYml0cyA8IDUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gJGJzdHJlYW0tPmFwcGVuZE51bSgkbWF4Yml0cyAtICRiaXRzLCAwKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGJpdHMgKz0gNDsNCiAgICAgICAgICAgICR3b3JkcyA9IChpbnQpKCgkYml0cyArIDcpIC8gOCk7DQoNCiAgICAgICAgICAgICRwYWRkaW5nID0gbmV3IFFSYml0c3RyZWFtKCk7DQogICAgICAgICAgICAkcmV0ID0gJHBhZGRpbmctPmFwcGVuZE51bSgkd29yZHMgKiA4IC0gJGJpdHMgKyA0LCAwKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoJHJldCA8IDApIA0KICAgICAgICAgICAgICAgIHJldHVybiAkcmV0Ow0KDQogICAgICAgICAgICAkcGFkbGVuID0gJG1heHdvcmRzIC0gJHdvcmRzOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZigkcGFkbGVuID4gMCkgew0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICRwYWRidWYgPSBhcnJheSgpOw0KICAgICAgICAgICAgICAgIGZvcigkaT0wOyAkaTwkcGFkbGVuOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICRwYWRidWZbJGldID0gKCRpJjEpPzB4MTE6MHhlYzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJHJldCA9ICRwYWRkaW5nLT5hcHBlbmRCeXRlcygkcGFkbGVuLCAkcGFkYnVmKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZigkcmV0IDwgMCkNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRyZXQ7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRyZXQgPSAkYnN0cmVhbS0+YXBwZW5kKCRwYWRkaW5nKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgcmV0dXJuICRyZXQ7DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIG1lcmdlQml0U3RyZWFtKCkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYoJHRoaXMtPmNvbnZlcnREYXRhKCkgPCAwKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRic3RyZWFtID0gbmV3IFFSYml0c3RyZWFtKCk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGZvcmVhY2goJHRoaXMtPml0ZW1zIGFzICRpdGVtKSB7DQogICAgICAgICAgICAgICAgJHJldCA9ICRic3RyZWFtLT5hcHBlbmQoJGl0ZW0tPmJzdHJlYW0pOw0KICAgICAgICAgICAgICAgIGlmKCRyZXQgPCAwKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcmV0dXJuICRic3RyZWFtOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCaXRTdHJlYW0oKQ0KICAgICAgICB7DQoNCiAgICAgICAgICAgICRic3RyZWFtID0gJHRoaXMtPm1lcmdlQml0U3RyZWFtKCk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmKCRic3RyZWFtID09IG51bGwpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHJldCA9ICR0aGlzLT5hcHBlbmRQYWRkaW5nQml0KCRic3RyZWFtKTsNCiAgICAgICAgICAgIGlmKCRyZXQgPCAwKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAkYnN0cmVhbTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCeXRlU3RyZWFtKCkNCiAgICAgICAgew0KICAgICAgICAgICAgJGJzdHJlYW0gPSAkdGhpcy0+Z2V0Qml0U3RyZWFtKCk7DQogICAgICAgICAgICBpZigkYnN0cmVhbSA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIHJldHVybiAkYnN0cmVhbS0+dG9CeXRlKCk7DQogICAgICAgIH0NCiAgICB9DQogICAgICAgIA0KICAgICAgICANCiAgICA=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/qrlib.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qDQogKiBQSFAgUVIgQ29kZSBlbmNvZGVyDQogKg0KICogUm9vdCBsaWJyYXJ5IGZpbGUsIHByZXBhcmVzIGVudmlyb25tZW50IGFuZCBpbmNsdWRlcyBkZXBlbmRlbmNpZXMNCiAqDQogKiBCYXNlZCBvbiBsaWJxcmVuY29kZSBDIGxpYnJhcnkgZGlzdHJpYnV0ZWQgdW5kZXIgTEdQTCAyLjENCiAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBLZW50YXJvIEZ1a3VjaGkgPGZ1a3VjaGlAbWVnYXVpLm5ldD4NCiAqDQogKiBQSFAgUVIgQ29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBMR1BMIDMNCiAqIENvcHlyaWdodCAoQykgMjAxMCBEb21pbmlrIER6aWVuaWEgPGRlbHRhbGFiIGF0IHBvY3p0YSBkb3QgZm0+DQogKg0KICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQogKiB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIGFueSBsYXRlciB2ZXJzaW9uLg0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUNCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQogKg0KICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBDQogKi8NCgkNCgkkUVJfQkFTRURJUiA9IGRpcm5hbWUoX19GSUxFX18pLkRJUkVDVE9SWV9TRVBBUkFUT1I7DQoJDQoJLy8gUmVxdWlyZWQgbGlicw0KCQ0KCWluY2x1ZGUgJFFSX0JBU0VESVIuInFyY29uc3QucGhwIjsNCglpbmNsdWRlICRRUl9CQVNFRElSLiJxcmNvbmZpZy5waHAiOw0KCWluY2x1ZGUgJFFSX0JBU0VESVIuInFydG9vbHMucGhwIjsNCglpbmNsdWRlICRRUl9CQVNFRElSLiJxcnNwZWMucGhwIjsNCglpbmNsdWRlICRRUl9CQVNFRElSLiJxcmltYWdlLnBocCI7DQoJaW5jbHVkZSAkUVJfQkFTRURJUi4icXJpbnB1dC5waHAiOw0KCWluY2x1ZGUgJFFSX0JBU0VESVIuInFyYml0c3RyZWFtLnBocCI7DQoJaW5jbHVkZSAkUVJfQkFTRURJUi4icXJzcGxpdC5waHAiOw0KCWluY2x1ZGUgJFFSX0JBU0VESVIuInFycnNjb2RlLnBocCI7DQoJaW5jbHVkZSAkUVJfQkFTRURJUi4icXJtYXNrLnBocCI7DQoJaW5jbHVkZSAkUVJfQkFTRURJUi4icXJlbmNvZGUucGhwIjsNCg0K]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/qrmask.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qDQogKiBQSFAgUVIgQ29kZSBlbmNvZGVyDQogKg0KICogTWFza2luZw0KICoNCiAqIEJhc2VkIG9uIGxpYnFyZW5jb2RlIEMgbGlicmFyeSBkaXN0cmlidXRlZCB1bmRlciBMR1BMIDIuMQ0KICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEtlbnRhcm8gRnVrdWNoaSA8ZnVrdWNoaUBtZWdhdWkubmV0Pg0KICoNCiAqIFBIUCBRUiBDb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIExHUEwgMw0KICogQ29weXJpZ2h0IChDKSAyMDEwIERvbWluaWsgRHppZW5pYSA8ZGVsdGFsYWIgYXQgcG9jenRhIGRvdCBmbT4NCiAqDQogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCiAqIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgYW55IGxhdGVyIHZlcnNpb24uDQogKg0KICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQ0KICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiAqDQogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0ENCiAqLw0KIA0KCWRlZmluZSgnTjEnLCAzKTsNCglkZWZpbmUoJ04yJywgMyk7DQoJZGVmaW5lKCdOMycsIDQwKTsNCglkZWZpbmUoJ040JywgMTApOw0KDQoJY2xhc3MgUVJtYXNrIHsNCgkNCgkJcHVibGljICRydW5MZW5ndGggPSBhcnJheSgpOw0KCQkNCgkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoJCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIA0KICAgICAgICB7DQogICAgICAgICAgICAkdGhpcy0+cnVuTGVuZ3RoID0gYXJyYXlfZmlsbCgwLCBRUlNQRUNfV0lEVEhfTUFYICsgMSwgMCk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGVGb3JtYXRJbmZvcm1hdGlvbigkd2lkdGgsICYkZnJhbWUsICRtYXNrLCAkbGV2ZWwpDQogICAgICAgIHsNCiAgICAgICAgICAgICRibGFja3MgPSAwOw0KICAgICAgICAgICAgJGZvcm1hdCA9ICBRUnNwZWM6OmdldEZvcm1hdEluZm8oJG1hc2ssICRsZXZlbCk7DQoNCiAgICAgICAgICAgIGZvcigkaT0wOyAkaTw4OyAkaSsrKSB7DQogICAgICAgICAgICAgICAgaWYoJGZvcm1hdCAmIDEpIHsNCiAgICAgICAgICAgICAgICAgICAgJGJsYWNrcyArPSAyOw0KICAgICAgICAgICAgICAgICAgICAkdiA9IDB4ODU7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJHYgPSAweDg0Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkZnJhbWVbOF1bJHdpZHRoIC0gMSAtICRpXSA9IGNocigkdik7DQogICAgICAgICAgICAgICAgaWYoJGkgPCA2KSB7DQogICAgICAgICAgICAgICAgICAgICRmcmFtZVskaV1bOF0gPSBjaHIoJHYpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRmcmFtZVskaSArIDFdWzhdID0gY2hyKCR2KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGZvcm1hdCA9ICRmb3JtYXQgPj4gMTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yKCRpPTA7ICRpPDc7ICRpKyspIHsNCiAgICAgICAgICAgICAgICBpZigkZm9ybWF0ICYgMSkgew0KICAgICAgICAgICAgICAgICAgICAkYmxhY2tzICs9IDI7DQogICAgICAgICAgICAgICAgICAgICR2ID0gMHg4NTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkdiA9IDB4ODQ7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICRmcmFtZVskd2lkdGggLSA3ICsgJGldWzhdID0gY2hyKCR2KTsNCiAgICAgICAgICAgICAgICBpZigkaSA9PSAwKSB7DQogICAgICAgICAgICAgICAgICAgICRmcmFtZVs4XVs3XSA9IGNocigkdik7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJGZyYW1lWzhdWzYgLSAkaV0gPSBjaHIoJHYpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkZm9ybWF0ID0gJGZvcm1hdCA+PiAxOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gJGJsYWNrczsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBtYXNrMCgkeCwgJHkpIHsgcmV0dXJuICgkeCskeSkmMTsgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIG1hc2sxKCR4LCAkeSkgeyByZXR1cm4gKCR5JjEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gbWFzazIoJHgsICR5KSB7IHJldHVybiAoJHglMyk7ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBtYXNrMygkeCwgJHkpIHsgcmV0dXJuICgkeCskeSklMzsgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIG1hc2s0KCR4LCAkeSkgeyByZXR1cm4gKCgoaW50KSgkeS8yKSkrKChpbnQpKCR4LzMpKSkmMTsgfQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gbWFzazUoJHgsICR5KSB7IHJldHVybiAoKCR4KiR5KSYxKSsoJHgqJHkpJTM7ICAgICAgICAgICB9DQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBtYXNrNigkeCwgJHkpIHsgcmV0dXJuICgoKCR4KiR5KSYxKSsoJHgqJHkpJTMpJjE7ICAgICAgIH0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIG1hc2s3KCR4LCAkeSkgeyByZXR1cm4gKCgoJHgqJHkpJTMpKygoJHgrJHkpJjEpKSYxOyAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHByaXZhdGUgZnVuY3Rpb24gZ2VuZXJhdGVNYXNrTm8oJG1hc2tObywgJHdpZHRoLCAkZnJhbWUpDQogICAgICAgIHsNCiAgICAgICAgICAgICRiaXRNYXNrID0gYXJyYXlfZmlsbCgwLCAkd2lkdGgsIGFycmF5X2ZpbGwoMCwgJHdpZHRoLCAwKSk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGZvcigkeT0wOyAkeTwkd2lkdGg7ICR5KyspIHsNCiAgICAgICAgICAgICAgICBmb3IoJHg9MDsgJHg8JHdpZHRoOyAkeCsrKSB7DQogICAgICAgICAgICAgICAgICAgIGlmKG9yZCgkZnJhbWVbJHldWyR4XSkgJiAweDgwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYml0TWFza1skeV1bJHhdID0gMDsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRtYXNrRnVuYyA9IGNhbGxfdXNlcl9mdW5jKGFycmF5KCR0aGlzLCAnbWFzaycuJG1hc2tObyksICR4LCAkeSk7DQogICAgICAgICAgICAgICAgICAgICAgICAkYml0TWFza1skeV1bJHhdID0gKCRtYXNrRnVuYyA9PSAwKT8xOjA7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICByZXR1cm4gJGJpdE1hc2s7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlcmlhbCgkYml0RnJhbWUpDQogICAgICAgIHsNCiAgICAgICAgICAgICRjb2RlQXJyID0gYXJyYXkoKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yZWFjaCAoJGJpdEZyYW1lIGFzICRsaW5lKQ0KICAgICAgICAgICAgICAgICRjb2RlQXJyW10gPSBqb2luKCcnLCAkbGluZSk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICByZXR1cm4gZ3pjb21wcmVzcyhqb2luKCJcbiIsICRjb2RlQXJyKSwgOSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVuc2VyaWFsKCRjb2RlKQ0KICAgICAgICB7DQogICAgICAgICAgICAkY29kZUFyciA9IGFycmF5KCk7DQogICAgICAgICAgICANCiAgICAgICAgICAgICRjb2RlTGluZXMgPSBleHBsb2RlKCJcbiIsIGd6dW5jb21wcmVzcygkY29kZSkpOw0KICAgICAgICAgICAgZm9yZWFjaCAoJGNvZGVMaW5lcyBhcyAkbGluZSkNCiAgICAgICAgICAgICAgICAkY29kZUFycltdID0gc3RyX3NwbGl0KCRsaW5lKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgcmV0dXJuICRjb2RlQXJyOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIG1ha2VNYXNrTm8oJG1hc2tObywgJHdpZHRoLCAkcywgJiRkLCAkbWFza0dlbk9ubHkgPSBmYWxzZSkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRiID0gMDsNCiAgICAgICAgICAgICRiaXRNYXNrID0gYXJyYXkoKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJGZpbGVOYW1lID0gUVJfQ0FDSEVfRElSLidtYXNrXycuJG1hc2tOby5ESVJFQ1RPUllfU0VQQVJBVE9SLidtYXNrXycuJHdpZHRoLidfJy4kbWFza05vLicuZGF0JzsNCg0KICAgICAgICAgICAgaWYgKFFSX0NBQ0hFQUJMRSkgew0KICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZU5hbWUpKSB7DQogICAgICAgICAgICAgICAgICAgICRiaXRNYXNrID0gc2VsZjo6dW5zZXJpYWwoZmlsZV9nZXRfY29udGVudHMoJGZpbGVOYW1lKSk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJGJpdE1hc2sgPSAkdGhpcy0+Z2VuZXJhdGVNYXNrTm8oJG1hc2tObywgJHdpZHRoLCAkcywgJGQpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKFFSX0NBQ0hFX0RJUi4nbWFza18nLiRtYXNrTm8pKQ0KICAgICAgICAgICAgICAgICAgICAgICAgbWtkaXIoUVJfQ0FDSEVfRElSLidtYXNrXycuJG1hc2tObyk7DQogICAgICAgICAgICAgICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlTmFtZSwgc2VsZjo6c2VyaWFsKCRiaXRNYXNrKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkYml0TWFzayA9ICR0aGlzLT5nZW5lcmF0ZU1hc2tObygkbWFza05vLCAkd2lkdGgsICRzLCAkZCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICgkbWFza0dlbk9ubHkpDQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgJGQgPSAkczsNCg0KICAgICAgICAgICAgZm9yKCR5PTA7ICR5PCR3aWR0aDsgJHkrKykgew0KICAgICAgICAgICAgICAgIGZvcigkeD0wOyAkeDwkd2lkdGg7ICR4KyspIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoJGJpdE1hc2tbJHldWyR4XSA9PSAxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZFskeV1bJHhdID0gY2hyKG9yZCgkc1skeV1bJHhdKSBeIChpbnQpJGJpdE1hc2tbJHldWyR4XSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJGIgKz0gKGludCkob3JkKCRkWyR5XVskeF0pICYgMSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gJGI7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gbWFrZU1hc2soJHdpZHRoLCAkZnJhbWUsICRtYXNrTm8sICRsZXZlbCkNCiAgICAgICAgew0KICAgICAgICAgICAgJG1hc2tlZCA9IGFycmF5X2ZpbGwoMCwgJHdpZHRoLCBzdHJfcmVwZWF0KCJcMCIsICR3aWR0aCkpOw0KICAgICAgICAgICAgJHRoaXMtPm1ha2VNYXNrTm8oJG1hc2tObywgJHdpZHRoLCAkZnJhbWUsICRtYXNrZWQpOw0KICAgICAgICAgICAgJHRoaXMtPndyaXRlRm9ybWF0SW5mb3JtYXRpb24oJHdpZHRoLCAkbWFza2VkLCAkbWFza05vLCAkbGV2ZWwpOw0KICAgICAgIA0KICAgICAgICAgICAgcmV0dXJuICRtYXNrZWQ7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gY2FsY04xTjMoJGxlbmd0aCkNCiAgICAgICAgew0KICAgICAgICAgICAgJGRlbWVyaXQgPSAwOw0KDQogICAgICAgICAgICBmb3IoJGk9MDsgJGk8JGxlbmd0aDsgJGkrKykgew0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmKCR0aGlzLT5ydW5MZW5ndGhbJGldID49IDUpIHsNCiAgICAgICAgICAgICAgICAgICAgJGRlbWVyaXQgKz0gKE4xICsgKCR0aGlzLT5ydW5MZW5ndGhbJGldIC0gNSkpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZigkaSAmIDEpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoKCRpID49IDMpICYmICgkaSA8ICgkbGVuZ3RoLTIpKSAmJiAoJHRoaXMtPnJ1bkxlbmd0aFskaV0gJSAzID09IDApKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZmFjdCA9IChpbnQpKCR0aGlzLT5ydW5MZW5ndGhbJGldIC8gMyk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZigoJHRoaXMtPnJ1bkxlbmd0aFskaS0yXSA9PSAkZmFjdCkgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgkdGhpcy0+cnVuTGVuZ3RoWyRpLTFdID09ICRmYWN0KSAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKCR0aGlzLT5ydW5MZW5ndGhbJGkrMV0gPT0gJGZhY3QpICYmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAoJHRoaXMtPnJ1bkxlbmd0aFskaSsyXSA9PSAkZmFjdCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigoJHRoaXMtPnJ1bkxlbmd0aFskaS0zXSA8IDApIHx8ICgkdGhpcy0+cnVuTGVuZ3RoWyRpLTNdID49ICg0ICogJGZhY3QpKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGVtZXJpdCArPSBOMzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYoKCgkaSszKSA+PSAkbGVuZ3RoKSB8fCAoJHRoaXMtPnJ1bkxlbmd0aFskaSszXSA+PSAoNCAqICRmYWN0KSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRlbWVyaXQgKz0gTjM7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuICRkZW1lcml0Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGV2YWx1YXRlU3ltYm9sKCR3aWR0aCwgJGZyYW1lKQ0KICAgICAgICB7DQogICAgICAgICAgICAkaGVhZCA9IDA7DQogICAgICAgICAgICAkZGVtZXJpdCA9IDA7DQoNCiAgICAgICAgICAgIGZvcigkeT0wOyAkeTwkd2lkdGg7ICR5KyspIHsNCiAgICAgICAgICAgICAgICAkaGVhZCA9IDA7DQogICAgICAgICAgICAgICAgJHRoaXMtPnJ1bkxlbmd0aFswXSA9IDE7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGZyYW1lWSA9ICRmcmFtZVskeV07DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKCR5PjApDQogICAgICAgICAgICAgICAgICAgICRmcmFtZVlNID0gJGZyYW1lWyR5LTFdOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGZvcigkeD0wOyAkeDwkd2lkdGg7ICR4KyspIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoKCR4ID4gMCkgJiYgKCR5ID4gMCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRiMjIgPSBvcmQoJGZyYW1lWVskeF0pICYgb3JkKCRmcmFtZVlbJHgtMV0pICYgb3JkKCRmcmFtZVlNWyR4XSkgJiBvcmQoJGZyYW1lWU1bJHgtMV0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHcyMiA9IG9yZCgkZnJhbWVZWyR4XSkgfCBvcmQoJGZyYW1lWVskeC0xXSkgfCBvcmQoJGZyYW1lWU1bJHhdKSB8IG9yZCgkZnJhbWVZTVskeC0xXSk7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCgkYjIyIHwgKCR3MjIgXiAxKSkmMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkZW1lcml0ICs9IE4yOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmKCgkeCA9PSAwKSAmJiAob3JkKCRmcmFtZVlbJHhdKSAmIDEpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cnVuTGVuZ3RoWzBdID0gLTE7DQogICAgICAgICAgICAgICAgICAgICAgICAkaGVhZCA9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cnVuTGVuZ3RoWyRoZWFkXSA9IDE7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZigkeCA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKChvcmQoJGZyYW1lWVskeF0pIF4gb3JkKCRmcmFtZVlbJHgtMV0pKSAmIDEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGVhZCsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5ydW5MZW5ndGhbJGhlYWRdID0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJ1bkxlbmd0aFskaGVhZF0rKzsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICANCiAgICAgICAgICAgICAgICAkZGVtZXJpdCArPSAkdGhpcy0+Y2FsY04xTjMoJGhlYWQrMSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGZvcigkeD0wOyAkeDwkd2lkdGg7ICR4KyspIHsNCiAgICAgICAgICAgICAgICAkaGVhZCA9IDA7DQogICAgICAgICAgICAgICAgJHRoaXMtPnJ1bkxlbmd0aFswXSA9IDE7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgZm9yKCR5PTA7ICR5PCR3aWR0aDsgJHkrKykgew0KICAgICAgICAgICAgICAgICAgICBpZigkeSA9PSAwICYmIChvcmQoJGZyYW1lWyR5XVskeF0pICYgMSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5ydW5MZW5ndGhbMF0gPSAtMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRoZWFkID0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5ydW5MZW5ndGhbJGhlYWRdID0gMTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKCR5ID4gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoKG9yZCgkZnJhbWVbJHldWyR4XSkgXiBvcmQoJGZyYW1lWyR5LTFdWyR4XSkpICYgMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoZWFkKys7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJ1bkxlbmd0aFskaGVhZF0gPSAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cnVuTGVuZ3RoWyRoZWFkXSsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGRlbWVyaXQgKz0gJHRoaXMtPmNhbGNOMU4zKCRoZWFkKzEpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gJGRlbWVyaXQ7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIG1hc2soJHdpZHRoLCAkZnJhbWUsICRsZXZlbCkNCiAgICAgICAgew0KICAgICAgICAgICAgJG1pbkRlbWVyaXQgPSBQSFBfSU5UX01BWDsNCiAgICAgICAgICAgICRiZXN0TWFza051bSA9IDA7DQogICAgICAgICAgICAkYmVzdE1hc2sgPSBhcnJheSgpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAkY2hlY2tlZF9tYXNrcyA9IGFycmF5KDAsMSwyLDMsNCw1LDYsNyk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmIChRUl9GSU5EX0ZST01fUkFORE9NICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGhvd01hbnVPdXQgPSA4LShRUl9GSU5EX0ZST01fUkFORE9NICUgOSk7DQogICAgICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgICRob3dNYW51T3V0OyAkaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICRyZW1Qb3MgPSByYW5kICgwLCBjb3VudCgkY2hlY2tlZF9tYXNrcyktMSk7DQogICAgICAgICAgICAgICAgICAgIHVuc2V0KCRjaGVja2VkX21hc2tzWyRyZW1Qb3NdKTsNCiAgICAgICAgICAgICAgICAgICAgJGNoZWNrZWRfbWFza3MgPSBhcnJheV92YWx1ZXMoJGNoZWNrZWRfbWFza3MpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAkYmVzdE1hc2sgPSAkZnJhbWU7DQogICAgICAgICAgICAgDQogICAgICAgICAgICBmb3JlYWNoKCRjaGVja2VkX21hc2tzIGFzICRpKSB7DQogICAgICAgICAgICAgICAgJG1hc2sgPSBhcnJheV9maWxsKDAsICR3aWR0aCwgc3RyX3JlcGVhdCgiXDAiLCAkd2lkdGgpKTsNCg0KICAgICAgICAgICAgICAgICRkZW1lcml0ID0gMDsNCiAgICAgICAgICAgICAgICAkYmxhY2tzID0gMDsNCiAgICAgICAgICAgICAgICAkYmxhY2tzICA9ICR0aGlzLT5tYWtlTWFza05vKCRpLCAkd2lkdGgsICRmcmFtZSwgJG1hc2spOw0KICAgICAgICAgICAgICAgICRibGFja3MgKz0gJHRoaXMtPndyaXRlRm9ybWF0SW5mb3JtYXRpb24oJHdpZHRoLCAkbWFzaywgJGksICRsZXZlbCk7DQogICAgICAgICAgICAgICAgJGJsYWNrcyAgPSAoaW50KSgxMDAgKiAkYmxhY2tzIC8gKCR3aWR0aCAqICR3aWR0aCkpOw0KICAgICAgICAgICAgICAgICRkZW1lcml0ID0gKGludCkoKGludCkoYWJzKCRibGFja3MgLSA1MCkgLyA1KSAqIE40KTsNCiAgICAgICAgICAgICAgICAkZGVtZXJpdCArPSAkdGhpcy0+ZXZhbHVhdGVTeW1ib2woJHdpZHRoLCAkbWFzayk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYoJGRlbWVyaXQgPCAkbWluRGVtZXJpdCkgew0KICAgICAgICAgICAgICAgICAgICAkbWluRGVtZXJpdCA9ICRkZW1lcml0Ow0KICAgICAgICAgICAgICAgICAgICAkYmVzdE1hc2sgPSAkbWFzazsNCiAgICAgICAgICAgICAgICAgICAgJGJlc3RNYXNrTnVtID0gJGk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICByZXR1cm4gJGJlc3RNYXNrOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICB9DQo=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/qrrscode.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qDQogKiBQSFAgUVIgQ29kZSBlbmNvZGVyDQogKg0KICogUmVlZC1Tb2xvbW9uIGVycm9yIGNvcnJlY3Rpb24gc3VwcG9ydA0KICogDQogKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDYgUGhpbCBLYXJuLCBLQTlRDQogKiAobGliZmVjIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuKQ0KICoNCiAqIEJhc2VkIG9uIGxpYnFyZW5jb2RlIEMgbGlicmFyeSBkaXN0cmlidXRlZCB1bmRlciBMR1BMIDIuMQ0KICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEtlbnRhcm8gRnVrdWNoaSA8ZnVrdWNoaUBtZWdhdWkubmV0Pg0KICoNCiAqIFBIUCBRUiBDb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIExHUEwgMw0KICogQ29weXJpZ2h0IChDKSAyMDEwIERvbWluaWsgRHppZW5pYSA8ZGVsdGFsYWIgYXQgcG9jenRhIGRvdCBmbT4NCiAqDQogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCiAqIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgYW55IGxhdGVyIHZlcnNpb24uDQogKg0KICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQ0KICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiAqDQogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0ENCiAqLw0KIA0KICAgIGNsYXNzIFFScnNJdGVtIHsNCiAgICANCiAgICAgICAgcHVibGljICRtbTsgICAgICAgICAgICAgICAgICAvLyBCaXRzIHBlciBzeW1ib2wgDQogICAgICAgIHB1YmxpYyAkbm47ICAgICAgICAgICAgICAgICAgLy8gU3ltYm9scyBwZXIgYmxvY2sgKD0gKDE8PG1tKS0xKSANCiAgICAgICAgcHVibGljICRhbHBoYV90byA9IGFycmF5KCk7ICAvLyBsb2cgbG9va3VwIHRhYmxlIA0KICAgICAgICBwdWJsaWMgJGluZGV4X29mID0gYXJyYXkoKTsgIC8vIEFudGlsb2cgbG9va3VwIHRhYmxlIA0KICAgICAgICBwdWJsaWMgJGdlbnBvbHkgPSBhcnJheSgpOyAgIC8vIEdlbmVyYXRvciBwb2x5bm9taWFsIA0KICAgICAgICBwdWJsaWMgJG5yb290czsgICAgICAgICAgICAgIC8vIE51bWJlciBvZiBnZW5lcmF0b3Igcm9vdHMgPSBudW1iZXIgb2YgcGFyaXR5IHN5bWJvbHMgDQogICAgICAgIHB1YmxpYyAkZmNyOyAgICAgICAgICAgICAgICAgLy8gRmlyc3QgY29uc2VjdXRpdmUgcm9vdCwgaW5kZXggZm9ybSANCiAgICAgICAgcHVibGljICRwcmltOyAgICAgICAgICAgICAgICAvLyBQcmltaXRpdmUgZWxlbWVudCwgaW5kZXggZm9ybSANCiAgICAgICAgcHVibGljICRpcHJpbTsgICAgICAgICAgICAgICAvLyBwcmltLXRoIHJvb3Qgb2YgMSwgaW5kZXggZm9ybSANCiAgICAgICAgcHVibGljICRwYWQ7ICAgICAgICAgICAgICAgICAvLyBQYWRkaW5nIGJ5dGVzIGluIHNob3J0ZW5lZCBibG9jayANCiAgICAgICAgcHVibGljICRnZnBvbHk7DQogICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gbW9kbm4oJHgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHdoaWxlICgkeCA+PSAkdGhpcy0+bm4pIHsNCiAgICAgICAgICAgICAgICAkeCAtPSAkdGhpcy0+bm47DQogICAgICAgICAgICAgICAgJHggPSAoJHggPj4gJHRoaXMtPm1tKSArICgkeCAmICR0aGlzLT5ubik7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIHJldHVybiAkeDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaW5pdF9yc19jaGFyKCRzeW1zaXplLCAkZ2Zwb2x5LCAkZmNyLCAkcHJpbSwgJG5yb290cywgJHBhZCkNCiAgICAgICAgew0KICAgICAgICAgICAgLy8gQ29tbW9uIGNvZGUgZm9yIGludGlhbGl6aW5nIGEgUmVlZC1Tb2xvbW9uIGNvbnRyb2wgYmxvY2sgKGNoYXIgb3IgaW50IHN5bWJvbHMpDQogICAgICAgICAgICAvLyBDb3B5cmlnaHQgMjAwNCBQaGlsIEthcm4sIEtBOVENCiAgICAgICAgICAgIC8vIE1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChMR1BMKQ0KDQogICAgICAgICAgICAkcnMgPSBudWxsOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAvLyBDaGVjayBwYXJhbWV0ZXIgcmFuZ2VzDQogICAgICAgICAgICBpZigkc3ltc2l6ZSA8IDAgfHwgJHN5bXNpemUgPiA4KSAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkcnM7DQogICAgICAgICAgICBpZigkZmNyIDwgMCB8fCAkZmNyID49ICgxPDwkc3ltc2l6ZSkpICAgICAgICAgICAgICAgIHJldHVybiAkcnM7DQogICAgICAgICAgICBpZigkcHJpbSA8PSAwIHx8ICRwcmltID49ICgxPDwkc3ltc2l6ZSkpICAgICAgICAgICAgIHJldHVybiAkcnM7DQogICAgICAgICAgICBpZigkbnJvb3RzIDwgMCB8fCAkbnJvb3RzID49ICgxPDwkc3ltc2l6ZSkpICAgICAgICAgIHJldHVybiAkcnM7IC8vIENhbid0IGhhdmUgbW9yZSByb290cyB0aGFuIHN5bWJvbCB2YWx1ZXMhDQogICAgICAgICAgICBpZigkcGFkIDwgMCB8fCAkcGFkID49ICgoMTw8JHN5bXNpemUpIC0xIC0gJG5yb290cykpIHJldHVybiAkcnM7IC8vIFRvbyBtdWNoIHBhZGRpbmcNCg0KICAgICAgICAgICAgJHJzID0gbmV3IFFScnNJdGVtKCk7DQogICAgICAgICAgICAkcnMtPm1tID0gJHN5bXNpemU7DQogICAgICAgICAgICAkcnMtPm5uID0gKDE8PCRzeW1zaXplKS0xOw0KICAgICAgICAgICAgJHJzLT5wYWQgPSAkcGFkOw0KDQogICAgICAgICAgICAkcnMtPmFscGhhX3RvID0gYXJyYXlfZmlsbCgwLCAkcnMtPm5uKzEsIDApOw0KICAgICAgICAgICAgJHJzLT5pbmRleF9vZiA9IGFycmF5X2ZpbGwoMCwgJHJzLT5ubisxLCAwKTsNCiAgICAgICAgICANCiAgICAgICAgICAgIC8vIFBIUCBzdHlsZSBtYWNybyByZXBsYWNlbWVudCA7KQ0KICAgICAgICAgICAgJE5OID0mICRycy0+bm47DQogICAgICAgICAgICAkQTAgPSYgJE5OOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAvLyBHZW5lcmF0ZSBHYWxvaXMgZmllbGQgbG9va3VwIHRhYmxlcw0KICAgICAgICAgICAgJHJzLT5pbmRleF9vZlswXSA9ICRBMDsgLy8gbG9nKHplcm8pID0gLWluZg0KICAgICAgICAgICAgJHJzLT5hbHBoYV90b1skQTBdID0gMDsgLy8gYWxwaGEqKi1pbmYgPSAwDQogICAgICAgICAgICAkc3IgPSAxOw0KICAgICAgICAgIA0KICAgICAgICAgICAgZm9yKCRpPTA7ICRpPCRycy0+bm47ICRpKyspIHsNCiAgICAgICAgICAgICAgICAkcnMtPmluZGV4X29mWyRzcl0gPSAkaTsNCiAgICAgICAgICAgICAgICAkcnMtPmFscGhhX3RvWyRpXSA9ICRzcjsNCiAgICAgICAgICAgICAgICAkc3IgPDw9IDE7DQogICAgICAgICAgICAgICAgaWYoJHNyICYgKDE8PCRzeW1zaXplKSkgew0KICAgICAgICAgICAgICAgICAgICAkc3IgXj0gJGdmcG9seTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHNyICY9ICRycy0+bm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmKCRzciAhPSAxKXsNCiAgICAgICAgICAgICAgICAvLyBmaWVsZCBnZW5lcmF0b3IgcG9seW5vbWlhbCBpcyBub3QgcHJpbWl0aXZlIQ0KICAgICAgICAgICAgICAgICRycyA9IE5VTEw7DQogICAgICAgICAgICAgICAgcmV0dXJuICRyczsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLyogRm9ybSBSUyBjb2RlIGdlbmVyYXRvciBwb2x5bm9taWFsIGZyb20gaXRzIHJvb3RzICovDQogICAgICAgICAgICAkcnMtPmdlbnBvbHkgPSBhcnJheV9maWxsKDAsICRucm9vdHMrMSwgMCk7DQogICAgICAgIA0KICAgICAgICAgICAgJHJzLT5mY3IgPSAkZmNyOw0KICAgICAgICAgICAgJHJzLT5wcmltID0gJHByaW07DQogICAgICAgICAgICAkcnMtPm5yb290cyA9ICRucm9vdHM7DQogICAgICAgICAgICAkcnMtPmdmcG9seSA9ICRnZnBvbHk7DQoNCiAgICAgICAgICAgIC8qIEZpbmQgcHJpbS10aCByb290IG9mIDEsIHVzZWQgaW4gZGVjb2RpbmcgKi8NCiAgICAgICAgICAgIGZvcigkaXByaW09MTsoJGlwcmltICUgJHByaW0pICE9IDA7JGlwcmltICs9ICRycy0+bm4pDQogICAgICAgICAgICA7IC8vIGludGVudGlvbmFsIGVtcHR5LWJvZHkgbG9vcCENCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHJzLT5pcHJpbSA9IChpbnQpKCRpcHJpbSAvICRwcmltKTsNCiAgICAgICAgICAgICRycy0+Z2VucG9seVswXSA9IDE7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGZvciAoJGkgPSAwLCRyb290PSRmY3IqJHByaW07ICRpIDwgJG5yb290czsgJGkrKywgJHJvb3QgKz0gJHByaW0pIHsNCiAgICAgICAgICAgICAgICAkcnMtPmdlbnBvbHlbJGkrMV0gPSAxOw0KDQogICAgICAgICAgICAgICAgLy8gTXVsdGlwbHkgcnMtPmdlbnBvbHlbXSBieSAgQCoqKHJvb3QgKyB4KQ0KICAgICAgICAgICAgICAgIGZvciAoJGogPSAkaTsgJGogPiAwOyAkai0tKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkcnMtPmdlbnBvbHlbJGpdICE9IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRycy0+Z2VucG9seVskal0gPSAkcnMtPmdlbnBvbHlbJGotMV0gXiAkcnMtPmFscGhhX3RvWyRycy0+bW9kbm4oJHJzLT5pbmRleF9vZlskcnMtPmdlbnBvbHlbJGpdXSArICRyb290KV07DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcnMtPmdlbnBvbHlbJGpdID0gJHJzLT5nZW5wb2x5WyRqLTFdOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vIHJzLT5nZW5wb2x5WzBdIGNhbiBuZXZlciBiZSB6ZXJvDQogICAgICAgICAgICAgICAgJHJzLT5nZW5wb2x5WzBdID0gJHJzLT5hbHBoYV90b1skcnMtPm1vZG5uKCRycy0+aW5kZXhfb2ZbJHJzLT5nZW5wb2x5WzBdXSArICRyb290KV07DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vIGNvbnZlcnQgcnMtPmdlbnBvbHlbXSB0byBpbmRleCBmb3JtIGZvciBxdWlja2VyIGVuY29kaW5nDQogICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPD0gJG5yb290czsgJGkrKykNCiAgICAgICAgICAgICAgICAkcnMtPmdlbnBvbHlbJGldID0gJHJzLT5pbmRleF9vZlskcnMtPmdlbnBvbHlbJGldXTsNCg0KICAgICAgICAgICAgcmV0dXJuICRyczsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGVfcnNfY2hhcigkZGF0YSwgJiRwYXJpdHkpDQogICAgICAgIHsNCiAgICAgICAgICAgICRNTSAgICAgICA9JiAkdGhpcy0+bW07DQogICAgICAgICAgICAkTk4gICAgICAgPSYgJHRoaXMtPm5uOw0KICAgICAgICAgICAgJEFMUEhBX1RPID0mICR0aGlzLT5hbHBoYV90bzsNCiAgICAgICAgICAgICRJTkRFWF9PRiA9JiAkdGhpcy0+aW5kZXhfb2Y7DQogICAgICAgICAgICAkR0VOUE9MWSAgPSYgJHRoaXMtPmdlbnBvbHk7DQogICAgICAgICAgICAkTlJPT1RTICAgPSYgJHRoaXMtPm5yb290czsNCiAgICAgICAgICAgICRGQ1IgICAgICA9JiAkdGhpcy0+ZmNyOw0KICAgICAgICAgICAgJFBSSU0gICAgID0mICR0aGlzLT5wcmltOw0KICAgICAgICAgICAgJElQUklNICAgID0mICR0aGlzLT5pcHJpbTsNCiAgICAgICAgICAgICRQQUQgICAgICA9JiAkdGhpcy0+cGFkOw0KICAgICAgICAgICAgJEEwICAgICAgID0mICROTjsNCg0KICAgICAgICAgICAgJHBhcml0eSA9IGFycmF5X2ZpbGwoMCwgJE5ST09UUywgMCk7DQoNCiAgICAgICAgICAgIGZvcigkaT0wOyAkaTwgKCROTi0kTlJPT1RTLSRQQUQpOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGZlZWRiYWNrID0gJElOREVYX09GWyRkYXRhWyRpXSBeICRwYXJpdHlbMF1dOw0KICAgICAgICAgICAgICAgIGlmKCRmZWVkYmFjayAhPSAkQTApIHsgICAgICANCiAgICAgICAgICAgICAgICAgICAgLy8gZmVlZGJhY2sgdGVybSBpcyBub24temVybw0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbGluZSBpcyB1bm5lY2Vzc2FyeSB3aGVuIEdFTlBPTFlbTlJPT1RTXSBpcyB1bml0eSwgYXMgaXQgbXVzdA0KICAgICAgICAgICAgICAgICAgICAvLyBhbHdheXMgYmUgZm9yIHRoZSBwb2x5bm9taWFscyBjb25zdHJ1Y3RlZCBieSBpbml0X3JzKCkNCiAgICAgICAgICAgICAgICAgICAgJGZlZWRiYWNrID0gJHRoaXMtPm1vZG5uKCROTiAtICRHRU5QT0xZWyROUk9PVFNdICsgJGZlZWRiYWNrKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICBmb3IoJGo9MTskajwkTlJPT1RTOyRqKyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJpdHlbJGpdIF49ICRBTFBIQV9UT1skdGhpcy0+bW9kbm4oJGZlZWRiYWNrICsgJEdFTlBPTFlbJE5ST09UUy0kal0pXTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvLyBTaGlmdCANCiAgICAgICAgICAgICAgICBhcnJheV9zaGlmdCgkcGFyaXR5KTsNCiAgICAgICAgICAgICAgICBpZigkZmVlZGJhY2sgIT0gJEEwKSB7DQogICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJHBhcml0eSwgJEFMUEhBX1RPWyR0aGlzLT5tb2RubigkZmVlZGJhY2sgKyAkR0VOUE9MWVswXSldKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRwYXJpdHksIDApOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgDQogICAgY2xhc3MgUVJycyB7DQogICAgDQogICAgICAgIHB1YmxpYyBzdGF0aWMgJGl0ZW1zID0gYXJyYXkoKTsNCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGluaXRfcnMoJHN5bXNpemUsICRnZnBvbHksICRmY3IsICRwcmltLCAkbnJvb3RzLCAkcGFkKQ0KICAgICAgICB7DQogICAgICAgICAgICBmb3JlYWNoKHNlbGY6OiRpdGVtcyBhcyAkcnMpIHsNCiAgICAgICAgICAgICAgICBpZigkcnMtPnBhZCAhPSAkcGFkKSAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICBpZigkcnMtPm5yb290cyAhPSAkbnJvb3RzKSBjb250aW51ZTsNCiAgICAgICAgICAgICAgICBpZigkcnMtPm1tICE9ICRzeW1zaXplKSAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICBpZigkcnMtPmdmcG9seSAhPSAkZ2Zwb2x5KSBjb250aW51ZTsNCiAgICAgICAgICAgICAgICBpZigkcnMtPmZjciAhPSAkZmNyKSAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICBpZigkcnMtPnByaW0gIT0gJHByaW0pICAgICBjb250aW51ZTsNCg0KICAgICAgICAgICAgICAgIHJldHVybiAkcnM7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRycyA9IFFScnNJdGVtOjppbml0X3JzX2NoYXIoJHN5bXNpemUsICRnZnBvbHksICRmY3IsICRwcmltLCAkbnJvb3RzLCAkcGFkKTsNCiAgICAgICAgICAgIGFycmF5X3Vuc2hpZnQoc2VsZjo6JGl0ZW1zLCAkcnMpOw0KDQogICAgICAgICAgICByZXR1cm4gJHJzOw0KICAgICAgICB9DQogICAgfQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/qrspec.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qDQogKiBQSFAgUVIgQ29kZSBlbmNvZGVyDQogKg0KICogUVIgQ29kZSBzcGVjaWZpY2F0aW9ucw0KICoNCiAqIEJhc2VkIG9uIGxpYnFyZW5jb2RlIEMgbGlicmFyeSBkaXN0cmlidXRlZCB1bmRlciBMR1BMIDIuMQ0KICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEtlbnRhcm8gRnVrdWNoaSA8ZnVrdWNoaUBtZWdhdWkubmV0Pg0KICoNCiAqIFBIUCBRUiBDb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIExHUEwgMw0KICogQ29weXJpZ2h0IChDKSAyMDEwIERvbWluaWsgRHppZW5pYSA8ZGVsdGFsYWIgYXQgcG9jenRhIGRvdCBmbT4NCiAqDQogKiBUaGUgZm9sbG93aW5nIGRhdGEgLyBzcGVjaWZpY2F0aW9ucyBhcmUgdGFrZW4gZnJvbQ0KICogIlR3byBkaW1lbnNpb25hbCBzeW1ib2wgLS0gUVItY29kZSAtLSBCYXNpYyBTcGVjaWZpY2F0aW9uIiAoSklTIFgwNTEwOjIwMDQpDQogKiAgb3INCiAqICJBdXRvbWF0aWMgaWRlbnRpZmljYXRpb24gYW5kIGRhdGEgY2FwdHVyZSB0ZWNobmlxdWVzIC0tIA0KICogIFFSIENvZGUgMjAwNSBiYXIgY29kZSBzeW1ib2xvZ3kgc3BlY2lmaWNhdGlvbiIgKElTTy9JRUMgMTgwMDQ6MjAwNikNCiAqDQogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCiAqIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgYW55IGxhdGVyIHZlcnNpb24uDQogKg0KICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQ0KICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiAqDQogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0ENCiAqLw0KIA0KICAgIGRlZmluZSgnUVJTUEVDX1ZFUlNJT05fTUFYJywgNDApOw0KICAgIGRlZmluZSgnUVJTUEVDX1dJRFRIX01BWCcsICAgMTc3KTsNCg0KICAgIGRlZmluZSgnUVJDQVBfV0lEVEgnLCAgICAgICAgMCk7DQogICAgZGVmaW5lKCdRUkNBUF9XT1JEUycsICAgICAgICAxKTsNCiAgICBkZWZpbmUoJ1FSQ0FQX1JFTUlOREVSJywgICAgIDIpOw0KICAgIGRlZmluZSgnUVJDQVBfRUMnLCAgICAgICAgICAgMyk7DQoNCiAgICBjbGFzcyBRUnNwZWMgew0KICAgIA0KICAgICAgICBwdWJsaWMgc3RhdGljICRjYXBhY2l0eSA9IGFycmF5KA0KICAgICAgICAgICAgYXJyYXkoICAwLCAgICAwLCAwLCBhcnJheSggICAwLCAgICAwLCAgICAwLCAgICAwKSksDQogICAgICAgICAgICBhcnJheSggMjEsICAgMjYsIDAsIGFycmF5KCAgIDcsICAgMTAsICAgMTMsICAgMTcpKSwgLy8gMQ0KICAgICAgICAgICAgYXJyYXkoIDI1LCAgIDQ0LCA3LCBhcnJheSggIDEwLCAgIDE2LCAgIDIyLCAgIDI4KSksDQogICAgICAgICAgICBhcnJheSggMjksICAgNzAsIDcsIGFycmF5KCAgMTUsICAgMjYsICAgMzYsICAgNDQpKSwNCiAgICAgICAgICAgIGFycmF5KCAzMywgIDEwMCwgNywgYXJyYXkoICAyMCwgICAzNiwgICA1MiwgICA2NCkpLA0KICAgICAgICAgICAgYXJyYXkoIDM3LCAgMTM0LCA3LCBhcnJheSggIDI2LCAgIDQ4LCAgIDcyLCAgIDg4KSksIC8vIDUNCiAgICAgICAgICAgIGFycmF5KCA0MSwgIDE3MiwgNywgYXJyYXkoICAzNiwgICA2NCwgICA5NiwgIDExMikpLA0KICAgICAgICAgICAgYXJyYXkoIDQ1LCAgMTk2LCAwLCBhcnJheSggIDQwLCAgIDcyLCAgMTA4LCAgMTMwKSksDQogICAgICAgICAgICBhcnJheSggNDksICAyNDIsIDAsIGFycmF5KCAgNDgsICAgODgsICAxMzIsICAxNTYpKSwNCiAgICAgICAgICAgIGFycmF5KCA1MywgIDI5MiwgMCwgYXJyYXkoICA2MCwgIDExMCwgIDE2MCwgIDE5MikpLA0KICAgICAgICAgICAgYXJyYXkoIDU3LCAgMzQ2LCAwLCBhcnJheSggIDcyLCAgMTMwLCAgMTkyLCAgMjI0KSksIC8vMTANCiAgICAgICAgICAgIGFycmF5KCA2MSwgIDQwNCwgMCwgYXJyYXkoICA4MCwgIDE1MCwgIDIyNCwgIDI2NCkpLA0KICAgICAgICAgICAgYXJyYXkoIDY1LCAgNDY2LCAwLCBhcnJheSggIDk2LCAgMTc2LCAgMjYwLCAgMzA4KSksDQogICAgICAgICAgICBhcnJheSggNjksICA1MzIsIDAsIGFycmF5KCAxMDQsICAxOTgsICAyODgsICAzNTIpKSwNCiAgICAgICAgICAgIGFycmF5KCA3MywgIDU4MSwgMywgYXJyYXkoIDEyMCwgIDIxNiwgIDMyMCwgIDM4NCkpLA0KICAgICAgICAgICAgYXJyYXkoIDc3LCAgNjU1LCAzLCBhcnJheSggMTMyLCAgMjQwLCAgMzYwLCAgNDMyKSksIC8vMTUNCiAgICAgICAgICAgIGFycmF5KCA4MSwgIDczMywgMywgYXJyYXkoIDE0NCwgIDI4MCwgIDQwOCwgIDQ4MCkpLA0KICAgICAgICAgICAgYXJyYXkoIDg1LCAgODE1LCAzLCBhcnJheSggMTY4LCAgMzA4LCAgNDQ4LCAgNTMyKSksDQogICAgICAgICAgICBhcnJheSggODksICA5MDEsIDMsIGFycmF5KCAxODAsICAzMzgsICA1MDQsICA1ODgpKSwNCiAgICAgICAgICAgIGFycmF5KCA5MywgIDk5MSwgMywgYXJyYXkoIDE5NiwgIDM2NCwgIDU0NiwgIDY1MCkpLA0KICAgICAgICAgICAgYXJyYXkoIDk3LCAxMDg1LCAzLCBhcnJheSggMjI0LCAgNDE2LCAgNjAwLCAgNzAwKSksIC8vMjANCiAgICAgICAgICAgIGFycmF5KDEwMSwgMTE1NiwgNCwgYXJyYXkoIDIyNCwgIDQ0MiwgIDY0NCwgIDc1MCkpLA0KICAgICAgICAgICAgYXJyYXkoMTA1LCAxMjU4LCA0LCBhcnJheSggMjUyLCAgNDc2LCAgNjkwLCAgODE2KSksDQogICAgICAgICAgICBhcnJheSgxMDksIDEzNjQsIDQsIGFycmF5KCAyNzAsICA1MDQsICA3NTAsICA5MDApKSwNCiAgICAgICAgICAgIGFycmF5KDExMywgMTQ3NCwgNCwgYXJyYXkoIDMwMCwgIDU2MCwgIDgxMCwgIDk2MCkpLA0KICAgICAgICAgICAgYXJyYXkoMTE3LCAxNTg4LCA0LCBhcnJheSggMzEyLCAgNTg4LCAgODcwLCAxMDUwKSksIC8vMjUNCiAgICAgICAgICAgIGFycmF5KDEyMSwgMTcwNiwgNCwgYXJyYXkoIDMzNiwgIDY0NCwgIDk1MiwgMTExMCkpLA0KICAgICAgICAgICAgYXJyYXkoMTI1LCAxODI4LCA0LCBhcnJheSggMzYwLCAgNzAwLCAxMDIwLCAxMjAwKSksDQogICAgICAgICAgICBhcnJheSgxMjksIDE5MjEsIDMsIGFycmF5KCAzOTAsICA3MjgsIDEwNTAsIDEyNjApKSwNCiAgICAgICAgICAgIGFycmF5KDEzMywgMjA1MSwgMywgYXJyYXkoIDQyMCwgIDc4NCwgMTE0MCwgMTM1MCkpLA0KICAgICAgICAgICAgYXJyYXkoMTM3LCAyMTg1LCAzLCBhcnJheSggNDUwLCAgODEyLCAxMjAwLCAxNDQwKSksIC8vMzANCiAgICAgICAgICAgIGFycmF5KDE0MSwgMjMyMywgMywgYXJyYXkoIDQ4MCwgIDg2OCwgMTI5MCwgMTUzMCkpLA0KICAgICAgICAgICAgYXJyYXkoMTQ1LCAyNDY1LCAzLCBhcnJheSggNTEwLCAgOTI0LCAxMzUwLCAxNjIwKSksDQogICAgICAgICAgICBhcnJheSgxNDksIDI2MTEsIDMsIGFycmF5KCA1NDAsICA5ODAsIDE0NDAsIDE3MTApKSwNCiAgICAgICAgICAgIGFycmF5KDE1MywgMjc2MSwgMywgYXJyYXkoIDU3MCwgMTAzNiwgMTUzMCwgMTgwMCkpLA0KICAgICAgICAgICAgYXJyYXkoMTU3LCAyODc2LCAwLCBhcnJheSggNTcwLCAxMDY0LCAxNTkwLCAxODkwKSksIC8vMzUNCiAgICAgICAgICAgIGFycmF5KDE2MSwgMzAzNCwgMCwgYXJyYXkoIDYwMCwgMTEyMCwgMTY4MCwgMTk4MCkpLA0KICAgICAgICAgICAgYXJyYXkoMTY1LCAzMTk2LCAwLCBhcnJheSggNjMwLCAxMjA0LCAxNzcwLCAyMTAwKSksDQogICAgICAgICAgICBhcnJheSgxNjksIDMzNjIsIDAsIGFycmF5KCA2NjAsIDEyNjAsIDE4NjAsIDIyMjApKSwNCiAgICAgICAgICAgIGFycmF5KDE3MywgMzUzMiwgMCwgYXJyYXkoIDcyMCwgMTMxNiwgMTk1MCwgMjMxMCkpLA0KICAgICAgICAgICAgYXJyYXkoMTc3LCAzNzA2LCAwLCBhcnJheSggNzUwLCAxMzcyLCAyMDQwLCAyNDMwKSkgLy80MA0KICAgICAgICApOw0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RGF0YUxlbmd0aCgkdmVyc2lvbiwgJGxldmVsKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gc2VsZjo6JGNhcGFjaXR5WyR2ZXJzaW9uXVtRUkNBUF9XT1JEU10gLSBzZWxmOjokY2FwYWNpdHlbJHZlcnNpb25dW1FSQ0FQX0VDXVskbGV2ZWxdOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFQ0NMZW5ndGgoJHZlcnNpb24sICRsZXZlbCkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuIHNlbGY6OiRjYXBhY2l0eVskdmVyc2lvbl1bUVJDQVBfRUNdWyRsZXZlbF07DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFdpZHRoKCR2ZXJzaW9uKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gc2VsZjo6JGNhcGFjaXR5WyR2ZXJzaW9uXVtRUkNBUF9XSURUSF07DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJlbWFpbmRlcigkdmVyc2lvbikNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuIHNlbGY6OiRjYXBhY2l0eVskdmVyc2lvbl1bUVJDQVBfUkVNSU5ERVJdOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRNaW5pbXVtVmVyc2lvbigkc2l6ZSwgJGxldmVsKQ0KICAgICAgICB7DQoNCiAgICAgICAgICAgIGZvcigkaT0xOyAkaTw9IFFSU1BFQ19WRVJTSU9OX01BWDsgJGkrKykgew0KICAgICAgICAgICAgICAgICR3b3JkcyAgPSBzZWxmOjokY2FwYWNpdHlbJGldW1FSQ0FQX1dPUkRTXSAtIHNlbGY6OiRjYXBhY2l0eVskaV1bUVJDQVBfRUNdWyRsZXZlbF07DQogICAgICAgICAgICAgICAgaWYoJHdvcmRzID49ICRzaXplKSANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgIH0NCiAgICANCiAgICAgICAgLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgIA0KICAgICAgICBwdWJsaWMgc3RhdGljICRsZW5ndGhUYWJsZUJpdHMgPSBhcnJheSgNCiAgICAgICAgICAgIGFycmF5KDEwLCAxMiwgMTQpLA0KICAgICAgICAgICAgYXJyYXkoIDksIDExLCAxMyksDQogICAgICAgICAgICBhcnJheSggOCwgMTYsIDE2KSwNCiAgICAgICAgICAgIGFycmF5KCA4LCAxMCwgMTIpDQogICAgICAgICk7DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsZW5ndGhJbmRpY2F0b3IoJG1vZGUsICR2ZXJzaW9uKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoJG1vZGUgPT0gUVJfTU9ERV9TVFJVQ1RVUkUpDQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICBpZiAoJHZlcnNpb24gPD0gOSkgew0KICAgICAgICAgICAgICAgICRsID0gMDsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHZlcnNpb24gPD0gMjYpIHsNCiAgICAgICAgICAgICAgICAkbCA9IDE7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRsID0gMjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcmV0dXJuIHNlbGY6OiRsZW5ndGhUYWJsZUJpdHNbJG1vZGVdWyRsXTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWF4aW11bVdvcmRzKCRtb2RlLCAkdmVyc2lvbikNCiAgICAgICAgew0KICAgICAgICAgICAgaWYoJG1vZGUgPT0gUVJfTU9ERV9TVFJVQ1RVUkUpIA0KICAgICAgICAgICAgICAgIHJldHVybiAzOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoJHZlcnNpb24gPD0gOSkgew0KICAgICAgICAgICAgICAgICRsID0gMDsNCiAgICAgICAgICAgIH0gZWxzZSBpZigkdmVyc2lvbiA8PSAyNikgew0KICAgICAgICAgICAgICAgICRsID0gMTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJGwgPSAyOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkYml0cyA9IHNlbGY6OiRsZW5ndGhUYWJsZUJpdHNbJG1vZGVdWyRsXTsNCiAgICAgICAgICAgICR3b3JkcyA9ICgxIDw8ICRiaXRzKSAtIDE7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmKCRtb2RlID09IFFSX01PREVfS0FOSkkpIHsNCiAgICAgICAgICAgICAgICAkd29yZHMgKj0gMjsgLy8gdGhlIG51bWJlciBvZiBieXRlcyBpcyByZXF1aXJlZA0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gJHdvcmRzOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gRXJyb3IgY29ycmVjdGlvbiBjb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIC8vIFRhYmxlIG9mIHRoZSBlcnJvciBjb3JyZWN0aW9uIGNvZGUgKFJlZWQtU29sb21vbiBibG9jaykNCiAgICAgICAgLy8gU2VlIFRhYmxlIDEyLTE2IChwcC4zMC0zNiksIEpJUyBYMDUxMDoyMDA0Lg0KDQogICAgICAgIHB1YmxpYyBzdGF0aWMgJGVjY1RhYmxlID0gYXJyYXkoDQogICAgICAgICAgICBhcnJheShhcnJheSggMCwgIDApLCBhcnJheSggMCwgIDApLCBhcnJheSggMCwgIDApLCBhcnJheSggMCwgIDApKSwNCiAgICAgICAgICAgIGFycmF5KGFycmF5KCAxLCAgMCksIGFycmF5KCAxLCAgMCksIGFycmF5KCAxLCAgMCksIGFycmF5KCAxLCAgMCkpLCAvLyAxDQogICAgICAgICAgICBhcnJheShhcnJheSggMSwgIDApLCBhcnJheSggMSwgIDApLCBhcnJheSggMSwgIDApLCBhcnJheSggMSwgIDApKSwNCiAgICAgICAgICAgIGFycmF5KGFycmF5KCAxLCAgMCksIGFycmF5KCAxLCAgMCksIGFycmF5KCAyLCAgMCksIGFycmF5KCAyLCAgMCkpLA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDEsICAwKSwgYXJyYXkoIDIsICAwKSwgYXJyYXkoIDIsICAwKSwgYXJyYXkoIDQsICAwKSksDQogICAgICAgICAgICBhcnJheShhcnJheSggMSwgIDApLCBhcnJheSggMiwgIDApLCBhcnJheSggMiwgIDIpLCBhcnJheSggMiwgIDIpKSwgLy8gNQ0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDIsICAwKSwgYXJyYXkoIDQsICAwKSwgYXJyYXkoIDQsICAwKSwgYXJyYXkoIDQsICAwKSksDQogICAgICAgICAgICBhcnJheShhcnJheSggMiwgIDApLCBhcnJheSggNCwgIDApLCBhcnJheSggMiwgIDQpLCBhcnJheSggNCwgIDEpKSwNCiAgICAgICAgICAgIGFycmF5KGFycmF5KCAyLCAgMCksIGFycmF5KCAyLCAgMiksIGFycmF5KCA0LCAgMiksIGFycmF5KCA0LCAgMikpLA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDIsICAwKSwgYXJyYXkoIDMsICAyKSwgYXJyYXkoIDQsICA0KSwgYXJyYXkoIDQsICA0KSksDQogICAgICAgICAgICBhcnJheShhcnJheSggMiwgIDIpLCBhcnJheSggNCwgIDEpLCBhcnJheSggNiwgIDIpLCBhcnJheSggNiwgIDIpKSwgLy8xMA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDQsICAwKSwgYXJyYXkoIDEsICA0KSwgYXJyYXkoIDQsICA0KSwgYXJyYXkoIDMsICA4KSksDQogICAgICAgICAgICBhcnJheShhcnJheSggMiwgIDIpLCBhcnJheSggNiwgIDIpLCBhcnJheSggNCwgIDYpLCBhcnJheSggNywgIDQpKSwNCiAgICAgICAgICAgIGFycmF5KGFycmF5KCA0LCAgMCksIGFycmF5KCA4LCAgMSksIGFycmF5KCA4LCAgNCksIGFycmF5KDEyLCAgNCkpLA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDMsICAxKSwgYXJyYXkoIDQsICA1KSwgYXJyYXkoMTEsICA1KSwgYXJyYXkoMTEsICA1KSksDQogICAgICAgICAgICBhcnJheShhcnJheSggNSwgIDEpLCBhcnJheSggNSwgIDUpLCBhcnJheSggNSwgIDcpLCBhcnJheSgxMSwgIDcpKSwgLy8xNQ0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDUsICAxKSwgYXJyYXkoIDcsICAzKSwgYXJyYXkoMTUsICAyKSwgYXJyYXkoIDMsIDEzKSksDQogICAgICAgICAgICBhcnJheShhcnJheSggMSwgIDUpLCBhcnJheSgxMCwgIDEpLCBhcnJheSggMSwgMTUpLCBhcnJheSggMiwgMTcpKSwNCiAgICAgICAgICAgIGFycmF5KGFycmF5KCA1LCAgMSksIGFycmF5KCA5LCAgNCksIGFycmF5KDE3LCAgMSksIGFycmF5KCAyLCAxOSkpLA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDMsICA0KSwgYXJyYXkoIDMsIDExKSwgYXJyYXkoMTcsICA0KSwgYXJyYXkoIDksIDE2KSksDQogICAgICAgICAgICBhcnJheShhcnJheSggMywgIDUpLCBhcnJheSggMywgMTMpLCBhcnJheSgxNSwgIDUpLCBhcnJheSgxNSwgMTApKSwgLy8yMA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDQsICA0KSwgYXJyYXkoMTcsICAwKSwgYXJyYXkoMTcsICA2KSwgYXJyYXkoMTksICA2KSksDQogICAgICAgICAgICBhcnJheShhcnJheSggMiwgIDcpLCBhcnJheSgxNywgIDApLCBhcnJheSggNywgMTYpLCBhcnJheSgzNCwgIDApKSwNCiAgICAgICAgICAgIGFycmF5KGFycmF5KCA0LCAgNSksIGFycmF5KCA0LCAxNCksIGFycmF5KDExLCAxNCksIGFycmF5KDE2LCAxNCkpLA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDYsICA0KSwgYXJyYXkoIDYsIDE0KSwgYXJyYXkoMTEsIDE2KSwgYXJyYXkoMzAsICAyKSksDQogICAgICAgICAgICBhcnJheShhcnJheSggOCwgIDQpLCBhcnJheSggOCwgMTMpLCBhcnJheSggNywgMjIpLCBhcnJheSgyMiwgMTMpKSwgLy8yNQ0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoMTAsICAyKSwgYXJyYXkoMTksICA0KSwgYXJyYXkoMjgsICA2KSwgYXJyYXkoMzMsICA0KSksDQogICAgICAgICAgICBhcnJheShhcnJheSggOCwgIDQpLCBhcnJheSgyMiwgIDMpLCBhcnJheSggOCwgMjYpLCBhcnJheSgxMiwgMjgpKSwNCiAgICAgICAgICAgIGFycmF5KGFycmF5KCAzLCAxMCksIGFycmF5KCAzLCAyMyksIGFycmF5KCA0LCAzMSksIGFycmF5KDExLCAzMSkpLA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDcsICA3KSwgYXJyYXkoMjEsICA3KSwgYXJyYXkoIDEsIDM3KSwgYXJyYXkoMTksIDI2KSksDQogICAgICAgICAgICBhcnJheShhcnJheSggNSwgMTApLCBhcnJheSgxOSwgMTApLCBhcnJheSgxNSwgMjUpLCBhcnJheSgyMywgMjUpKSwgLy8zMA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoMTMsICAzKSwgYXJyYXkoIDIsIDI5KSwgYXJyYXkoNDIsICAxKSwgYXJyYXkoMjMsIDI4KSksDQogICAgICAgICAgICBhcnJheShhcnJheSgxNywgIDApLCBhcnJheSgxMCwgMjMpLCBhcnJheSgxMCwgMzUpLCBhcnJheSgxOSwgMzUpKSwNCiAgICAgICAgICAgIGFycmF5KGFycmF5KDE3LCAgMSksIGFycmF5KDE0LCAyMSksIGFycmF5KDI5LCAxOSksIGFycmF5KDExLCA0NikpLA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoMTMsICA2KSwgYXJyYXkoMTQsIDIzKSwgYXJyYXkoNDQsICA3KSwgYXJyYXkoNTksICAxKSksDQogICAgICAgICAgICBhcnJheShhcnJheSgxMiwgIDcpLCBhcnJheSgxMiwgMjYpLCBhcnJheSgzOSwgMTQpLCBhcnJheSgyMiwgNDEpKSwgLy8zNQ0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoIDYsIDE0KSwgYXJyYXkoIDYsIDM0KSwgYXJyYXkoNDYsIDEwKSwgYXJyYXkoIDIsIDY0KSksDQogICAgICAgICAgICBhcnJheShhcnJheSgxNywgIDQpLCBhcnJheSgyOSwgMTQpLCBhcnJheSg0OSwgMTApLCBhcnJheSgyNCwgNDYpKSwNCiAgICAgICAgICAgIGFycmF5KGFycmF5KCA0LCAxOCksIGFycmF5KDEzLCAzMiksIGFycmF5KDQ4LCAxNCksIGFycmF5KDQyLCAzMikpLA0KICAgICAgICAgICAgYXJyYXkoYXJyYXkoMjAsICA0KSwgYXJyYXkoNDAsICA3KSwgYXJyYXkoNDMsIDIyKSwgYXJyYXkoMTAsIDY3KSksDQogICAgICAgICAgICBhcnJheShhcnJheSgxOSwgIDYpLCBhcnJheSgxOCwgMzEpLCBhcnJheSgzNCwgMzQpLCBhcnJheSgyMCwgNjEpKSwvLzQwDQogICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgLy8gQ0FDSEVBQkxFISEhDQogICAgICAgIA0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEVjY1NwZWMoJHZlcnNpb24sICRsZXZlbCwgYXJyYXkgJiRzcGVjKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoY291bnQoJHNwZWMpIDwgNSkgew0KICAgICAgICAgICAgICAgICRzcGVjID0gYXJyYXkoMCwwLDAsMCwwKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGIxICAgPSBzZWxmOjokZWNjVGFibGVbJHZlcnNpb25dWyRsZXZlbF1bMF07DQogICAgICAgICAgICAkYjIgICA9IHNlbGY6OiRlY2NUYWJsZVskdmVyc2lvbl1bJGxldmVsXVsxXTsNCiAgICAgICAgICAgICRkYXRhID0gc2VsZjo6Z2V0RGF0YUxlbmd0aCgkdmVyc2lvbiwgJGxldmVsKTsNCiAgICAgICAgICAgICRlY2MgID0gc2VsZjo6Z2V0RUNDTGVuZ3RoKCR2ZXJzaW9uLCAkbGV2ZWwpOw0KDQogICAgICAgICAgICBpZigkYjIgPT0gMCkgew0KICAgICAgICAgICAgICAgICRzcGVjWzBdID0gJGIxOw0KICAgICAgICAgICAgICAgICRzcGVjWzFdID0gKGludCkoJGRhdGEgLyAkYjEpOw0KICAgICAgICAgICAgICAgICRzcGVjWzJdID0gKGludCkoJGVjYyAvICRiMSk7DQogICAgICAgICAgICAgICAgJHNwZWNbM10gPSAwOyANCiAgICAgICAgICAgICAgICAkc3BlY1s0XSA9IDA7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRzcGVjWzBdID0gJGIxOw0KICAgICAgICAgICAgICAgICRzcGVjWzFdID0gKGludCkoJGRhdGEgLyAoJGIxICsgJGIyKSk7DQogICAgICAgICAgICAgICAgJHNwZWNbMl0gPSAoaW50KSgkZWNjICAvICgkYjEgKyAkYjIpKTsNCiAgICAgICAgICAgICAgICAkc3BlY1szXSA9ICRiMjsNCiAgICAgICAgICAgICAgICAkc3BlY1s0XSA9ICRzcGVjWzFdICsgMTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vIEFsaWdubWVudCBwYXR0ZXJuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogICAgICAgIC8vIFBvc2l0aW9ucyBvZiBhbGlnbm1lbnQgcGF0dGVybnMuDQogICAgICAgIC8vIFRoaXMgYXJyYXkgaW5jbHVkZXMgb25seSB0aGUgc2Vjb25kIGFuZCB0aGUgdGhpcmQgcG9zaXRpb24gb2YgdGhlIA0KICAgICAgICAvLyBhbGlnbm1lbnQgcGF0dGVybnMuIFJlc3Qgb2YgdGhlbSBjYW4gYmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBkaXN0YW5jZSANCiAgICAgICAgLy8gYmV0d2VlbiB0aGVtLg0KICAgICAgICAgDQogICAgICAgIC8vIFNlZSBUYWJsZSAxIGluIEFwcGVuZGl4IEUgKHBwLjcxKSBvZiBKSVMgWDA1MTA6MjAwNC4NCiAgICAgICAgIA0KICAgICAgICBwdWJsaWMgc3RhdGljICRhbGlnbm1lbnRQYXR0ZXJuID0gYXJyYXkoICAgICAgDQogICAgICAgICAgICBhcnJheSggMCwgIDApLA0KICAgICAgICAgICAgYXJyYXkoIDAsICAwKSwgYXJyYXkoMTgsICAwKSwgYXJyYXkoMjIsICAwKSwgYXJyYXkoMjYsICAwKSwgYXJyYXkoMzAsICAwKSwgLy8gMS0gNQ0KICAgICAgICAgICAgYXJyYXkoMzQsICAwKSwgYXJyYXkoMjIsIDM4KSwgYXJyYXkoMjQsIDQyKSwgYXJyYXkoMjYsIDQ2KSwgYXJyYXkoMjgsIDUwKSwgLy8gNi0xMA0KICAgICAgICAgICAgYXJyYXkoMzAsIDU0KSwgYXJyYXkoMzIsIDU4KSwgYXJyYXkoMzQsIDYyKSwgYXJyYXkoMjYsIDQ2KSwgYXJyYXkoMjYsIDQ4KSwgLy8xMS0xNQ0KICAgICAgICAgICAgYXJyYXkoMjYsIDUwKSwgYXJyYXkoMzAsIDU0KSwgYXJyYXkoMzAsIDU2KSwgYXJyYXkoMzAsIDU4KSwgYXJyYXkoMzQsIDYyKSwgLy8xNi0yMA0KICAgICAgICAgICAgYXJyYXkoMjgsIDUwKSwgYXJyYXkoMjYsIDUwKSwgYXJyYXkoMzAsIDU0KSwgYXJyYXkoMjgsIDU0KSwgYXJyYXkoMzIsIDU4KSwgLy8yMS0yNQ0KICAgICAgICAgICAgYXJyYXkoMzAsIDU4KSwgYXJyYXkoMzQsIDYyKSwgYXJyYXkoMjYsIDUwKSwgYXJyYXkoMzAsIDU0KSwgYXJyYXkoMjYsIDUyKSwgLy8yNi0zMA0KICAgICAgICAgICAgYXJyYXkoMzAsIDU2KSwgYXJyYXkoMzQsIDYwKSwgYXJyYXkoMzAsIDU4KSwgYXJyYXkoMzQsIDYyKSwgYXJyYXkoMzAsIDU0KSwgLy8zMS0zNQ0KICAgICAgICAgICAgYXJyYXkoMjQsIDUwKSwgYXJyYXkoMjgsIDU0KSwgYXJyYXkoMzIsIDU4KSwgYXJyYXkoMjYsIDU0KSwgYXJyYXkoMzAsIDU4KSwgLy8zNS00MA0KICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICANCiAgICAgICAgLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgICAqIFB1dCBhbiBhbGlnbm1lbnQgbWFya2VyLg0KICAgICAgICAgKiBAcGFyYW0gZnJhbWUNCiAgICAgICAgICogQHBhcmFtIHdpZHRoDQogICAgICAgICAqIEBwYXJhbSBveCxveSBjZW50ZXIgY29vcmRpbmF0ZSBvZiB0aGUgcGF0dGVybg0KICAgICAgICAgKi8NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwdXRBbGlnbm1lbnRNYXJrZXIoYXJyYXkgJiRmcmFtZSwgJG94LCAkb3kpDQogICAgICAgIHsNCiAgICAgICAgICAgICRmaW5kZXIgPSBhcnJheSgNCiAgICAgICAgICAgICAgICAiXHhhMVx4YTFceGExXHhhMVx4YTEiLA0KICAgICAgICAgICAgICAgICJceGExXHhhMFx4YTBceGEwXHhhMSIsDQogICAgICAgICAgICAgICAgIlx4YTFceGEwXHhhMVx4YTBceGExIiwNCiAgICAgICAgICAgICAgICAiXHhhMVx4YTBceGEwXHhhMFx4YTEiLA0KICAgICAgICAgICAgICAgICJceGExXHhhMVx4YTFceGExXHhhMSINCiAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICR5U3RhcnQgPSAkb3ktMjsgICAgICAgICANCiAgICAgICAgICAgICR4U3RhcnQgPSAkb3gtMjsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yKCR5PTA7ICR5PDU7ICR5KyspIHsNCiAgICAgICAgICAgICAgICBRUnN0cjo6c2V0KCRmcmFtZSwgJHhTdGFydCwgJHlTdGFydCskeSwgJGZpbmRlclskeV0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHV0QWxpZ25tZW50UGF0dGVybigkdmVyc2lvbiwgJiRmcmFtZSwgJHdpZHRoKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZigkdmVyc2lvbiA8IDIpDQogICAgICAgICAgICAgICAgcmV0dXJuOw0KDQogICAgICAgICAgICAkZCA9IHNlbGY6OiRhbGlnbm1lbnRQYXR0ZXJuWyR2ZXJzaW9uXVsxXSAtIHNlbGY6OiRhbGlnbm1lbnRQYXR0ZXJuWyR2ZXJzaW9uXVswXTsNCiAgICAgICAgICAgIGlmKCRkIDwgMCkgew0KICAgICAgICAgICAgICAgICR3ID0gMjsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJHcgPSAoaW50KSgoJHdpZHRoIC0gc2VsZjo6JGFsaWdubWVudFBhdHRlcm5bJHZlcnNpb25dWzBdKSAvICRkICsgMik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmKCR3ICogJHcgLSAzID09IDEpIHsNCiAgICAgICAgICAgICAgICAkeCA9IHNlbGY6OiRhbGlnbm1lbnRQYXR0ZXJuWyR2ZXJzaW9uXVswXTsNCiAgICAgICAgICAgICAgICAkeSA9IHNlbGY6OiRhbGlnbm1lbnRQYXR0ZXJuWyR2ZXJzaW9uXVswXTsNCiAgICAgICAgICAgICAgICBzZWxmOjpwdXRBbGlnbm1lbnRNYXJrZXIoJGZyYW1lLCAkeCwgJHkpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGN4ID0gc2VsZjo6JGFsaWdubWVudFBhdHRlcm5bJHZlcnNpb25dWzBdOw0KICAgICAgICAgICAgZm9yKCR4PTE7ICR4PCR3IC0gMTsgJHgrKykgew0KICAgICAgICAgICAgICAgIHNlbGY6OnB1dEFsaWdubWVudE1hcmtlcigkZnJhbWUsIDYsICRjeCk7DQogICAgICAgICAgICAgICAgc2VsZjo6cHV0QWxpZ25tZW50TWFya2VyKCRmcmFtZSwgJGN4LCAgNik7DQogICAgICAgICAgICAgICAgJGN4ICs9ICRkOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkY3kgPSBzZWxmOjokYWxpZ25tZW50UGF0dGVyblskdmVyc2lvbl1bMF07DQogICAgICAgICAgICBmb3IoJHk9MDsgJHk8JHctMTsgJHkrKykgew0KICAgICAgICAgICAgICAgICRjeCA9IHNlbGY6OiRhbGlnbm1lbnRQYXR0ZXJuWyR2ZXJzaW9uXVswXTsNCiAgICAgICAgICAgICAgICBmb3IoJHg9MDsgJHg8JHctMTsgJHgrKykgew0KICAgICAgICAgICAgICAgICAgICBzZWxmOjpwdXRBbGlnbm1lbnRNYXJrZXIoJGZyYW1lLCAkY3gsICRjeSk7DQogICAgICAgICAgICAgICAgICAgICRjeCArPSAkZDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGN5ICs9ICRkOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy8gVmVyc2lvbiBpbmZvcm1hdGlvbiBwYXR0ZXJuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCgkJLy8gVmVyc2lvbiBpbmZvcm1hdGlvbiBwYXR0ZXJuIChCQ0ggY29kZWQpLg0KICAgICAgICAvLyBTZWUgVGFibGUgMSBpbiBBcHBlbmRpeCBEIChwcC42OCkgb2YgSklTIFgwNTEwOjIwMDQuDQogICAgICAgIA0KCQkvLyBzaXplOiBbUVJTUEVDX1ZFUlNJT05fTUFYIC0gNl0NCgkJDQogICAgICAgIHB1YmxpYyBzdGF0aWMgJHZlcnNpb25QYXR0ZXJuID0gYXJyYXkoDQogICAgICAgICAgICAweDA3Yzk0LCAweDA4NWJjLCAweDA5YTk5LCAweDBhNGQzLCAweDBiYmY2LCAweDBjNzYyLCAweDBkODQ3LCAweDBlNjBkLA0KICAgICAgICAgICAgMHgwZjkyOCwgMHgxMGI3OCwgMHgxMTQ1ZCwgMHgxMmExNywgMHgxMzUzMiwgMHgxNDlhNiwgMHgxNTY4MywgMHgxNjhjOSwNCiAgICAgICAgICAgIDB4MTc3ZWMsIDB4MThlYzQsIDB4MTkxZTEsIDB4MWFmYWIsIDB4MWIwOGUsIDB4MWNjMWEsIDB4MWQzM2YsIDB4MWVkNzUsDQogICAgICAgICAgICAweDFmMjUwLCAweDIwOWQ1LCAweDIxNmYwLCAweDIyOGJhLCAweDIzNzlmLCAweDI0YjBiLCAweDI1NDJlLCAweDI2YTY0LA0KICAgICAgICAgICAgMHgyNzU0MSwgMHgyOGM2OQ0KICAgICAgICApOw0KDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFZlcnNpb25QYXR0ZXJuKCR2ZXJzaW9uKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZigkdmVyc2lvbiA8IDcgfHwgJHZlcnNpb24gPiBRUlNQRUNfVkVSU0lPTl9NQVgpDQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQoNCiAgICAgICAgICAgIHJldHVybiBzZWxmOjokdmVyc2lvblBhdHRlcm5bJHZlcnNpb24gLTddOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gRm9ybWF0IGluZm9ybWF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIC8vIFNlZSBjYWxjRm9ybWF0SW5mbyBpbiB0ZXN0cy90ZXN0X3Fyc3BlYy5jIChvcmdpbmFsIHFyZW5jb2RlIGMgbGliKQ0KICAgICAgICANCiAgICAgICAgcHVibGljIHN0YXRpYyAkZm9ybWF0SW5mbyA9IGFycmF5KA0KICAgICAgICAgICAgYXJyYXkoMHg3N2M0LCAweDcyZjMsIDB4N2RhYSwgMHg3ODlkLCAweDY2MmYsIDB4NjMxOCwgMHg2YzQxLCAweDY5NzYpLA0KICAgICAgICAgICAgYXJyYXkoMHg1NDEyLCAweDUxMjUsIDB4NWU3YywgMHg1YjRiLCAweDQ1ZjksIDB4NDBjZSwgMHg0Zjk3LCAweDRhYTApLA0KICAgICAgICAgICAgYXJyYXkoMHgzNTVmLCAweDMwNjgsIDB4M2YzMSwgMHgzYTA2LCAweDI0YjQsIDB4MjE4MywgMHgyZWRhLCAweDJiZWQpLA0KICAgICAgICAgICAgYXJyYXkoMHgxNjg5LCAweDEzYmUsIDB4MWNlNywgMHgxOWQwLCAweDA3NjIsIDB4MDI1NSwgMHgwZDBjLCAweDA4M2IpDQogICAgICAgICk7DQoNCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRGb3JtYXRJbmZvKCRtYXNrLCAkbGV2ZWwpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmKCRtYXNrIDwgMCB8fCAkbWFzayA+IDcpDQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICBpZigkbGV2ZWwgPCAwIHx8ICRsZXZlbCA+IDMpDQogICAgICAgICAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICByZXR1cm4gc2VsZjo6JGZvcm1hdEluZm9bJGxldmVsXVskbWFza107DQogICAgICAgIH0NCg0KICAgICAgICAvLyBGcmFtZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgLy8gQ2FjaGUgb2YgaW5pdGlhbCBmcmFtZXMuDQogICAgICAgICANCiAgICAgICAgcHVibGljIHN0YXRpYyAkZnJhbWVzID0gYXJyYXkoKTsNCg0KICAgICAgICAvKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgICogUHV0IGEgZmluZGVyIHBhdHRlcm4uDQogICAgICAgICAqIEBwYXJhbSBmcmFtZQ0KICAgICAgICAgKiBAcGFyYW0gd2lkdGgNCiAgICAgICAgICogQHBhcmFtIG94LG95IHVwcGVyLWxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgcGF0dGVybg0KICAgICAgICAgKi8NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwdXRGaW5kZXJQYXR0ZXJuKCYkZnJhbWUsICRveCwgJG95KQ0KICAgICAgICB7DQogICAgICAgICAgICAkZmluZGVyID0gYXJyYXkoDQogICAgICAgICAgICAgICAgIlx4YzFceGMxXHhjMVx4YzFceGMxXHhjMVx4YzEiLA0KICAgICAgICAgICAgICAgICJceGMxXHhjMFx4YzBceGMwXHhjMFx4YzBceGMxIiwNCiAgICAgICAgICAgICAgICAiXHhjMVx4YzBceGMxXHhjMVx4YzFceGMwXHhjMSIsDQogICAgICAgICAgICAgICAgIlx4YzFceGMwXHhjMVx4YzFceGMxXHhjMFx4YzEiLA0KICAgICAgICAgICAgICAgICJceGMxXHhjMFx4YzFceGMxXHhjMVx4YzBceGMxIiwNCiAgICAgICAgICAgICAgICAiXHhjMVx4YzBceGMwXHhjMFx4YzBceGMwXHhjMSIsDQogICAgICAgICAgICAgICAgIlx4YzFceGMxXHhjMVx4YzFceGMxXHhjMVx4YzEiDQogICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yKCR5PTA7ICR5PDc7ICR5KyspIHsNCiAgICAgICAgICAgICAgICBRUnN0cjo6c2V0KCRmcmFtZSwgJG94LCAkb3krJHksICRmaW5kZXJbJHldKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyYW1lKCR2ZXJzaW9uKQ0KICAgICAgICB7DQogICAgICAgICAgICAkd2lkdGggPSBzZWxmOjokY2FwYWNpdHlbJHZlcnNpb25dW1FSQ0FQX1dJRFRIXTsNCiAgICAgICAgICAgICRmcmFtZUxpbmUgPSBzdHJfcmVwZWF0ICgiXDAiLCAkd2lkdGgpOw0KICAgICAgICAgICAgJGZyYW1lID0gYXJyYXlfZmlsbCgwLCAkd2lkdGgsICRmcmFtZUxpbmUpOw0KDQogICAgICAgICAgICAvLyBGaW5kZXIgcGF0dGVybg0KICAgICAgICAgICAgc2VsZjo6cHV0RmluZGVyUGF0dGVybigkZnJhbWUsIDAsIDApOw0KICAgICAgICAgICAgc2VsZjo6cHV0RmluZGVyUGF0dGVybigkZnJhbWUsICR3aWR0aCAtIDcsIDApOw0KICAgICAgICAgICAgc2VsZjo6cHV0RmluZGVyUGF0dGVybigkZnJhbWUsIDAsICR3aWR0aCAtIDcpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAvLyBTZXBhcmF0b3INCiAgICAgICAgICAgICR5T2Zmc2V0ID0gJHdpZHRoIC0gNzsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yKCR5PTA7ICR5PDc7ICR5KyspIHsNCiAgICAgICAgICAgICAgICAkZnJhbWVbJHldWzddID0gIlx4YzAiOw0KICAgICAgICAgICAgICAgICRmcmFtZVskeV1bJHdpZHRoIC0gOF0gPSAiXHhjMCI7DQogICAgICAgICAgICAgICAgJGZyYW1lWyR5T2Zmc2V0XVs3XSA9ICJceGMwIjsNCiAgICAgICAgICAgICAgICAkeU9mZnNldCsrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAkc2V0UGF0dGVybiA9IHN0cl9yZXBlYXQoIlx4YzAiLCA4KTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgUVJzdHI6OnNldCgkZnJhbWUsIDAsIDcsICRzZXRQYXR0ZXJuKTsNCiAgICAgICAgICAgIFFSc3RyOjpzZXQoJGZyYW1lLCAkd2lkdGgtOCwgNywgJHNldFBhdHRlcm4pOw0KICAgICAgICAgICAgUVJzdHI6OnNldCgkZnJhbWUsIDAsICR3aWR0aCAtIDgsICRzZXRQYXR0ZXJuKTsNCiAgICAgICAgDQogICAgICAgICAgICAvLyBGb3JtYXQgaW5mbw0KICAgICAgICAgICAgJHNldFBhdHRlcm4gPSBzdHJfcmVwZWF0KCJceDg0IiwgOSk7DQogICAgICAgICAgICBRUnN0cjo6c2V0KCRmcmFtZSwgMCwgOCwgJHNldFBhdHRlcm4pOw0KICAgICAgICAgICAgUVJzdHI6OnNldCgkZnJhbWUsICR3aWR0aCAtIDgsIDgsICRzZXRQYXR0ZXJuLCA4KTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHlPZmZzZXQgPSAkd2lkdGggLSA4Ow0KDQogICAgICAgICAgICBmb3IoJHk9MDsgJHk8ODsgJHkrKywkeU9mZnNldCsrKSB7DQogICAgICAgICAgICAgICAgJGZyYW1lWyR5XVs4XSA9ICJceDg0IjsNCiAgICAgICAgICAgICAgICAkZnJhbWVbJHlPZmZzZXRdWzhdID0gIlx4ODQiOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBUaW1pbmcgcGF0dGVybiAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIGZvcigkaT0xOyAkaTwkd2lkdGgtMTU7ICRpKyspIHsNCiAgICAgICAgICAgICAgICAkZnJhbWVbNl1bNyskaV0gPSBjaHIoMHg5MCB8ICgkaSAmIDEpKTsNCiAgICAgICAgICAgICAgICAkZnJhbWVbNyskaV1bNl0gPSBjaHIoMHg5MCB8ICgkaSAmIDEpKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gQWxpZ25tZW50IHBhdHRlcm4gIA0KICAgICAgICAgICAgc2VsZjo6cHV0QWxpZ25tZW50UGF0dGVybigkdmVyc2lvbiwgJGZyYW1lLCAkd2lkdGgpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAvLyBWZXJzaW9uIGluZm9ybWF0aW9uIA0KICAgICAgICAgICAgaWYoJHZlcnNpb24gPj0gNykgew0KICAgICAgICAgICAgICAgICR2aW5mID0gc2VsZjo6Z2V0VmVyc2lvblBhdHRlcm4oJHZlcnNpb24pOw0KDQogICAgICAgICAgICAgICAgJHYgPSAkdmluZjsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBmb3IoJHg9MDsgJHg8NjsgJHgrKykgew0KICAgICAgICAgICAgICAgICAgICBmb3IoJHk9MDsgJHk8MzsgJHkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGZyYW1lWygkd2lkdGggLSAxMSkrJHldWyR4XSA9IGNocigweDg4IHwgKCR2ICYgMSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHYgPSAkdiA+PiAxOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJHYgPSAkdmluZjsNCiAgICAgICAgICAgICAgICBmb3IoJHk9MDsgJHk8NjsgJHkrKykgew0KICAgICAgICAgICAgICAgICAgICBmb3IoJHg9MDsgJHg8MzsgJHgrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGZyYW1lWyR5XVskeCsoJHdpZHRoIC0gMTEpXSA9IGNocigweDg4IHwgKCR2ICYgMSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHYgPSAkdiA+PiAxOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgIA0KICAgICAgICAgICAgLy8gYW5kIGEgbGl0dGxlIGJpdC4uLiAgDQogICAgICAgICAgICAkZnJhbWVbJHdpZHRoIC0gOF1bOF0gPSAiXHg4MSI7DQogICAgICAgICAgICANCiAgICAgICAgICAgIHJldHVybiAkZnJhbWU7DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWJ1ZygkZnJhbWUsICRiaW5hcnlfbW9kZSA9IGZhbHNlKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoJGJpbmFyeV9tb2RlKSB7DQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGZyYW1lIGFzICYkZnJhbWVMaW5lKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZnJhbWVMaW5lID0gam9pbignPHNwYW4gY2xhc3M9Im0iPiZuYnNwOyZuYnNwOzwvc3Bhbj4nLCBleHBsb2RlKCcwJywgJGZyYW1lTGluZSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGZyYW1lTGluZSA9IGpvaW4oJyYjOTYwODsmIzk2MDg7JywgZXhwbG9kZSgnMScsICRmcmFtZUxpbmUpKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgPz4NCiAgICAgICAgICAgICAgICA8c3R5bGU+DQogICAgICAgICAgICAgICAgICAgIC5tIHsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IH0NCiAgICAgICAgICAgICAgICA8L3N0eWxlPg0KICAgICAgICAgICAgICAgIDw/cGhwDQogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwcmU+PHR0Pjxici8gPjxici8gPjxici8gPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyc7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gam9pbigiPGJyLyA+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IiwgJGZyYW1lKTsNCiAgICAgICAgICAgICAgICAgICAgZWNobyAnPC90dD48L3ByZT48YnIvID48YnIvID48YnIvID48YnIvID48YnIvID48YnIvID4nOw0KICAgICAgICAgICAgDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGZyYW1lIGFzICYkZnJhbWVMaW5lKSB7DQogICAgICAgICAgICAgICAgICAgICRmcmFtZUxpbmUgPSBqb2luKCc8c3BhbiBjbGFzcz0ibSI+Jm5ic3A7PC9zcGFuPicsICBleHBsb2RlKCJceGMwIiwgJGZyYW1lTGluZSkpOw0KICAgICAgICAgICAgICAgICAgICAkZnJhbWVMaW5lID0gam9pbignPHNwYW4gY2xhc3M9Im0iPiYjOTYxODs8L3NwYW4+JywgZXhwbG9kZSgiXHhjMSIsICRmcmFtZUxpbmUpKTsNCiAgICAgICAgICAgICAgICAgICAgJGZyYW1lTGluZSA9IGpvaW4oJzxzcGFuIGNsYXNzPSJwIj4mbmJzcDs8L3NwYW4+JywgIGV4cGxvZGUoIlx4YTAiLCAkZnJhbWVMaW5lKSk7DQogICAgICAgICAgICAgICAgICAgICRmcmFtZUxpbmUgPSBqb2luKCc8c3BhbiBjbGFzcz0icCI+JiM5NjE4Ozwvc3Bhbj4nLCBleHBsb2RlKCJceGExIiwgJGZyYW1lTGluZSkpOw0KICAgICAgICAgICAgICAgICAgICAkZnJhbWVMaW5lID0gam9pbignPHNwYW4gY2xhc3M9InMiPiYjOTY3MTs8L3NwYW4+JywgZXhwbG9kZSgiXHg4NCIsICRmcmFtZUxpbmUpKTsgLy9mb3JtYXQgMA0KICAgICAgICAgICAgICAgICAgICAkZnJhbWVMaW5lID0gam9pbignPHNwYW4gY2xhc3M9InMiPiYjOTY3MDs8L3NwYW4+JywgZXhwbG9kZSgiXHg4NSIsICRmcmFtZUxpbmUpKTsgLy9mb3JtYXQgMQ0KICAgICAgICAgICAgICAgICAgICAkZnJhbWVMaW5lID0gam9pbignPHNwYW4gY2xhc3M9IngiPiYjOTc2Mjs8L3NwYW4+JywgZXhwbG9kZSgiXHg4MSIsICRmcmFtZUxpbmUpKTsgLy9zcGVjaWFsIGJpdA0KICAgICAgICAgICAgICAgICAgICAkZnJhbWVMaW5lID0gam9pbignPHNwYW4gY2xhc3M9ImMiPiZuYnNwOzwvc3Bhbj4nLCAgZXhwbG9kZSgiXHg5MCIsICRmcmFtZUxpbmUpKTsgLy9jbG9jayAwDQogICAgICAgICAgICAgICAgICAgICRmcmFtZUxpbmUgPSBqb2luKCc8c3BhbiBjbGFzcz0iYyI+JiM5NzE5Ozwvc3Bhbj4nLCBleHBsb2RlKCJceDkxIiwgJGZyYW1lTGluZSkpOyAvL2Nsb2NrIDENCiAgICAgICAgICAgICAgICAgICAgJGZyYW1lTGluZSA9IGpvaW4oJzxzcGFuIGNsYXNzPSJmIj4mbmJzcDs8L3NwYW4+JywgIGV4cGxvZGUoIlx4ODgiLCAkZnJhbWVMaW5lKSk7IC8vdmVyc2lvbg0KICAgICAgICAgICAgICAgICAgICAkZnJhbWVMaW5lID0gam9pbignPHNwYW4gY2xhc3M9ImYiPiYjOTYxODs8L3NwYW4+JywgZXhwbG9kZSgiXHg4OSIsICRmcmFtZUxpbmUpKTsgLy92ZXJzaW9uDQogICAgICAgICAgICAgICAgICAgICRmcmFtZUxpbmUgPSBqb2luKCcmIzk4MzA7JywgZXhwbG9kZSgiXHgwMSIsICRmcmFtZUxpbmUpKTsNCiAgICAgICAgICAgICAgICAgICAgJGZyYW1lTGluZSA9IGpvaW4oJyYjODkwMTsnLCBleHBsb2RlKCJcMCIsICRmcmFtZUxpbmUpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPz4NCiAgICAgICAgICAgICAgICA8c3R5bGU+DQogICAgICAgICAgICAgICAgICAgIC5wIHsgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OyB9DQogICAgICAgICAgICAgICAgICAgIC5tIHsgYmFja2dyb3VuZC1jb2xvcjogIzAwRkYwMDsgfQ0KICAgICAgICAgICAgICAgICAgICAucyB7IGJhY2tncm91bmQtY29sb3I6ICNGRjAwMDA7IH0NCiAgICAgICAgICAgICAgICAgICAgLmMgeyBiYWNrZ3JvdW5kLWNvbG9yOiBhcXVhOyB9DQogICAgICAgICAgICAgICAgICAgIC54IHsgYmFja2dyb3VuZC1jb2xvcjogcGluazsgfQ0KICAgICAgICAgICAgICAgICAgICAuZiB7IGJhY2tncm91bmQtY29sb3I6IGdvbGQ7IH0NCiAgICAgICAgICAgICAgICA8L3N0eWxlPg0KICAgICAgICAgICAgICAgIDw/cGhwDQogICAgICAgICAgICAgICAgZWNobyAiPHByZT48dHQ+IjsNCiAgICAgICAgICAgICAgICBlY2hvIGpvaW4oIjxici8gPiIsICRmcmFtZSk7DQogICAgICAgICAgICAgICAgZWNobyAiPC90dD48L3ByZT4iOw0KICAgICAgICAgICAgDQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXJpYWwoJGZyYW1lKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gZ3pjb21wcmVzcyhqb2luKCJcbiIsICRmcmFtZSksIDkpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1bnNlcmlhbCgkY29kZSkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuIGV4cGxvZGUoIlxuIiwgZ3p1bmNvbXByZXNzKCRjb2RlKSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5ld0ZyYW1lKCR2ZXJzaW9uKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZigkdmVyc2lvbiA8IDEgfHwgJHZlcnNpb24gPiBRUlNQRUNfVkVSU0lPTl9NQVgpIA0KICAgICAgICAgICAgICAgIHJldHVybiBudWxsOw0KDQogICAgICAgICAgICBpZighaXNzZXQoc2VsZjo6JGZyYW1lc1skdmVyc2lvbl0pKSB7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGZpbGVOYW1lID0gUVJfQ0FDSEVfRElSLidmcmFtZV8nLiR2ZXJzaW9uLicuZGF0JzsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAoUVJfQ0FDSEVBQkxFKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZU5hbWUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjokZnJhbWVzWyR2ZXJzaW9uXSA9IHNlbGY6OnVuc2VyaWFsKGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlTmFtZSkpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6JGZyYW1lc1skdmVyc2lvbl0gPSBzZWxmOjpjcmVhdGVGcmFtZSgkdmVyc2lvbik7DQogICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkZmlsZU5hbWUsIHNlbGY6OnNlcmlhbChzZWxmOjokZnJhbWVzWyR2ZXJzaW9uXSkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgc2VsZjo6JGZyYW1lc1skdmVyc2lvbl0gPSBzZWxmOjpjcmVhdGVGcmFtZSgkdmVyc2lvbik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZihpc19udWxsKHNlbGY6OiRmcmFtZXNbJHZlcnNpb25dKSkNCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsNCg0KICAgICAgICAgICAgcmV0dXJuIHNlbGY6OiRmcmFtZXNbJHZlcnNpb25dOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcnNCbG9ja051bSgkc3BlYykgICAgIHsgcmV0dXJuICRzcGVjWzBdICsgJHNwZWNbM107IH0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByc0Jsb2NrTnVtMSgkc3BlYykgICAgeyByZXR1cm4gJHNwZWNbMF07IH0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByc0RhdGFDb2RlczEoJHNwZWMpICAgeyByZXR1cm4gJHNwZWNbMV07IH0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByc0VjY0NvZGVzMSgkc3BlYykgICAgeyByZXR1cm4gJHNwZWNbMl07IH0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByc0Jsb2NrTnVtMigkc3BlYykgICAgeyByZXR1cm4gJHNwZWNbM107IH0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByc0RhdGFDb2RlczIoJHNwZWMpICAgeyByZXR1cm4gJHNwZWNbNF07IH0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByc0VjY0NvZGVzMigkc3BlYykgICAgeyByZXR1cm4gJHNwZWNbMl07IH0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByc0RhdGFMZW5ndGgoJHNwZWMpICAgeyByZXR1cm4gKCRzcGVjWzBdICogJHNwZWNbMV0pICsgKCRzcGVjWzNdICogJHNwZWNbNF0pOyAgICB9DQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcnNFY2NMZW5ndGgoJHNwZWMpICAgIHsgcmV0dXJuICgkc3BlY1swXSArICRzcGVjWzNdKSAqICRzcGVjWzJdOyB9DQogICAgICAgIA0KICAgIH0=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/qrsplit.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qDQogKiBQSFAgUVIgQ29kZSBlbmNvZGVyDQogKg0KICogSW5wdXQgc3BsaXR0aW5nIGNsYXNzZXMNCiAqDQogKiBCYXNlZCBvbiBsaWJxcmVuY29kZSBDIGxpYnJhcnkgZGlzdHJpYnV0ZWQgdW5kZXIgTEdQTCAyLjENCiAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBLZW50YXJvIEZ1a3VjaGkgPGZ1a3VjaGlAbWVnYXVpLm5ldD4NCiAqDQogKiBQSFAgUVIgQ29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBMR1BMIDMNCiAqIENvcHlyaWdodCAoQykgMjAxMCBEb21pbmlrIER6aWVuaWEgPGRlbHRhbGFiIGF0IHBvY3p0YSBkb3QgZm0+DQogKg0KICogVGhlIGZvbGxvd2luZyBkYXRhIC8gc3BlY2lmaWNhdGlvbnMgYXJlIHRha2VuIGZyb20NCiAqICJUd28gZGltZW5zaW9uYWwgc3ltYm9sIC0tIFFSLWNvZGUgLS0gQmFzaWMgU3BlY2lmaWNhdGlvbiIgKEpJUyBYMDUxMDoyMDA0KQ0KICogIG9yDQogKiAiQXV0b21hdGljIGlkZW50aWZpY2F0aW9uIGFuZCBkYXRhIGNhcHR1cmUgdGVjaG5pcXVlcyAtLSANCiAqICBRUiBDb2RlIDIwMDUgYmFyIGNvZGUgc3ltYm9sb2d5IHNwZWNpZmljYXRpb24iIChJU08vSUVDIDE4MDA0OjIwMDYpDQogKg0KICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQogKiB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIGFueSBsYXRlciB2ZXJzaW9uLg0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUNCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQogKg0KICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBDQogKi8NCiAgICBjbGFzcyBRUnNwbGl0IHsNCg0KICAgICAgICBwdWJsaWMgJGRhdGFTdHIgPSAnJzsNCiAgICAgICAgcHVibGljICRpbnB1dDsNCiAgICAgICAgcHVibGljICRtb2RlSGludDsNCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRkYXRhU3RyLCAkaW5wdXQsICRtb2RlSGludCkgDQogICAgICAgIHsNCiAgICAgICAgICAgICR0aGlzLT5kYXRhU3RyICA9ICRkYXRhU3RyOw0KICAgICAgICAgICAgJHRoaXMtPmlucHV0ICAgID0gJGlucHV0Ow0KICAgICAgICAgICAgJHRoaXMtPm1vZGVIaW50ID0gJG1vZGVIaW50Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc2RpZ2l0YXQoJHN0ciwgJHBvcykNCiAgICAgICAgeyAgICANCiAgICAgICAgICAgIGlmICgkcG9zID49IHN0cmxlbigkc3RyKSkNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICANCiAgICAgICAgICAgIHJldHVybiAoKG9yZCgkc3RyWyRwb3NdKSA+PSBvcmQoJzAnKSkmJihvcmQoJHN0clskcG9zXSkgPD0gb3JkKCc5JykpKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNhbG51bWF0KCRzdHIsICRwb3MpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmICgkcG9zID49IHN0cmxlbigkc3RyKSkNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICByZXR1cm4gKFFSaW5wdXQ6Omxvb2tBblRhYmxlKG9yZCgkc3RyWyRwb3NdKSkgPj0gMCk7DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGlkZW50aWZ5TW9kZSgkcG9zKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoJHBvcyA+PSBzdHJsZW4oJHRoaXMtPmRhdGFTdHIpKSANCiAgICAgICAgICAgICAgICByZXR1cm4gUVJfTU9ERV9OVUw7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAkYyA9ICR0aGlzLT5kYXRhU3RyWyRwb3NdOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZihzZWxmOjppc2RpZ2l0YXQoJHRoaXMtPmRhdGFTdHIsICRwb3MpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIFFSX01PREVfTlVNOw0KICAgICAgICAgICAgfSBlbHNlIGlmKHNlbGY6OmlzYWxudW1hdCgkdGhpcy0+ZGF0YVN0ciwgJHBvcykpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gUVJfTU9ERV9BTjsNCiAgICAgICAgICAgIH0gZWxzZSBpZigkdGhpcy0+bW9kZUhpbnQgPT0gUVJfTU9ERV9LQU5KSSkgew0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKCRwb3MrMSA8IHN0cmxlbigkdGhpcy0+ZGF0YVN0cikpIA0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgJGQgPSAkdGhpcy0+ZGF0YVN0clskcG9zKzFdOw0KICAgICAgICAgICAgICAgICAgICAkd29yZCA9IChvcmQoJGMpIDw8IDgpIHwgb3JkKCRkKTsNCiAgICAgICAgICAgICAgICAgICAgaWYoKCR3b3JkID49IDB4ODE0MCAmJiAkd29yZCA8PSAweDlmZmMpIHx8ICgkd29yZCA+PSAweGUwNDAgJiYgJHdvcmQgPD0gMHhlYmJmKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFFSX01PREVfS0FOSkk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiBRUl9NT0RFXzg7DQogICAgICAgIH0gDQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGVhdE51bSgpDQogICAgICAgIHsNCiAgICAgICAgICAgICRsbiA9IFFSc3BlYzo6bGVuZ3RoSW5kaWNhdG9yKFFSX01PREVfTlVNLCAkdGhpcy0+aW5wdXQtPmdldFZlcnNpb24oKSk7DQoNCiAgICAgICAgICAgICRwID0gMDsNCiAgICAgICAgICAgIHdoaWxlKHNlbGY6OmlzZGlnaXRhdCgkdGhpcy0+ZGF0YVN0ciwgJHApKSB7DQogICAgICAgICAgICAgICAgJHArKzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHJ1biA9ICRwOw0KICAgICAgICAgICAgJG1vZGUgPSAkdGhpcy0+aWRlbnRpZnlNb2RlKCRwKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoJG1vZGUgPT0gUVJfTU9ERV84KSB7DQogICAgICAgICAgICAgICAgJGRpZiA9IFFSaW5wdXQ6OmVzdGltYXRlQml0c01vZGVOdW0oJHJ1bikgKyA0ICsgJGxuDQogICAgICAgICAgICAgICAgICAgICArIFFSaW5wdXQ6OmVzdGltYXRlQml0c01vZGU4KDEpICAgICAgICAgLy8gKyA0ICsgbDgNCiAgICAgICAgICAgICAgICAgICAgIC0gUVJpbnB1dDo6ZXN0aW1hdGVCaXRzTW9kZTgoJHJ1biArIDEpOyAvLyAtIDQgLSBsOA0KICAgICAgICAgICAgICAgIGlmKCRkaWYgPiAwKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZWF0OCgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmKCRtb2RlID09IFFSX01PREVfQU4pIHsNCiAgICAgICAgICAgICAgICAkZGlmID0gUVJpbnB1dDo6ZXN0aW1hdGVCaXRzTW9kZU51bSgkcnVuKSArIDQgKyAkbG4NCiAgICAgICAgICAgICAgICAgICAgICsgUVJpbnB1dDo6ZXN0aW1hdGVCaXRzTW9kZUFuKDEpICAgICAgICAvLyArIDQgKyBsYQ0KICAgICAgICAgICAgICAgICAgICAgLSBRUmlucHV0Ojplc3RpbWF0ZUJpdHNNb2RlQW4oJHJ1biArIDEpOy8vIC0gNCAtIGxhDQogICAgICAgICAgICAgICAgaWYoJGRpZiA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5lYXRBbigpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHJldCA9ICR0aGlzLT5pbnB1dC0+YXBwZW5kKFFSX01PREVfTlVNLCAkcnVuLCBzdHJfc3BsaXQoJHRoaXMtPmRhdGFTdHIpKTsNCiAgICAgICAgICAgIGlmKCRyZXQgPCAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCg0KICAgICAgICAgICAgcmV0dXJuICRydW47DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZWF0QW4oKQ0KICAgICAgICB7DQogICAgICAgICAgICAkbGEgPSBRUnNwZWM6Omxlbmd0aEluZGljYXRvcihRUl9NT0RFX0FOLCAgJHRoaXMtPmlucHV0LT5nZXRWZXJzaW9uKCkpOw0KICAgICAgICAgICAgJGxuID0gUVJzcGVjOjpsZW5ndGhJbmRpY2F0b3IoUVJfTU9ERV9OVU0sICR0aGlzLT5pbnB1dC0+Z2V0VmVyc2lvbigpKTsNCg0KICAgICAgICAgICAgJHAgPSAwOw0KICAgICAgICAgICAgDQogICAgICAgICAgICB3aGlsZShzZWxmOjppc2FsbnVtYXQoJHRoaXMtPmRhdGFTdHIsICRwKSkgew0KICAgICAgICAgICAgICAgIGlmKHNlbGY6OmlzZGlnaXRhdCgkdGhpcy0+ZGF0YVN0ciwgJHApKSB7DQogICAgICAgICAgICAgICAgICAgICRxID0gJHA7DQogICAgICAgICAgICAgICAgICAgIHdoaWxlKHNlbGY6OmlzZGlnaXRhdCgkdGhpcy0+ZGF0YVN0ciwgJHEpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcSsrOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAkZGlmID0gUVJpbnB1dDo6ZXN0aW1hdGVCaXRzTW9kZUFuKCRwKSAvLyArIDQgKyBsYQ0KICAgICAgICAgICAgICAgICAgICAgICAgICsgUVJpbnB1dDo6ZXN0aW1hdGVCaXRzTW9kZU51bSgkcSAtICRwKSArIDQgKyAkbG4NCiAgICAgICAgICAgICAgICAgICAgICAgICAtIFFSaW5wdXQ6OmVzdGltYXRlQml0c01vZGVBbigkcSk7IC8vIC0gNCAtIGxhDQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIGlmKCRkaWYgPCAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwID0gJHE7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkcCsrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHJ1biA9ICRwOw0KDQogICAgICAgICAgICBpZighc2VsZjo6aXNhbG51bWF0KCR0aGlzLT5kYXRhU3RyLCAkcCkpIHsNCiAgICAgICAgICAgICAgICAkZGlmID0gUVJpbnB1dDo6ZXN0aW1hdGVCaXRzTW9kZUFuKCRydW4pICsgNCArICRsYQ0KICAgICAgICAgICAgICAgICAgICAgKyBRUmlucHV0Ojplc3RpbWF0ZUJpdHNNb2RlOCgxKSAvLyArIDQgKyBsOA0KICAgICAgICAgICAgICAgICAgICAgIC0gUVJpbnB1dDo6ZXN0aW1hdGVCaXRzTW9kZTgoJHJ1biArIDEpOyAvLyAtIDQgLSBsOA0KICAgICAgICAgICAgICAgIGlmKCRkaWYgPiAwKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZWF0OCgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHJldCA9ICR0aGlzLT5pbnB1dC0+YXBwZW5kKFFSX01PREVfQU4sICRydW4sIHN0cl9zcGxpdCgkdGhpcy0+ZGF0YVN0cikpOw0KICAgICAgICAgICAgaWYoJHJldCA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KDQogICAgICAgICAgICByZXR1cm4gJHJ1bjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlYXRLYW5qaSgpDQogICAgICAgIHsNCiAgICAgICAgICAgICRwID0gMDsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgd2hpbGUoJHRoaXMtPmlkZW50aWZ5TW9kZSgkcCkgPT0gUVJfTU9ERV9LQU5KSSkgew0KICAgICAgICAgICAgICAgICRwICs9IDI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgICRyZXQgPSAkdGhpcy0+aW5wdXQtPmFwcGVuZChRUl9NT0RFX0tBTkpJLCAkcCwgc3RyX3NwbGl0KCR0aGlzLT5kYXRhU3RyKSk7DQogICAgICAgICAgICBpZigkcmV0IDwgMCkNCiAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQoNCiAgICAgICAgICAgIHJldHVybiAkcnVuOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlYXQ4KCkNCiAgICAgICAgew0KICAgICAgICAgICAgJGxhID0gUVJzcGVjOjpsZW5ndGhJbmRpY2F0b3IoUVJfTU9ERV9BTiwgJHRoaXMtPmlucHV0LT5nZXRWZXJzaW9uKCkpOw0KICAgICAgICAgICAgJGxuID0gUVJzcGVjOjpsZW5ndGhJbmRpY2F0b3IoUVJfTU9ERV9OVU0sICR0aGlzLT5pbnB1dC0+Z2V0VmVyc2lvbigpKTsNCg0KICAgICAgICAgICAgJHAgPSAxOw0KICAgICAgICAgICAgJGRhdGFTdHJMZW4gPSBzdHJsZW4oJHRoaXMtPmRhdGFTdHIpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICB3aGlsZSgkcCA8ICRkYXRhU3RyTGVuKSB7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJG1vZGUgPSAkdGhpcy0+aWRlbnRpZnlNb2RlKCRwKTsNCiAgICAgICAgICAgICAgICBpZigkbW9kZSA9PSBRUl9NT0RFX0tBTkpJKSB7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZigkbW9kZSA9PSBRUl9NT0RFX05VTSkgew0KICAgICAgICAgICAgICAgICAgICAkcSA9ICRwOw0KICAgICAgICAgICAgICAgICAgICB3aGlsZShzZWxmOjppc2RpZ2l0YXQoJHRoaXMtPmRhdGFTdHIsICRxKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHErKzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkZGlmID0gUVJpbnB1dDo6ZXN0aW1hdGVCaXRzTW9kZTgoJHApIC8vICsgNCArIGw4DQogICAgICAgICAgICAgICAgICAgICAgICAgKyBRUmlucHV0Ojplc3RpbWF0ZUJpdHNNb2RlTnVtKCRxIC0gJHApICsgNCArICRsbg0KICAgICAgICAgICAgICAgICAgICAgICAgIC0gUVJpbnB1dDo6ZXN0aW1hdGVCaXRzTW9kZTgoJHEpOyAvLyAtIDQgLSBsOA0KICAgICAgICAgICAgICAgICAgICBpZigkZGlmIDwgMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcCA9ICRxOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIGlmKCRtb2RlID09IFFSX01PREVfQU4pIHsNCiAgICAgICAgICAgICAgICAgICAgJHEgPSAkcDsNCiAgICAgICAgICAgICAgICAgICAgd2hpbGUoc2VsZjo6aXNhbG51bWF0KCR0aGlzLT5kYXRhU3RyLCAkcSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRxKys7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJGRpZiA9IFFSaW5wdXQ6OmVzdGltYXRlQml0c01vZGU4KCRwKSAgLy8gKyA0ICsgbDgNCiAgICAgICAgICAgICAgICAgICAgICAgICArIFFSaW5wdXQ6OmVzdGltYXRlQml0c01vZGVBbigkcSAtICRwKSArIDQgKyAkbGENCiAgICAgICAgICAgICAgICAgICAgICAgICAtIFFSaW5wdXQ6OmVzdGltYXRlQml0c01vZGU4KCRxKTsgLy8gLSA0IC0gbDgNCiAgICAgICAgICAgICAgICAgICAgaWYoJGRpZiA8IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgJHAgPSAkcTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRwKys7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkcnVuID0gJHA7DQogICAgICAgICAgICAkcmV0ID0gJHRoaXMtPmlucHV0LT5hcHBlbmQoUVJfTU9ERV84LCAkcnVuLCBzdHJfc3BsaXQoJHRoaXMtPmRhdGFTdHIpKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoJHJldCA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KDQogICAgICAgICAgICByZXR1cm4gJHJ1bjsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gc3BsaXRTdHJpbmcoKQ0KICAgICAgICB7DQogICAgICAgICAgICB3aGlsZSAoc3RybGVuKCR0aGlzLT5kYXRhU3RyKSA+IDApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYoJHRoaXMtPmRhdGFTdHIgPT0gJycpDQogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOw0KDQogICAgICAgICAgICAgICAgJG1vZGUgPSAkdGhpcy0+aWRlbnRpZnlNb2RlKDApOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHN3aXRjaCAoJG1vZGUpIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSBRUl9NT0RFX05VTTogJGxlbmd0aCA9ICR0aGlzLT5lYXROdW0oKTsgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV9BTjogICRsZW5ndGggPSAkdGhpcy0+ZWF0QW4oKTsgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgUVJfTU9ERV9LQU5KSToNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaGludCA9PSBRUl9NT0RFX0tBTkpJKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGVuZ3RoID0gJHRoaXMtPmVhdEthbmppKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlICAgICRsZW5ndGggPSAkdGhpcy0+ZWF0OCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICRsZW5ndGggPSAkdGhpcy0+ZWF0OCgpOyBicmVhazsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZigkbGVuZ3RoID09IDApIHJldHVybiAwOw0KICAgICAgICAgICAgICAgIGlmKCRsZW5ndGggPCAwKSAgcmV0dXJuIC0xOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICR0aGlzLT5kYXRhU3RyID0gc3Vic3RyKCR0aGlzLT5kYXRhU3RyLCAkbGVuZ3RoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gdG9VcHBlcigpDQogICAgICAgIHsNCiAgICAgICAgICAgICRzdHJpbmdMZW4gPSBzdHJsZW4oJHRoaXMtPmRhdGFTdHIpOw0KICAgICAgICAgICAgJHAgPSAwOw0KICAgICAgICAgICAgDQogICAgICAgICAgICB3aGlsZSAoJHA8JHN0cmluZ0xlbikgew0KICAgICAgICAgICAgICAgICRtb2RlID0gc2VsZjo6aWRlbnRpZnlNb2RlKHN1YnN0cigkdGhpcy0+ZGF0YVN0ciwgJHApLCAkdGhpcy0+bW9kZUhpbnQpOw0KICAgICAgICAgICAgICAgIGlmKCRtb2RlID09IFFSX01PREVfS0FOSkkpIHsNCiAgICAgICAgICAgICAgICAgICAgJHAgKz0gMjsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBpZiAob3JkKCR0aGlzLT5kYXRhU3RyWyRwXSkgPj0gb3JkKCdhJykgJiYgb3JkKCR0aGlzLT5kYXRhU3RyWyRwXSkgPD0gb3JkKCd6JykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kYXRhU3RyWyRwXSA9IGNocihvcmQoJHRoaXMtPmRhdGFTdHJbJHBdKSAtIDMyKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkcCsrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhU3RyOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3BsaXRTdHJpbmdUb1FSaW5wdXQoJHN0cmluZywgUVJpbnB1dCAkaW5wdXQsICRtb2RlSGludCwgJGNhc2VzZW5zaXRpdmUgPSB0cnVlKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZihpc19udWxsKCRzdHJpbmcpIHx8ICRzdHJpbmcgPT0gJ1wwJyB8fCAkc3RyaW5nID09ICcnKSB7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignZW1wdHkgc3RyaW5nISEhJyk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRzcGxpdCA9IG5ldyBRUnNwbGl0KCRzdHJpbmcsICRpbnB1dCwgJG1vZGVIaW50KTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoISRjYXNlc2Vuc2l0aXZlKQ0KICAgICAgICAgICAgICAgICRzcGxpdC0+dG9VcHBlcigpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgcmV0dXJuICRzcGxpdC0+c3BsaXRTdHJpbmcoKTsNCiAgICAgICAgfQ0KICAgIH0=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/qrtools.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qDQogKiBQSFAgUVIgQ29kZSBlbmNvZGVyDQogKg0KICogVG9vbHNldCwgaGFuZHkgYW5kIGRlYnVnIHV0aWxpdGVzLg0KICoNCiAqIFBIUCBRUiBDb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIExHUEwgMw0KICogQ29weXJpZ2h0IChDKSAyMDEwIERvbWluaWsgRHppZW5pYSA8ZGVsdGFsYWIgYXQgcG9jenRhIGRvdCBmbT4NCiAqDQogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCiAqIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgYW55IGxhdGVyIHZlcnNpb24uDQogKg0KICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQ0KICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiAqDQogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0ENCiAqLw0KDQogICAgY2xhc3MgUVJ0b29scyB7DQogICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJpbmFyaXplKCRmcmFtZSkNCiAgICAgICAgew0KICAgICAgICAgICAgJGxlbiA9IGNvdW50KCRmcmFtZSk7DQogICAgICAgICAgICBmb3JlYWNoICgkZnJhbWUgYXMgJiRmcmFtZUxpbmUpIHsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBmb3IoJGk9MDsgJGk8JGxlbjsgJGkrKykgew0KICAgICAgICAgICAgICAgICAgICAkZnJhbWVMaW5lWyRpXSA9IChvcmQoJGZyYW1lTGluZVskaV0pJjEpPycxJzonMCc7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICByZXR1cm4gJGZyYW1lOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0Y3BkZkJhcmNvZGVBcnJheSgkY29kZSwgJG1vZGUgPSAnUVIsTCcsICR0Y1BkZlZlcnNpb24gPSAnNC41LjAzNycpDQogICAgICAgIHsNCiAgICAgICAgICAgICRiYXJjb2RlX2FycmF5ID0gYXJyYXkoKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKCFpc19hcnJheSgkbW9kZSkpDQogICAgICAgICAgICAgICAgJG1vZGUgPSBleHBsb2RlKCcsJywgJG1vZGUpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgJGVjY0xldmVsID0gJ0wnOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKGNvdW50KCRtb2RlKSA+IDEpIHsNCiAgICAgICAgICAgICAgICAkZWNjTGV2ZWwgPSAkbW9kZVsxXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICRxclRhYiA9IFFSY29kZTo6dGV4dCgkY29kZSwgZmFsc2UsICRlY2NMZXZlbCk7DQogICAgICAgICAgICAkc2l6ZSA9IGNvdW50KCRxclRhYik7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAkYmFyY29kZV9hcnJheVsnbnVtX3Jvd3MnXSA9ICRzaXplOw0KICAgICAgICAgICAgJGJhcmNvZGVfYXJyYXlbJ251bV9jb2xzJ10gPSAkc2l6ZTsNCiAgICAgICAgICAgICRiYXJjb2RlX2FycmF5WydiY29kZSddID0gYXJyYXkoKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIGZvcmVhY2ggKCRxclRhYiBhcyAkbGluZSkgew0KICAgICAgICAgICAgICAgICRhcnJBZGQgPSBhcnJheSgpOw0KICAgICAgICAgICAgICAgIGZvcmVhY2goc3RyX3NwbGl0KCRsaW5lKSBhcyAkY2hhcikNCiAgICAgICAgICAgICAgICAgICAgJGFyckFkZFtdID0gKCRjaGFyPT0nMScpPzE6MDsNCiAgICAgICAgICAgICAgICAkYmFyY29kZV9hcnJheVsnYmNvZGUnXVtdID0gJGFyckFkZDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICByZXR1cm4gJGJhcmNvZGVfYXJyYXk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNsZWFyQ2FjaGUoKQ0KICAgICAgICB7DQogICAgICAgICAgICBzZWxmOjokZnJhbWVzID0gYXJyYXkoKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYnVpbGRDYWNoZSgpDQogICAgICAgIHsNCgkJCVFSdG9vbHM6Om1hcmtUaW1lKCdiZWZvcmVfYnVpbGRfY2FjaGUnKTsNCgkJCQ0KCQkJJG1hc2sgPSBuZXcgUVJtYXNrKCk7DQogICAgICAgICAgICBmb3IgKCRhPTE7ICRhIDw9IFFSU1BFQ19WRVJTSU9OX01BWDsgJGErKykgew0KICAgICAgICAgICAgICAgICRmcmFtZSA9IFFSc3BlYzo6bmV3RnJhbWUoJGEpOw0KICAgICAgICAgICAgICAgIGlmIChRUl9JTUFHRSkgew0KICAgICAgICAgICAgICAgICAgICAkZmlsZU5hbWUgPSBRUl9DQUNIRV9ESVIuJ2ZyYW1lXycuJGEuJy5wbmcnOw0KICAgICAgICAgICAgICAgICAgICBRUmltYWdlOjpwbmcoc2VsZjo6YmluYXJpemUoJGZyYW1lKSwgJGZpbGVOYW1lLCAxLCAwKTsNCiAgICAgICAgICAgICAgICB9DQoJCQkJDQoJCQkJJHdpZHRoID0gY291bnQoJGZyYW1lKTsNCgkJCQkkYml0TWFzayA9IGFycmF5X2ZpbGwoMCwgJHdpZHRoLCBhcnJheV9maWxsKDAsICR3aWR0aCwgMCkpOw0KCQkJCWZvciAoJG1hc2tObz0wOyAkbWFza05vPDg7ICRtYXNrTm8rKykNCgkJCQkJJG1hc2stPm1ha2VNYXNrTm8oJG1hc2tObywgJHdpZHRoLCAkZnJhbWUsICRiaXRNYXNrLCB0cnVlKTsNCiAgICAgICAgICAgIH0NCgkJCQ0KCQkJUVJ0b29sczo6bWFya1RpbWUoJ2FmdGVyX2J1aWxkX2NhY2hlJyk7DQogICAgICAgIH0NCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2coJG91dGZpbGUsICRlcnIpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChRUl9MT0dfRElSICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIGlmICgkZXJyICE9ICcnKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkb3V0ZmlsZSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKFFSX0xPR19ESVIuYmFzZW5hbWUoJG91dGZpbGUpLictZXJyb3JzLnR4dCcsIGRhdGUoJ1ktbS1kIEg6aTpzJykuJzogJy4kZXJyLCBGSUxFX0FQUEVORCk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3B1dF9jb250ZW50cyhRUl9MT0dfRElSLidlcnJvcnMudHh0JywgZGF0ZSgnWS1tLWQgSDppOnMnKS4nOiAnLiRlcnIsIEZJTEVfQVBQRU5EKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gICAgDQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGR1bXBNYXNrKCRmcmFtZSkgDQogICAgICAgIHsNCiAgICAgICAgICAgICR3aWR0aCA9IGNvdW50KCRmcmFtZSk7DQogICAgICAgICAgICBmb3IoJHk9MDskeTwkd2lkdGg7JHkrKykgew0KICAgICAgICAgICAgICAgIGZvcigkeD0wOyR4PCR3aWR0aDskeCsrKSB7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gb3JkKCRmcmFtZVskeV1bJHhdKS4nLCc7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYXJrVGltZSgkbWFya2VySWQpDQogICAgICAgIHsNCiAgICAgICAgICAgIGxpc3QoJHVzZWMsICRzZWMpID0gZXhwbG9kZSgiICIsIG1pY3JvdGltZSgpKTsNCiAgICAgICAgICAgICR0aW1lID0gKChmbG9hdCkkdXNlYyArIChmbG9hdCkkc2VjKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKCFpc3NldCgkR0xPQkFMU1sncXJfdGltZV9iZW5jaCddKSkNCiAgICAgICAgICAgICAgICAkR0xPQkFMU1sncXJfdGltZV9iZW5jaCddID0gYXJyYXkoKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJEdMT0JBTFNbJ3FyX3RpbWVfYmVuY2gnXVskbWFya2VySWRdID0gJHRpbWU7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRpbWVCZW5jaG1hcmsoKQ0KICAgICAgICB7DQogICAgICAgICAgICBzZWxmOjptYXJrVGltZSgnZmluaXNoJyk7DQogICAgICAgIA0KICAgICAgICAgICAgJGxhc3RUaW1lID0gMDsNCiAgICAgICAgICAgICRzdGFydFRpbWUgPSAwOw0KICAgICAgICAgICAgJHAgPSAwOw0KDQogICAgICAgICAgICBlY2hvICc8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIxIj4NCiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPjx0ciBzdHlsZT0iYm9yZGVyLWJvdHRvbToxcHggc29saWQgc2lsdmVyIj48dGQgY29sc3Bhbj0iMiIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj5CRU5DSE1BUks8L3RkPjwvdHI+PC90aGVhZD4NCiAgICAgICAgICAgICAgICAgICAgPHRib2R5Pic7DQoNCiAgICAgICAgICAgIGZvcmVhY2goJEdMT0JBTFNbJ3FyX3RpbWVfYmVuY2gnXSBhcyAkbWFya2VySWQ9PiR0aGlzVGltZSkgew0KICAgICAgICAgICAgICAgIGlmICgkcCA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRyPjx0aCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+dGlsbCAnLiRtYXJrZXJJZC4nOiA8L3RoPjx0ZD4nLm51bWJlcl9mb3JtYXQoJHRoaXNUaW1lLSRsYXN0VGltZSwgNikuJ3M8L3RkPjwvdHI+JzsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkc3RhcnRUaW1lID0gJHRoaXNUaW1lOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkcCsrOw0KICAgICAgICAgICAgICAgICRsYXN0VGltZSA9ICR0aGlzVGltZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZWNobyAnPC90Ym9keT48dGZvb3Q+DQogICAgICAgICAgICAgICAgPHRyIHN0eWxlPSJib3JkZXItdG9wOjJweCBzb2xpZCBibGFjayI+PHRoIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij5UT1RBTDogPC90aD48dGQ+Jy5udW1iZXJfZm9ybWF0KCRsYXN0VGltZS0kc3RhcnRUaW1lLCA2KS4nczwvdGQ+PC90cj4NCiAgICAgICAgICAgIDwvdGZvb3Q+DQogICAgICAgICAgICA8L3RhYmxlPic7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgfQ0KICAgIA0KICAgIC8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICANCiAgICBRUnRvb2xzOjptYXJrVGltZSgnc3RhcnQnKTsNCiAgICA=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/README</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhpcyBpcyBQSFAgaW1wbGVtZW50YXRpb24gb2YgUVIgQ29kZSAyLUQgYmFyY29kZSBnZW5lcmF0b3IuIEl0IGlzIHB1cmUtcGhwDQpMR1BMLWxpY2Vuc2VkIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIEMgbGlicXJlbmNvZGUgYnkgS2VudGFybyBGdWt1Y2hpLg0KDQo9PSBMSUNFTlNJTkcgPT0NCg0KQ29weXJpZ2h0IChDKSAyMDEwIGJ5IERvbWluaWsgRHppZW5pYSANCg0KVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCnRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQ0KU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgYW55IGxhdGVyIHZlcnNpb24uDQoNClRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkNCldBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEENClBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKExJQ0VOU0UgZmlsZSkNCmZvciBtb3JlIGRldGFpbHMuDQoNCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZw0Kd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTENCkZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQ0KDQo9PSBJTlNUQUxBVElPTiBBTkQgVVNBR0UgPT0NCg0KICogSU5TVEFMTCBmaWxlDQogKiBodHRwOi8vc291cmNlZm9yZ2UubmV0L2FwcHMvbWVkaWF3aWtpL3BocHFyY29kZS9pbmRleC5waHA/dGl0bGU9TWFpbl9QYWdlDQoNCj09IENPTlRBQ1QgPT0NCg0KRmVsbCBmcmVlIHRvIGNvbnRhY3QgbWUgdmlhIGUtbWFpbCAoZGVsdGFsYWIgYXQgcG9jenRhIGRvdCBmbSkgb3IgdXNpbmcNCmZvbG93aW5nIHByb2plY3QgcGFnZXM6DQoNCiAqIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcGhwcXJjb2RlLw0KICogaHR0cDovL3BocHFyY29kZS5zb3VyY2Vmb3JnZS5uZXQvDQogIA0KPT0gQUNLTk9XTEVER01FTlRTID09DQoNCkJhc2VkIG9uIEMgbGlicXJlbmNvZGUgbGlicmFyeSAodmVyLiAzLjEuMSkgDQpDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMCBieSBLZW50YXJvIEZ1a3VjaGkNCmh0dHA6Ly9tZWdhdWkubmV0L2Z1a3VjaGkvd29ya3MvcXJlbmNvZGUvaW5kZXguZW4uaHRtbA0KDQpRUiBDb2RlIGlzIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBvZiBERU5TTyBXQVZFIElOQ09SUE9SQVRFRCBpbiBKQVBBTiBhbmQgb3RoZXINCmNvdW50cmllcy4NCg0KUmVlZC1Tb2xvbW9uIGNvZGUgZW5jb2RlciBpcyB3cml0dGVuIGJ5IFBoaWwgS2FybiwgS0E5US4NCkNvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNiBQaGlsIEthcm4sIEtBOVENCiA=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/tools/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/libs/phpqrcode/tools/merge.bat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[cGhwIC4vbWVyZ2UucGhwDQpwYXVzZQ==]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/tools/merge.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoNCiAqIFBIUCBRUiBDb2RlIGVuY29kZXINCiAqDQogKiBUb29sIGZvciBtZXJnaW5nIGFsbCBsaWJyYXJ5IGZpbGVzIGludG8gb25lLCBzaW1wbGVyIHRvIGluY29ycG9yYXRlLg0KICogDQogKiBNQUtFIFNVUkUgVEhBVCBSRVNVTFRJTkcgUEhQUVJDb2RlLnBocCAoYW5kIGl0cyBkaXIpIEFSRSBXUklUQUJMRSENCiAqDQogKiBQSFAgUVIgQ29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBMR1BMIDMNCiAqIENvcHlyaWdodCAoQykgMjAxMCBEb21pbmlrIER6aWVuaWEgPGRlbHRhbGFiIGF0IHBvY3p0YSBkb3QgZm0+DQogKg0KICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQogKiB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIGFueSBsYXRlciB2ZXJzaW9uLg0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUNCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQogKg0KICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBDQogKi8NCiANCiAgICAkUVJfQkFTRURJUiA9IGRpcm5hbWUoX19GSUxFX18pLkRJUkVDVE9SWV9TRVBBUkFUT1IuJy4uJy5ESVJFQ1RPUllfU0VQQVJBVE9SOw0KICAgICRRUl9UT09MU0RJUiA9IGRpcm5hbWUoX19GSUxFX18pLkRJUkVDVE9SWV9TRVBBUkFUT1I7DQogICAgDQogICAgJG91dHB1dEZpbGUgPSAkUVJfQkFTRURJUi4ncGhwcXJjb2RlLnBocCc7DQogICAgDQogICAgLy8gUmVxdWlyZWQgbGlicw0KICAgIA0KICAgICRmaWxlTGlzdCA9IGFycmF5KA0KICAgICAgICAkUVJfQkFTRURJUi4ncXJjb25zdC5waHAnLA0KICAgICAgICAkUVJfVE9PTFNESVIuJ21lcmdlZF9jb25maWcucGhwJywNCiAgICAgICAgJFFSX0JBU0VESVIuJ3FydG9vbHMucGhwJywNCiAgICAgICAgJFFSX0JBU0VESVIuJ3Fyc3BlYy5waHAnLA0KICAgICAgICAkUVJfQkFTRURJUi4ncXJpbWFnZS5waHAnLA0KICAgICAgICAkUVJfQkFTRURJUi4ncXJpbnB1dC5waHAnLA0KICAgICAgICAkUVJfQkFTRURJUi4ncXJiaXRzdHJlYW0ucGhwJywNCiAgICAgICAgJFFSX0JBU0VESVIuJ3Fyc3BsaXQucGhwJywNCiAgICAgICAgJFFSX0JBU0VESVIuJ3FycnNjb2RlLnBocCcsDQogICAgICAgICRRUl9CQVNFRElSLidxcm1hc2sucGhwJywNCiAgICAgICAgJFFSX0JBU0VESVIuJ3FyZW5jb2RlLnBocCcNCiAgICApOw0KICAgIA0KICAgICRoZWFkZXJGaWxlID0gJFFSX1RPT0xTRElSLidtZXJnZWRfaGVhZGVyLnBocCc7DQogICAgJHZlcnNpb25GaWxlID0gJFFSX0JBU0VESVIuJ1ZFUlNJT04nOw0KICAgIA0KICAgICRvdXRwdXRDb2RlID0gJyc7DQogICAgDQogICAgZm9yZWFjaCgkZmlsZUxpc3QgYXMgJGZpbGVOYW1lKSB7DQogICAgICAgICRvdXRwdXRDb2RlIC49ICJcblxuIi4nLy8tLS0tICcuYmFzZW5hbWUoJGZpbGVOYW1lKS4nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJy4iXG5cbiI7DQogICAgICAgICRhbm90aGVyQ29kZSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlTmFtZSk7DQogICAgICAgICRhbm90aGVyQ29kZSA9IHByZWdfcmVwbGFjZSAoJy9ePFw/cGhwLycsICcnLCAkYW5vdGhlckNvZGUpOw0KICAgICAgICAkYW5vdGhlckNvZGUgPSBwcmVnX3JlcGxhY2UgKCcvXD8+XCokLycsICcnLCAkYW5vdGhlckNvZGUpOw0KICAgICAgICAkb3V0cHV0Q29kZSAuPSAiXG5cbiIuJGFub3RoZXJDb2RlLiJcblxuIjsNCiAgICB9DQogICAgDQoJJHZlcnNpb25EYXRhRXggPSBleHBsb2RlKCJcbiIsIGZpbGVfZ2V0X2NvbnRlbnRzKCR2ZXJzaW9uRmlsZSkpOw0KCQ0KICAgICRvdXRwdXRDb250ZW50cyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRoZWFkZXJGaWxlKTsNCiAgICAkb3V0cHV0Q29udGVudHMgLj0gIlxuXG4vKlxuICogVmVyc2lvbjogIi50cmltKCR2ZXJzaW9uRGF0YUV4WzBdKS4iXG4gKiBCdWlsZDogIi50cmltKCR2ZXJzaW9uRGF0YUV4WzFdKS4iXG4gKi9cblxuIjsNCiAgICAkb3V0cHV0Q29udGVudHMgLj0gJG91dHB1dENvZGU7DQogICAgDQogICAgZmlsZV9wdXRfY29udGVudHMoJG91dHB1dEZpbGUsICRvdXRwdXRDb250ZW50cyk7DQogICAgDQogICAg]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/tools/merge.sh</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvYmluL3NoDQpwaHAgLi9tZXJnZS5waHA=]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/tools/merged_config.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qDQogKiBQSFAgUVIgQ29kZSBlbmNvZGVyDQogKg0KICogQ29uZmlnIGZpbGUsIHR1bmVkLXVwIGZvciBtZXJnZWQgdmVyaW9uDQogKi8NCiAgICAgDQogICAgZGVmaW5lKCdRUl9DQUNIRUFCTEUnLCBmYWxzZSk7ICAgICAgIC8vIHVzZSBjYWNoZSAtIG1vcmUgZGlzayByZWFkcyBidXQgbGVzcyBDUFUgcG93ZXIsIG1hc2tzIGFuZCBmb3JtYXQgdGVtcGxhdGVzIGFyZSBzdG9yZWQgdGhlcmUNCiAgICBkZWZpbmUoJ1FSX0NBQ0hFX0RJUicsIGZhbHNlKTsgICAgICAgLy8gdXNlZCB3aGVuIFFSX0NBQ0hFQUJMRSA9PT0gdHJ1ZQ0KICAgIGRlZmluZSgnUVJfTE9HX0RJUicsIGZhbHNlKTsgICAgICAgICAvLyBkZWZhdWx0IGVycm9yIGxvZ3MgZGlyICAgDQogICAgDQogICAgZGVmaW5lKCdRUl9GSU5EX0JFU1RfTUFTSycsIHRydWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0cnVlLCBlc3RpbWF0ZXMgYmVzdCBtYXNrIChzcGVjLiBkZWZhdWx0LCBidXQgZXh0cmVtYWxseSBzbG93OyBzZXQgdG8gZmFsc2UgdG8gc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgYm9vc3QgYnV0IChwcm9wYWJseSkgd29yc3QgcXVhbGl0eSBjb2RlDQogICAgZGVmaW5lKCdRUl9GSU5EX0ZST01fUkFORE9NJywgMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGZhbHNlLCBjaGVja3MgYWxsIG1hc2tzIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHZhbHVlIHRlbGxzIGNvdW50IG9mIG1hc2tzIG5lZWQgdG8gYmUgY2hlY2tlZCwgbWFzayBpZCBhcmUgZ290IHJhbmRvbWx5DQogICAgZGVmaW5lKCdRUl9ERUZBVUxUX01BU0snLCAyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIFFSX0ZJTkRfQkVTVF9NQVNLID09PSBmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICBkZWZpbmUoJ1FSX1BOR19NQVhJTVVNX1NJWkUnLCAgMTAyNCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heGltdW0gYWxsb3dlZCBwbmcgaW1hZ2Ugd2lkdGggKGluIHBpeGVscyksIHR1bmUgdG8gbWFrZSBzdXJlIEdEIGFuZCBQSFAgY2FuIGhhbmRsZSBzdWNoIGJpZyBpbWFnZXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/tools/merged_header.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoNCiAqIFBIUCBRUiBDb2RlIGVuY29kZXINCiAqDQogKiBUaGlzIGZpbGUgY29udGFpbnMgTUVSR0VEIHZlcnNpb24gb2YgUEhQIFFSIENvZGUgbGlicmFyeS4NCiAqIEl0IHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9tIGZ1bGwgdmVyc2lvbiBmb3IgeW91ciBjb252ZW5pZW5jZS4NCiAqDQogKiBUaGlzIG1lcmdlZCB2ZXJzaW9uIHdhcyBjb25maWd1cmVkIHRvIG5vdCByZXF1cmUgYW55IGV4dGVybmFsIGZpbGVzLA0KICogd2l0aCBkaXNhYmxlZCBjYWNoZSwgZXJyb3IgbG9naW5nIGFuZCB3ZWtlciBidXQgZmFzdGVyIG1hc2sgbWF0Y2hpbmcuDQogKiBJZiB5b3UgbmVlZCB0dW5lIGl0IHVwIHBsZWFzZSB1c2Ugbm9uLW1lcmdlZCB2ZXJzaW9uLg0KICoNCiAqIEZvciBmdWxsIHZlcnNpb24sIGRvY3VtZW50YXRpb24sIGV4YW1wbGVzIG9mIHVzZSBwbGVhc2UgdmlzaXQ6DQogKg0KICogICAgaHR0cDovL3BocHFyY29kZS5zb3VyY2Vmb3JnZS5uZXQvDQogKiAgICBodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9waHBxcmNvZGUvDQogKg0KICogUEhQIFFSIENvZGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgTEdQTCAzDQogKiBDb3B5cmlnaHQgKEMpIDIwMTAgRG9taW5payBEemllbmlhIDxkZWx0YWxhYiBhdCBwb2N6dGEgZG90IGZtPg0KICoNCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KICogdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciBhbnkgbGF0ZXIgdmVyc2lvbi4NCiAqDQogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VDQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KICoNCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQ0KICovDQogDQog]]></data>
	</file>
	<file>
	  <filename>/libs/phpqrcode/VERSION</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MS4xLjQNCjIwMTAxMDA3MjE=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIEluc3RhbGwoKQoJICAgV2hlbiB5b3VyIG1vZHVsZSBpcyBpbnN0YWxsZWQsIHlvdSBtYXkgbmVlZCB0byBkbyBzb21lCgkgICBzZXR1cC4gVHlwaWNhbCB0aGluZ3MgdGhhdCBoYXBwZW4gaGVyZSBhcmUgdGhlIGNyZWF0aW9uCgkgICBhbmQgcHJlcG9wdWxhdGlvbiBvZiBkYXRhYmFzZSB0YWJsZXMsIGRhdGFiYXNlIHNlcXVlbmNlcywKCSAgIHBlcm1pc3Npb25zLCBwcmVmZXJlbmNlcywgZXRjLgoJICAgCSAgIAoJICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBjcmVhdGlvbiBvZiBkYXRhYmFzZSB0YWJsZXMsCgkgICBjaGVjayBvdXQgdGhlIEFET0RCIERhdGEgRGljdGlvbmFyeSBwYWdlIGF0CgkgICBodHRwOi8vcGhwbGVucy5jb20vbGVucy9hZG9kYi9kb2NzLWRhdGFkaWN0Lmh0bQoJICAgCgkgICBUaGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gYSBzdHJpbmcgaW4gY2FzZSBvZiBhbnkgZXJyb3IsCgkgICBhbmQgQ01TIHdpbGwgbm90IGNvbnNpZGVyIHRoZSBtb2R1bGUgaW5zdGFsbGVkLgoJICAgU3VjY2Vzc2Z1bCBpbnN0YWxscyBzaG91bGQgcmV0dXJuIEZBTFNFIG9yIG5vdGhpbmcgYXQgYWxsLgoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoJCS8qCgkJLy8gVHlwaWNhbCBEYXRhYmFzZSBJbml0aWFsaXphdGlvbgoJCSRkYiA9JiAkZ0Ntcy0+R2V0RGIoKTsKCQkKCQkvLyBteXNxbC1zcGVjaWZpYywgYnV0IGlnbm9yZWQgYnkgb3RoZXIgZGF0YWJhc2UKCQkkdGFib3B0YXJyYXkgPSBhcnJheSgnbXlzcWwnID0+ICdUWVBFPU15SVNBTScpOwoJCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCQkKICAgICAgICAvLyB0YWJsZSBzY2hlbWEgZGVzY3JpcHRpb24KICAgICAgICAkZmxkcyA9ICIKCQkJaWQgSSBLRVksCgkJCWRlc2NyaXB0aW9uIEMoODApCgkJCSI7CgoJCS8vIGNyZWF0ZSBpdC4gVGhpcyBzaG91bGQgZG8gZXJyb3IgY2hlY2tpbmcsIGJ1dCBJJ20gYSBsYXp5IHNvZC4KCQkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcXJjb2RlIiwKCQkJCSRmbGRzLCAkdGFib3B0YXJyYXkpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCgkJLy8gY3JlYXRlIGEgc2VxdWVuY2UKCQkkZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3FyY29kZV9zZXEiKTsKCQkqLwoJCQoJCS8vIHBlcm1pc3Npb25zCgkJCgoJCS8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwoJCSR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygnaW5zdGFsbGVkJywkdGhpcy0+R2V0VmVyc2lvbigpKSk7CgkJCj8+]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIFVuaW5zdGFsbCgpCgkgICBTb21ldGltZXMsIGFuIGV4Y2VwdGlvbmFsbHkgdW5lbmxpZ2h0ZW5lZCBvciBpZ25vcmFudAoJICAgYWRtaW4gd2lsbCB3aXNoIHRvIHVuaW5zdGFsbCB5b3VyIG1vZHVsZS4gV2hpbGUgaXQKCSAgIHdvdWxkIGJlIGJlc3QgdG8gbGF5IGludG8gdGhlc2UgaWRpb3RzIHdpdGggYSBjbHVlc3RpY2ssCgkgICB3ZSB3aWxsIGRvIHRoZSBtYWduYW5pbW91cyB0aGluZyBhbmQgcmVtb3ZlIHRoZSBtb2R1bGUKCSAgIGFuZCBjbGVhbiB1cCB0aGUgZGF0YWJhc2UsIHBlcm1pc3Npb25zLCBhbmQgcHJlZmVyZW5jZXMKCSAgIHRoYXQgYXJlIHNwZWNpZmljIHRvIGl0LgoJICAgVGhpcyBpcyB0aGUgbWV0aG9kIHdoZXJlIHdlIGRvIHRoaXMuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgoJCS8qCgkJLy8gVHlwaWNhbCBEYXRhYmFzZSBSZW1vdmFsCgkJJGRiID0mICRnQ21zLT5HZXREYigpOwoJCQoJCS8vIHJlbW92ZSB0aGUgZGF0YWJhc2UgdGFibGUKCQkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKCQkkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9xcmNvZGUiICk7CgkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKCQkvLyByZW1vdmUgdGhlIHNlcXVlbmNlCgkJJGRiLT5Ecm9wU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3FyY29kZV9zZXEiICk7CgkJKi8KCQkKCQkvLyByZW1vdmUgdGhlIHBlcm1pc3Npb25zCgkJCgkJCgkJLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCgkJJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1bmluc3RhbGxlZCcpKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIFVwZ3JhZGUoKQoJICAgSWYgeW91ciBtb2R1bGUgdmVyc2lvbiBudW1iZXIgZG9lcyBub3QgbWF0Y2ggdGhlIHZlcnNpb24KCSAgIG51bWJlciBvZiB0aGUgaW5zdGFsbGVkIG1vZHVsZSwgdGhlIENNUyBBZG1pbiB3aWxsIGdpdmUKCSAgIHlvdSBhIGNoYW5jZSB0byB1cGdyYWRlIHRoZSBtb2R1bGUuIFRoaXMgaXMgdGhlIGZ1bmN0aW9uCgkgICB0aGF0IGFjdHVhbGx5IGhhbmRsZXMgdGhlIHVwZ3JhZGUuCgkgICBJZGVhbGx5LCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYW5kbGUgdXBncmFkZXMgaW5jcmVtZW50YWxseSwKCSAgIHNvIHlvdSBjb3VsZCB1cGdyYWRlIGZyb20gdmVyc2lvbiAwLjAuMSB0byAxMC41Ljcgd2l0aAoJICAgYSBzaW5nbGUgY2FsbC4gRm9yIGEgZ3JlYXQgZXhhbXBsZSBvZiB0aGlzLCBzZWUgdGhlIE5ld3MKCSAgIG1vZHVsZSBpbiB0aGUgc3RhbmRhcmQgQ01TIGluc3RhbGwuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgkJJGN1cnJlbnRfdmVyc2lvbiA9ICRvbGR2ZXJzaW9uOwoJCXN3aXRjaCgkY3VycmVudF92ZXJzaW9uKQoJCXsKCQkJY2FzZSAiMS4wIjoKCQkJICAgICBicmVhazsKCQkJY2FzZSAiMS4xIjoKCQkJICAgICBicmVhazsKCQl9CgkJCgkJLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCgkJJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1cGdyYWRlZCcsJHRoaXMtPkdldFZlcnNpb24oKSkpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/QrCodeMS.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFFyQ29kZSAtIFFyQ29kZQojIFZlcnNpb246IDAuMSwgRnJhbmNvaXMgTGUgR2FsCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIyBUaGlzIGZpbGUgb3JpZ2luYWxseSBjcmVhdGVkIGJ5IE1vZHVsZU1ha2VyIG1vZHVsZSwgdmVyc2lvbiAwLjMuMgojIENvcHlyaWdodCAoYykgMjAxMSBieSBTYW11ZWwgR29sZHN0ZWluIChzamdAY21zbWFkZXNpbXBsZS5vcmcpIAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRm9yIEhlbHAgYnVpbGRpbmcgbW9kdWxlczoKIyAtIFJlYWQgdGhlIERvY3VtZW50YXRpb24gYXMgaXQgYmVjb21lcyBhdmFpbGFibGUgYXQKIyAgIGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvCiMgLSBDaGVjayBvdXQgdGhlIFNrZWxldG9uIE1vZHVsZSBmb3IgYSBjb21tZW50ZWQgZXhhbXBsZQojIC0gTG9vayBhdCBvdGhlciBtb2R1bGVzLCBhbmQgbGVhcm4gZnJvbSB0aGUgc291cmNlCiMgLSBDaGVjayBvdXQgdGhlIGZvcnVtcyBhdCBodHRwOi8vZm9ydW1zLmNtc21hZGVzaW1wbGUub3JnCiMgLSBDaGF0IHdpdGggZGV2ZWxvcGVycyBvbiB0aGUgI2NtcyBJUkMgY2hhbm5lbAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpjbGFzcyBRckNvZGVNUyBleHRlbmRzIENNU01vZHVsZQp7CgoJZnVuY3Rpb24gR2V0TmFtZSgpCgl7CgkJcmV0dXJuICdRckNvZGVNUyc7Cgl9CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIEdldEZyaWVuZGx5TmFtZSgpCgkgICBUaGlzIGNhbiByZXR1cm4gYW55IHN0cmluZywgcHJlZmVyYWJseSBhIGxvY2FsaXplZCBuYW1lCgkgICBvZiB0aGUgbW9kdWxlLiBUaGlzIGlzIHRoZSBuYW1lIHRoYXQncyBzaG93biBpbiB0aGUKCSAgIEFkbWluIE1lbnVzIGFuZCBzZWN0aW9uIHBhZ2VzIChpZiB0aGUgbW9kdWxlIGhhcyBhbiBhZG1pbgoJICAgY29tcG9uZW50KS4KCSAgIAoJICAgU2VlIHRoZSBub3RlIG9uIGxvY2FsaXphdGlvbiBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCWZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpCgl7CgkJcmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsKCX0KCgkKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBHZXRWZXJzaW9uKCkKCSAgIFRoaXMgY2FuIHJldHVybiBhbnkgc3RyaW5nLCBwcmVmZXJhYmx5IGEgbnVtYmVyIG9yCgkgICBzb21ldGhpbmcgdGhhdCBtYWtlcyBzZW5zZSBmb3IgZGVzaWduYXRpbmcgYSB2ZXJzaW9uLgoJICAgVGhlIENNUyB3aWxsIHVzZSB0aGlzIHRvIGlkZW50aWZ5IHdoZXRoZXIgb3Igbm90CgkgICB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIG1vZHVsZSBpcyBjdXJyZW50LCBhbmQKCSAgIHRoZSBtb2R1bGUgd2lsbCB1c2UgaXQgdG8gZmlndXJlIG91dCBob3cgdG8gdXBncmFkZQoJICAgaXRzZWxmIGlmIHJlcXVlc3RlZC4JICAgCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCglmdW5jdGlvbiBHZXRWZXJzaW9uKCkKCXsKCQlyZXR1cm4gJzAuMSc7Cgl9CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIEdldEhlbHAoKQoJICAgVGhpcyByZXR1cm5zIEhUTUwgaW5mb3JtYXRpb24gb24gdGhlIG1vZHVsZS4KCSAgIFR5cGljYWxseSwgeW91J2xsIHdhbnQgdG8gaW5jbHVkZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8KCSAgIHVzZSB0aGUgbW9kdWxlLgoJICAgCgkgICBTZWUgdGhlIG5vdGUgb24gbG9jYWxpemF0aW9uIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLgoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoJZnVuY3Rpb24gR2V0SGVscCgpCgl7CgkJcmV0dXJuICR0aGlzLT5MYW5nKCdoZWxwJyk7Cgl9CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIEdldEF1dGhvcigpCgkgICBUaGlzIHJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwcmVzZW50ZWQgaW4gdGhlIE1vZHVsZQoJICAgQWRtaW4gaWYgeW91IGNsaWNrIG9uIHRoZSAiQWJvdXQiIGxpbmsuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCglmdW5jdGlvbiBHZXRBdXRob3IoKQoJewoJCXJldHVybiAnRnJhbmNvaXMgTGUgR2FsJzsKCX0KCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgR2V0QXV0aG9yRW1haWwoKQoJICAgVGhpcyByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcHJlc2VudGVkIGluIHRoZSBNb2R1bGUKCSAgIEFkbWluIGlmIHlvdSBjbGljayBvbiB0aGUgIkFib3V0IiBsaW5rLiBJdCBoZWxwcyB1c2VycwoJICAgb2YgeW91ciBtb2R1bGUgZ2V0IGluIHRvdWNoIHdpdGggeW91IHRvIHNlbmQgYnVnIHJlcG9ydHMsCgkgICBxdWVzdGlvbnMsIGNhc2VzIG9mIGJlZXIsIGFuZC9vciBsYXJnZSBzdW1zIG9mIG1vbmV5LgoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoJZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKQoJewoJCXJldHVybiAnZnJhbmNvaXNAYm1zLWd1ZXIuY29tJzsKCX0KCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgR2V0Q2hhbmdlTG9nKCkKCSAgIFRoaXMgcmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHByZXNlbnRlZCBpbiB0aGUgbW9kdWxlCgkgICBBZG1pbiBpZiB5b3UgY2xpY2sgb24gdGhlIEFib3V0IGxpbmsuIEl0IGhlbHBzIHVzZXJzCgkgICBmaWd1cmUgb3V0IHdoYXQncyBjaGFuZ2VkIGJldHdlZW4gcmVsZWFzZXMuCgkgICBTZWUgdGhlIG5vdGUgb24gbG9jYWxpemF0aW9uIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLgoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoJZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkKCXsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ2NoYW5nZWxvZycpOwoJfQoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBJc1BsdWdpbk1vZHVsZSgpCgkgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvciBmYWxzZSwgZGVwZW5kaW5nIHVwb24KCSAgIHdoZXRoZXIgdXNlcnMgY2FuIGluY2x1ZGUgdGhlIG1vZHVsZSBpbiBhIHBhZ2Ugb3IKCSAgIHRlbXBsYXRlIHVzaW5nIGEgc21hcnR5IHRhZyBvZiB0aGUgZm9ybQoJICAge2Ntc19tb2R1bGUgbW9kdWxlPSdRckNvZGUnIHBhcmFtMT12YWwgcGFyYW0yPXZhbC4uLn0KCSAgIAoJICAgSWYgeW91ciBtb2R1bGUgZG9lcyBub3QgZ2V0IGluY2x1ZGVkIGluIHBhZ2VzIG9yCgkgICB0ZW1wbGF0ZXMsIHJldHVybiAiZmFsc2UiIGhlcmUuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCglmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpCgl7CgkJcmV0dXJuIHRydWU7Cgl9CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIEhhc0FkbWluKCkKCSAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUsIGRlcGVuZGluZyBvbgoJICAgd2hldGhlciB5b3VyIG1vZHVsZSBhZGRzIGFueXRoaW5nIHRvIHRoZSBBZG1pbiBhcmVhIG9mCgkgICB0aGUgc2l0ZS4gRm9yIHRoZSByZXN0IG9mIHRoZXNlIGNvbW1lbnRzLCBJJ2xsIGJlIGNhbGxpbmcKCSAgIHRoZSBhZG1pbiBwYXJ0IG9mIHlvdXIgbW9kdWxlIHRoZSAiQWRtaW4gUGFuZWwiIGZvcgoJICAgd2FudCBvZiBhIGJldHRlciB0ZXJtLgoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoJZnVuY3Rpb24gSGFzQWRtaW4oKQoJewoJCXJldHVybiB0cnVlOwoJfQoKCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgR2V0QWRtaW5TZWN0aW9uKCkKCSAgIElmIHlvdXIgbW9kdWxlIGhhcyBhbiBBZG1pbiBQYW5lbCwgeW91IGNhbiBzcGVjaWZ5CgkgICB3aGljaCBBZG1pbiBTZWN0aW9uIChvciB0b3AtbGV2ZWwgQWRtaW4gTWVudSkgaXQgc2hvd3MKCSAgIHVwIGluLiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgc3RyaW5nIHRvIHNwZWNpZnkgdGhhdAoJICAgc2VjdGlvbi4gVmFsaWQgcmV0dXJuIHZhbHVlcyBhcmU6CgoJICAgbWFpbiAgICAgICAgLSB0aGUgTWFpbiBtZW51IHRhYi4KCSAgIGNvbnRlbnQgICAgIC0gdGhlIENvbnRlbnQgbWVudQoJICAgbGF5b3V0ICAgICAgLSB0aGUgTGF5b3V0IG1lbnUKCSAgIHVzZXJzZ3JvdXBzIC0gdGhlIFVzZXJzIGFuZCBHcm91cHMgbWVudQoJICAgZXh0ZW5zaW9ucyAgLSB0aGUgRXh0ZW5zaW9ucyBtZW51ICh0aGlzIGlzIHRoZSBkZWZhdWx0KQoJICAgc2l0ZWFkbWluICAgLSB0aGUgU2l0ZSBBZG1pbiBtZW51CgkgICB2aWV3c2l0ZSAgICAtIHRoZSBWaWV3IFNpdGUgbWVudSB0YWIKCSAgIGxvZ291dCAgICAgIC0gdGhlIExvZ291dCBtZW51IHRhYgoJICAgCgkgICBOb3RlIHRoYXQgaWYgeW91IHBsYWNlIHlvdXIgbW9kdWxlIGluIHRoZSBtYWluLAoJICAgdmlld3NpdGUsIG9yIGxvZ291dCBzZWN0aW9ucywgaXQgd2lsbCBzaG93IHVwIGluIHRoZQoJICAgbWVudXMsIGJ1dCB3aWxsIG5vdCBiZSB2aXNpYmxlIGluIGFueSB0b3AtbGV2ZWwKCSAgIHNlY3Rpb24gcGFnZXMuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCglmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKQoJewoJCXJldHVybiAnY29udGVudCc7Cgl9CgoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBHZXRBZG1pbkRlc2NyaXB0aW9uKCkKCSAgIElmIHlvdXIgbW9kdWxlIGRvZXMgaGF2ZSBhbiBBZG1pbiBQYW5lbCwgeW91CgkgICBjYW4gaGF2ZSBpdCByZXR1cm4gYSBkZXNjcmlwdGlvbiBzdHJpbmcgdGhhdCBnZXRzIHNob3duCgkgICBpbiB0aGUgQWRtaW4gU2VjdGlvbiBwYWdlIHRoYXQgY29udGFpbnMgdGhlIG1vZHVsZS4KCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCWZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnYWRtaW5kZXNjcmlwdGlvbicpOwoJfQoKCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgVmlzaWJsZVRvQWRtaW5Vc2VyKCkKCSAgIElmIHlvdXIgbW9kdWxlIGRvZXMgaGF2ZSBhbiBBZG1pbiBQYW5lbCwgeW91CgkgICBjYW4gY29udHJvbCB3aGV0aGVyIG9yIG5vdCBpdCdzIGRpc3BsYXllZCBieSB0aGUgYm9vbGVhbgoJICAgdGhhdCBpcyByZXR1cm5lZCBieSB0aGlzIG1ldGhvZC4gVGhpcyBpcyBwcmltYXJpbHkgdXNlZAoJICAgdG8gaGlkZSBtb2R1bGVzIGZyb20gYWRtaW5zIHdobyBsYWNrIHBlcm1pc3Npb24gdG8gdXNlCgkgICB0aGVtLgoJICAgCgkgICBUeXBpY2FsbHksIHlvdSdsbCB1c2Ugc29tZSBwZXJtaXNzaW9uIHRvIHNldCB0aGlzCgkgICAoZS5nLiwgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignU29tZSBQZXJtaXNzaW9uJyk7ICkKCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCWZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpCgl7CiAgICAgICAgcmV0dXJuIHRydWU7Cgl9CgkKCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgQ2hlY2tBY2Nlc3MoKQoJICAgVGhpcyB3cmFwcGVyIGZ1bmN0aW9uIHdpbGwgY2hlY2sgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIHBlcm1pc3Npb24sCgkgICBhbmQgZGlzcGxheSBhbiBlcnJvciBwYWdlIGlmIHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSBhZGVxdWF0ZSBwZXJtaXNzaW9ucy4KCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCWZ1bmN0aW9uIENoZWNrQWNjZXNzKCRwZXJtID0gJycpCgkJewoJCXJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCRwZXJtKTsKCQl9CgkKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBEaXNwbGF5RXJyb3JQYWdlKCkKCSAgIFRoaXMgaXMgYSBzaW1wbGUgZnVuY3Rpb24gZm9yIGdlbmVyYXRpbmcgZXJyb3IgcGFnZXMuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICBmdW5jdGlvbiBEaXNwbGF5RXJyb3JQYWdlKCRpZCwgJiRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlPScnKQogICAgewoJCSR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfZXJyb3InLCAkdGhpcy0+TGFuZygnZXJyb3InKSk7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignbWVzc2FnZScsICRtZXNzYWdlKTsKCiAgICAgICAgLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCiAgICAgICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlcnJvci50cGwnKTsKICAgIH0KCQoKCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgR2V0RGVwZW5kZW5jaWVzKCkKCSAgIFlvdXIgbW9kdWxlIG1heSBuZWVkIGFub3RoZXIgbW9kdWxlIHRvIGFscmVhZHkgYmUgaW5zdGFsbGVkCgkgICBiZWZvcmUgeW91IGNhbiBpbnN0YWxsIGl0LgoJICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2YgdGhvc2UgZGVwZW5kZW5jaWVzIGFuZAoJICAgbWluaW11bSB2ZXJzaW9uIG51bWJlcnMgdGhhdCB0aGlzIG1vZHVsZSByZXF1aXJlcy4KCSAgIAoJICAgSXQgc2hvdWxkIHJldHVybiBhbiBoYXNoLCBlZy4KCSAgIHJldHVybiBhcnJheSgnc29tZW1vZHVsZSc9PicxLjAnLCAnb3RoZXJtb2R1bGUnPT4nMS4xJyk7CgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCglmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQoJewoJCXJldHVybiBhcnJheSgpOwoJfQoKCQoKCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICAgSW5zdGFsbFBvc3RNZXNzYWdlKCkKCSAgIEFmdGVyIGluc3RhbGxhdGlvbiwgdGhlcmUgbWF5IGJlIHRoaW5ncyB5b3Ugd2FudCB0bwoJICAgY29tbXVuaWNhdGUgdG8geW91ciBhZG1pbi4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEKCSAgIHN0cmluZyB3aGljaCB3aWxsIGJlIGRpc3BsYXllZC4KCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCWZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpCgl7CgkJcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOwoJfQoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBVbmluc3RhbGxQb3N0TWVzc2FnZSgpCgkgICBBZnRlciByZW1vdmluZyBhIG1vZHVsZSwgdGhlcmUgbWF5IGJlIHRoaW5ncyB5b3Ugd2FudCB0bwoJICAgY29tbXVuaWNhdGUgdG8geW91ciBhZG1pbi4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEKCSAgIHN0cmluZyB3aGljaCB3aWxsIGJlIGRpc3BsYXllZC4KCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCWZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkKCXsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3R1bmluc3RhbGwnKTsKCX0KCgoKCgkvKioKCSAqIFVuaW5zdGFsbFByZU1lc3NhZ2UoKQoJICogVGhpcyBhbGxvd3MgeW91IHRvIGRpc3BsYXkgYSBtZXNzYWdlIGFsb25nIHdpdGggYSBZZXMvTm8gZGlhbG9nIGJveC4gSWYgdGhlIHVzZXIgcmVzcG9uZHMKCSAqIGluIHRoZSBhZmZpcm1hdGl2ZSB0byB5b3VyIG1lc3NhZ2UsIHRoZSB1bmluc3RhbGwgd2lsbCBwcm9jZWVkLiBJZiB0aGV5IHJlc3BvbmQgaW4gdGhlCgkgKiBuZWdhdGl2ZSwgdGhlIHVuaW5zdGFsbCB3aWxsIGJlIGNhbmNlbGVkLiBUaHVzLCB5b3VyIG1lc3NhZ2Ugc2hvdWxkIGJlIG9mIHRoZSBmb3JtCgkgKiAiQWxsIG1vZHVsZSBkYXRhIHdpbGwgYmUgZGVsZXRlZC4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuaW5zdGFsbCB0aGlzIG1vZHVsZT8iCgkgKgoJICogSWYgeW91IGRvbid0IHdhbnQgdGhlIGRpYWxvZywgaGF2ZSB0aGlzIG1ldGhvZCByZXR1cm4gYSBGQUxTRSwgd2hpY2ggd2lsbCBjYXVzZSB0aGUKCSAqIG1vZHVsZSB0byB1bmluc3RhbGwgaW1tZWRpYXRlbHkgaWYgdGhlIHVzZXIgY2xpY2tzIHRoZSAidW5pbnN0YWxsIiBsaW5rLgoJICovCglmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkKCXsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ3JlYWxseV91bmluc3RhbGwnKTsKCX0KCQp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/adminpanel.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPgo8cD5QbGFjZXogbGUgY29udGVudSBkZSB2b3RyZSBwYW5uZWF1IGQmIzAzOTthZG1pbnN0cmF0aW9uIGljaS48L3A+]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfZXJyb3J9PC9oMz4Ke2lmICRtZXNzYWdlIT0nJ308cD57JG1lc3NhZ2V9PC9wPnsvaWZ9]]></data>
	</file>
	<file>
	  <filename>/templates/qrcode.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGltZyBzcmM9InskcXJjb2RlfSIgLz4KCgo=]]></data>
	</file>
</module>
