<?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>GoogleConsentPlatform</name>
	<version>1.1.0</version>
    <mincmsversion>2.2.4</mincmsversion>
	<help><![CDATA[PGgyPkludHJvZHVjdGlvbjwvaDI+CjxwPlRoZSBHb29nbGVDb25zZW50UGxhdGZvcm0gbW9kdWxlIHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSBHRFBSLWNvbXBsaWFudCBjb29raWUgY29uc2VudCBtYW5hZ2VtZW50IHN5c3RlbSBmb3IgQ01TIE1hZGUgU2ltcGxlIHdlYnNpdGVzLiBUaGlzIG1vZHVsZSBpbnRlZ3JhdGVzIHNlYW1sZXNzbHkgd2l0aCBHb29nbGUgQW5hbHl0aWNzIDQgKEdBNCkgYW5kIEdvb2dsZSBUYWcgTWFuYWdlciAoR1RNKSB1c2luZyBHb29nbGUgQ29uc2VudCBNb2RlIHYyLCBlbnN1cmluZyB5b3VyIHdlYnNpdGUgbWVldHMgcHJpdmFjeSByZWd1bGF0aW9ucyB3aGlsZSBtYWludGFpbmluZyBhbmFseXRpY3MgZnVuY3Rpb25hbGl0eS48L3A+Cgo8aDM+RmVhdHVyZXM8L2gzPgo8dWw+CiAgICA8bGk+R0RQUi1jb21wbGlhbnQgY29va2llIGNvbnNlbnQgYmFubmVyIHdpdGggZGVueS1ieS1kZWZhdWx0IGFwcHJvYWNoPC9saT4KICAgIDxsaT5Hb29nbGUgQ29uc2VudCBNb2RlIHYyIGludGVncmF0aW9uIHdpdGggbGF0ZXN0IHBhcmFtZXRlcnM8L2xpPgogICAgPGxpPkdBNCBhbmQgR1RNIHN1cHBvcnQgd2l0aCBhdXRvbWF0aWMgZGV0ZWN0aW9uIGJhc2VkIG9uIFRhZyBJRCBmb3JtYXQ8L2xpPgogICAgPGxpPkxvY2FsU3RvcmFnZS1iYXNlZCBjb25zZW50IHBlcnNpc3RlbmNlIGFjcm9zcyBzZXNzaW9uczwvbGk+CiAgICA8bGk+TXVsdGlsaW5ndWFsIHN1cHBvcnQgZm9yIDE3IGxhbmd1YWdlcyB3aXRoIGF1dG9tYXRpYyBDTVMgbGFuZ3VhZ2UgZGV0ZWN0aW9uPC9saT4KICAgIDxsaT5UYWJiZWQgbW9kYWwgaW50ZXJmYWNlIHdpdGggQ29uc2VudCwgRGV0YWlscywgYW5kIEFib3V0IHNlY3Rpb25zPC9saT4KICAgIDxsaT5HcmFudWxhciBjb29raWUgY29udHJvbHMgZm9yIE5lY2Vzc2FyeSwgUHJlZmVyZW5jZXMsIFN0YXRpc3RpY3MsIGFuZCBNYXJrZXRpbmcgY29va2llczwvbGk+CiAgICA8bGk+Qm9vdHN0cmFwLXN0eWxlIGRlc2lnbiB3aXRoIHNtb290aCB0cmFuc2l0aW9ucyBhbmQgaG92ZXIgZWZmZWN0czwvbGk+CiAgICA8bGk+Q3VzdG9taXphYmxlIGFwcGVhcmFuY2U6IExpZ2h0L0RhcmsgdGhlbWVzLCBwb3NpdGlvbmluZywgc2l6aW5nLCBhbmQgY3VzdG9tIGNvbG9yczwvbGk+CiAgICA8bGk+VW5pcXVlIENTUyBjbGFzc2VzIChnY3AtcHJlZml4ZWQpIHRvIHByZXZlbnQgY29uZmxpY3RzIHdpdGggZXhpc3Rpbmcgd2Vic2l0ZSBzdHlsZXM8L2xpPgogICAgPGxpPk1pbmlmaWVkIGFzc2V0cyBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZTwvbGk+CjwvdWw+Cgo8aDM+U2NyZWVuc2hvdHM8L2gzPgo8cD48aW1nIHNyYz0iaHR0cHM6Ly9jbXNtcy1kb3dubG9hZHMuczMuZXUtc291dGgtMS5hbWF6b25hd3MuY29tL0dvb2dsZUNvbnNlbnRQbGF0Zm9ybS90aHVtYm5haWwuanBnIiBhbHQ9Ikdvb2dsZUNvbnNlbnRQbGF0Zm9ybSBtb2R1bGUiIHdpZHRoPSI5MDAiPjwvcD4KCjxoMz5JbnN0YWxsYXRpb248L2gzPgo8b2w+CiAgICA8bGk+VXBsb2FkIHRoZSBtb2R1bGUgZmlsZXMgdG8gPGNvZGU+L21vZHVsZXMvR29vZ2xlQ29uc2VudFBsYXRmb3JtLzwvY29kZT4gb3I8L2xpPgogICAgPGxpPkdvIHRvIDxzdHJvbmc+TW9kdWxlIE1hbmFnZXI8L3N0cm9uZz4gaW4gQ01TIGFkbWluIGFuZCBpbnN0YWxsIHRoZSBHb29nbGVDb25zZW50UGxhdGZvcm0gbW9kdWxlPC9saT4KICAgIDxsaT48c3Ryb25nPkltcG9ydGFudDo8L3N0cm9uZz4gQWRkIHRoZSA8Y29kZT57R29vZ2xlQ29uc2VudFBsYXRmb3JtfTwvY29kZT4gdGFnIHRvIHRoZSA8Y29kZT4mbHQ7aGVhZCZndDs8L2NvZGU+IHNlY3Rpb24gb2YgeW91ciB3ZWJzaXRlIHRlbXBsYXRlKHMpPC9saT4KICAgIDxsaT5Db25maWd1cmUgdGhlIG1vZHVsZSBhdCA8c3Ryb25nPkV4dGVuc2lvbnMgPiBHb29nbGUgQ29uc2VudCBQbGF0Zm9ybTwvc3Ryb25nPjwvbGk+Cjwvb2w+Cgo8aDM+Q29uZmlndXJhdGlvbjwvaDM+CjxwPlRoZSBtb2R1bGUgcHJvdmlkZXMgdHdvIG1haW4gY29uZmlndXJhdGlvbiB0YWJzOjwvcD4KPHVsPgogICAgPGxpPjxzdHJvbmc+T3B0aW9ucyBUYWI6PC9zdHJvbmc+IENvbmZpZ3VyZSBHb29nbGUgVGFnIElEIChHQTQ6IEctWFhYWFhYWCBvciBHVE06IEdUTS1YWFhYWFhYKSwgcHJpdmFjeSByZWd1bGF0aW9uIGNvbXBsaWFuY2UsIGxhbmd1YWdlIHNlbGVjdGlvbiwgYW5kIGVuYWJsZS9kaXNhYmxlIHRoZSBtb2R1bGU8L2xpPgogICAgPGxpPjxzdHJvbmc+U2V0dGluZ3MgVGFiOjwvc3Ryb25nPiBDdXN0b21pemUgYXBwZWFyYW5jZSBpbmNsdWRpbmcgY29sb3Igc2NoZW1lIChMaWdodC9EYXJrKSwgcG9zaXRpb24gKEJvdHRvbS9DZW50ZXIvVG9wKSwgc2l6ZSAoQ29tcGFjdC9Ob3JtYWwvTGFyZ2UvV2lkZSksIGN1c3RvbSBwcmltYXJ5IGNvbG9yLCBhbmQgb3ZlcnJpZGUgZGVmYXVsdCB0ZXh0PC9saT4KPC91bD4KCjxoMz5Vc2FnZTwvaDM+CjxwPkFmdGVyIGluc3RhbGxhdGlvbiBhbmQgY29uZmlndXJhdGlvbiwgdGhlIGNvb2tpZSBjb25zZW50IGJhbm5lciB3aWxsIGF1dG9tYXRpY2FsbHkgYXBwZWFyIHRvIGZpcnN0LXRpbWUgdmlzaXRvcnMuIFVzZXJzIGNhbjo8L3A+Cjx1bD4KICAgIDxsaT48c3Ryb25nPkRlbnk6PC9zdHJvbmc+IFJlamVjdCBhbGwgbm9uLWVzc2VudGlhbCBjb29raWVzPC9saT4KICAgIDxsaT48c3Ryb25nPkN1c3RvbWl6ZTo8L3N0cm9uZz4gQ2hvb3NlIHNwZWNpZmljIGNvb2tpZSBjYXRlZ29yaWVzIHRocm91Z2ggZGV0YWlsZWQgY29udHJvbHM8L2xpPgogICAgPGxpPjxzdHJvbmc+QWxsb3cgQWxsOjwvc3Ryb25nPiBBY2NlcHQgYWxsIGNvb2tpZXM8L2xpPgo8L3VsPgo8cD5QcmVmZXJlbmNlcyBhcmUgc2F2ZWQgaW4gYnJvd3NlciBsb2NhbFN0b3JhZ2UgYW5kIHBlcnNpc3QgYWNyb3NzIHNlc3Npb25zLiBVc2VycyBjYW4gY2hhbmdlIHRoZWlyIHByZWZlcmVuY2VzIGFueXRpbWUgYnkgcmV2aXNpdGluZyB0aGUgYmFubmVyLjwvcD4KCjxoMz5Qcml2YWN5IFJlZ3VsYXRpb25zPC9oMz4KPHVsPgogICAgPGxpPjxzdHJvbmc+R0RQUjo8L3N0cm9uZz4gU3RyaWN0IGNvbnNlbnQgcmVxdWlyZWQsIGFkcyBkYXRhIHJlZGFjdGlvbiBlbmFibGVkPC9saT4KICAgIDxsaT48c3Ryb25nPkNDUEEvVUNQQS9DUEEvQ1REUEEvVkNEUEE6PC9zdHJvbmc+IFRhcmdldGVkIGFkdmVydGlzaW5nIHJlcXVpcmVzIG9wdC1pbjwvbGk+CiAgICA8bGk+PHN0cm9uZz5PdGhlcjo8L3N0cm9uZz4gT3B0LW91dCBtb2RlbCBmb3IgbW9zdCBjb29raWUgY2F0ZWdvcmllczwvbGk+CjwvdWw+Cgo8aDM+UmVxdWlyZW1lbnRzPC9oMz4KPHVsPgogICAgPGxpPkNNUyBNYWRlIFNpbXBsZSB2ZXJzaW9uIDIuMS42IG9yIGhpZ2hlcjwvbGk+CiAgICA8bGk+alF1ZXJ5ICh0eXBpY2FsbHkgaW5jbHVkZWQgaW4gbW9zdCBDTVMgdGhlbWVzKTwvbGk+CiAgICA8bGk+TW9kZXJuIGJyb3dzZXIgd2l0aCBsb2NhbFN0b3JhZ2UgYW5kIENTUzMgc3VwcG9ydDwvbGk+CjwvdWw+Cgo8aDM+VGVzdGluZzwvaDM+CjxwPlRvIHRlc3QgdGhlIGNvbnNlbnQgYmFubmVyIGZ1bmN0aW9uYWxpdHkgZHVyaW5nIGRldmVsb3BtZW50OjwvcD4KPG9sPgogICAgPGxpPk9wZW4geW91ciBicm93c2VyJ3MgRGV2ZWxvcGVyIENvbnNvbGUgKEYxMik8L2xpPgogICAgPGxpPlJ1bjogPGNvZGU+d2luZG93Lkdvb2dsZUNvbnNlbnRQbGF0Zm9ybVJlc2V0KCk8L2NvZGU+PC9saT4KICAgIDxsaT5SZWZyZXNoIHRoZSBwYWdlIHRvIHNlZSB0aGUgY29uc2VudCBiYW5uZXIgYWdhaW48L2xpPgo8L29sPgo8cD5UaGlzIGZ1bmN0aW9uIGNsZWFycyBzdG9yZWQgY29uc2VudCBwcmVmZXJlbmNlcyBhbmQgcmVzZXRzIGFsbCBjb29raWUgdG9nZ2xlcywgYWxsb3dpbmcgeW91IHRvIHRlc3QgZGlmZmVyZW50IGNvbnNlbnQgc2NlbmFyaW9zIHdpdGhvdXQgY2xlYXJpbmcgYnJvd3NlciBkYXRhLjwvcD4KCjxoMz5Ucm91Ymxlc2hvb3Rpbmc8L2gzPgo8dWw+CiAgICA8bGk+PHN0cm9uZz5CYW5uZXIgbm90IGFwcGVhcmluZzo8L3N0cm9uZz4gRW5zdXJlIHRoZSA8Y29kZT57R29vZ2xlQ29uc2VudFBsYXRmb3JtfTwvY29kZT4gdGFnIGlzIHBsYWNlZCBpbiB0aGUgPGNvZGU+Jmx0O2hlYWQmZ3Q7PC9jb2RlPiBzZWN0aW9uPC9saT4KICAgIDxsaT48c3Ryb25nPlN0eWxlcyBub3QgbG9hZGluZzo8L3N0cm9uZz4gVmVyaWZ5IHRoZSBhc3NldHMgZGlyZWN0b3J5IGlzIHdyaXRhYmxlIGFuZCBDU1MgZmlsZSB3YXMgZ2VuZXJhdGVkPC9saT4KICAgIDxsaT48c3Ryb25nPkdvb2dsZSBUYWcgbm90IHdvcmtpbmc6PC9zdHJvbmc+IENoZWNrIGNvcnJlY3QgVGFnIElEIGZvcm1hdCBhbmQgbW9kdWxlIGlzIGVuYWJsZWQ8L2xpPgo8L3VsPgoKPGgzPlByaXZhY3kgTm90aWNlPC9oMz4KPHA+VGhpcyBtb2R1bGUgYW5vbnltb3VzbHkgdHJhY2tzIGluc3RhbGxhdGlvbiBhbmQgdW5pbnN0YWxsYXRpb24gZXZlbnRzIGZvciB1c2FnZSBzdGF0aXN0aWNzIG9ubHkuIE5vIHBlcnNvbmFsIGRhdGEsIHdlYnNpdGUgaW5mb3JtYXRpb24sIG9yIGNvbmZpZ3VyYXRpb24gZGV0YWlscyBhcmUgY29sbGVjdGVkIG9yIHRyYW5zbWl0dGVkLjwvcD4KCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMjUsIFBpeGVsIFNvbHV0aW9ucyA8YSBocmVmPSJtYWlsdG86bWFnYWxAcGl4ZWxzb2x1dGlvbnMuYml6Ij4mbHQ7bWFnYWxAcGl4ZWxzb2x1dGlvbnMuYml6Jmd0OzwvYT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuPC9wPgo8cD5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczo8L3A+CjxwPlRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLjwvcD4KPHA+VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLjwvcD4KPGhyPgo8cD48ZW0+R29vZ2xlIGlzIGEgdHJhZGVtYXJrIG9mIEdvb2dsZSBMTEMgb3IgaXRzIGFmZmlsaWF0ZXMuIFRoaXMgbW9kdWxlIGlzIG5vdCBhZmZpbGlhdGVkIHdpdGggb3IgZW5kb3JzZWQgYnkgR29vZ2xlLjwvZW0+PC9wPg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBNYWdhbCBIZXppICZsdDttYWdhbEBwaXhlbHNvbHV0aW9ucy5iaXomZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMS4xLjA8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz48dWw+CiAgICA8bGk+VmVyc2lvbiAxLjEuMCAtIDIwMjYtMDYtMjIKICAgICAgICA8dWw+CiAgICAgICAgICAgIDxsaT5BZGRlZCBhY2Nlc3MgZ3VhcmRzIHRvIGFsbCBQSFAgZmlsZXM8L2xpPgogICAgICAgICAgICA8bGk+UmVtb3ZlZCBjbG9zaW5nIFBIUCB0YWdzIGZyb20gYWxsIGZpbGVzPC9saT4KICAgICAgICAgICAgPGxpPlByZWZpeGVkIGFsbCBwcmVmZXJlbmNlIGtleXMgd2l0aCBnY3BfIHRvIGF2b2lkIGNvbGxpc2lvbnM8L2xpPgogICAgICAgICAgICA8bGk+QWRkZWQgcHJlZmVyZW5jZSBtaWdyYXRpb24gaW4gdXBncmFkZSBtZXRob2Q8L2xpPgogICAgICAgICAgICA8bGk+UmVtb3ZlZCBlcnJvciBzdXBwcmVzc2lvbiBvcGVyYXRvcnM8L2xpPgogICAgICAgICAgICA8bGk+UmVwbGFjZWQgaGVyZWRvYyB3aXRoIHN0cmluZyBjb25jYXRlbmF0aW9uPC9saT4KICAgICAgICAgICAgPGxpPkJ1bmRsZWQgalF1ZXJ5IGxvY2FsbHkgaW5zdGVhZCBvZiBleHRlcm5hbCBDRE48L2xpPgogICAgICAgICAgICA8bGk+UmVtb3ZlZCAuYXdzIGRpcmVjdG9yeSB3aXRoIGNvbXByZXNzZWQgYXJjaGl2ZTwvbGk+CiAgICAgICAgICAgIDxsaT5BZGRlZCBkb2MvTElDRU5TRSBmaWxlPC9saT4KICAgICAgICAgICAgPGxpPkFkZGVkIEdldE5hbWUoKSBhbmQgR2V0RGVwZW5kZW5jaWVzKCkgbWV0YWRhdGEgbWV0aG9kczwvbGk+CiAgICAgICAgICAgIDxsaT5Vc2VkIHByb3BlciBwZXJtaXNzaW9uIGNvbnN0YW50IGluIGFkbWluIGFjdGlvbnM8L2xpPgogICAgICAgICAgICA8bGk+QWRkZWQgb3B0aW9uYWwgQ1NSRiBwcm90ZWN0aW9uIHZpYSBDTVNNU0V4dDwvbGk+CiAgICAgICAgICAgIDxsaT5SaXNrIHNjb3JlIHJlZHVjZWQgZnJvbSAyMDUgdG8gNzwvbGk+CiAgICAgICAgPC91bD4KICAgIDwvbGk+CiAgICA8bGk+VmVyc2lvbiAxLjAuMiAtIDIwMjUtMDgtMjgKICAgICAgICA8dWw+CiAgICAgICAgICAgIDxsaT5CdWcgZml4ZXMgYW5kIGltcHJvdmVtZW50czwvbGk+CiAgICAgICAgPC91bD4KICAgIDwvbGk+CiAgICA8bGk+VmVyc2lvbiAxLjAuMSAtIDIwMjUtMDgtMjgKICAgICAgICA8dWw+CiAgICAgICAgICAgIDxsaT5Jbml0aWFsIGltcHJvdmVtZW50czwvbGk+CiAgICAgICAgPC91bD4KICAgIDwvbGk+CiAgICA8bGk+VmVyc2lvbiAxLjAgLSAyMDI1LTA4LTI3CiAgICAgICAgPHVsPgogICAgICAgICAgICA8bGk+SW5pdGlhbCByZWxlYXNlPC9saT4KICAgICAgICA8L3VsPgogICAgPC9saT4KPC91bD4KPGJyIC8+]]></about>
	<description><![CDATA[Google Consent Platform for GDPR compliance with GA4/GTM integration.]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgU2VlIExJQ0VOU0UgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmlmICghZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSkgZXhpdDsKCmlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZ2NwX2VuYWJsZWQnLCAnMScpICE9ICcxJykgcmV0dXJuOwoKJGd0YWdfaWQgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZ2NwX2dvb2dsZV90YWdfaWQnLCAnJyk7CiRjb25zZW50cyA9ICR0aGlzLT5idWlsZENvbnNlbnRPYmplY3QoKTsKCiR0YWdfdHlwZSA9ICdub25lJzsKaWYgKCFlbXB0eSgkZ3RhZ19pZCkpIHsKICAgIGlmIChwcmVnX21hdGNoKCcvXkctW0EtWjAtOV0rJC9pJywgJGd0YWdfaWQpKSAkdGFnX3R5cGUgPSAnR0E0JzsKICAgIGVsc2VpZiAocHJlZ19tYXRjaCgnL15HVE0tW0EtWjAtOV0rJC9pJywgJGd0YWdfaWQpKSAkdGFnX3R5cGUgPSAnR1RNJzsKfQoKJGpzX2ZpbGVfdGFnID0gJzxzY3JpcHQgc3JjPSInIC4gJHRoaXMtPkdldE1vZHVsZVVSTFBhdGgoKSAuICcvYXNzZXRzL2dvb2dsZWNvbnNlbnRwbGF0Zm9ybS5qcyI+PC9zY3JpcHQ+JzsKJGNzc19maWxlX3RhZyA9ICc8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IicgLiAkdGhpcy0+R2V0TW9kdWxlVVJMUGF0aCgpIC4gJy9hc3NldHMvZ29vZ2xlY29uc2VudHBsYXRmb3JtLmNzcyI+JzsKJGpxdWVyeV90YWcgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZ2NwX2luamVjdF9qcXVlcnknLCAwKSA/ICc8c2NyaXB0IHNyYz0iJyAuICR0aGlzLT5HZXRNb2R1bGVVUkxQYXRoKCkgLiAnL2Fzc2V0cy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4nIDogJyc7CgppZiAoIWVtcHR5KCRndGFnX2lkKSkgewogICAgJGlubGluZV9qcyA9ICR0aGlzLT5idWlsZElubGluZUphdmFTY3JpcHQoJGd0YWdfaWQsICRjb25zZW50cyk7CiAgICAkc2NyaXB0X3RhZyA9ICc8c2NyaXB0PicgLiAkaW5saW5lX2pzIC4gJzwvc2NyaXB0Pic7CiAgICAkaW5qZWN0aW9uID0gIlxuPCEtLSBnb29nbGVjb25zZW50cGxhdGZvcm0gLS0+XG4iIC4gJGpxdWVyeV90YWcgLiAoJGpxdWVyeV90YWcgPyAiXG4iIDogJycpIC4gJGpzX2ZpbGVfdGFnIC4gIlxuIiAuICRjc3NfZmlsZV90YWcgLiAiXG4iIC4gJHNjcmlwdF90YWcgLiAiXG4iOwogICAgJHRoaXMtPmhlYWQgLj0gJGluamVjdGlvbjsKCiAgICBpZiAoJHRhZ190eXBlID09PSAnR1RNJykgewogICAgICAgICRzYWZlX2lkID0gaHRtbHNwZWNpYWxjaGFycygkZ3RhZ19pZCwgRU5UX1FVT1RFUywgJ1VURi04Jyk7CiAgICAgICAgJHRoaXMtPmJvZHkgLj0gIlxuPCEtLSBHb29nbGUgVGFnIE1hbmFnZXIgKG5vc2NyaXB0KSAtLT5cbiIKICAgICAgICAgICAgLiAnPG5vc2NyaXB0PjxpZnJhbWUgc3JjPSJodHRwczovL3d3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbS9ucy5odG1sP2lkPScgLiAkc2FmZV9pZCAuICciJwogICAgICAgICAgICAuICcgaGVpZ2h0PSIwIiB3aWR0aD0iMCIgc3R5bGU9ImRpc3BsYXk6bm9uZTt2aXNpYmlsaXR5OmhpZGRlbiI+PC9pZnJhbWU+PC9ub3NjcmlwdD4nCiAgICAgICAgICAgIC4gIlxuPCEtLSBFbmQgR29vZ2xlIFRhZyBNYW5hZ2VyIChub3NjcmlwdCkgLS0+XG4iOwogICAgfQp9IGVsc2UgewogICAgJGluamVjdGlvbiA9ICJcbjwhLS0gZ29vZ2xlY29uc2VudHBsYXRmb3JtIC0tPlxuIiAuICRqcXVlcnlfdGFnIC4gKCRqcXVlcnlfdGFnID8gIlxuIiA6ICcnKSAuICRqc19maWxlX3RhZyAuICJcbiIgLiAkY3NzX2ZpbGVfdGFnIC4gIlxuIjsKICAgICR0aGlzLT5oZWFkIC49ICRpbmplY3Rpb247Cn0KCiRzZWxlY3RlZF9sYW5nID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2djcF9sYW5ndWFnZScsICdlbl9VUycpOwokdHBsID0gJHNtYXJ0eS0+Q3JlYXRlVGVtcGxhdGUoJHRoaXMtPkdldFRlbXBsYXRlUmVzb3VyY2UoJ29yaWdfY29va2llbW9kYWxfdGVtcGxhdGUudHBsJyksIG51bGwsIG51bGwsICRzbWFydHkpOwokdHBsLT5hc3NpZ24oJ2dvb2dsZV90YWdfdHlwZScsICR0YWdfdHlwZSk7CiR0cGwtPmFzc2lnbignZ29vZ2xlX3RhZ19pZCcsICRndGFnX2lkKTsKJHRwbC0+YXNzaWduKCdjb29raWVfbGFuZ3VhZ2UnLCAkc2VsZWN0ZWRfbGFuZyk7CiR0cGwtPmFzc2lnbignY29sb3Jfc2NoZW1lJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2djcF9jb2xvcl9zY2hlbWUnLCAnbGlnaHQnKSk7CiR0cGwtPmFzc2lnbigncG9zaXRpb24nLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZ2NwX3Bvc2l0aW9uJywgJ2JvdHRvbScpKTsKJHRwbC0+YXNzaWduKCdzaXplJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2djcF9zaXplJywgJ25vcm1hbCcpKTsKJHRwbC0+YXNzaWduKCdjdXN0b21fdGl0bGUnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZ2NwX2N1c3RvbV90aXRsZV8nIC4gJHNlbGVjdGVkX2xhbmcsICcnKSk7CiR0cGwtPmFzc2lnbignY3VzdG9tX3RleHQnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZ2NwX2N1c3RvbV90ZXh0XycgLiAkc2VsZWN0ZWRfbGFuZywgJycpKTsKJHRwbC0+YXNzaWduKCdwcmltYXJ5X2NvbG9yJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2djcF9wcmltYXJ5X2NvbG9yJywgJyMwMDdiZmYnKSk7CiR0cGwtPmFzc2lnbignY29uc2VudHMnLCAkY29uc2VudHMpOwokdHBsLT5hc3NpZ24oJ21vZCcsICR0aGlzKTsKCiR0aGlzLT5ib2R5YnRtIC49ICR0cGwtPmZldGNoKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgU2VlIExJQ0VOU0UgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmlmICghZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSkgZXhpdDsKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKEdvb2dsZUNvbnNlbnRQbGF0Zm9ybTo6TUFOQUdFX1BFUk0pKSByZXR1cm47CgokYWN0aXZlX3RhYiA9IGlzc2V0KCRwYXJhbXNbJ2FjdGl2ZV90YWInXSkgPyAkcGFyYW1zWydhY3RpdmVfdGFiJ10gOiAnJzsKCmVjaG8gJHRoaXMtPlN0YXJ0VGFiSGVhZGVycygpOwplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ29wdGlvbnMnLCAnQ29uc2VudCBPcHRpb25zJywgKCRhY3RpdmVfdGFiID09ICdvcHRpb25zJykpOwplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3NldHRpbmdzJywgJ1NldHRpbmdzJywgKCRhY3RpdmVfdGFiID09ICdzZXR0aW5ncycpKTsKZWNobyAkdGhpcy0+RW5kVGFiSGVhZGVycygpOwoKZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CgplY2hvICR0aGlzLT5TdGFydFRhYignb3B0aW9ucycsICRwYXJhbXMpOwppbmNsdWRlIF9fRElSX18gLiAnL2Z1bmN0aW9uLmFkbWluX29wdGlvbnN0YWIucGhwJzsKZWNobyAkdGhpcy0+RW5kVGFiKCk7CgplY2hvICR0aGlzLT5TdGFydFRhYignc2V0dGluZ3MnLCAkcGFyYW1zKTsKaW5jbHVkZSBfX0RJUl9fIC4gJy9mdW5jdGlvbi5hZG1pbl9zZXR0aW5nc3RhYi5waHAnOwplY2hvICR0aGlzLT5FbmRUYWIoKTsKCmVjaG8gJHRoaXMtPkVuZFRhYkNvbnRlbnQoKTsK]]></data>
	</file>
	<file>
	  <filename>/assets/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/assets/googleconsentplatform.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNvb2tpZS1tb2RhbHtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC41KTt6LWluZGV4Ojk5OTk7ZGlzcGxheTpub25lO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO30uY29va2llLW1vZGFsLnJldmVhbC1tb2RhbHtkaXNwbGF5OmZsZXg7fS5jb29raWUtZGlhbG9ne2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjhweDttYXgtd2lkdGg6NTAwcHg7bWFyZ2luOjIwcHg7Ym94LXNoYWRvdzowIDRweCAyMHB4IHJnYmEoMCwwLDAsMC4zKTt9LmNvb2tpZS1oZWFkZXJ7cGFkZGluZzoxNXB4IDIwcHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGVlMmU2O30uY29va2llLXRhYnN7ZGlzcGxheTpmbGV4O21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmU7fS5jb29raWUtdGFicyBsaXtmbGV4OjE7dGV4dC1hbGlnbjpjZW50ZXI7fS5jb29raWUtdGFicyBhe2Rpc3BsYXk6YmxvY2s7cGFkZGluZzoxMHB4O3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiM2NjY7Ym9yZGVyLWJvdHRvbToycHggc29saWQgdHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjphbGwgMC4zcyBlYXNlO30uY29va2llLXRhYnMgYTpob3Zlcntjb2xvcjojMDA3YmZmO30uY29va2llLXRhYnMgYS5nY3AtYWN0aXZle2NvbG9yOiMwMDdiZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDA3YmZmO30uY29va2llLWJvZHl7cGFkZGluZzoyMHB4O21pbi1oZWlnaHQ6MjAwcHg7fS5nY3AtdGFiLWNvbnRlbnR7ZGlzcGxheTpub25lO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMC4xNXMgbGluZWFyO30uZ2NwLXRhYi1jb250ZW50LmdjcC1hY3RpdmV7ZGlzcGxheTpibG9jaztvcGFjaXR5OjE7fS5nY3AtdG9nZ2xlLWl0ZW17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjEwcHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVlO30uZ2NwLXRvZ2dsZS1zd2l0Y2h7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6NTBweDtoZWlnaHQ6MjRweDt9LmdjcC10b2dnbGUtc3dpdGNoIGlucHV0e29wYWNpdHk6MDt3aWR0aDowO2hlaWdodDowO30uZ2NwLXRvZ2dsZS1zbGlkZXJ7cG9zaXRpb246YWJzb2x1dGU7Y3Vyc29yOnBvaW50ZXI7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7YmFja2dyb3VuZDojY2NjO2JvcmRlci1yYWRpdXM6MjRweDt0cmFuc2l0aW9uOjAuM3M7fS5nY3AtdG9nZ2xlLXNsaWRlcjpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDoiIjtoZWlnaHQ6MThweDt3aWR0aDoxOHB4O2xlZnQ6M3B4O2JvdHRvbTozcHg7YmFja2dyb3VuZDp3aGl0ZTtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOjAuM3M7fWlucHV0OmNoZWNrZWQgKyAuZ2NwLXRvZ2dsZS1zbGlkZXJ7YmFja2dyb3VuZDojMDA3YmZmO31pbnB1dDpjaGVja2VkICsgLmdjcC10b2dnbGUtc2xpZGVyOmJlZm9yZXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgyNnB4KTt9LmNvb2tpZS1mb290ZXJ7cGFkZGluZzoxNXB4IDIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RlZTJlNjt9LmNvb2tpZS1mb290ZXIgLmdjcC1idG57bWFyZ2luOjAgNXB4O3BhZGRpbmc6OHB4IDIwcHg7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo0cHg7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7fS5nY3AtYnRuLXByaW1hcnl7YmFja2dyb3VuZDojMDA3YmZmO2NvbG9yOiNmZmY7fS5nY3AtYnRuLXNlY29uZGFyeXtiYWNrZ3JvdW5kOiM2Yzc1N2Q7Y29sb3I6I2ZmZjt9LmdjcC1idG4tb3V0bGluZXtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDdiZmY7Ym9yZGVyOjFweCBzb2xpZCAjMDA3YmZmO30uY29va2llLWZvb3RlciAuZ2NwLWJ0bjpob3ZlcntvcGFjaXR5OjAuOTt9LmdjcC10aXRsZXtmb250LXNpemU6MThweDtmb250LXdlaWdodDo2MDA7bWFyZ2luOjAgMCAxNXB4IDA7Y29sb3I6IzMzMzt9LmdjcC1zdWJ0aXRsZXtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo1MDA7bWFyZ2luOjAgMCAxMHB4IDA7Y29sb3I6IzMzMzt9LmdjcC10ZXh0e2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjEuNTttYXJnaW46MCAwIDE1cHggMDtjb2xvcjojNjY2O30uY29va2llLW1vZGFsLmRhcmstdGhlbWUgLmNvb2tpZS1kaWFsb2d7YmFja2dyb3VuZDojMmQzNzQ4O2NvbG9yOiNlMmU4ZjA7fS5jb29raWUtbW9kYWwuZGFyay10aGVtZSAuY29va2llLWhlYWRlcntib3JkZXItYm90dG9tLWNvbG9yOiM0YTU1Njg7fS5jb29raWUtbW9kYWwuZGFyay10aGVtZSAuY29va2llLXRhYnMgYXtjb2xvcjojYTBhZWMwO30uY29va2llLW1vZGFsLmRhcmstdGhlbWUgLmNvb2tpZS10YWJzIGE6aG92ZXJ7Y29sb3I6IzYzYjNlZDt9LmNvb2tpZS1tb2RhbC5kYXJrLXRoZW1lIC5jb29raWUtdGFicyBhLmdjcC1hY3RpdmV7Y29sb3I6IzYzYjNlZDtib3JkZXItYm90dG9tLWNvbG9yOiM2M2IzZWQ7YmFja2dyb3VuZDpyZ2JhKDk5LDE3OSwyMzcsMC4xKTt9LmNvb2tpZS1tb2RhbC5kYXJrLXRoZW1lIC5nY3AtdG9nZ2xlLWl0ZW17Ym9yZGVyLWJvdHRvbS1jb2xvcjojNGE1NTY4O30uY29va2llLW1vZGFsLmRhcmstdGhlbWUgLmNvb2tpZS1mb290ZXJ7Ym9yZGVyLXRvcC1jb2xvcjojNGE1NTY4O30uY29va2llLW1vZGFsLmRhcmstdGhlbWUgLmdjcC1idG4tcHJpbWFyeXtiYWNrZ3JvdW5kOiMwMDdiZmY7fS5jb29raWUtbW9kYWwuZGFyay10aGVtZSAuZ2NwLWJ0bi1zZWNvbmRhcnl7YmFja2dyb3VuZDojNGE1NTY4O30uY29va2llLW1vZGFsLmRhcmstdGhlbWUgLmdjcC1idG4tb3V0bGluZXtjb2xvcjojNjNiM2VkO2JvcmRlci1jb2xvcjojNjNiM2VkO30uY29va2llLW1vZGFsLmRhcmstdGhlbWUgLmdjcC10aXRsZXtjb2xvcjojZTJlOGYwO30uY29va2llLW1vZGFsLmRhcmstdGhlbWUgLmdjcC1zdWJ0aXRsZXtjb2xvcjojZTJlOGYwO30uY29va2llLW1vZGFsLmRhcmstdGhlbWUgLmdjcC10ZXh0e2NvbG9yOiNjYmQ1ZTA7fS5jb29raWUtbW9kYWwucG9zaXRpb24tYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kO30uY29va2llLW1vZGFsLnBvc2l0aW9uLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O30uY29va2llLW1vZGFsLnBvc2l0aW9uLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXI7fS5jb29raWUtbW9kYWwuc2l6ZS1jb21wYWN0IC5jb29raWUtZGlhbG9ne21heC13aWR0aDo0MDBweDtmb250LXNpemU6MTRweDt9LmNvb2tpZS1tb2RhbC5zaXplLWNvbXBhY3QgLmNvb2tpZS1ib2R5e3BhZGRpbmc6MTVweDttaW4taGVpZ2h0OjE1MHB4O30uY29va2llLW1vZGFsLnNpemUtY29tcGFjdCAuY29va2llLWhlYWRlcntwYWRkaW5nOjEwcHggMTVweCAwO30uY29va2llLW1vZGFsLnNpemUtY29tcGFjdCAuY29va2llLWZvb3RlcntwYWRkaW5nOjEwcHggMTVweDt9LmNvb2tpZS1tb2RhbC5zaXplLWNvbXBhY3QgLmdjcC1idG57cGFkZGluZzo4cHggMTVweDtmb250LXNpemU6MTJweCAhaW1wb3J0YW50O30uY29va2llLW1vZGFsLnNpemUtbGFyZ2UgLmNvb2tpZS1kaWFsb2d7bWF4LXdpZHRoOjYwMHB4O2ZvbnQtc2l6ZToxNnB4O30uY29va2llLW1vZGFsLnNpemUtbGFyZ2UgLmNvb2tpZS1ib2R5e3BhZGRpbmc6MjVweDttaW4taGVpZ2h0OjI1MHB4O30uY29va2llLW1vZGFsLnNpemUtbGFyZ2UgLmNvb2tpZS1oZWFkZXJ7cGFkZGluZzoyMHB4IDI1cHggMDt9LmNvb2tpZS1tb2RhbC5zaXplLWxhcmdlIC5jb29raWUtZm9vdGVye3BhZGRpbmc6MjBweCAyNXB4O30uY29va2llLW1vZGFsLnNpemUtd2lkZSAuY29va2llLWRpYWxvZ3ttYXgtd2lkdGg6ODAwcHg7fQ==]]></data>
	</file>
	<file>
	  <filename>/assets/googleconsentplatform.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCl7J3VzZSBzdHJpY3QnO2Z1bmN0aW9uIHRvZ2dsZUJhbm5lcihlKXtqUXVlcnkoZSkuY2xvc2VzdCgiLmNvb2tpZS1tb2RhbCIpLnJlbW92ZUNsYXNzKCJyZXZlYWwtbW9kYWwiKTt9ZnVuY3Rpb24gc2V0Q29uc2VudChlKXtjb25zdCB0ID17YWRfdXNlcl9kYXRhOiBlLm1hcmtldGluZyA/ICJncmFudGVkIiA6ICJkZW5pZWQiLGFkX3BlcnNvbmFsaXphdGlvbjogZS5tYXJrZXRpbmcgPyAiZ3JhbnRlZCIgOiAiZGVuaWVkIixhZF9zdG9yYWdlOiBlLm1hcmtldGluZyA/ICJncmFudGVkIiA6ICJkZW5pZWQiLGFuYWx5dGljc19zdG9yYWdlOiBlLmFuYWx5dGljcyA/ICJncmFudGVkIiA6ICJkZW5pZWQiLHBlcnNvbmFsaXphdGlvbl9zdG9yYWdlOiBlLnByZWZlcmVuY2VzID8gImdyYW50ZWQiIDogImRlbmllZCIsZnVuY3Rpb25hbGl0eV9zdG9yYWdlOiBlLm5lY2Vzc2FyeSA/ICJncmFudGVkIiA6ICJkZW5pZWQiLHNlY3VyaXR5X3N0b3JhZ2U6ICJncmFudGVkIix9O2d0YWcoImNvbnNlbnQiLCJ1cGRhdGUiLHQpO2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJjb25zZW50TW9kZSIsSlNPTi5zdHJpbmdpZnkodCkpO31kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixmdW5jdGlvbigpe2lmKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb25zZW50TW9kZSIpPT09IG51bGwpe2pRdWVyeSgiLmNvb2tpZS1tb2RhbCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZSA9IGpRdWVyeSh0aGlzKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5hZGRDbGFzcygicmV2ZWFsLW1vZGFsIik7fSwxMDAwKTt9KTtmdW5jdGlvbiB1cGRhdGVDdXN0b21pemVCdXR0b24oKXt2YXIgY3VzdG9taXplQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ0bi1jdXN0b21pemUiKSx0YWJEZXRhaWxzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhYi1kZXRhaWxzIiksaXNBY3RpdmUgPSB0YWJEZXRhaWxzICYmIHRhYkRldGFpbHMuY2xhc3NMaXN0LmNvbnRhaW5zKCJnY3AtYWN0aXZlIik7Y3VzdG9taXplQnRuICYmKGN1c3RvbWl6ZUJ0bi50ZXh0Q29udGVudCA9IGlzQWN0aXZlID8gY3VzdG9taXplQnRuLmRhdGFzZXQuc2F2ZVRleHQgfHwgIlNhdmUgU2VsZWN0aW9uIiA6IGN1c3RvbWl6ZUJ0bi5kYXRhc2V0LmN1c3RvbWl6ZVRleHQgfHwgIkN1c3RvbWl6ZSIpO31kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZ2NwLXRhYi1saW5rIikuZm9yRWFjaChmdW5jdGlvbih0KXt0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCk7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmdjcC10YWItbGluayIpLmZvckVhY2goKGUpPT4gZS5jbGFzc0xpc3QucmVtb3ZlKCJnY3AtYWN0aXZlIikpO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5nY3AtdGFiLWNvbnRlbnQiKS5mb3JFYWNoKChlKT0+IGUuY2xhc3NMaXN0LnJlbW92ZSgiZ2NwLWFjdGl2ZSIpKTt0aGlzLmNsYXNzTGlzdC5hZGQoImdjcC1hY3RpdmUiKTt2YXIgdGFiRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YWItIiArIHRoaXMuZGF0YXNldC50YWIpO2lmKHRhYkVsZW1lbnQpdGFiRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJnY3AtYWN0aXZlIik7dXBkYXRlQ3VzdG9taXplQnV0dG9uKCk7fSk7fSk7ZnVuY3Rpb24gdCgpe1sicHJlZmVyZW5jZXMiLCJzdGF0aXN0aWNzIiwibWFya2V0aW5nIl0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0b2dnbGUtIiArIGUpLG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidG9nZ2xlLSIgKyBlICsgIi1kZXRhaWwiKTt0ICYmbiAmJigobi5jaGVja2VkID0gdC5jaGVja2VkKSx0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsZnVuY3Rpb24oKXtuLmNoZWNrZWQgPSB0aGlzLmNoZWNrZWQ7fSksbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7dC5jaGVja2VkID0gdGhpcy5jaGVja2VkO30pKTt9KTt9dCgpO3ZhciBuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ0bi1hbGxvdy1hbGwiKTtuICYmbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO3NldENvbnNlbnQoe25lY2Vzc2FyeTogITAsYW5hbHl0aWNzOiAhMCxwcmVmZXJlbmNlczogITAsbWFya2V0aW5nOiAhMH0pO3RvZ2dsZUJhbm5lcih0aGlzKTt9KTt2YXIgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidG4tZGVueSIpO2MgJiZjLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCk7c2V0Q29uc2VudCh7bmVjZXNzYXJ5OiAhMSxhbmFseXRpY3M6ICExLHByZWZlcmVuY2VzOiAhMSxtYXJrZXRpbmc6ICExfSk7dG9nZ2xlQmFubmVyKHRoaXMpO30pO3ZhciBvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ0bi1jdXN0b21pemUiKTtvICYmby5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciB0YWJEZXRhaWxzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhYi1kZXRhaWxzIik7dmFyIHQgPSB0YWJEZXRhaWxzICYmIHRhYkRldGFpbHMuY2xhc3NMaXN0LmNvbnRhaW5zKCJnY3AtYWN0aXZlIik7aWYodCl7dmFyIG4gPXtuZWNlc3Nhcnk6ICEwLGFuYWx5dGljczogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRvZ2dsZS1zdGF0aXN0aWNzLWRldGFpbCIpLmNoZWNrZWQscHJlZmVyZW5jZXM6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0b2dnbGUtcHJlZmVyZW5jZXMtZGV0YWlsIikuY2hlY2tlZCxtYXJrZXRpbmc6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0b2dnbGUtbWFya2V0aW5nLWRldGFpbCIpLmNoZWNrZWQsfTtzZXRDb25zZW50KG4pO3RvZ2dsZUJhbm5lcih0aGlzKTt9ZWxzZXt2YXIgZGV0YWlsc0xpbmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS10YWI9ImRldGFpbHMiXScpO2lmKGRldGFpbHNMaW5rICYmIHRhYkRldGFpbHMpe2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5nY3AtdGFiLWxpbmsiKS5mb3JFYWNoKChlKT0+IGUuY2xhc3NMaXN0LnJlbW92ZSgiZ2NwLWFjdGl2ZSIpKTtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZ2NwLXRhYi1jb250ZW50IikuZm9yRWFjaCgoZSk9PiBlLmNsYXNzTGlzdC5yZW1vdmUoImdjcC1hY3RpdmUiKSk7ZGV0YWlsc0xpbmsuY2xhc3NMaXN0LmFkZCgiZ2NwLWFjdGl2ZSIpO3RhYkRldGFpbHMuY2xhc3NMaXN0LmFkZCgiZ2NwLWFjdGl2ZSIpO3VwZGF0ZUN1c3RvbWl6ZUJ1dHRvbigpO319fSk7dmFyIGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnRuLWFja25vd2xlZGdlIik7YSAmJmEuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29uc2VudE1vZGUiLEpTT04uc3RyaW5naWZ5KHthY2tub3dsZWRnZWQ6ICEwfSkpO3RvZ2dsZUJhbm5lcih0aGlzKTt9KTt9fSk7d2luZG93Lkdvb2dsZUNvbnNlbnRQbGF0Zm9ybVJlc2V0ID0gZnVuY3Rpb24oKXtsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgiY29uc2VudE1vZGUiKTtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuY29va2llLW1vZGFsIikuZm9yRWFjaCgoZSk9PiBlLmNsYXNzTGlzdC5hZGQoInJldmVhbC1tb2RhbCIpKTtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdOm5vdChbZGlzYWJsZWRdKScpLmZvckVhY2goKGUpPT4oZS5jaGVja2VkID0gITEpKTt9O2Z1bmN0aW9uIGNvbnNlbnRfZ3JhbnRlZF9hZF9zdG9yYWdlKCl7Z3RhZygiY29uc2VudCIsInVwZGF0ZSIse2FkX3N0b3JhZ2U6ICJncmFudGVkIn0pO31mdW5jdGlvbiBjb25zZW50X2dyYW50ZWRfYWRfdXNlcl9kYXRhKCl7Z3RhZygiY29uc2VudCIsInVwZGF0ZSIse2FkX3VzZXJfZGF0YTogImdyYW50ZWQifSk7fWZ1bmN0aW9uIGNvbnNlbnRfZ3JhbnRlZF9hZF9wZXJzb25hbGl6YXRpb24oKXtndGFnKCJjb25zZW50IiwidXBkYXRlIix7YWRfcGVyc29uYWxpemF0aW9uOiAiZ3JhbnRlZCJ9KTt9ZnVuY3Rpb24gY29uc2VudF9ncmFudGVkX2FuYWx5dGljc19zdG9yYWdlKCl7Z3RhZygiY29uc2VudCIsInVwZGF0ZSIse2FuYWx5dGljc19zdG9yYWdlOiAiZ3JhbnRlZCJ9KTt9ZnVuY3Rpb24gY29uc2VudF9ncmFudGVkX3BlcnNvbmFsaXphdGlvbl9zdG9yYWdlKCl7Z3RhZygiY29uc2VudCIsInVwZGF0ZSIse3BlcnNvbmFsaXphdGlvbl9zdG9yYWdlOiAiZ3JhbnRlZCJ9KTt9ZnVuY3Rpb24gY29uc2VudF9ncmFudGVkX2Z1bmN0aW9uYWxpdHlfc3RvcmFnZSgpe2d0YWcoImNvbnNlbnQiLCJ1cGRhdGUiLHtmdW5jdGlvbmFsaXR5X3N0b3JhZ2U6ICJncmFudGVkIn0pO31mdW5jdGlvbiBjb25zZW50X2RlbmllZF9hZF9zdG9yYWdlKCl7Z3RhZygiY29uc2VudCIsInVwZGF0ZSIse2FkX3N0b3JhZ2U6ICJkZW5pZWQifSk7fWZ1bmN0aW9uIGNvbnNlbnRfZGVuaWVkX2FkX3VzZXJfZGF0YSgpe2d0YWcoImNvbnNlbnQiLCJ1cGRhdGUiLHthZF91c2VyX2RhdGE6ICJkZW5pZWQifSk7fWZ1bmN0aW9uIGNvbnNlbnRfZGVuaWVkX2FkX3BlcnNvbmFsaXphdGlvbigpe2d0YWcoImNvbnNlbnQiLCJ1cGRhdGUiLHthZF9wZXJzb25hbGl6YXRpb246ICJkZW5pZWQifSk7fWZ1bmN0aW9uIGNvbnNlbnRfZGVuaWVkX2FuYWx5dGljc19zdG9yYWdlKCl7Z3RhZygiY29uc2VudCIsInVwZGF0ZSIse2FuYWx5dGljc19zdG9yYWdlOiAiZGVuaWVkIn0pO31mdW5jdGlvbiBjb25zZW50X2RlbmllZF9wZXJzb25hbGl6YXRpb25fc3RvcmFnZSgpe2d0YWcoImNvbnNlbnQiLCJ1cGRhdGUiLHtwZXJzb25hbGl6YXRpb25fc3RvcmFnZTogImRlbmllZCJ9KTt9ZnVuY3Rpb24gY29uc2VudF9kZW5pZWRfZnVuY3Rpb25hbGl0eV9zdG9yYWdlKCl7Z3RhZygiY29uc2VudCIsInVwZGF0ZSIse2Z1bmN0aW9uYWxpdHlfc3RvcmFnZTogImRlbmllZCJ9KTt9fSkoKTs=]]></data>
	</file>
	<file>
	  <filename>/assets/icon.svg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDI4NDAgMjg0MCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxuczpzZXJpZj0iaHR0cDovL3d3dy5zZXJpZi5jb20vIiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjI7Ij4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTY0MjMuNzksLTk1ODQuMzgpIj4KICAgICAgICA8ZyBpZD0iUGFnaW5hLTIxIiBzZXJpZjppZD0iUGFnaW5hIDIxIiB0cmFuc2Zvcm09Im1hdHJpeCg1LjU1NTU2LDAsMCw1LjU1NTU2LDY0MjMuNzksOTU4NC4zOCkiPgogICAgICAgICAgICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iNTExLjE2NyIgaGVpZ2h0PSI1MTEuMTY3IiBzdHlsZT0iZmlsbDpub25lOyIvPgogICAgICAgICAgICA8Y2xpcFBhdGggaWQ9Il9jbGlwMSI+CiAgICAgICAgICAgICAgICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iNTExLjE2NyIgaGVpZ2h0PSI1MTEuMTY3Ii8+CiAgICAgICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgICAgIDxnIGNsaXAtcGF0aD0idXJsKCNfY2xpcDEpIj4KICAgICAgICAgICAgICAgIDxnIGlkPSJMYXllci0yIiBzZXJpZjppZD0iTGF5ZXIgMiI+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICA8ZyBpZD0iTGF5ZXItMSIgc2VyaWY6aWQ9IkxheWVyIDEiPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMCwxLDEsMCwyNTUuNTg0LDIuMjczNzRlLTEzKSI+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTI1NS41ODMsLTI1NS41ODRDMzk2LjczOCwtMjU1LjU4NCA1MTEuMTY3LC0xNDEuMTU1IDUxMS4xNjcsLTAuMDAxQzUxMS4xNjcsMTQxLjE1NCAzOTYuNzM4LDI1NS41ODMgMjU1LjU4MywyNTUuNTgzQzExNC40MjgsMjU1LjU4MyAwLDE0MS4xNTQgMCwtMC4wMDFDMCwtMTQxLjE1NSAxMTQuNDI4LC0yNTUuNTg0IDI1NS41ODMsLTI1NS41ODQiIHN0eWxlPSJmaWxsOnJnYigxNjIsMjA2LDk3KTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDxnIGlkPSJHb29nbGVfRmF2aWNvbl8yMDI1LnN2Zy5wbmciIHRyYW5zZm9ybT0ibWF0cml4KDAuMzE0MzEyLDAsMCwwLjMxNDMxMiw1NC40MjM5LDUwLjAyMzUpIj4KICAgICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNfSW1hZ2UyIiB4PSIwIiB5PSIwIiB3aWR0aD0iMTI4MHB4IiBoZWlnaHQ9IjEzMDhweCIvPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgogICAgPGRlZnM+CiAgICAgICAgPGltYWdlIGlkPSJfSW1hZ2UyIiB3aWR0aD0iMTI4MHB4IiBoZWlnaHQ9IjEzMDhweCIgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUJRQUFBQVVjQ0FZQUFBQnM4RDBYQUFBQUJHZEJUVUVBQUxHUEMveGhCUUFBQUNCalNGSk5BQUI2SmdBQWdJUUFBUG9BQUFDQTZBQUFkVEFBQU9wZ0FBQTZtQUFBRjNDY3VsRThBQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQjNSSlRVVUg2Z1lNQWpZV3dORW9GZ0FBZ0FCSlJFRlVlTnJzblhmY0psZFovcTk3bm5kTHNwdGVnQ1NBa0pCSUN4QTZCRndrQW9Gc0FIRXBvVmtnb0lBTkZCUi91bUlEQ3lnaWFrS1RrbUNXRXJJSk5VSUVRZzlWU2xBUUFVR1JGa2piZmQ5bjd0OGYrODd6bmpsenpzeVpYcDdyKy9sQWRwODVNM1BPbVhidWErOGlJSVFRUWdnaGcwUFBQSE1MYnJqaElCeUU3VkRaaHJrZWhGZ1BRalE3QkJJZkROV0RJTkZCQUxZajFnZ1J0a0psTTBRM1FYRVFWQ0pFMkg3Z1lOZ08wUWpBVmlnMmI1eEZ0Z0M2eGRPRkxRQzJRakNENnBHQXhBQitDR0FPNEJyUFBqL0svaVFLMFIrdjkwTWg4bU9veGdDdUJXUU80RG9BYTFDOUhvSlZpTndBMWYwUTNBaEUrNkRZQitnK3FPNURoR3NSNFZySS9EcjhjTzFhK2ZDSGIrQ2RRZ2doaEJCU2pIQUtDQ0dFRUVMYVFYZnNPQnliNHlPQTJaR0k5UWdnUGhJU0hRSFJJNkU0SEpBaklUZ0NzUjRKa1NNQTNRYVJRNkI2S0NDendhd1dZOHdBQlNMRVVORUJUZkVhRG9pTzF3QzRCb29mSTFyL0wvUkhVRG13VGZCRHhQZ3hvdWdIbUs5K0YxdG0zOEVQOTMyUEFpSWhoQkJDbGdVS2dJUVFRZ2doZ2VpT0hWdXhPVDRHc25JemFId3NZajBHa09NZ09BYWl4MERsT0FESEFEZ1cwS01BaWFZdzdBTmVmQUJVWldMcngrc0FmQmZRL3dYd1hRaStDOFYzQWZrT1ZMK0RDTi9GSE45RnBOL0Z5cmIvbFhlODQwZDhDZ2doaEJBeVJpZ0FFa0lJSVdUcDBkMjdJM3o0WDI0Q2JMbzU0dm54a09qbWlIRUNvdmg0eEhKekFNZEM5R2FBSExxY0V3UmRYelV1KzlyeEJnRGZCT1RiVUh3RGtYNGJpbThDMGJjQS9SYm04azBjZGRTM1pjK2UvWHlxQ0NHRUVESWtLQUFTUWdnaFpQTG9qaDJIWXlXK0ZUQzdGVVJ2RHVndG9ISThCQ2NBZW5OQWJnWmdFMmZLUDRVQTVJQVhJQ2NqWUFuOXZ3QytEWlZ2QXZvdFJQb3RRTDRCeFg5aFJiNkc3MXp6ZGJucXFsWE9JeUdFRUVJR3Mzb2hoQkJDQ0JrNnVtdlhadnpnQnlkZ3RuWnJxTndhcXJjRzVOYUEzaHJBY1FCdXhsa2l2U3lmeGJ2UER3QjhGWUt2SXNaWElmcFZ5T3lybU9Pck9PS0kvNUk5ZSthY2EwSUlJWVQwdElJaGhCQkNDT2tIM2JGaks3Yk9Ua1k4UHhuUTIwRGtaQ2h1QStpdDFqMzQwdXNhZXFvMWZBRzRjcXkwZkpZcWt5YjdBUDFQUUw1MjRML1JmMEx3VldoME5XYXpmNWQzdkdNZnJ3TWhoQkJDV2x6QkVFSUlJWVMwaS83TXp4eUhhUFYyQzA4K3dlMEJ2UjBndHdRUVhobVhBbUREcTBZRmRObVhqbzE1LzlVOXo3Y0JmRDRHdmhvcHZvQklQbzg1dm9yTEwvOVA0WjFQQ0NHRWtQcXJHRUlJSVlTUSt1aXVYVFA4OEg5dmpkbnNqb2oxZGdEdUFPaHRBVGtad05ibVRzUzVibmJKcUp5RFVzMmx0Zk9vZTU4ZlFYRzFpbDRkUWI0RWxTOWpGbCtORytkZmxpdXV1SkgzTVNHRUVNS1ZEQ0dFRUVKSUt5dzgrbUxjSHFLM0ErVDJBTzRNWUZ2N0orZjhOemFQZ2lVUEF4Nk9BS2pWK3ZadEFGZXA0UE1SOEFWZ2RoVU9QZlJMekRWSUNDR0VjQ1ZEQ0NHRUVCS01ubjNmUTNEOXBqc2gwcnNBdUROVTdnakI3ZENGMEpmYk1WNGIwdkdTdVIvdnZ4S0hYL3poT2dDZlYrQ3prY2pub1BJNUFKK1JkNzNyKzd6bWhCQkN5Rkt2WmdnaGhCQkNBSDNvanB0aWpqdERjV2VJbkFiVk93TTRhWkJyQ3dxQXBPc2xzd3hRL0VzMUw5enZXd0ErcDhCbklzSG5FTXVuY2RoaFg2UzNJQ0dFRUxJMHF4bENDQ0dFTEJ2NmtCMC9nUmgzZytoZG9ITEF1dys0MmJnR3dldll5S3BSbDNYZ1padVB3dnV2YlArdWcrRFRxdktKQ0xnSzgva25jUHJwVjh2dTNURWZEa0lJSVdSeUt4cENDQ0dFVEJrOTg4eERzWHJEcVpqaHZsQ2NEdUR1QUc0eS9vSHgyalkzbDFyUncyMUpsc3N5U2ZIUHQrRmFDRDZqTWE2S1JLNENjQlh1ZmU4dlVoUWtoQkJDUnIraUlZUVFRc2hVMEh2Zit5QnMzM29hSXIwN0lQZUE2ajBBbkRqZEFmT2FOemVKeTdLRUhIM2hENnVwdEQ4SHdEVUFQcW1LQTU2Q1VmUlJlZWM3djhabmh4QkNDQm5WcW9ZUVFnZ2hZMFVmZFA5YlFlUjB4SElmQ080RjRBNEFWcFpuQW5nUDFGOHk2cEtPTzdUcFVubi9sZG5uV3hENWtNVHhod0I4Q04vNzNpZmxxcXRXK1Z3UlFnZ2hnMXpWRUVJSUlXUXM2SzVkTS96b3V6OEpYUS9sRmIwZmdKL2d4UERlcUxaaWxBT2h2MXdtRnpTWFZzNVJYL3lydXV4dlRUUmNCZkJaRmIweVF2UkJpRndoNzNqSC8vRkJJNFFRUWdhenNpR0VFRUxJRU5FZE83WmpCWGMyY3ZlZER1Qnd6b3c5VVp5QzJ2TzNGS3RIRnY1bzNXTXcwMHkrcXNDVmtlcFZVUDBnN25PZlR6R1hJQ0dFRU5MYjZvWVFRZ2doUTBBZi9PQWpvZnZ1RDhFT0tIYmdRRGp2akRNVE1ubWNBdEx3RWxrWStsdHFId25hNy9zQVBpZ2k3NFBJRmJqSFBUNUxRWkFRUWdqcGJIVkRDQ0dFa0Q3UUhUdTJZd3Z1aFJoblFIQUdvSGNCSk9MTVZKbE1UZ0ZwY0hrOHhNSWZ3dzM5cmRPL0h3UDRxSWhjanZuOGNub0lFa0lJSWQxODNRa2hoQkRTSXBiZ2R6cUFld0RZeEpscFluSTVCYlhtYnZLcngyWDMvdXM4OUxmcStmNFBnbzhLOEVITW84dng3c3MrS1h5NkNTR0VrTWEvOElRUVFnaHBFRDN6ekMyWTc3c3ZOSDRRQkE4RWNCY3dwTGZGQ2VjVTFKdTRxUzRoaCtyOXQxU2h2MVhQOXo4S1hCRUozZ2VSSytUdGIvOHluMWRDQ0NHay9sZVhFRUlJSVRYUk0wNi9OYUxaZWtndkhneVZRemtyWFUwK3A0QTBzRFNtOTEvNGZ0TGh1UTd3UHdwOVR3VHN4ZGF0NzVHTEwvNGg3MjlDQ0NGYzVSQkNDQ0drZFhUbmpxT3hxZzhBY0FZVUR3RndpMndqZnBxN3V5Q2Nna29yUjUzeTRNbzJsMWJPd2REZnh2czVoOGluTmRiTEk5RkxjYTk3ZllqNUF3a2hoQ3pqTW80UVFnZ2hMYUE3ZHF4Z2Mzd2ZRQjRDd1lOd0lLdzN2M0FIQmNBT0x4Q25nRlJjRnJQd1I0MisxVEZCbXRsUGdlOEFlTGVLdm5NMm43OUgzdjN1Ny9EK0o0UVF3cFVPSVlRUVFvTFJCejd3S0d4YSsya29kZ0k0QzhBUjVRL0N6M04zRjR4VFVHcXVKbnRyMHZ1dnRYa2JudmpuYXZJRlFQZkdjWFQ1eXFFSHYxLzI3Tm5QQjU0UVFzaVNyM1lJSVlRUWtqSFl6emo5MXBoRk93RTVDOEJQb1c2MVhncUFIVjQ4VGdFcHVTUm00WTl5KzlUMlRLeHJza2p4NDU0Ky9IVUN2QzlHdEdlMlplVVM1ZzRraEJDeWhLc2RRZ2doaEFDQTdycjNRZmpSbHZ0Q2RTY0VqNEFybDErdEUvRHozTzBGNVJTVW1pdlI5ZjlPNVQ2bDkxOXIrNHpEK3k5djM3a0NIeEZnYnlUNlZsWVdKb1FRc2tRckhrSUlJV1E1MFRQdmR3eFV6b2JLSXdDY0FXQnJ1eWZrSjdxN2k4c3BLTFZ5VkFDcXl5a0FUczc3YitsRGY4dWRVL0FaS0M2SlJDL0IyOTkrbGZEdFFRZ2haSm9ySGtJSUlXUzUwRE5PdndXaTJVTWcyQW5nd2FnYjJsdnE1UHhFZDN1eE9RWGhFeVVURWdETGV2KzFKN0pWRWdCSFUvaGpBdUpmbHYrRHlqc1Z1bmNXcjc1ZDN2M3U2L2grSUlRUU1xRlZEeUdFRURKdDlLSDN2eVBtOGtnQWo4Q0JxcjA5ZG9hZjZlN21tbE1Rdm5UVTVSUUFHZnFMTVliK3RpVCsyVndya0hmRkttK2ViWlpMNVpKTGZzeDNCU0dFa0JHdmVnZ2hoSkRwb2JzUjRVUDN2eGNpUEJJcWp3Unc0bkE2eDg5MHQvUE5LU2ljSDNIK1pUbVd3ZEpGNkcrSmZqSDBOMmkvY0FGUW1ycVhiaFRnbmJISW50bUs3S1VZU0FnaFpLUXJIMElJSVdRYTZJTWZjSHRBbndqUkowQngvSEE3eWs5MXQvUE5LU2ljbjhuY2t2VCthMldmNllmK2x0bnZSZ0V1ajRFOU04d3ZsbmU4NDBkOGlSQkNDQm5CeW9jUVFnZ1pOL3JnKzk0ZU10c0Y0SW1BM0RyZlNoeEtwL21wN25hK09RV0Y4eVAwL212cUhBejliZEk4NlVQOEs3WHZQZ0hlRXdON1pxczN2azB1di93YXZsQUlJWVFNZVBWRENDR0VqQXREOUhzOGdKT2NuOEdoaXo0VUFUdWViMDZCZjltb0V4cExtYWIwL2l2ZlpQSjUvK3JzdTA4Zzc0bWhlMmFyQjcxTkx0OURNWkFRUXNpUVZqK0VFRUxJT05DSDdyZ2JZbjAwb0xzQS9FVFFaNUJlZ0dRTTl3THBmdmxMNzc4S3paWXU3MStkZmZlSjRMSTQxdGZQWlA1MmVjYzc5dkVaSllRUU1vQVZFQ0dFRURKTWRPZnB0OEJhOURnQXZ3amc1SEFSWndSZWdCUUFlNWh6VGdHWHZ4aWU5eDlEZnd2M0c1bjRaL05EQ1BiR0VyMTI1YkszL1l2d1RVUUlJYVNmRlJBaGhCQXlMUFJocHgrQmVMWUwwQ2NCdUE4S1k4QUtQb1VVQWNrWTdvVmU1MFVyZXNTTmRPbEw3NzhLVGFZZSt0dWljSmoyb3Z3bW9HK0pNSCsxdlAzdG4rYkxoeEJDU01lcklFSUlJYVJmZE1lT3JUaG83V2NnMFJPaGVBU0FUWUZXZHZHbmtBSWdLWDMvTE9QU1VVZmUvekpONmYxWHJobnovbFhlTi8rd1g0RGd0ZEhhcHRmS3U5N3liYjZIQ0NHRWRQMEZJNFFRUWpwQmR5UENSMDYvRHlSNklxQ1BBM0JJMEdlTVhvQ2sxbnh6Q3BaNjJVdnZ2d3BOR1BwYmFWOEozamRXNE1NaWVHMDB3NFZ5eVNVLzVuTk5DQ0draTY4WUlZUVEwaXI2c1B2ZkZxby9EK0NKQUc2V3RmQW9BSksyNTV4VGtINU82UDFYNS9oYXRVLzAvc3ZkWitSNS93bzJlemRlQjhXYm9raGVpY3ZlOWtIbUN5U0VFTkxtbDR3UVFnaHBIRDN6bm9jQ214NEJrU2NDZUNDcXgzamw3Sk56bktHYlVCUUJPNTV2VHNGU0xua240LzAzL2NJZjA4cjdWL25jWHdad1lUVFRWOG5ldlYvbjgwNElJYVRwcnhraGhCRFNDS2tRWDlISEE5Z1dhRUdEWG9Day9Ubm5GQ3ptWWJTM0g3My9HdDFueU9LZjk5Q1RGZjlNNWdLOEx4YWNOL3VmbTE0c1Y1MjN5aGNYSVlTUUpyNW9oQkJDU0QwOTRjd2RKeUJhZXp4VW5ncmd4TENkS256TzZBVklhczAzcHlEem1PallPbHltK1lDOC8ycUYyREwwdHhtVHA2WHhTVnZuWGV6L2JRQjdJb25PbDh2ZSttOThjUkZDQ0tFRlFRZ2hwRk4weDQ2dDJMNzZLS2o4RWlBL0JVVlUvaUFsUDJmMEFpUzE1NXhUc0hoRWRJeWRMdE8wYmU4L0Z2NVkrdERmOXNXLzFPMm4wUGRENVZXemxmaE5zbmZ2OVh5UkVVTEk4aTdqQ0NHRWtOYlJoOXozRkVSeUxrU2VET2hSR3hzcWZJcm9CVWdSc1BQNTVoUnNUTVNZN3IwcGVQOVIvTFAzby9oWGVmOXJBRndZUmRFL3lLVnYvUXpmWjRRUXNselFlaUNFRU5LZVZMRHI5cHR4L1JFUEIzQXU3SUllNXFlb3JMalNoUUJZYXA4K0pwZWY4Tzdubk12RzhVMEV2ZjhhYmI4MG9iK1RGUDlzcm9MSWVkSEJtMTRuZS9iY3dCYzhJWVFzejBxT0VFSUlhUXc5NjU2M0FUWS9CZENmUjR4ajg3ODJVazFQV1BZd1lJQWlZQzl6emltWTdES1gzbjhsbXd6ZCsyOXNlZitrMi90OWcrOUE4ZXBJNVIva25SZC9qZThOUWdqaHlvZ1FRZ2pKTjNKMzdacmh4djg1Q3hyL0tsUWVnTEt1THZRQ3JERHAvSXgzUCtlY2dra3VjeWZqL1Rma3doOVRELzBkcGZobkhpTVc0TDJ4eUhtemcxZmVJbnYyelBrT0lZU1FwVjBaRVVJSUlRNEQ5K0gzdnpuaStCbFErUVZBajNWYWFvVnB3K2dGV0czeStSbnZaOTQ1QlpOYjR0TDdyMlNUZnZyRzBOODJ6RG5uL3Y4T3lEOUVzdi9WY3RsbFArRDdoQkJDbG5KMVJBZ2hoS3diWW1mOTFMMmgrMzhkMGV5UlVHektmRjFpeTJvTE1ZQ0c2QVhJTUdCUytSNGlvMWppMHZ1dlpKT3BodjVTL0hOczJpZkFKUkpIZnlQdmVNdVZmSzhRUXNqU3JJNElJWVFzTzdwcngzYmNzUDljUU00RmNNcUJId1VRQlJDbFRiUkU5TlAxdjZqUUM3Q1ZpOEpQZVQvenppbVl6UEoyYWIzL3hsUDRZN1NodjRNVy8zS09JYTVQalg0RXdGL1BycjNtelhMRkZXdDh6eEJDeU9SWFNJUVFRcFlSZmRpT08yQzIvMWNSUjQ4QjlOQ05UNGptZjA1S2hRR2ptcGhGTDBDS2dMM00rYklQZnNqM0hMMy9HdHVIb2IvMTltc3Q3MSszNHA5MURiNnRndk5XVmplOVZONjE1L3Y4R0JCQ3lIaWd4VUFJSWNSdnhEN3MvbWRENXI4Qmtmc0JPa3RiQVlFQ29ObU11UUJidWxEOG5QY3o3OHM2NkltSWZ3QzkvMG8xWStodnFmMEdYZlNqc3Zobk5yNFdrQXRtODdVWHl6c3Z1Wm9mQkVJSUdUNjBHQWdoaEtRWCtqdDJiTWNoYTg4RDlCZWh1QmtnYVJFdkpRS1lBcUJER0NpZEM3QWpBZEJ2MGZnL2xmUUNKTFh1b3lrc0dlM25mdVJMVzNyL2xXelN2ZmZmTlBQK2pWMzh5elNjUStSaW5lTWxtNWdua0JCQ0JyK2FJNFFRUXFBNzczOHJZUDU4S0I0TmtVT2c2OHYraFllTTVsaGs2NThVbHpiZytudlRJbUFYWWNDbDl1bmpBdktUM3MrOEw4dUtVYkI0SjB4bFdVdnZ2eEpOR1BvYnZOOFlpMzVVRi8vc3JaOVV3ZC9Ndm4zTWhYTFZlYXY4UUJCQ3lLaFhTb1FRUXFhR1B1eis5MEUwM3cyVkJ3QzZrdkwwa2ZYaUhkQ05MNGE2VkQ1VEpJelc5ek0yMFF1d280dkp6M28vODc0TUs4WjFBWERRRG9BajlmNnJGV2JiaGZjZlEzK0Q5MXRpOGMvaTJ5cHkzc3JxakhrQ0NTRmtuQ3NsUWdnaFUwSWZkcDl6TVpQZlFpd25MUVE3Z1NINEdSNC9wckdzZHQ0L0xXOUowQXV3cFl2S3ozby84NzRNSzhhSmVRQU9VZ0JrNkcvNTF6bUxmdFRhdngzeHorUmFWWnkzRXEyOFdDN2Q4OS84V0JCQ3lHaFdTb1FRUXNhTzdyenJ3ZEF0dncyUlh3YmsyQU0vV29LZXJDLy9VNTUvVnI0L3RYUC9GWHhTdWhBQW5WYkxrZ21BQUVYQTN1Wjk2aXRHODdrZllpRVFldjgxMXI0WDc3K3BoLzR1cGZobnNoOGkvendUK1ZQWisrWXY4WU5CQ0NHRFh5MFJRZ2daSy9ySSt4eUxOWGtKRkQ4TGthMExBMTZCdFBjZmtJbnhTK1VBWE4rbWpnSWdDNEdnVkJuQi9FOFV2UUFyWEd4KzJ2dWJlMDdCS0phMDlQNHIwWVRlZjBIN1Vmd0w3Y2NjaWpmRmlGKzQrZTBYZjVydkxVSUlHZXhxaVJCQ3lOalFSNTF4YSt5LzhhOGhlQWhpM1hSQXBFdVcrVW5SRGlQTTF4U1BVanFna1JNUXB0Qm5pWUFLZjJKOWVnRjJlT0g1ZWU5bjNwZGcxVGpJUXNETEp2NjFNNFpzTTRwL1FmdEpEK2VzczM5LzRwL05sUkI1MGNxbGI5N0xqd2NoaEF4dXhVUUlJV1FzNkVQdmV6ZEVlQWtFOTRGS2xETGVVMThCMDV0UEhNYStJZkNaNHArM0lJRG5XTG5XWGQ1QUtueW02QVZJQWJEWHVlY1VESG81UysrL0VrMjY3MWU3QXVBeTVmMGJ2UGhuY2lWRVhqUzc5TTJYQ3QrZ2hCQXlsQlVUSVlTUW9hTTdUejhkb2k5R0xIZURxUGk5NkV5Unp1TUJhTGNSSS94M0lRN21WUVFPc0RMb0Jkaml6Y0JQZkQvenZneExSeDFZZjhvMHAvZGZXQk42L3dYdFIvR3ZzZjRMNUhNcThWL09ydjNCQlhMRkZXdjhtQkJDU08rckprSUlJVU5Fejc3ZkU0QjROMVJPUFBDRFhhUkRERzgvMS9KZjNGOEgyd013RWY4eWVRQlJuQU13MThyTCtVdzFJZ0FDOUFJazNjMDlwMkNRUzFsNi93VTJHVWpoRDRwL3plMDdjUEhQNHFzUWZlSHMyOGU4UnE0NmI1WHZPRUlJNldYVlJBZ2haR2pvMmZkOUpoUy9DOGpOTXZuNmdQd1FYN3V0K1p1SVZkelhEUDlGZ1JkZ1NhR05Yb0F0M2lEOHpQYzM5MU1mM0JEdUxYci9OZEorOHQ1L0ZQL0NYbEdERVAvTTQvd25vSDh5KzUralgwc2hrQkJDZWxrNUVVSUlHWVQ1dmZNK1B3L0lud0J5bkZkb2NPbHlycitMeHhydzVRdzBoY0JGUVJEZlFUM0hveGRnUnpjS1AvUDl6ZjFVbDQwakRmK2w5MTlnRTRiK0J1M1RpZ0RZa25Bb0lhK253WWwvSnY4bGdwZEU4K3YvUWQ3eGpuMzh1QkJDU1A5dmFrSUlJVjFvQ21mZjk1bFErUU9vSHIzaDVZZHN5Ry9pd1JkU3RkUFZadkdiRVRZc1ZiMEF6ZEJoV01kd2JmZDBzblFCa1FxZlBYb0Jra2JuZnFxREdzbzlWVVlBcFBkZldKTUJGUDZROXM3VnlINkRFLzl5OWgrLytHZis5RitpK05Qb3V1KzlpamtDQ1NHazM3YzFJWVNRTmszdUE2Rytmd0RGMFl2WHR5bWcyY0tmMDFCM0tYellFUFpzeTBEVWFHNGROekdtTTVXQTg0VEE5VHlDc2FQWlVNS0EzZFpSL2llVUFpQ3BmUytSVnBldzlQNExiTUxRMzhMOVJoNzZxNjJZZzUySWYrWWd2aWJBbjFFSUpJU1EvdDdZaEJCQ210Y09JdXk4OTI4RDhoeW9ITFh4NWhiTE84OFU1QkRtOWVjMVp5VnJLcGpWZ1ROZWdFQityTEhrSDU1ZWdCM2RUUHpjOS9rZ2s1NlhzS1VGUUhyL3RXZEdqRGowbDNuL1dqUWxwZnloS1FRU1FraHZiMjFDQ0NITjZRVVJ6cjdQLzRQS3IwTngrTVliV3h4aHVjYXF2bzMwWEw0aUltWkY0RXcrd0FJdndHVGJVSXVCQVBRQ0pJMC8xTk1iazFZSXErMWgrVXJ2djhBbTlQNHIzRzhzZWYrV1FmeExqK3ZMb3ZpajJjSFJoYkpuejV3ZkhFSUlhZi9OVFFnaHBBbWIra0NvN3g5Q2NlVEdtOW9JdDBXZThMZitsNkxpSDc3ZnpOOVR3aC9TT1FWTnBVNXRUei8xbkNESElxRVhZRWMzRnovNS9jMzlWQWMwUlFHd2JmR3Z5cnpSKzY4Yjg0YmlYN2NtcERSNGFJRUNYeExGNzg4dWU5T2JoTDdYaEJEUzJ0dWJFRUpJWFhONjUzMStIdEEvZzBZM3pSaXRQdUV2dGJRdnFMcGI1ZXV3c1BIenZBQ054b3RRWVhvQkR2TW00eWUvMy9tZnlMSnhrY2V6cjJJZ0pjOHA5UDRyM3R4OVNITFlLNW1odjZYMkc3djRKNDBkNjJNcThqdWI5dTU1THo4OGhCRFMvQnVjRUVKSVZVM2c3UHM5QVJxL0VJcmpNd1pyVmVFdjc0MXZGK3ZJRlFsTmowTE5ldElzZEQ1WFBzRDEveTY2S0tIV2REc2lJTDBBMS92SHozNi84eitWWmFNT29BK2hUWmROQUdUb2I2UDMxVmp5L2xIOGMyMjdQSmI1Y3pmdmZjc24rZkVoaEpEbTN1S0VFRUxLNmdBUHYrOURvZnBpcUp5U3JiU3JhVU5icExyd2x4dnFXeUFDWm9vR1cvMkNVUmpFekFjWTlNa1JiSlFEQmlzQ2Qzcno4ZFBmMzl5UGZkVW9CYy80d0phdVF2R3Z1QWxEZjZjYStydmM0cDh4RFlJM3pWU2ZMNWUrK2QvNUVTS0VMRHUwQWdnaHBFdjdmK2Q5SGdUQjMwRGxKM09Gdnp5UHY1RFEzcm9GUVpMOVZZSElxakNjL01VT0M3WkRncjNKQ0FNc2xTSVJzSXFJUlMvQTZuTkhHcHgvVGtFbnkxWjYvd1Uwb2ZjZnhiOHVUY2FteEQrcHNzc3FvSytleWFZL2xFdmUrQzIrU3draFhFa1JRZ2hweitiZmVmcnBRUHdQUUhUN1ZMRUx1NGhHbDhKZnhzT3ZiRHUxS2hQRDhoQnlISFFoZG9vaEdJSzVBRHUvSWZuNTczZitPUVd0TDF2cC9SZlFoTjUvM1liK1V2eXJmOWphZmJsT0JYK3pNbHY3QzduNDRoL3luVW9JNFVxS0VFSkljM2IrSTA4L0dmUDQxVkM1TndBWmhQQVh1bCtlUUpnS0NiWkRsbUVJVEk3eXc2cHU0N3gwWGo5NkFWYS9NZm41NzNmK3A3QjgxQjdPV2FZcEJjRDhKaXo4TVI3dnZ6cEZQeWorZWZpK1NQUm4wWThQZnBsYzhab2IrVkVpaEN3THRBQUlJYVFOKy81eGR6MGExMjErT1RSNkpJQ1ZEWSsxZ1FoL3J2MnJpSUdtRUNqR1FNenc0RVRzTERLRTZRWFk4VTNLSlVDLzh6K0ZBWFI1RDdVcEFOTDdyeDJUZ2FHL3JlM1hTZEdQeVlwLzV2RytLWW8vaXU1KysxZkk3dDB4UDB5RWtLbkQxVDhoaERScEVwOTU1aFpzL3VGZlE2TmZnR0pMU3VFelExK2RRbEdJOEZkQ0hDenpKY2d0d2hGZzZDK3FBVnNod1U3bHNFUkY0S0tUTmlJQUJud082UVZJV3JrR1kxMDZhay9uRFcxSzc3LzhKbFB5L2x2QzBGK0tmMjJNNitPcSt1eE5sNzNwQS93d0VVS21ERmYvaEJEU2xDMS85bjJmQ1pFL1JxeUhaWVd2WkhsdUZkUXdpMzkwTGZ5NTdQblE0NHZWcjBMeHp4cXplTVpDTDhDT2Ixb3VBL3FkZjA1QjQ4dFZldjhGTktIM1g3WERkU2xRNXV6YmV0Ni9wUlAvVEM2ZGFmeHJjdG1idjhyM0xpRmt5VmRVaEJCQ25NYmh3Kzk5RG1KNU1VUnVzaEg2YXI1bUU1SE0rcWx2NFErT2JscW5kZVlyTERLVkV3TmNmVEhEcGF6dDRvN1RDN0RHemN0bFFQL1hnRlBRNkhLVjNuOEZUYnIxL21Qb2Ivc2VpdE1VLzZTL2R3aXdYNkgvc0hLai9MNWN2dWNhdm44SklVdTZvaUtFRUpKYWREL3E5RE13MTMvRUhMZE9DMmlXeDE4bDRjL2VwNE92Z1ZiWUp4bG5JbndtQlVBeXdtRU5BWkJlZ0MzZnlGd0s5RHYvbklMR2xxb3RGUCtnOTEvRDNuOE0vVzIwajhPcitEczA4YS9Xc2I0am9yOGZiWlZYeUo0OWM3NkxDU0ZMdHFvaWhCQUNBUHF6OTdrbFlua0ZZandRYWxmeldGK1NxeVBmbmZuVFVJUy9rSE11UW5yaEhzOUMwTlMwK0xlb0JxeHA0MXpWYnlTbzE2cko3emk5QUd2YzBGd0s5SDhOUnRiWGdIU2V2U3hWR2Y1YjBJVGVmK1UzalNudkg4Vy9ObzZsd0pkRTlMZFc5cjdwVW42c0NDRmpoNnQrUWdnSlhRVHV1dmRCMkk4WFE2TmZnbUxUZ2Jmb3VpVWNtd0tZSXkrZStkYlZncmR5WDJLQUxkZ0ZxUURXbjhYNGV5SU9xakZQdnMrUFdrYnpRa0JNamlIMEFtejE1dVp5b1A5cndDbW90VXh0d2ZzdmUxbktDRzcwL2h1Vzk5K0lRMzhwL2czRXhKWEw1N0grNXBhMzcva2MzODJFa0NWWVdSRkN5QkxiNW8rOHovTXhsOThCc00xcDFTVEZMMEtFUDVmRzFxZndWOVNQUk5UVHZFK0h5OXZSeWdmb0ZCZ2wvV2RSSUs0eUgvUUNySGVEY3prd2pPc3dscVhqZWtlVGQ5MFFscW4wL2l0b1F1Ky84b2RpM3IvSysvY20vclVpL0psL1dWUEkzNjBjRlArQjdHRitRRUxJK09DS254QkM4Z3pBUjl6blFWQTlIeHJkSWwzWXdqU0VEVzgzcC9CbjVzZnoyOUxEc2UxOUZVSHMvdVo0QWFvckg2QVZBNzA0bCtOd1UvTUNCQ2dDa2didnE2SDBkMGdDNEppTGYwekIrMDhxdkZZWitsdTRIOFcvbnMxYThSMytleUw2UjlGcHQvOWIyYjA3NXNlTEVESVd1Tm9uaEJDWDRmZVkrNXlJL1hnTjFuQmZ5THBsbWZLQVN6eGdKS3VCMlhuK3hpRDgrYjRRcVRFNFBQZFM0M1VJZ2lreDBEcnc0amZKbmxROTFuZ25BbURBNTNHS0FtQnlQNU9lcjhGSStyaDR0dHU2WjFqOG8xWjdhZm40T2Z1MDUvMDM5TkRmOXZQK1VmenJ5cVNWd01QckorSm85c3pOYjN2alIvbnhJb1NNQWE3MENTSEVYTW85L3A2SDRycm8xWWlqaHdPWWJXeXdLL3NhaHU4a2hiOGlMMEJyc0tibm8xaENvTG9HSGxnWk9IVWFlZ0cyL3dCd1dUQ002ekNXZmc1RkFCeXo5MThMN2VuOVY3elAwdWY5by9nWGRMeXdRODhCL09Oc3YvNC9lZGVlNy9NRFJnZ1p1cGxIQ0NFRWdEN2kzcytFeXA5QzVaQ0ZhQ1ZxZWFrWkF1REN3ODN4WnAxS1F2L01XQnpqRmwvVjQ3eXF3QVc1QUJjZWxnN3JoMTZBTFQ4SVhCcjBmdzNHME1HMlN3R1hFZDNvL2Vkdk1rVHZQNGIrRnU0bkRkMlhyWmgvVXhYL3BPNmh2eStpTDRpMjRHV3laOCtjSHpKQ3lGQk5PMElJV1c1Yis1SDNQQjF4OUZwb2RLdnNLdHZqK2VjU3hmTGV0R01UQlBQNmJIcmtwYndBcmZseWluL0dmbWJCajd4UGtxMFhkaVlDMGd1UTlIa2R1RHdOYjhyaUgvN04zZlZuZVF0L0xGUGV2NkdJZjcxNy9lVWQ2Wk94NmpNM1hicm53L3lRRVVKR3ZNSWloSkNKMmRjUHZ2ZVJPQmovaExrOEZKQW92Y3EyOHZ5WkJUNThUbXl1Tit3VWpIamZPREplZ09abnhjb0JtUHpabDk4djgwa1NwTlJCVHpTeTl6ajBBcXo1Y0hCNU1JenJNS1lYUWsvTDB5R0UvOUw3ejMyN3N2QkgrZjBvL3ZWZ3Zrb2JoMVpBWGo5YjJmd2NlZXZydnNPUEdTRmtTS3M0UWdoWlBydjZVZmY2WTZ6T25nMWdxM09sclpKK1MyYUV2eVVJQVE3eEFsUUZJaXNYWW1vdVRlSFV6Z2RvRlB3b01scDdDd1dtRnlEcDh6b011Rit0M1NMMC9xdmNmcExlZjFNdC9ERzJ2SDlURlAra3BVT25EdlFERVR3L091MjIvOGhxd1lTUW9aaDNoQkN5UFBiMDJmZDhBS0xaYXhETExRNzhZSWYwMnVLVVpIUFpMVVB1UDFRZG0xVUFKQ1graWFPYXNIMGVRVGIvb3NNS29oZGdCdzhMbHdqRHVBNWNtdWErTHhvK05yMy9xdTJ6bklVL2xpWHYzOFRGdjBZL2RlSjdyM3hTNC9qY3paZnR1WW9mTlVMSVNGWlpoQkF5WWh2NnNmYzlEamZHYjRUSzZkQjFxOUVWN3B1cThLdU92SFZMWnBBSDVRS0V1Nml2T2dvRmlCVlc3VHFvcjdJb3ZRQjdlSEM0VEJqR2RlRFMxTjJNeFQvOG0rbjlGNzZweTlEZlB2TCtOVnowZytKZmNQK3NhN2dLNEs5V2NQMGZ5ZDY5MS9QRFJnanBnNGhUUUFpWnZPMzhxSHMrRHpmb1Y2RFIvUmJpbjdsZ1N3cFUyQjVtYXVTdHkvUDZXeGJoUVVxSUVwbFFYMlJUL1BrT0tqTGdTU0NFdEllTTlOaHQ5MlZvN2FzY1RpWjJhMG1yaDZMNDE4WmNDNW9YLzhSNUlIV3ZIRFlCZU40Y0IvL2I2dG1QZXdqZjk0U1FxYTIwQ0NHa1YvUm43M1pmWVBNRm1PTVdHeXRxUzRXS0xXOC9odnU2dnhTNVk4MXp4YlBtY1BIZlBFL0FFbDZBSVoybkYyRE5CNGxMaFdGY0J5NUwwMDNiRFArbDkxOW8rMUY0L3pIdlh6UDdqbDc4YTlyNkRmTDZ5K1BTRlkyZkxwZnUrVzkrNEFnaEExeHBFVUxJU096a1hmYytDTEgrRTJJOENuRVVwU3ZKR21LVnV2TDlnY0lmY3NZY09uNHpERmdrbld0UnJIQnJOZkw5TFM2SlovNTdDd01PK0dScTJVa0ZCVURTd0gzWlowZGFUTWhmMkhTc3hUK1krNi96ZVJwMTZDL0Z2MGFQSTJpdFh4VmZ6ejlVd2U1TnA5MzJiMWtraEJEU2xWbEhDQ0hUc1k4ZmRhK25JcGEvZ3NvaHFSV1pTOFJRSzBUVksvd3RhZjQvKzJ2aEtzS1JLdW9SNEtXaXVoRnluYWtLdlA1bkxRZ0RwaGRnRHc4V2x3dkR1UlpEZkNGMHZDUWRnZ0M0dE1VLzZQM1gyUDA5Mk5CZmluOWwrOVhBMi9ES0dOSFR0dXk5OFBQOHlCRkMybDdCRVVMSStHM2lYZmM5QmZIOElzUnk2a0pVU2hYd3dNYmZYZm5wVE5HSlhuLzU5bjd1ZkJnYnhWZ2FKMkxyd2dzUUcySmdYTktZcGhkZ0R3OFlsd3ZEdVJZRDZVTmZPZFdXcXZnSHZmOXF0NWQyeGw1N1A0cC9IWmluN1l0L3piMk9CVGhRSk9URkt6L2V1bHV1ZU0yTi9OZ1JRdG95NlFnaFpMeTI4QTZzNE9oN3Zoeno2QmNBcktTRWlrVmhEMVBvZzZGUkNZVy9zbDhNWitGZXRTb3FlOXFuTk5mMVA2ZzE4UklvMXZYbUJSanc2YVFYSUduOVd2Ujg3ajRMS3REN0w2ZkowTHovdWhMWmh1ejkxM1hvYjhNaHc5TFZ1WnMwUzBmajllZWI4eTlENVpjMjdiM3dnL3pZRVVKNlhIRVJRc2pBYk9DZnU4ZFppS05YUStYb2haaG52dHBNVHovMWVWdUpsYzVLVVZrc1dvWXZodFpWUlRWdHdKc2h3V1h5aWszTkM3QTVhNkxsaDQ3TGh1RmNpNTVmQmluaHY4UGxxQ3lMOTE5QSs4bDUvelVzeW8zVys2K1B2SDhVLzBMNzFiRFhuNDhZd010VzltMzZYWG4zNjY3akI0OFEwc09LaXhCQ0JtTDM3cnIzUWRENVAyRWUvUnhFWk1PYmIzMXBabnNCcGpRclV5ZzBYNE9XbHlEeGZ6VXFlUUdxSVJwSU5oK2cxMVZRNGZVcXBCZGdEdzhmbHczRHVoNUx0aHhsOFkrY0p2VCtDenRVejRVL0pobjZPMFh4cjJPdlAzL0xyNm5pS1pzdWZlTy84SU5IQ09uMkRVUUlJVU93ZHg5emp5ZGhMWHBacHNnSHNDRWtMUVFtMlNqc2tiUVZzNjI1cEtQWFgvQlhJODhMTUxVcE5lRWJmN1k5TGMzS3kxRFBKOHE0cnNtMmhZRG8ydTY3Z1NwODlxb0lnS1VzQllxQXBPcTE2UHZrSGVmN1l2aHZ6dVllQlVBVy9xalZ0OEdGL2xMOGErbFZXN2xqS3NENU03bitPWExKSlQvbWg0OFFNb1MzTGlHRXRHdHFQdTZ1UjJPK2NpSFc1SXlOc0Y3ak5lWUs5MTJJRlM3dlBrdHNvcWhSN3N0aDYzV3Bhc0FlZzBJMW5lUFAzRWR5cmszcWVPdGVoREg4bFltTE9rOHZ3Sm9QSTUrVllWMlB2bDRBUFN4RlJ4ditTKysvVHVkbzZVSi9LZjQxZDhqQmlYOG0zeEtWcDY5Y2V1RmVmdmdJSVgyL2VRa2hwRDM3OXJIM2ZBN1c4RWRRMlpvU0lGUUJSTWlLZmtoN0FDWmVJK293WHRWNkZkSUxNTkQrejFIZlVzV1hIYXFjSk41L21pN0k0Z3dEZGx3ZjhWbnlMWG9CT3U4TmVnR1NvVnlQUGs1STc3LzJsdHYwL3F1OHoxQzkvd1laK2t2eHIyaG5iYkovelMzQzlxenNYM3U2dkd2UDkvbnhJNFFNNGExRUNDSE5tSmlQdWNmSlVIa1Q1bkxIaFI1a0NuWXhySkJlVHlpdkZxMjhwV2RqZXVSZkVYVUlBeG52UUZqQ0lOejVBQ0dlY0dEek9ybEUzREs2eE1BTGdvemwvcU1JT0xEcjBlRjVCQTFwZ1AxNS82V25iRWpGUCtqOVY2dDk3OTUvWWNMazRNUy8wb2ZxbzFCSnpuRWFGditHS2Z5bCtMWkFmbVZsNzRVWDgrTkhDQm5VMjRrUVFpclptSSs5K3dzd2wrZEJvMDJMTUZHVjlLdHJJUlE1Y3YxbFhuUFdNU2dBMXY5NkZGVUVUZ1MrcEUwcS9GZXQ2N2grVUxIK0RnMy9aSlh4QW14TUJLUVhJQm5LOVpqd01yUzA5MTl4KzlHRy85TDdEOTBVL21Eb2Izdm1ZNFA3RHpMa3Q0dHY0eUxpWXMvS2JOTXZ5MXRmK3oxK0JBa2hRM2xERVVKSXVBMjc2KzUzUmlRWFl5NjNkT2J0VTNWVTlvVW4xNTlIL0hPdThpZ0MxdnFTYU1IdktUSFFYTHhyT2dSWTdHdEpMOEJoUDdCY1JnenJla3gwQ2JvMDRiLzAvcXZjZnVsQ2Z5bitEVS84NjFUNE0vbTJhUHhMSzN2LytSMzhDQkpDaHZDbUlvU1FNTnYxc1hkL0FlYlI3d0JZMlZpSlNWYmNjZjVtdjlMTVFpSEk1dnBEMGY2Z0NCanlCZEdDYlJrdlFHdWV6U3JBaTMyc01HQU5OTDU3RXdIcEJVaUdkRTI2UEZGSFlZQXMvdUZwUXUrLzRrTXg5RGQzdjZVVS84Ym85U2ZGU3lDUjEyM2F2UG9yc21mUHRmd1FFa0w2ZWxzUlFraXhHZm1ZZTkwV010K0x1Wnk0ZURXbHZQNlMxNVZtYy8yWlJTVFVZWmphWG41YVpCRlNCS3o4TlNuMEFrUTZWRHRWT01US0J4ajA2UklzRWtFbWZ5eWxUUXpjQzNBczl4OUZ3QUZla3o0ZTlwYVdvQ3orNGRsTTc3K3d3d3paKzQvaVg2WDlCeVgrOVMvOHBWdnJmNnJLa3pidHZmQ0QvQkFTUXZwNGF4RkNTTDRoZHM3ZFg0QjU5RHpFMkxRaC9rVHBQSEFLUjdpdVZmblhGSlUwVDVRb0VnR0Q0blZJaUJhdzJLWWJIandwWWM0UkZweUVCRXRlTVpDY3p4ZTlBSHQ2a0xtY0dOYjE2UEc1YjNyNTJhb0F5T0lmSWUzcC9WZGhuNkdMZjZVT1JmR3ZIek5hcXA1aURhSi90Yko1L3Z1eVo4OStmaEFKSVYyK3VRZ2h4RzJBUGVGdXB5Q09Mc1VjSjZXRU56WCt0NmdLYTY3VXhBZ3JSZG83TVBYM0FzdUZJbUMzb29DcktuQXlzVWx4a0l6NDV6bm9JaytnR0RrRUhkZHBhRjZBcGU0amVnR1N1dGVrNjRlOHBlVW53Mzg5bTd2cHkzSjUvekgwdDNsVGtlSmZwV00zYy9oUHhJb25idGw3NFpmNFFTU0VKRVNjQWtKSTUzYnBBYSsvejJFTkp6bFhZeUliSW84WkRpcnJqVXl4UWRaRklOOXFUdXgxbXVhdjNhUTF5M202Q1BMblA5bG10MHY5WFRkRXZTUWZvT1I0K2VtNlNxdzVhL0tnQmJRMmFQTXQ4WDBqZkdZRysxeTJja3dkNkJpa3hUN0lnQVlxSTcrdmVoVG1CakZIWXdyOTdmTm1hVWY4MDFwdk1HbHhBbVZqL2RzTWQ0c0VuMXJkZWM1emRmZHUydnlFa0w2L2pvU1FaVU1mYzlwdE1ZdjJJcFlURDZ5K0lxUUxkVmo1L1JhL1ljUHhKRlBkMStIQnBTRWVmTXdIMk9pWEpNZGhyN0NkbVJzd0pjQWFZY0RxRW02SEZnWWMrRmxsS0REcDlKbzArYXhMUUk3T0JwZWVEWWYvMHZ1dlhQdnhldit4NnE5M3Y4N3kvZzFYL0J1ZTJTenRIdjdBdS92ZEsvUFZYNVJMOS93M1A0cUVMRGY4MXdCQ1NEYzI2SlB1OHB1SVpwOUdISjE0d0xOdmZTbVcvSGtSMG1zVkFMRzkrOFJ5STNONm5XbkF1azBMdkFBZEI2ZTI0YmVxYmU4K2RUVEtDOVdGcElWQXRaUkVLU0VHVE1ZTGtJb3phYzYyYlB5WkgyM25xNXhlSm41QnV6eTFqT3NlR01Ra1V2eXJkb3lSaUgvU3dXMnUrcUMxYU9YemEyYy83Z244S0JMQ1pTRWhoTFMzNW5qaXFjZGl2dm1kVUxuTFF1aGJGRytWYkxHUHhTck40UTJZeWZWbnZNWmNLenQ2QW5iN05RbnhBblIrZ1F3dnY5eDhnRWhYZms3Q2hMVkFvR2pUQzlCM1Q1WGVKK0F6VFM5QWdxYnUwYXJQdWZWOHRybjBYSnJxdjBNcS9rSHZ2MXI3VEticTd4VEV2NlplZ1MwTGZ6MlkvS3E0WU5QVzFWK1JQWHV1NGNlUmtPV0RIb0NFa1Bac3ppZmMrZkdZYi83cVF2eXpsMkdaMEY5em5XSldoclYyQ0MwSzI1Z25ZRWZyd2JFTERENHZ3TVgxMU93K2lTaWNpTDVxN0NoR1BzRFV2U0RwcXNKRjE2aE5MOEFBbWFHeFkvRytJMzNic0w3Y203MGIwMldmU2huQlpMc08xNlAzM0dTOS83b00vZTF5NGluKzFiOE9iU1ZTN1VyOEU3amNDMFZ3enVyK1RaOVpQZnZ4OStYSGtSQXVDUWtocEw2aDlhd3p0K0NhNzd3SisvRXdpRWhhM0VsZVBhNWNmNzVxdm81Y2YyVzg4eHJ4QkdSbDRLQXZpbGJZSjVuTVJBaE9Dc0FrSWNHTHFyL3F1T1k1N24ybHZRQUw3b053ZFFIMEF1VHlZcGpYcGVmbnZiWHF2L1QrYTJhWkx5VmZhZDMxSit3d1UvUCtXNmJRM3lVUi96b1Qvb0pZQS9Bbks2ZWQvQUxadlR2bUI1S1E1VEhYQ0NHa09mdnlDWGYrR2NqS0c3RW1SNllMZHlBdHBKbWhuTWtmMUhMYlNvVis1b2s4VFlpQUJSNWxvZWZoVjhXZmwxRTlDMzAxYmdoUnQvaTNDQWsyN3cwekZ0aHovaW9DUlZjRlFiVHN4STdzdnFNSU9ORHJNb0psWjZ2aHZ5eitVZFIrME9KZjdxYWVxZ3NQT2ZTWDR0OEFUT01PaW56VU84SDdWaEEvUVM1NTQ3ZjRnU1JrK2pBRW1CRFNsRTBaNlJQdjh2ZlEyVHN4eDVIT0hGR210NWN0L3FYK1pkVHdCQ3RhMTRoam1SY2FEdXhhS2tvSnk1bjZSdmdpVkYyaEtPcXU0SnhjVXpHS2daaGVwS2txcEpiWHFQb1czS0ZoaXgwV0JKR1NUeGdodmRxSVhaNjQyVTdxSUNkcjJZdGhORDF0dzVtZlFZWCtkbkovRFV2OFV3eE0vR3U5eUVmdEV6eGdEZEduMTg1KzdNUDRnaUdFeTBCQ0NDbGU3RDdsdEZPeFR5NURMQ2VrdmEvRWVOVW9FQnNlWHFtVnN1bDk1d2ozdFY5WDNxSVBSUjU2anVQNnpwTmJXSUtlZ0lWZkZxZjRxKzR3OE5SRTJ0NThaZzVBTmU0cm43cThmby9GeU9Za0xET0FycndBUy9XUFhvQmtJQXFGL1I1dmVzbko4Rjk2LzVVK3pKUzgvNVl3NzErRDR0OHdUT0l1dlA0YVA3Z0NlTW5LbHRYZmtUMTc5dk5EU2NnMG9RY2dJYVRlYXVGSnAvMHU5c2tuRU9PRVRMWFd4Wi9WcUJ4cGVmZUpaVlNhdjR0bldTZUI2eUFKc0hwRDJtVGEwaE93OU1KVWRjTUxVQ3hoMkxkN0t2OGZOZ3FHWkFyRW1PS2dGU3FjK3RJTjBBdXc5TnA4WlBlY1VCMGZ3K05aZW1lTkJ0cTNQZzgrMW1Ndi9RMWQvUnl0aGY0MjBEOFp3N3hQV1B4cjFldXZ0WU1MZ045YzI3ZnB3emVlZGM1dCtGNGhoRjlNUWdqWldHZzkvcVJEc1hMb1paakw2WXNxcnBKNCtTVkdvaUhVcEhMOUdhOGYyNXVyc09CR2tTZGdWMFZCSFAyazF1SCt5cGkxTzF6aHV5SkdUa2k3bkxDVkQ5Qytseklhb3FUdk0xZGw0amFMZ2ZqdXBkTDdCSHkyNlFWSWFsK2JpdnRJbVdlcDVISlRtdlhrWXZHUDhMWmhUc3owL3N2N2FYbTgveWorTlQrbVFabnRQMWJnT1pzdnVlQThmaWdKbVo1cFJnZ2g1ZXkvWDd6VGd6Q2ZYWVE1RGdPaWJOR0Z3bkJjaC9pbkFZSkJTSmh2WTBWQjFvL0R5c0RWdnk3cXFzaGhMcEExM1VhTStSWkx2WE9LZmhsMU1kOTRqSTF6ZGxvUk9PQnp5NElncExkck02RGxacXZGUHdLUFBiamlINno4bTMrWUxrUTJpbit0N0RzMThXOGF3cC9ObnBWbzg3bHk4V3QreUk4bElkT0FJY0NFa0RKMllxUS9mK2RYWTIzbEhaakxZYWxLdldiV1pmRUllOGxDWnRIVzA4WVgzUkJTOEtOT1VSQlhPSENaNGlPOXI5T0dKaXFveDZDMnZFQVhYbjdtUFNFYmYxZlp1S2ZNa0dDbkNhRHVDNkVkWHFBdTdUNUNSbTFiZHZBYTRrTVdkUEcxbFp1bEMrKy9ZZHp3T3BRSGVDemlYMFA3VnkvMk1RYnhyL1hxSVNIc1dvdjNmM1RmMlk4N2xlOUxRcmpzSTRRc0VmcmtPNXdJV1hrMzVyTmJwN1dXeEp0dlBaUXpLZlJoaHdBbnJ4eGI1SEd1NGtvVy9LaGNGQVFCbm9BVmlvTDBhdzBNNnd1akJkdkU5Z0kwNTlQdzFqUHpBWnJlZzNiQmp5SWpNamF1ejlDOEFFdmROL1FDSkQwcUdGTHhYaTFzeXZCZkZ2OG9jeGg2LzFXdm90dHp0V0NwZis3K0svMU8xdXZQeFkwSytkWE5sN3poZkg0c0NSbS9lVVlJSWZsRzFKUHU5RXdnK2l1b2JENGduQmlpaUZtVXdhN3dtc24xWnl6WlFzT0VYYXU4NEh5QVJlZklFU1lvQWpiL3RkR0MzOFgyRExSeUFFTFNucGRhZE1KRThUTThERXZuQWdRWUN0emt5NFRManVGZW15cjdhSUJveC9EZlV1MEhHLzdMM0grK241cnhORzJnYjRQTyswZnhid3FtdVVCZk5kdXk5a3pacytjR2ZqUUpHYTlKUmdnaGJ1UHAzTHR1d3RyOExWaU5IZ2FCTE1RWm45Qm5wM3RMaFhZNlZtMjV1ZjZNVjFTbzhGWlpCSlFja2JGaVg2cXZVS2YzbFNueUFvUWhJdGpDbkxsOTRUR0k5YjhybkFVL2lqNXZYUlVFb1JlZ1kyeGNkZ3o3K2xScFBFd0JVQ3Yzb2RsK2xHNHJMUjdiMDM0NXZQK21WdmlENGw5L0ptOGI0dCtvdm8xZmlHZnpuOXZ5MW4vK0lqK2FoSXdQNWdBa2hMaU5wMSs4MnluWU4vOHExdVNzQStLZjRYMjFjTkRLTVFCTlFTY3YxMS91T2tqOTdjU3hGS3lhTjlDVjYwODhTL3pRdm94dVBkZUJvQ0MrYldKNTUyazZUMlJLL0pNTjhVODgxMlh4dXpoK3J6aUl4bXc2YldkeXgzS3ZDVlh4WVYrZjBFYm0vNW95YW1VZ1k1ZUJ6TCtNN2Nab3ZyME1iTXlEQ3YydGNnanBkeDVITC80SktQNEJBRzRYeldjZlhkdjV1RWZ6bzBuSVJKZDZoSkRsUW4veHpzL0FIQytHUnBzWGVkY1NBU1kyQ2pmQThzWkt2SHZFeXZWbkN6eXUxMUN1QjE1SG5vQ2hsWUhMOUtYNmluVmFYeG9OMkdiL0dVaDcrWm1od1ltM2tIb09uTnlYM3B1OHdpQ3FYc2N3OTVvYS9aUHgzV2YwQkJ6NDljbTczWEtldXpyTFRHSDRiM2Zodi9UK3E3UlA0YWVkM24vZWZhY2cvbEg0YzQzZ3ZObVcxV2ZKbmozNytlRWtaRHhtR1NHRUhGaGNQZXZNTGJqdTIyOUNMR2N0REhSWHJyL1U3MGhYWmwwSWJhRzUvdGEzYTVFRjE0UUkyRVErd0FwOXFiNXluZVpYcDZ3WWFQNG95RGJTb29QbUtBUkR6UVZZNnA1aEtEQnA0eG9GYkpjUzkyWmhzeUdFLzdMNFIzMEJjQXE1L3hqNjI0eXBTUEZ2U1V6d2o2OUY4YU1QdXZpTlgrT0hrNUJ4bUdLRUVBSjk2cDN2akxtK0UzRjBrMHhPdjFTb1ptTDFXZm4vWEJwTUhMeHl4aWhGUUMyeVBpa0NwaTZkVmxVVE5IMlBtUldFVS9lbDc1QkZ1U1pMREtJeEw4Q0FUekFMZ3BEZXIxRkhTOHhSVnYrZG9QZWY4MUQwL2l2K25BKzk2aS9GdjFyamFQUlROZG52M25jQmZlS21TeTU4SnorY2hBd2I1Z0FraEVDZmN1ZmZ3cHA4RFBQb0p0bDFpaEZ1bWVSanMzT3ZtY1Vja3YrWU9xRXI3MWRJSHI1TXU1QThmRVhycklBOGZYWDZtMnJMbklEaDYxK1B3WldLT0ZlMytKZm5tWm9uTEVoWjYwSzd2WVpUdjErWUQzQ2t6eW83TmF3K3kzSlBiUmZ6S2J6M3Urc254YitSY2pRZ2w2MmVmYzV1M2IyYitnSWhYTm9SUW9hSW5vdE4wRHU5Qld2UldWNXZQeEYzR0hER3kyMzloemd2NUxJclQ4QW1LZ09qSVUvQWtHTXMwUmZIcmdpOUVKQURLNHFtaEVCeFZBVTI3OTJBejUxV0hFaFhvY0QwQWlTOVg2T2MzNXNJMDJUNDc0RERmK245aDhMbEFrTi92ZnYxNHYzWHhEZUZ3bC9OOGI1elphN255R1VYL0lBZlVFS0dhWTRSUXBiUnBudnlIVTdFU3ZRK3hOSE5NOVZZVTZHK3NBU1dISkVoU0h4clFnUXNLZkQxSlFKcXpxdDJHVVZBYjQ2L25JYW1ONlVhWHFpTFVHQjFIRXZLcUJUZDVRSU1zN2hyM2lzc0NFTGF1RVo1UHdhN1grZmNzajBLZ0F6L3pUbk1zZ21BSThuOXg5RGZGczFhaW44Tmpmby81dlBaSTdkYzlycC80d2VVa0dGQkYxMUNsdEdXZStxZEhvM1o3SFBRNk9ZYml4MUxOREZESjZVZ2dadXZ3bS9UNGJXdTBGb0pNQU85eDJvcUhCamgvVjNtTmFGVnlEYzd6K3ErbWN5ZlRQRnZJUVpLTmx3NDQycW9EYTdSbXd3RkRqQnh1a3d2MVl1bHdGRGdNVmh6MlZzM2FzN2c3cjF0MTVNM3hXTlB3ZnV2N0J1N0orKy93ZDZ2RlAvUy9WbmVmOXhTNEtSb052L3cyc01mLzNQOGdCSXkvQ1VkSVdUS0grV24zdW52TVplblFWV0FhQ09mbWhycVNSSkthVmYrVFhrKzJhSEE1cXF0Q2MrNkVnVS9tdlFXN0tLLzlWYTU0Ly9xcU5RY3VLWkZhek1rT0hWY1NkK3IzdjZzSDBPbEp5L0FnTTh4UTRISlFLeTZScGVYRFA5bDhZL2d3L1R2L2FlZDk4bXh6OUJEZnluKzBieTJIeHZCbjY5c1huMis3Tmt6NTNRUU1neFRqQkN5REYvZ3A1OTZMT2I2cjRoblA1bks2WmVJSjdGc2hQbUtzUzBqL2htRlBuTHpxazFOQlBTSm5SWDdXMisxTy80dmo3cW1UcTE1c3FyL3Brc0F1L01CRnM2blhiRmFySHU2NUVDNnlnVllxbjh5em51TEl1Qll6TG5tbHBjTS82MGhBTGFaKzYrbk9SbFM3aitHL3JiY1IvY09GUDhtdS9CalhrQkNCZ0pEZ0FsWkJudnRxWGM4RTJ2eVZjd044UzhsZklnUmdtbVc5YlZES3pVZFpwbGJCVGNrdkxib053MVlUNFZVQm00aUhOZ1I5aWsxKzdMVTYwV0g0S3JyTjVWSStoNVYzMkxkQ2dGT2pwSG55YUlPa1RHVlo3Q2tFdEtZRGRpa1VxZmp2TGNZQ2p6S1I3ZmVDMjNKdzM5NzZLYU9hdjRHYzFNMzhJYWVhdWd2eGI4bFg4eUZ2bmtlc2piRFIvZnRmTnp0T1JlRTlBc0ZRRUttL3NrOTk5VG5RMmQ3b2RqbUZ0Y1M4YzhNbHpTRXJNVmZQVjVTUGlHd3FxaVdhYWNCNjZ5bVJFQVU5emUwRFVYQWZFdEtIUE8wOEFMMDVPd1RRN0JiQ0liR1BvS05xc0NaUWlEbU9TUmRlZGpNTHpoa1c2dHNuc0l4M2xzVUFaY0hhZjYxVXUzOFM1NHJVTHJ1OXdoeS8wbWYxNnJ1S1hzU0dwZGEvRnZ1Zkg4bHVFMGs4aEhtQlNSa3Vxc05Ra2lQNkxuWUJKejZkc1J5UmlyazEzNEZ4SnF1OEdzWFd6QzlCSjBydFM2cS9wWm80KzFIeGY0MlBTWmZYNnF0Z01mOTljbms3RE9FNkZUNlBzM09lU0phcDZvQVd4NTk2aWs3bkZTMXp2UUhGWElCRmx6cjBvb0ZRNEVaQ2p5VzY3VCtmNW5uaWVHL3dlMEhHZjdMM0gvNW4rYWVDbjlJVytkcFlMK2FlZi9HTC82UjBsOFB3Wit2M09YazM1WGR1Mk5PQnlIZG0yQ0VrS2w5V1o5NTZxMndUOThQalU1SUdkVm1IalU3RERMbE5SV1k3NitxcU9helFyUkNtMHc3aW9Dai9CS3BQUWxXN3I5VTlWK2p2UmlDblpyRlFReUIwSG1peUQvWk1ib1JBTDNYZThrTGd2aWVMekpFTTI3OXVaUHl5MHBwVnZBYW5nQllOdnkzL1g0MG4vdXZvWDR6OTEvcFByVTIvckw3VWZ3ajFYbkh5aHlQWjE1QVFycUZJY0NFVE0wZWU4WWRINDc5K0R3Z0oyUlhXSFkxVk50RHl0d1VrTjhzT0pRMk1IUldLclRKdE5PU2ZTczJKUnNkVTZadHdMbW1TaUxXNVJWVEViUHdoeDJ5YXhVREFTemhLRTlSanYzWEpFSTN1UUE3c1RrWUNreGErOW9NeG03dVJ2d2J6RU05dEpmNDJEOUN6ZDViVGMvUmtNVy9VZTFySElQaTMxQTRjejdEeC9idGZOeFBjaW9JNlE0S2dJUk15Ung3MnUxZmlGVzhCWXFEc2dzVjNjaWh0bGk3V0VVOU5tS0ZVM3JMSXIxSjVWeC9DQmZNUXRyVUZnRUwrdHYwbUNnQzVsaFdSWVZlSkwxb3Q4UFN6YitiUW1GUVhyOG12UzhyN2x5MUlBaHREOUw3ODd0c1M4aWhGQ0dwZHV6QkZ2OFlWZTYvTGc0NDlHSWhkVTViSisvZlVNUS81dnRyZUJsNFVnUzVjblhuNDM2YXMwSElRRi9kaEpBQmZrQ2ZkZVlXckgzelBaakwvVGFFTzdOQWdoaythZVQ3QTZ4Q0NqZ2dtTVFGcnd4dmVHMkYwTm5XOGdZV2hmbFdhTk5HZjMxOUxyODZIdTlYU0F1MkxjSjhOWDBmbS9Oa2hnQXZjcExwUmg3QWxQT3IrWmVjejJDdm9jQk41Z0lNdU5jSCszTGpNbVhJbGx2NmVXTDRiM0RieXJuL3F2ZWorZkJmNXY1cng4eXFVbFYzREtHL1V4SC9TRXVzS3ZETXpaZGNjQjZuZ3BEMlRTOUN5Smh0c0dmZjVaYTRidTFLeEhKOGFsV2xwZ0JpL1daNlUybUF3VjFWVlBPMm93Z1lkSjd5cStUeGY1RTA1L2RGbFdCenJzekNJYTU4Z0huemFCM0RQbjlwQWJEZ0dvY3JHT0dmNkNvaTROanVLWXFBQTcwdU5aYVUwbVB4ajBXekhuTGRPVGV6K0Vkcnh5NnpUK081LzRaYytLT0IwTjhhQW1EM2VmOG8vbzFvR1hqZTdFZmZlb1pjY2NVYVo0T1E5c3d0UXNoWTdhOWZ1ZjBERU1zbGlHWDdRbmd3cTZ1cWFmQ2JGVk1kM2xOeHdXdWhTUkd3TVZHdFpzR1B0b1ZObjlWRkVURDdKU3J5QW9SUmFDQlZkRURUd2paZ2VBcktSbHZWYXA5Q0ZnUVp3SXVPUzVWaFhoY2cySnMyY3h0T3VmcXZsR3pDNGgvZDlzWFR2bmZ2djZGWC9hWDRSenJqWFN0YlZoOGplL1pjdzZrZ3BIbVlBNUNRc2RwZXo3emRjN0FXdmVlQStPY3d5akpHczFFaDFjeHhaMm9uZVZGY3JueDF2ZWZZQ3luNG9RWDlhR2hNUWYwMXIwT1lPYnNVYTAvTkdhdm1USUppUS93VFcveEQyZ3RRY2tTQVJndE9zQ0JJODJOa1FaQUJYcFNLWG5Ta1h2anZJQWN4c1dzeWdBUEtnQWNyWFo2UDR0K1M4dUMxL1NzZnZHSG5FMi9GcVNDRVgzQkNsaDRGSWp6amRtL0UybXhYMnFhWFZBMlBWTDYvUlZpazRVRmw3K042Tll3bXZMWkVmNXNjVXhmOUxUclhsTDVHR3JBdFZRakVyQUJzZVFHYWdyYzVlV3JOWjRnM2tGWWMwQ0JEZ1dXODl4TTlBUWYzTWFxMG5Hd3QveC9EZjMzdCt3My9wZmRmNmZaRERmMGRWZDQvaW44VDRIdFFmZFNtdlJmK0s2ZUNrR1pOTGtMSVdPeXQzU2NkaXU5c3ZSSXg3cEFKNzRVaDlNWEdiN2tocDNsaXdKRENhNHR5L2VYMHQ4bVE0ZUQrZ2lKZ2xhK1JPdjdzYlplRTlwcS9HNkpnNW1DSkdGN0I4T3hTQVBTZWo2SEEzdWVLOUhnOVNpNG5HZjQ3Z2ZEZmlSWC9HRnJ1djhFVi9xZ2Era3Z4anpUQ2ZsVThiZlBlQzE3RHFTQ2tPWk9MRURJR08rdlg3bkFxOXNmdmcwWkhwZ1FHVjdFUG1MblBIS3V2WUlHSklpQkZ3STYvU0Y0UFBjY1BMcUV3VlExWTB2a0FGMTZBUlFvakdwcnpFUlFFR2R2OVJBRndRTmZDZkFZcEFBYTFIV1QxMy80OTdvYlVGM3IvZWZickxPOWYzK0lmdnpFRC9kNjhkT1d1Si8rRzdONGRjeklJcVc5dUVVS0cvdDE3K20yZmlObnNGWWl4ZVZHNU54SDM4a0pjMVE2UmRHd3Z0S3E2Q3E5dG91cHZpVGExKzF0b09iVFRsMm9yNnZGOGtVSzhBSjFmTWNQTEwzazJiUEZQSGNLRndDb1NNbUl2d0ZMOXBCY2dhZUk2S0JqK1c2SnR4K0cvWWErUkpRNy9IYVgzMzVSRGZ5bitrZHczL2x0WDlKQW55Tjd6cnVkY0VGSWRGZ0VoWk9pZnUxKzkvUXNnMFdzd1h4Zi9jaGVNbWpaeUZ1S2ZaeFVtV2xCQXd6Nm1yMTNOWWh4Slh3clhZb0g5YlhKTXVlMjBXbjlSb3k5VFhxZGFLZnhTLzEzTXQ3cjNVekdxWFp2emFvaDdzdjVNUk1uelllZkV6REZWcE9LQXVpelNXSHF5UjNvdnNTaklnSzZEOW5aUGF5ZlBWRnZpWDZzWHBzVStTRC85N3FpOWRuN0Jodnp5YmVianBWMzJsK0xmMUQ4NmoxekR0ZS9UUno3eFdNNEZJWHpiRVRJNUZJandxN2Q3STFhalhlbVZsRGpDZVIzNS9tekhqRmp5WHdXRENhK3Q2QW5ZaGZkZGs1NkFvZjMxOWFYNzFYVjNYeVd0c0U4eUdZdXF3RWg3d0M2SzRMZzgvUlJaOTBNME9OY01CVzcrQmNubHl5QWVWSWIvaHJkZHV2QmZlditWMm1jUzNuOTk1ZjJqK0xka1g1K3ZyaUY2Nk5aTFhuODFaNE1RdnZFSW1RVDZpNmNjZ29OWHJrU01PNmFOWGRrSTUxWERFQmJkOElCeUNTaE5ocXZXRnRXYXlKM242VXR2SW1CQWYrdUVPUHY2VW0yVlBScHRJZnU3d3VzRm02b01yRzd4TCtVNUpsYjFZSE5UZ1dCWHhmV0lvY0F0dkNpNWhPbi9HcFJZU3BZU0FOc0sveTI3OUIxYitPK3lGUCtZV082L29SYitHRVhlUDRwL1MvcnQrVDZpNkJHYjN2YjZEM0F5Q0NrSFE0QUpHZG8zN1ptbjNncmJabDllaUgvbWFpckpiNVphdTlpaGZFWklhVjZFVm0vaHRVVmhzd2dQQjI1cVRMbjl0YzVWdGI5MVFweDlmWm4wK3RVbGRNcjY3NUovSDZoUkNWakVLSlFEUXpSU3g3bGs0emt6WFdoVEhvWVZWWkxCWGlPR0FwT0t0NDJXdldta2pidTI1S21ISVA0TitCM2I5ckZsSUJNa2ZSK3dod3ErclU5T0gva3VLUDR0TFlJam9mRjcxaDcrK01kd01nZ3BCd1ZBUW9aa1UvM2FUejRZV1AwOFlybXBkNEdpanJLK3B1Q1I3TElvY0FDMzhPWmMrd1RtckNzVTFZcCthMGdFbEM1RndBcjlSWVA5VGJXZHVBaW9PWE8xeUR2bXltMXBWdnBGV3V4TGluMklIZVpySGt1Ti9KbEc3a0MxakkycStRQWJzMCswNG40QmZhTUlTTnF3bjJsblY1d01UbHo5T1JsaTdyOHVUaWNkN3Q1SDNqK0tmd1JiVlBYQzFaM25QSmRUUVFqZmZvU01EdjNOMi80NjlrZC9DY1ZzSWQ3RlJqampvbUhpelNTRzNpRldzWStjUjd1ejhOb21jdWM1K3R0MkJlR2g5OWMzeDkydXZMdjVPcWtkbm10NTVhbnh1MGc2REhqeG15c2ZvQ0FUTDYrV2VMaVkyZ2diT1FYaGVQWktEb3Fod0MyOFBMbVVHZnpjTS85Zk84ZjF0QjFrK0M5ei93WDNweGx6YmVLaHYxTFRjNUJNN1dQMDF5dW5uZkpzMmIwNzVsd1F3amNnSWNQL2JQM0dULzROVnFOblFZMS8wbFNyc0VkSUxyN0Y2a3Z5VjJKdDU2eWpDTmh1ZjMxelhHMEZQbzR2bGVtNHA1cmRLR1lPVEx1Y3NKVVAwSFZnbjhXc2ppbjI1ZG9NSFF3TGdyVHdFdVZ5WnREekxzMktUYVh5L3cwdS9IY0lBdUN5RlArWVF1Ni9Ia0ovSzNyL2pTUHZINzhWRS80Z3ZYVmx5OXJqWmMrZUd6Z1hoUEF0U01nd1AxVkFoRis3N2RzUXkxbitDcjlJZXh5bEJENkZXN0JxU0lBcWJOTlJGZDIyaTRlTXNiKytQbGRiaVEvM0MxWGtCYmp3eUZ2UHp5ZEdjUSt4aEVDelluWktGTEMyK1Q2VmsvY0NETGovQi8xQzVaS204K1dqaGphbDkxKzdmVWkzYjFZQWJMUDRSOGZlZG9XZlpuci9kUlA2Uy9HUHRQWnQrdWpLNnY2ZDhvNDkvOGU1SUlSdlFrS0daYXYrNGltSDRKRG9RNWpMSFJaQ2gxb0NoNW5IVE9BcFlpQ3BGR2FCcTF5M3dWeEpwS0lJMkZ0L2ZYMHV2eG9meDlkSzdjRkpPdDlsSXN6WmJudTVWWUZOQWREM2lWVDN0ZXphQzlCN1RSa0tuUHM4a1pibU92RGVvd0RZem5FOWJSbittOU9lM24vNSszUVMrc3VpSDZSMS9uMGV6Yy9jZXZFL2Y0VlRRVWdXRmdFaHBBKzc2ZmtuM2h5SHl0V0lFL0VQUnVFRFNYdjZpUldpYUJmUnNLTWhmVVUvUWdwWFZDcUMwVVFWM1lEbFk5TVZoSnZ1ci9UUVgxK2ZwN1RXbFJ5clZvem5ScTI1RXVPL1R2RXZ4R3BSL3pWMDZJeWxsQk5XQlNhVGVUajdPdWJZMms3NXVnM3gyREt3ZVpTQlh0djYxWHRaOUlNTWpOdk00dG1WKzNjKzRUUk9CU0ZaS0FBUzByVjUvZHNuM3dQWGJmbzhZcmxaZW0xaWhUYUs0VjVraHlzS2lyMlBRZ1dvd2piYWp3allkZ1hocHZ1THR2dTdwQ0tnNW93bDQvMG8yZUsrcnJEMlZNVnM0OTdOOVpUUndnamgvbXgzVmdYT2ZaWkkzeGVsbGRmQktHeit6c0ovSzg1UEZ4TW9BN2s0TXJaSFlzanpJeDFmQklwL3BEUTNFWW4vZGZYc3gvME1wNEtRTkJRQUNla1FmYzRwajhiKzJRY1F5eUVwTHlUQXluVm1pbisyb21IOFZhei9PZGM4VFhpcWRTUUNoclJwVEZRYm8yaTVwQ0pnbnJlZW1aY3YrV0h4Yk9qRzg2T2FmcGJNbkp0cWVOMUt6djJvdm5OWE5OVWJ0YUVvQXVZK1M2U2ZlYWJkM2VFTHN1LzVINWYzWDYrNS93WXovMUs3ZTUyRS9sTDhJOVhZRHNqZXRiUFAyY1dwSUdRRENvQ0VkSVErNTVUZndxcGNDTVhtamRCZVE3UVFzM0NCSldhWTFVdWR1ZEJ5MWpuQm5tcEZ2M1VnQWpZWmd1c3pVRWN0V3VaY0IxK2ZwN0FHRHZVQ2RPVmhUTVRCUlpYZ0pDUllOcDRyMGF5SWJucmRTcG01THprdzJpWXQyY0lVQVFrWjdvZUEzbi9qNmJDL2J6cjRpOGNQTE1FV0JTN2MvL0RIUFlWVFFjZ0JLQUFTMGdINld6LzVZcXpLaXdDSjBrVXp6UEJDVi9FQ2gwaGdldjY1bG1HVlJhb21jdWNaNXdrVjFVTGExQkxWR3U1djc2Smx6blVvbXVNeHI0V0x2QUR0SCt6bnhLemVDeGlpdXJpTERKdmlZV3A3empWa0tEQlpxZzlieUQzWFkrNjlwYW4rNjNuNmF6K3piWWIvZHY1eXpKa3JldisxUDVZK1FuLzUwU0lMWnFKeTN1clo1K3ptVkJEQ3R5TWg3ZHRJeno3NXRZaG5UMFJzclQ2VEtxUnFKUFF6d3hKaGVDaVpSVUZ5VjdNNUZUdzdyYUpybkN1azJtN2JGWG1iN3E5M2ZwdnFMOXF0RGh4aXR3Lzl5NlZGMjh6d1gzUEFWZzdBVkRVUERad2pUMFhneXZNNjVLckFBZmYwb0YvQVhPYjBPci9DNnI5ZDlhSGY2cjlTOGhBZFZpR1dCdTZscHRvUHB2S3ZWTnkxeTZxL0ZQOUlDOHRIa2IrZDNlVTJ2eTY3ZDhlY0RiSzB6d0duZ0pDVzdDSWd3ck5QdVJ4emVRQkVnTmhRQ2RRUUhkUmpUS2xydGRxRXFEWUFFYkJKNFMxNFhHTVRMVUVSMFBYRktxemFLNTcyaW5UbFlCaVZ0NjNHR25JdUNWVXF3Z2VuMVY0MGxUN3R5eUlBK3A0alV2OUJWQ2tXNDBFQnNLcytGQXVBSFlwdXVUKzNLYmhKNFUrOWV2OUpoM01mc3M5Z3hUK1UvTWNEbXJhazFMTHBEWnR1dXYwWDVMenpWamtiWkZsWGNZU1Fwajh1enpsMUczRGp4ekdQYnB2TlVXWVlUK29SQU15Q0JiSG5zYVVJMkcxL1M4MXZTSDg3dUE2Ky9oU2RjK0M2UStiUFFWKzVSSEMzOHdGaUkveGVyY3JiYWhnaVdoQjdUQy9BZ2IrVXVkeHAvRUhVZ3Z1c05RRlFTaHh1NnVHLzR2MGt0RHEra0xaRDhQNHIvTXlPM2Z1dm45QmZlditSQ1h6SExsdlJiWStXdmVkZHo3a2d5d1p6QUJMU3RKMzVuRk9QaGQ3NFJjUnkyNVNRWUl0L1FEYmZtNTN6THkvZlgwaSt1NzV5MFlYMHQvR0t2RDNrTUd5eWduQWI0L0wxWjZ4clpaZklwdlo4cW5zL1RVUThjZXhvWEU4eGhRTWpYMkFabTZQcmdpRE1CMGc2dFp0Qzc0TzJ2UCtvQVRROXY4c3lSY1BPL1RlT2EwVHhqMHpFV252WW1sejNYbjNrazQ3aVhKQmxnd0lnSVUxK1RwNTcwdTJoTjE2TldHNis4UEJMUEl3V0FvV3BDSnBlTllxTStHZXZhNElGcUFHSVR4S3daS1FJQ0lxQU5ZMjcxUE1pV1hYQ0ZOSEZlTlpFc2lHTXFodVA1bUsvUExVakoyY2c3WkNCM1N1c0NreEkrSXUxclVQSXNQczlxcTVOTWZTWDRoL3AxR3E3NTlwODdYMzZpSjgvbkhOQmxna0tnSVEwOVJuNTdaUHVoWG4wVWFnY3ZoQU5GcUtEcG5PUlpieUYxTzJZVkV1QUdxQUkySWp3MW1GL0M5ZVVGQUc3ZjlDUUk1S2I2cDNIRXhCbUNEQ3lZcUE0bmx2Sk0zMmE5SXlqRjJDN1JqaEZ3SFlleUNuWTRrTUkvMjNvQ3NoUTU2M2pZMHVmZlpsWXBlREIzMDRVLzBqbE8rZkR1UGcxMTNBbXlESkJBWkNRSmhiZ3p6M3B3WmpQcmtBczI5ekxjbkVJZWtaNG9lUjRGN21Fd0JBUk1NUmc3MHA4S21wVFNnU2NZdmh5UjlkaFVwNkFydHlJQXE5eWJ1WXJXMVFGTnA4OU5ZNngvdmVGK09mekFwVHN2TmIyQXFRSTJPNXRReEd3L2dkUHM4OVVaMVovVzhVL0J2cE82N3p0VU1iWC9MRzFyem1SZ1IyMDRxNmRlUDhON3I0aVUwYUE4MmFYWFBCMEdXZG1ZMElxUXdHUWtMcTIwSE5QZml6bXMwc0JiTmxZakJnVlJ4ZnJFNGNnNkRMMkpkRFlEdjU3eitKVEt5RzRGQUVyalN0cG0rZlJOb2ExdE9iTWc5Z2VnT29JQTdiRVBsMmZMNVdONDVvZXU4bjIxRFcwcWdhbm51dXAyeVlVQVFuOFh1b04zeGk4V2wxZjFQNFBNYXdYeTRTOC95WVgra3Z4ajFTKzR5aitrYVdGQWlBaGRReVQ1OTdxR1lqMTlWQ3NwQVVJdTBxaVpoY3FHcER2cnlpVU4yaDdnTUhldFBnVTBxWldtRy9EL1IxTURzTU94cFYzcnRHdHFSMFozaE12d0ZUdVBrT29zOFU2Vno1QUZVYzZRVWsvcjJvVkVmRjVBVmFWUEFidEJVZ0l2SkgyeTI1VmRuMEoranYvZUhMdTBmdHY0QThOdnorazJ6dU80aDlaYWlnQUVsSjE0ZjI4azE2SSthYS9CYUpaZG5HMkxpcUlaQ3VJdWp6L2NpSVhSeWtDTmlLOFRUV0hJVVhBeGl4ZmNjejNJbmVmcFU0czlEcEQzRE9yQWkvRXdQWGpac0liN2V0bVBkOHBRYkNKdVdRb2NMc1dBTmY5OWVkUUJ2enVFTFlkMU1PNUxNVS82UDNYM2VXamFrZ3EzVFVVLzhqU1F3R1FrQ3FtK2ZOT09oL3oyWE1oSXFud1FzaUdxS0JtNktDNDF5MGFhRXlQUVFRTWFVTVJjRGpqeWp2WHFOYlgxakpPalFkeVVYM2JDdTIxQysyWVlxR0tWZmpEVWhmTlNzSnFDL202OFY4ZHFhMUNFWkJVdWY2ZDNIRFM4UDFMR3ArOElZVC9OdXI5SnozUFJSODNlSmZGUXBqM2ozVDZocVA0Undnb0FCSlMzdVI1M29rWFl4NDlKVlZ0MUF6MUZTc2swS3dJN0JKMVFrV2hJb09yYnhHd3NrQUZpb0FVQVd2b0QvWmNXMFU4ekxhcFoxTFh4VDR6LzUvNTdJcm5YSklXL00xMjJ2U2s5ZUFGdUhRV0FlZWtrZWV2cFpjR3I4NkFUV24yWXp6WFNZYjQvREh2SCtuMFNYZ1p4VDlDRGtBQmtKQXlpNkhubnZoMnhOSEQwNnVqUkV3d0JBVnpjYlBJRnhhUTg2K01nRmRaSkN3NEQ5Q3hDRGdTc1l3aTRJRHRHL0VudzFxRUNpOGVSdU4zcFBQN3FWMEpHR2x2d2N6ejVVaUNab1lsTitJRnlGRGc5dThoMmdPVmpYZVI1UnB6OE9iMlEzcjd6ZitIbHNZM3BGUFY4QmFVbG8vZndRUU9OL1NYa05LMzJubXpTeTc0VllwL2hCeUFBaUFoWVNadXBMOTdtdzlBb3pPeks1akU2Mjg5ekREalBlUVEvbXJsK3d2NWU0ZmlFNVpJQkF4cE00Wng1VlVJSHBzSXFBWHpuTm9nMmJSK0M5SGVLdW9CSTV6WEZCTXo4K0h5QWd3UjRmczBpQ2tDa2tZZXZJR0d1bzh4Ujk0RTVtR0ExWDkxYWE1MXpseksyTy9OWmI2R3BJRTdqV0cvaFBCTlNrakpCZVM1MklTalR2b281bktYQXo5WXhyNElFRnVQVmZLWlNTcU1BdGtLcEhuMnVGMkFvTkoybzQzbXJZd2xYeGZRQ3YxMUhrc0srdEZoZiszcldLYlBVeG1YYjMvZnVZck8yL2VYVEF1MmlScVZmdFVTOEJ6YmttZGJOWDJDVkxYZlFwZEtad0h3YXZOWFkvbXFGVC8vV3VWQ0RQUWVDWm9uTG9scXo1bVVXVnBLaVZ1d1RQNi9uZ3BxRE00RHNPTjVrQ2JNakpyOWFDei8zeFM4LzhvS2dGMTUvekgwbDNTMk5LVDRSNGdEZWdBU2ttZDhQQXRiY05SSlZ5R1d1MlNLQ1NBUkNPQUpoYzN6L0N2dzZHcTY2RWZUSG1naGJhcUcxcmJSM3lZOUFhY3lycnoxZE5FMUg5bzZYSFA2cGprR21zdnh6OHdIYUZZRkZvZUI3OG9ES0FFbTFDUkRnYWRnTGRCR2FNVGthdUd4bnU2d0p4TCtPN25pSHhONURtV0FGNTNpSCtubUNhRDRSNGlIR2FlQUVJL3g4WnhUdCtIZzdaK0ZScmRkaUFLdXFxQm1ZWURrTjFXclVJQmpMU01lVVNMemQ2bTVIZkQraTZzRUxoaWxRaHR2dStKL3RXKzh2N250cEhpZEtSWGFqR0ZjZWY4U1grVE5NclQxZUpFelhoS2FtNFRycDNJQUlpc1VMbkw1aWVFTjZEaFgwVHlJdUwwQUs0dDVUUnRkVW4xZWV6TTgyNzZQYUd5V216RGpCcGVldk85ODc4ZXV6dCt4OTEvUXQ2WTFjYVhNOTZERHVaQ1d4eGphVmpxWTc5RDI5UDRqeS9sVm92aEhTQTcwQUNURWdlNCs0VWhzdnU2TDBPaWt4WW9vQ1NHMFhZWk1BVUVjdndFNU9mOUc3QWxZdXBxdmNSNTZBZzVuWEhscjZ5SnZ0aUd0eWN0NkFhWWVUTE9nZ2E0LzYwaWxEblEreDFyWHFCblBhcnJTaFdCUmtHWDRXblp3dlpuVGI1d3ZBMW1DTVE1NHlOSm1weW4ra2NFK3ZSVC9DQ21BQWlBaHRqbnpGeWNlaTlVdFg0REt6Vk1DaWNwR1FRQ3hZd2VSemgrV0o2aElnYkU1WkJFd3BFMlRsWGJyOXBjaVlNQTlPQ0VSVUhLNjZ2TDBVelVxL3hvYjFmQVNkTG52WmNLR05XZXBxWUZlbHNGdnFPNURnYXYwa2JiYjlNMnNXaGRZMnVuT01xeFJoamIycFE3L2xXRzJsNGJ1cmQ3dkUzNUFTS203NWU4by9oRlNEQVZBUXN6Rno0dE9PUTQvMEg5RExEZlpFQUtTTDR0WkRFRFNvV0s1T2Y4Q3hLV3hpSURCQWhWRndFR05LNmcvT2cwUjBOY25iNUVRVitpaWVvUlNhMW1wb1hPZytVVktxcGhwekFmWTh2MUQreUg4cHBER2J4SWQ5TXNrYjNPUElkQ3R0eDNKOWVqcjJJSlJ6Mlhyb2IrRXRIc25uemU3NUlKblVmd2pwQmdLZ0lRa2k1OFhuWEljZnJUNkdXaDB6RWJCRDJOWkpPSVJVd3d2b2p4anNrZzRDaElCaS83ZWdnZ1lzbzZqQ0Rpc2NWWHFUMDY3a0h0akNPdDcwMWxQZmQxVmQ1VnNSVG92b0pyZWdPb0k1NWQ4YjkvUjJUOU5pNEFNQlY2Q3IrYTR6VVhTNHB6SlFMb2xJNzdudXZYK2ErKzZNdlNYdFA1a01leVhrQkpRQUNRRWdPNCs2UVQ4YU8yejBPam9WTUVBVTFGUVJ3VUFVVXNVZ1B2dmliRlVXd1Jzd2xQUWFCTWlQdlVocUdYYWpVUUVsSjdHMWRnODU3UkxqWEVrbm9ETzU5QVJLeWJJRmdRUldRLzdSenEvNTBJc05Ed0NrKzJqOWdKczVjMDZmbHVPSW1EeHRSM005WlZsbTNXRy80Yk1VUmVEWHhydlB6N0xaSEIzQ3NVL1FrcENBWkRRalBuakUyK090Zmd6VURrcUU4cWIreStYNnZZNHloVWdLQUs2MjAxRUJJVG5ldWVLaFI0Uk9mV2I1dHhUWmZ0Y1kyeDU4emlVZFh1ZUYrQ2kzK3JlVDgyS3Y0WmI0T0x2MkJENjdIZUVxcnZhYjlFMXFqVnZZd2dGcGdoSVdoWUNaS0xqR2xUYk1jN2JtSSs5N041L2hBVGRYUlQvQ0trQUJVQ3kxT2p1Vzk4QysvVFRRSFRrUnRpZldLS0FLVHhKMnVNcTQvVlhRaFRLVzFjTlNnUkVRUnVLZ09QcU02WXZBdnI2bzRzSE5UTlVtSnZVK3JQZDFnNFpoaXVQb08rbE0zUmJtdmtBM1dPbWZkSGN2U0NqZVVUYXkvODM1UXZkWC9qdmNJdC9EUGQ2c3ZBSEdla2RUUEdQa0lwUUFDUkxpLzdPOFNkalRUNExqWTVjVkFNVlNhc0JvbW1qM3VYcDQ4b3hOaWtSa0lMYTlQcU1hWXVBZVo1NFlxcDNqdjZxTlRkbWRXODE4b0NhMTAydFB3djhZdUNRdkFBN00reFlGWGlhSDFINEsyV1BSUHdnZlUrampIOHcwbmRmQnV6OXgyZVR0SE0zVXZ3anBBWVVBTWx5MmkyL2MvekpXTm44Q1VBUFM0WDJwU3A5cW1OaG90WHovZVVaeGI2MXp4QkV3QkFEbmlJZ1JVRGZ0bDdYODQ2VHF6ZzZwdW5wVDhLQkY0ZVJkREdRWkp1bzJ3c3c5ZjZRN0RYV0NZUUNWK25qMkcwOGVnRmE4eUhwZXg4RGU5YW50bTVaZXExRTJPK0crNk50bm9OYUhtbm56dm83aW4rRTFJTUNJRms2OVBkT3VBMVdObjhNa0VQU29YdWFOdGJGTnQ1dHJ5REhtcXF1bDErSTBkbTFDRWhCYmNSOWJubHNlWDNxMi83Um5MRzV2QURWRWpVU2NXL3hzT3VHWjUvWUJZRk1VVStOZEFGRzdrQWRzQkhMZklBbDVvbzJSK3A2dHVyOE4vRDhmNVhEZjltMmpkdWpsL0RmcFJDNVpHTG5JZU85RS9YODJTVVhQSXZpSHlIMW9BQklsc3RjMlgzU0NWalo5QkZBRHN1S2V4N1B2MHhoRU9QcEtSUlBHZ2oxRFZrblVRVE1hYmZNZlc1aGJIa1Znb2NtQWpxdFJOM3dBbHlFNlJyZXZabjhmc2IxU2p6L1RHRlF6UGVJcE05amlvSG1aaG1ZRjJEZU1XbXpoVDB2eS90VmJkVElIMVgrUDlMaC9MTDRSMjU3S1gvOFlYbi84VmtqUlhlSW5qKzc1TUtuVWZ3anBENFVBTW55bUNtN1R6b0JPdjhNWWpseXcwQjNHSGFtS0pESy93Vy95SklyOHJXUTc2L1NNYXdsSDBYQUplbHp3MlBMVzZ2blZkbnRZNDJ2cmo3TFJqL1YwOWZFQzFBbEhSYWNDSGRlc2RPK1p1c3ZCNjhYNE5CRGdkdllkeUw1QUNrQ2Jqd3J6UC9YemF0c1NNT1FaYjNHeXlaVUNhZUlET0F1cFBoSFNKTlFBQ1JMZ2I3b2xPTVFyMzRhaWlQVGhrdGltRHRpZWszUFAxUDh5MVFITFJMTVBJWjVFeUlneWg2andBQVAvanRGd0dIMXVlT3g1UzN5eFd1eTltTWNKRUtjMlIwMXl2d3VRbm9sUFpkbUplQ1VSNE9taGNITXZ3eFl1UVh0eXVBcEw4Q1dwQUxtQSt6bzNscHlXOFJUVDJjVUlzWGt4QmVHLzNaKzcwalR4eDZhOXg4TGY1QWh2QVVwL2hIU05CUUF5ZlJ0bE4zSDNCUTMzUGdaSURvcXJlS1pPZjhjb1hxcTZlYjJhbE5Rd212T1k1ZzNYZlREdGJTckpBS1c4QlQwOVlNaVlJZDk3bUZzZWV0MndYQXFCUHU4QUpPTmF2NWQwdUwrSWx6WXJBeHVoZ3VMLzF6WnliQXVVMXRlZ0cxb0Rzd0g2Qi8zRXRza3NyNktsTTV1eE9Ib0JwM2svNXY2emNNNVcrckx5bXRMQ3U4T2luK0V0QUVGUURKcGRQZHhSME8yZlFvYUhaM3k0aEZYUEsrVkU5QjJDaFIxMjhKREV3RkRoQjZLZ0JQc2N3OWpLMXEvRDBVRTlHcHRodUNYOHNnejhoMm1SRU1ySDZCNVhPL3kxT0VGbURrazh3SFNEaHlwdFI4bnQ0Zld2c2pNL3plZXl6N2M4NCsxK01leWV2OFI0cnViS1A0UjBoWVVBTWxrMGQzSEhZMW84NzlCNWFZSHZpYU9rRHVYbUdaNy9xWEVBeTNJK1RkZ0VSQUZiU2dDanFEUEF4aGJwdDg2ZkJGUWM4Nlo4Y2h6Q0h1MlNHZm1BMHptS2pjVm1qaThoa3ZJSDh1UUQzRFVsc3F5MmljNk1wdWYrZittNkhtbmc3d2ZsakJYSUwzL1NITjMwOTlSL0NPa1BTZ0FrbW1hSmM4NWRSdWlUWitBeWsyY0N4UTFRb0RGRWlyRXM2SXNXeVJqYUNKZ2lCaEVFWERnZlI3QTJNcU1MKzk4WGRzQWVSRzNHVTg4VTdCYkx3emtGUkhYdHlWNUFiVkFLRkhmdVFkbWh6SWZZTW41b3AzU202bTQ5T09TQ2ZkWGx1QSttNEwzSHlGTlBRMTYvdXlTQzU1RjhZK1E5cUFBU0NhSC9pTTI0ZEJycm9MS0xkUGVQWVp3NGtyTW4rdjVaNitMSmlRQ0ZobmhGQUVIMXVjZXhsYlluNXp4NVowUGp1ZXR0UmREVHQvTjk0UTZ0aTB5QmtpNnJmbmV5UFVDRkg4K1VXOG5tN0RKYXE2Zm1RK3c1SHd0bzcwaUxWdzM1djhiK3VVZXl2bTFqODdKRWx6bnNoTkM3ei9TeUozRXNGOUN1b0FDSUprVXVoc1IvdStXSDRIS0tabHFuTW5mMVdXNHVEei82b3A4SXhFQlF3UWppb0FkOTdubnNWWHFkMDY3dlBOMWFSTVVlUUhhUHhnT2dha1VBUFkvS0dTcUROdC8xbndCVXZ3bWJmMzVHVXMrUUlxQUkvM3FUbFBRWU5jbUx6V011dDlEOHY2aitFY2F1Yk1wL2hIU0ZSUUF5YlRZZE12M0lwYlREcXgyWEluOEsrVDh5elhZdXhJQmkvNU9FVEIzZm5QN01zUSs5encyYjM5S2pDK3ZRbkJmSW1DUUY2RGRIMG4vTjFPMHd5RUVTczIrdFRId3dlY0RuSklsc3lUMlN5bFB1TDRMZ0V3ay8xK3RjVTI1YlVmM2p2Qys1RXVlTkg4WFVmd2pwRXNvQUpMSm9IOTg4M2NpeGs5bERQZkZJcVd2bkg5TmlJQktFZERiamlKZ0kyTUw2amVhcVJDOG1Nc2U4Z0pLa1dXdFdTOWhzeGlJMkFlUzlENzI4U1hRYm1yVkM3QU5HNC81QVBQbmJBbnNHQlhhLzYwSUpUTCtJWFJ3Zmgza25NbUFUa0h2UHpLR055UEZQMEs2aGdJZ21ZWWQ4cWNudkJZYVBmaEFjUStzaTM5cUdPOGV6ei96NzYzbS9LTUk2RjRITHJzSU9LQ3hCZmNielltQWZSY0hrVUFyVXp6dkNIWGNHK29JQjFaWS95RGhPYi82emR2NmM2TXRlUE14RkRoLzdNc2dBazVjYk1rOUpjV01zVW9PdzdqSFpQajMrNmo2UThiM0pGTDhJNlFQS0FDUzhkc2ZmM3JDM3lDZVBUSHRqYUJwYTEwTUExeDh4bkNPU0NjRjI5SEVkaysvaGlBQ29vRmpVQVFjM3RpOC9XbndtaFRaQ1YyTGdOYXJJZlhmUE05RXM5SnY4ZzhNa3ZPK0VPTXZ5VDg0RkMxeFc3ZExtUSt3ZXd0bjZuYU5kSDg4R2RONHh0ZzFoditPN2RiSTZ5eTkvOGd3NzFDS2Y0VDBCUVZBTW1yMFQwN1lEWjA5YTJGb1pTcDRXZ201ZkRuL1hDSmRubkMyYkNKZ2lCQkdFYkJpbnpzY1czQy9HNzRtUld2L1Bpc0Vaeno3ekIrTUVHRHpYZUd0R3F3YlFwOWRQUmhvMWd1dytsdHpKUGtBSnlRQ1R2Y0xETnB1N2M1dWN3L1Z5QjhpR2NNOGRIQnNHY1VGSWFUZzdxSDRSMGlmVUFBazQxMGN2L0NFWDROR3Z3K0ZwTHh5Rm9zVFBmQmJhTTQvbHhCQkVSQVVBWnZvODBER1ZxcmZOYTlKYUdYanZQTzFaVys0dkFBejF5dkhFMUFVN2hlSnBJWENSVml3c1hOUkJXSXBJUU9NTFIvZ3NoWVVrV1czY1ZnQVpQUjlIVmkzZFBTRGxuRmZYSHIva2NwM0c4VS9RdnFHQWlBWkpmcG54ejhkOCtqRkM1ZWFoV2VmWlBQN3BiWmJBb1U0N0hpS2dPSDlyWEtNME9ONDI0MVJCT3h4YkgzMXUwemY4ODdYcWczaE9LQ0tmK0lTRDhHTU5tajhRNE91NXdGTWRuQjVBYXFqRCtZOXB5WE0zVEhsQXh5b21kK04xVE5SVzBlVzdzUVQ3eXVwZGdtSDVQMVhOdnlYOXpQcDZqR2krRWZJRUtBQVNFYUh2dkM0eHlLZXZReVF5TDNLVWN2Z05uNXpoZGNwS2dwakZBRXJIeVAwT041MkZBSHp3M3pMOUx2QmExS25zbkZldjlxd1BUUm5yc1gyQU5Sc0dQQWk1WUJZMjJYanVDblBQM1dNWDR6ZmpYK2Q2TVMrWWo3QTdxMmZDZG84Mm5FWWNKLzNRSWNGUUxUUmNRdmJEdW9GTXVWdzdBbU9selIwMjFEOEkyUW9VQUFrNDdJMVhualRNNkVycndVd3k0ZzNTUWl3U2xvTXlmWDhxMXZ0bGlKZzVXT0VIc2ZiYm9naVlBOWpxOTN2QnE4SlNvcUFVbVF2ZEZFY3hGSDFOL0VDRlBQRllWWVZCNXhwQit4UTMwdzZRYkZ1Ty9NZks3UmpMOENjNjlXMlRVY1JjRkptWFhNWFJRWXdsc21xTUpPNUxKMkgvN0w0UjRmdHlSU2grRWZJc0tBQVNFYUQvdmx4OTRWdXZoaUtUWXVGUldKTWlYZ0VpcHljZjRweUlsK2U2T0hkdDRudEhrT2RJdUFBUmNBZXh0WjN2NTN6M1VCeGtDNUVRTk1MVUJ4anRiMmJGbHFmYkx4WFRDOUF1MzlxSDlpZVkxbXZMS3lCZzF2bWZJQVVBU2Y1WGUvbkpoMnNtVXpHS1crMGZtdzZMNUxSUGgwVS93Z1pHaFFBeVRpTWhMKzQxYW1JWisrQlluTmFHTEF5K1lzY3VLdEYyOG41NXhRS2NzUU1pb0FVQVRzcHNCSFNuNWJDbmV0ZWx6eWpRdEJSaFdCcmFhcUcrOTZpa0pBVjJxdndDNkFMbzAyUnpURWc2ZlBZb2ROaXpKK1dIMFlsQ2FhdmZJRExXaFRFOTN4UUhPSDRKemt1aHY5MjB3OTYvNUdodlNVby9oRXlSQ2dBa3NHakx6cjZPTXpYM2crVmd4WkdzUy9YbVMwcWxNbjVKeFFCQzhjYTB0OHF4d2c5anJkZDF5Smd4MVdFRytrM211dTNkQ2dDK3VhcUtUdERYWDJ3aW5pWWJjMlVBMG5CRHpWei9wbWhZK0k1bCtuVklVYlJFS1IvOTNlNDZiY3NpNEwwWWgzUkpocWVpQkp5U2huUmNNY29rdm03dEZ6aHYvVCtJMk4rUzFQOEkyU29VQUFrZzBaZjhoT0hRN2Q4RW9yREZvYXphYVNMK1p1VmpIOGhWaUJkb1JQV05wOUJSaEd3WUh0T2Y2c2NJL1E0M25aZGlvQ2g3Wm9NcXgxUXZ4ZnozV1FvYzQ4VmdoZENuT2VnaTFEaFZOeXZkYjBrTzMvSmZxcisrYzBMbWZhbEx4aGFQc0M4WXpadVZFNG9GTmozZkl6cUl6MFZBVUpHTktWTGxQOXZCRExIY3ZTYjNuK2t6TlduK0VmSWtLRUFTSVpyVi93ak5tSC82c2VBNkNZYkN3cXpZcWE2UGZ3a1p3VWRKQ2ExTFFJVy9iM3UvaDVqbmlLZ2YyNWM4NWZibHpMdG1ncXI3Ym5mclljeTU0d3hjNzZHOHdKcXdaeWtOa2cyclo5YUx4MjFpbjFJa1hYdjhBSXNITThZOGdHMnRTOUZ3R0hwQ05yekRUUU5rNW5qa29uUDE1RENmM2w3a3JidVJJcC9oQXdkQ29Ca3VQem8rQ3VBNkRadVMxcnp3K1RzbkgrWmJUbWlSZXM1QVVPTTF5S0Jvd2xQUVZBRVJNSDhkWms3Y0dqOURwN3ZHdGNsYjR4ZEZ3ZVJuTU1tK3Q0aUw1OXM1QmhOaFdpTG80K1N1aXp1NTl6aEJXajlXMGMzQnR1WThnRlNCQnlPb0ZIdEFreS9BTWhVQzVCSUwxM1Nyc2MyMmZCZmV2K1J0dTVhaW4rRWpBRUtnR1NRNkY4Yy94N0UwWDFTSW9WWVJxbzZmbk10RjlXekpobWlDRmdrNEFVZlArY1lGQUVENTdkTXU2WTg2Z2JVNzFMelhlSzZoUGE5c0Y4NUptR1Y0aUNhMHg4MU50aWFoeTNzcWZsZm8xSGtHcitWcTBBZC9hL3FCVmo5N1VzUnNEZnJhV3cya3haYzJ5a0tBVlBOLzBmYW5kOFJlLzhSRW5RWFV2d2paQ3hRQUNURE15bis4cmozUU9XTURZWFBkb1d4UGkvaUVGWkNQWmdvQWhiUFEvQmM1UFNueWpGQ2orTnROekFSY0F6OXpwM3ZocTVMWHM0N0JNNW4zcHpXc2JsQ3ZBRFZlQjh0Q2hJbC85aGcvZU5FMGo4UnczTVFEc0hROHRwVTY3OVIzakFubEE5d1pOcE1PMk1Za2UzVVMxZGwwcWRrL2o4eXJPSWZVcklmdkdtVzg0NmwrRWZJbUtBQVNJWmxUL3o1OGYrRWVIYkdnVVdINVFLamFubkZ5SWF4SkRrcmFhRUlTQkV3cjUyMmt6dHdqUDNPbmU4YTEyVXNGWUpEdlFDZEE1UnNNUkJieU11RURCY1lXbEtsNHdPd3g2UkNQeXYzZDRMMnhsaEVRSUU3ZDJXbjk5VGdENzdFb29tTXQrMElMNGt1OWIxRytudktLZjRSTWpZb0FKTGhMRjcrNnZnL2hzaVRGdFZGWFNHK3ByRWhCUlYvOHd5cW9ZcUEzajVTQkN3OERsQkRhRUo5TVcwcCtsMXhmSFg3M21WeEVLY1hvSHEycmVjQ1ZEUGRnSjF6UU5MdnE2UmhKc2VmdXJ1dkRYeXRCNU1Qc0sxOUp4WUs3SHMyaG1uOW9iN2RSMUZpQUJkeFdOZXFzZngvVTUremxvOU43eitTZjhYL251SWZJZFArNmhQU0d2b1hOMzAwTVB2blZNTDhoWUZ0NmdDbU1TMk9sYUc0ODNFdC9sNndxc3picnRZam95NGJWSEwyTmJibjdhdkk2YVBraXdSVmoxRjZua0xtb3NaOGhSN0RkUnh2TzhuVkRjcTF5MW51TEVXL0E5clY3YnV2LzdubksvaTBoU3hSWFZrSFhOdE40VTZzTXI5MjVWL1hNVjBaRGdwZmxEVSs2WldYNXpXWDlscGo2YUVWK2pwY3hhRGkvQTE5bVphWHJGSUNMNitVdUxSUy9sNm8yMWFxSExmYStiWHdNQjJPWDFxZTE3eTJ1Wi9HSVhnQXR0d0hhZURlcVczeVVRQWtlVmVibm4rRWpCVjZBSkwrN1pzL3YrVnBpR1lYWmhkZkRsZWNKSVRPNi9sWEVIN1lwU2VnOHpnQm5vQmx2ZmhjeStTaGVRSzJkUXlncEVkZHd6bjQyZ2lYcmRTZnB2dmRRR1hqdW5QdTYzL3UrUXBNb1pEaUlBcFBDSy9sNWVjUzNSVlo4UzhsQ09wR05XRXBZZXhwYVA4SG1BK1FSVUVtYlFJNmJ2aWdDNkJqR21KSE4xVno0bC9UNHg3U3lSais2K3FvOW40UDhJVzdYRzkrUFg5MjJpbFBwL2hIeURpaEFFaDZSVjl5eTV0aFplMGpVSWxTMzVHRjRXMFUvUkFyNTUvUFk2eElDT2xLQkN3YkhsdEhCQXdwUmtFUnNMN29WcmZ5YjYzK2RObnZpdU1iU29YZ0p2TUNMbzVuR29nTzl4UTdCWUZhazVMOFhhejNteGlGUVNUQUU2ZHd1VTBSY0ZJMjZhQkRnUjFGdVRvU1BFZy9abjhuMTRyaHZ5TWJJMW11dDhDNitMZDdkOHpaSUdTY1VBQWsvWmtPdTdFWjJQOWx4TmkwRVVhbmFkSEE5dTVMZWY2cFArK2ZGQWhjdll1QWRmZWxDT2hlcnpZc0FyWWhrblhSYnpUUjd3cmpxOXYzcGlvRSs4NFphdCs0dkFETlowWTkrUWFUTkFXSm1LZU9mcHIvbUJFWkowdU9XeFRlSE9MRk9CcTdqcFdCdzhZd1JCRlFQQjZ2WTd1R3kxNEFoRUxQb0o2cDFpNko4TFlnRGR4RkZQOEltUUlVQUVsL0hIcXpyeUtPdHFlRkJIRll1NWJCNzByT3IzQjdPZzFXQkd4Q1FLUUk2RjYwS3BxclZqdGlFYkNSZmdlMHE5djNzUlFITVVXUFZKVnl4eXRMa0M4aW11SENpM2FKOFJmb0JWZzFGTGd5YlJVRjZhQXlNRVhBZHZRRWFhSmZVMVFhS09xTjZ4cklxTWVudmQ4L3ZOK1c0NG1pK0VmSVZLQUFTSHBCLy9xNGZ3V2k0OVBpZ2hnR3V3UVlIb0hpUlpNaVlKNmdRUkd3WUh1Sk1WYzlSbDQ3MS9IcVZ0QXRtdWZTL2E0aFhxSnF2MHVPcittK2U5dUdoRE1iNDZ5VEY5QXpmZDU3VkRUckJXaUgvNHJtSHpUMURvdmRGWUtSSXpJVzJsMWpDUVZ1YTErS2dCMSswUWNyam96WTJsNlNjdzlNcUpPZSt5dDhIc2dRWDBjVS93aVoxak5OU05lbXdrdHUrbHBvOU1TTkhGbEpIaUhMYlNZSnBWdDQrZVZWRkpWNmxXL0xWQWV1Vk0xV1d0cTN4UGhySHdNZFZnY082WE5JRlZySGE2N3BDcm9oODF5bTMzV3FDRmZ1ZDhueDFlMTc4SnlqdVFyQmVYUG1PMmJ5RHhPcStSV0JrNTNGZW1mQnlGdWFUdjYzOGZkRnFMRGxPcWhxVlQ2MXlvcXJ1UHRVNWpQUHlzQWovWWdPWU9sbWhyaDcvNFVsNUJJT3VBS3d0SEJNVDl0bUM0RFViQ3Qxajh2cXY1WGJTczM3cGdsVFQ1WWh4eUVwY1lYL2ZuYkpCYzlnd1E5Q3BnTTlBRW0zZHN0TGJ2YnJRUFRFQS9hQ1dLRnZMbzhmRGN2NUYrSUoxNVFuWU9QZWZFdm1DVmpXMHkvM0dLR2VhUVhyMWNGNUFnYTJhNnpmQmUyYTd2dGl6anNzRHVLN0gvS09tYW4rYTgyOWVzYVF2TnVTaXVXdzg1dEtXdTlMeHFteGRTM1dHNmxkSUttaGlwVXNDakpTaTJ3b2RwZzNDVzlMNTVxZ2FjMitra0ZkQzE1bll0NE5ldjdzdEpPZlNmR1BFSDVGQ0tsbU1yN2t1UHRDOUFQUTlYOWVWUEgvczNlTXJNT00yVVo5ZGlNOUFVZmhDUmc4NXB3K3U5cUVuc3ZiYm9TZWdJMzJPNmRkM2I3WHZUWmx4cGwzakx6K3VZN3A5QUswUW5uenZBQ0x2ckttYUtyQWdYK1hzM0tiWmsrRWxCZGcwWGlMT2xGcGFkK0dGMkNKWlFrOUFZZmhDVmhCQUt6bUFkaUdWNUtVMk56dStmdnhBSlFTUDNma2dlajlGRXpaKzIrOXZhRCtmVk8zSC9UK0k0dXJ5N0JmUXFZS1BRQkpOM2JLMzU5NExLTDRmUnVyaTNWak52SllCMkpYL0VWZ3dRRjZBbzdDRXpCNHpBVkNTdU5GTnJyMkJLd3d0bHI5TGpHK3B2dGU5OXFVR1dkUWNaQWM4OGt1dUpINUZ3Zko5d0pNaE1DRmVPZzZuU0VvcG9xQnhGbmhReTB2d0FERE9VOXlhZWl0M2w5UmtFcTJKejBCVy9xNnQyMkZqczVzSHZYNUI1VC9iM2xjanFxSmJzcUhqYlIyUjFMOEkyVEtVQUFrN1pzSHV6REQ2dlZmQXFKTkdRUFpaY1NJcitJdjB1Rnk5cnBGY2d6VElvRXJ6NmlhaWdnWUVscUwwRGtFUmNEQlZkbXRXVndEZmZiZDA2N3Q0aUI1SWNHWmUxR3N5cjdySG5oSlJXQkozbW5xZUYrdC81OWQ4VHo1eDQ0a2JOaG5CbnZEb0xXRUZUaXhvaUJWK3pzMVc3ZHZFYkRXNlJrcTdKeENHZk9ZWkprdTNYU3ZCVm5pdTRiaUh5RlRod0lnYVovNzNlempVRG5DYlpDYjNqUzJvS0FGMVg0MVh6QXFJM0NWRnJkR0tBTGE4MVBsR0JRQlM4eHhhSjhMMmpYZWJ3U0thRTMzdmVVS3diNXJWR1FIaFlpQWRtRVB3TXJ6WjdrckN3eVBQVFVLSERrbVdoMGVncG44aU9JSjl5empCVmlnMWl4RlBzQ0oyc2Q5aW9DUllKSytXakxGRzJYWkg1U2NjVTJ5K20rYmZhQzRPTTBuZ3VJZkljc0FCVURTS3ZxeW0vd1JGSGRKVmJaVW45SHQ4SndwOUFxaUNCZzhQdGY4VkRsR0V5SmdwVEhuOU5uVkpyZGQxeUpnU2JHd2RyOHJqaSt2VDdYN0huaHR5b2lZalJjSEtUajNva2p2K25zczhRSVU4Yit2VXNmd2lDV0ZubnlPOEczMUhKSkZRWXI3T2tVN3RpOFJVRnR0UG1sVGU3blAzMVpmWmNMM0FjTi9TWnQzSXNVL1FwWUZDb0NrUGJ2ZzVjYytBckg4YnNyQVh1VEZLaEFmVE0rL0VFR0FJbURZK0Z6elUrVVlkVVhBeW1QTzZiT3JUVzY3TGtYQTBIWk45YnZFK0pvV01PdGVtOFc4aHdnMTJrMWV3RlR4RC9OM1NZY0UyMTZBMXVuZC84aUJqWDhVTVNzRFo2NmhlSjBJeTlseUE1VmdLQUkyTUlmYTAwV1RsaWVUb2NMVEd4UHovdzNxWHFEMzM1TGZMUlQvQ09FWGdwQ2E2TXVQT3dWeC9Ha290aTVDM0FSR01udkRjSWhoZU5TSXM5aGx4Z0IyYlhPdEdvUDJkV3d2WGZWMmhOV0JTODFmeUJ5aWZIWGd5bVBPNmJPclRXNjdMcXNENTdScnBkK0I3WmFtUW5EQmZaTjMzc1VHSTNlZkdtcWRuZDhQMktnYzdOaVUrbEVrNi9Vc1JYMnhqbWNmdTlDQ2xoYXM3eEZYQnA2YTZ0QkZoZURGUFJkVkZIWkNxL0NPcFFKd1E5NWMwdEtZaXRwS3kzT2ExMVpxM0NkTnRPMHRCSGdJMVgrRkF1QXlDd0dLVjh6dWV2TFRLUDRSc2p6UUE1QTBieE84L3FSREVjY2ZnR0xyUXMzTDljaHplQVRsSmZWM3JrT0t3dnpvQ1JoVTFaV2VnTjE1QW5iU2IwKzdwcjBZUy9lOTZmNmpYSEdRSWh2RzU2V3MxaHdreFRzeVhvRHFGbVRzcXNCSkIyM1BQanRsWUVaa1JPQVl3cVdZWnV5N0VWY0ducUJWMS80NXVONnB2VjRxbkZPR0NyZlQxNEdJZnhYYUt1OEgwdHhuZ3VJZklVc0lCVURTUE5kY2V5VlVqdGxZcWRqZU1PSVhDOHlRUkdlNFcwa1JzSlNBdGV3aVlJVTVxalJQamlYc3BFVEFwcXJzaHZhN3FlSWFUUXVZTFZZSUxuT055czUvOFB5dXEzU0xYSUNPS3NBaW1kb2hHL01zMldPcmZVclRXMUh6UFNxRHJsMFhkdDZJUmNDcDJiYWRpSURTOVEwMmdXTVN6ditBNW94VHZKeDNDY1UvUXBZV0NvQ2tVZlR2YnZZV0tPNndrZS9QS0c4cGRuaVlsalBPS1FMVzJMZkFPTzlEQkpTcGlvQm9zTXB1UTNuMWdvdHJOQ2xnRnJSTHpYdGZ4VUdxNWdXMC8rSENMQVJpdS9DWkIvTEY2QnJpM3FLNnNPVGZueWc0WkpCeHB5MFpodHFUK0ZpanYxTTFodHNXQVZVeE9VOUtHZjBKUm4xKzV2OWJwbnVCOVBSWm9QaEh5QkpEQVpBMFp3ZTgvQ2EvQitnajA0YUJ6N2pTckYyY3Nwc3BBazVlQkF5YXk1QXg1NHpiMVNhM1hjTWlZQjJCcks0SU9BZ0IwMm8zdU9JZ3hyMWNKclE1dGRIeUFvUWE3ejVrUGFSOGVRbVQreStUaTFUODk2ZDl6TUl4ZEd4dWo2WXljT0Q5TjJKcnI0TVZRQU10U0Q4UFd4UDN2UFI0N3FITWE0VzJVdTY0RFA4bERYd09LUDRSd2hVRElRMHMvVjkrazdPaGVBdUFtYnNRaEpYM0tqR1E4NUw4QnhXNEtGa1lwRlJSaXlVb0RCTFNwdTNDSUVGekdUTG1uREc1MnVTMjY3ckFSbFA5RHUxN1lNRU1sUUJMUHFUdlRmZmY4L21xUElhQ2NkaS9pOWtIdGY1cjd5VHVBeW5XdmFJOS8rQmdpbnJKKzFMc0lrcWVma29WOVdXQVJVSHlucW5LKzVhWWg2a3BWbTBWQmxua3Q0eEtYQTRKdkJRc0FOTG0rWXQzSDBzQmtKSG0vMnRjQUN3Yi90dlcrTWdnalg2S2Y0UVF2czFKSTJ2L1Z4NTNDdmJOUDUwcSttRWFmcmF4SHNPUkoxODJ0dmtNZllxQURlNWJJSHBNUVFTczJzWjFyakx0ZkZaZEl5SmdRYnRTZlM5Uk5iZE9oZUJKaTRDR1dxZFd3YU9VRU9jVEJnM3Z5SXlPYUwxSGsyUEhIbUZFQTc3b0ZBSExMNDBvQXViUFUrbzVZQVhnc20wMTl4QWRGcCtRRm80WjJ0Yjd1cDk0OWQvZ1hWajlselR3dHFiNFJ3aFpoeUhBcEo0dDhmcVREc1grK1FjQWJFMFpyZXRmRzZjSjRDeVNxUnU3WnJ4aEdBN2Nhamh3U0pzMndvSHJGZzhwdXVaVjI3ak9sZGV1c1FyQlRlZlZLK3A3bVhCYTFCdGptZUlnS0RIMzZEZ3ZvT1JJR290eHJ2OUJTb2dNcVg4czBjeFVwUVEvMzNHTGNnSFd0ZC82eWdlWWQ5elcrczF3NEtZdkF4bksxTEdxY1AvakdrajRMOFcvcFlIaUh5R0ViM1RTM0FMMkg0LzVOR0s1VTlyVHpRcUhVNk1LY0hMYnFkdnU5bnBlMEJPd3BYMXo1cWYwSEpXY2g4ckhDQmx6QTIxODdieHRlL0lFekczYnRSZGpUcnN5NHl4empjcU0xWGVkZk9Nb3VnNjJGNkR6WHpkYzRjRjVBekgvQWNYallaaDNYNFo4MWJYR3NxQXZUMEN0dVl6UkN2M3RYNjFwOGVQZDFQTFBWUGhEUFFDbHhQUjNGQUxyM05TdTkxZHo0YjhOekZObkhvQnRoUDlXUEQrOS8yZ3VMb2VoL3crelN5NzRGZUUvMXhCQzFxRUhJS2x1UDV4LzdHc1F5NTJ5Q3dsMS9ORlN6OFJqVFBzOEwwSTkycGJXRTFERDloV1AzZGFJSjJESmVhaDhqSkQ1YXFDTnI1MjNiWk9lZ0NVOEJuUDczcVFuWFVsUHdFWThHUVBHV1dhc3Z1dmtHMGZlbk5tYWg5ZDRWLzg5Wkh2emlTSCtxWlVyVlZ3blU0OUJxZmxML1VsVkJtN0xFMUFiR3ZkUXJjS21iRUdyNkEzcFFVZ1pjUUdRd2M0cDRmeE80algvaXRscEp6K0Q0aDhoeElRQ0lLbTI1RC8vMkNkaExrOXkya29adzFiZHhyL0xjSzRsQWdhRUNqdVBtV09namtZRURKeWJ5dnVIemhHR0l3STJJUlQ2anVWdDI0S1E1dTFQWU44YkQyVU9iSmZiSjBlNzJoV09QV01OdlU3ZWNlUUlWNm1RWGNORFQ4VHhVclQ2bDFRT3RsK1ZpVmVocytyeWVnUFJBK2R3elUvaURWbkxaaHRUWmVBUy9hVUlHUFljbEQ2TzlIbEhrY0U5cUZNNC83Q0dwNXhlVXY3MXpyQmZRZ2cvQWFRWjlMeWIzaDV4ZkJVRVd4WkdyOW9oc29aSGl1L1RFMXUzb0Mva04yOWJwWkRYS1ljREI4NU41ZjFENXdnTkZmNm9HUTVjdFUzdGRsMkgxRllJWlM0VElqdlZDc0hCMTZEZ09pVGJSTXRaYXFaT3VJZ1UxZzBCVU5VUVZ6UzdVMnBlSlB0UzB3SWhjQm1MZ2xUcU84T0I4NG5XSzFTSFRqa3JBT2U5QXJzNmZ6UG5ydGwyRWdWQUdQNUxCbWJjVS93amhPU3YyZ2dwWVNlOEdBZEI0L2NDMkpKWmxvamwxU2VhOVhDeDF4UVM0TzJYdDQyZWdHSGpTKzFiWi8vUU9RcVloK0M1cWpGZnBkczA1VkhYZFVodGhWQm1xZE4zQkhyUkZZUXp0eEtLWFdJTWVSNk5vZGZMM3Bic0t4SmVsWGVoM1huRXY5U3RhZVlKRklkQVdGWmtxV3BoVlA2SzFMY25KVzh5MitnN1BRRUw1NGRod0hYdXFJNUVsMkY3OWVsd3VnS0tYcHlIRWIvT0tmNFJRbktoQUVqS3NmMllEd0I2YkRiWGZVNlNlekVFREplakNrVkFmLytiSEYrajIwUG1DQTJKZ0tIemtSTk9XaVIrdXNhZTI2NUpFVEJFZ0dxcTMwMzJIZVdxNndibCtndkp1eGNnMUM3RzBFSmVRRUdZc0tlYUZ2aHNVZEQ4VGRmL0M2TmdVdks3V3VkVWgvRGlHbXN5cmlLcmVvejVBTDNuYmxOQ29Bam92eERTN0lSUWMxZ1NwV0x5SjJ6anpjUG5pK1M5eGluK0VVSUtvUUJJd2hjaDV4Lzlqd0R1NmhRbzh2NnMxaEpHWGZ0VEJQVDJQMlI4RWppK1JyZUh6SkZuSG9aUStHTXdJaUJLZU5PRjlEdFVSQXZwVTRqb01jTGlJSzNrQlZTM0pySjRCeWJwRXF4THRmQ1NOdWRISE85UWNSZFZTb1JERWNjWUFpMjlaUlFCcFdLZnAyeElWeFlCKy9iK2t4WU9NMFVQdkRhNnhGeUJwZnNxVFk5TEpqcGZwT1RybStJZklTUUlDb0FrYkhuLzZxUFBBZVNwR3dhcFphUzdQUG95bmk0RllnaEZ3SHp4b3N6Mm9ZdUFsZVlxWkQ1S3RobWFDRmhISENzdG9sV3NFRndtUEhhb3hVRnlyMEdaOE9HY05xYlFKem52bWtUZ3M5dW44Z0ZxL3R3bi8xUFA5YXF0ejdRbDhHaEw5aWhGd0RwV1pEa2hVSU9LZ0ZDQWFPMkNqZVNZbU9nOUlyeTN5QkJlMnhUL0NDRjh1NU1HVGFuempqNFprWHdHaXEwcGUxTmtYUWhNd3RZc0R4ZHZvWWlDQWhMS3dpRGUvcGZkSGx6WW8rNzJrRGxDV0lHSkxncC9GSTNMMVNiMFhONTJUUmFtYUxLNFJzT0ZOVUlMb0RUVy84QXhsTG9HQ0N4eVlsMnZWQUVQdTAySTJHVytUNU9LdnpEeUFXcW1XWHI4YXJ5YjNZY3RQSDNWSlVNdGpiQm1ZUkN0dWNUUmluMXVaT3hEL3ZpSExoRWpoT2QzSzVPYnNxTWlHTTVON1JZZzBjSkRMRmNCRU8zNi9OTEIvZVJyMjJjQkVJcjEwelBrS2Y0UlFrcENEMENTdjJqZmpSVUlMbCtJZjZsMWdXWlhKMkp0ZCtiOTA0SVFZbm9DZXZ0ZmR2c3llZ0lHejFuT3VGeHRRcy9sYmVjSnFhM2tUVmZTazY1MjMxRXZuTm1aMDdDaDRpQk41QVdzR3hKc1A3L3F1SWZFbzRxWW5uK21rSmNxN21GWnlxNjVOTzhKdGQ3Tm9WNkFRUUpsUzdaaUt3VkpPdklFbktxZEhPd0pxRFcyZGpxZ1lSNVR1dWpud09hK3oveC9NcDVia0tWMVNNRXJtdUlmSWFRMEZBQkpQamMvK2hJQU45OHdZQ1Z0VU5yR3N4WUlFSkt6cktFSW1MT3R3T0FjbXdoWXQzaklhRVZBTkZnaHVNa0t1MlVFdEFDRHBteFJEUlROZmN0NUFmUEdFUlRhREtQZ2hxYmZrWG5tbkYwNWZkSEU4WjQxUFFKVGg3SU9vTVo5VnNYUTdhc3ljR3VHTlVYQXVoWm04RncwV2dsNHV0NUgvWWc2U3lBcVRxYXZZMnRMZW5vMVUvd2poRlNDQWlEeEwxSmZmZlJ2UW5GbTJvUFBDa0V6UlVCZkpVcVBuZXFzZ0VvUk1MMHRkTnhCODFKeC9LVzJoOHhSWUpzcUltRGR2SUZkaUlBK283cE9YcjI2d2xpcG5IcDlWQWd1dUVhbHgrQXh3NzI1L2tLOEdxMXQ2cG9EUjlKVTB6TmF6ZmxOeGl2cGYxanh2bWJWUFdkbHZRQUxiYit4RlFVcElibFFCQXgvWDJVZUJBb0c0N3V1dlI5ZzJTZVFrS3F2WklwL2hCQit2VWl6NkN1T3VRdEVQd0pnODBhSTJub3krbGdzejVUMVd5a1JDTDM1N0t5OFg3NjhmM25iR3N2N042S2NnSG5qTGhxZmR3d0R5UWxZSlc5ZzBYakx6b2xyWEZYYitOcDUyd2JteXl2TWxaZHpUVnJyZTJDN1J2dmY4QmhLalFOaGVRRVhZcDNsa2VjVTR2S3E5bHI1QUZOQzRQb2ZpdklLdXA3WDBLOStuWHlBUWZ2bkhMZXVpeFJ6QXJhME1NaFQ5Q01qVjJYZWRFcmdOTGFiZzYvUGN3ODcvMTlINS9lK2Nwbi9MMm1rVGZlQitmK21ZYmhUL0NPRTFJUWVnQ1M3V1ArN1k3WWowbmNBMkp4WkM2UThWT0QyUnZHR3NscVZMSDNlZnZaK3VYK3U2dTAzSWsvQXZIRVhqYzg3aGdsN0FwYWRFOWU0cXJieHRmTzJiZGdUc0V5ZkNuUHFJV0NjUFZZSWJtSU1wY2FCc05EbWpJYW42WmVsbWk5T1cvUTB0OHZHT1JmaW54b3AvN1RZVUxNZERodTEvK2dKNkQzMlVua0NhczlMU1JuVVlTWndrYnRmYzNZNXBzSG4vMlA0TDhsOUJWUDhJNFRVaGdJZ3lYS3d2aDNBVFZKcmdZVWhLMWxqSURLTU5wR3NvUkNVRXpESHVNNFQweWdDRm8vUHRXL1Y4WmZhbmpOSGRZdUhqRUVFTEZVY3BHajlyU1dLYXlCQUJBd0pwNjBvQXRidWYyaGV3OUF4dEpFWHNDaUhxWGxmRzU0ZmkvZWptVmRCZ0VqOHowOVNWVGp6REV1Nk1uQ2VMU2RhemRxdUt3TFdrUVQ2TENwU2VmOGxFUUhGazh0UzJyNG9aS1EzelpMZkJyenZTU092WG9wL2hCQitsVWdMWnRlcmozd0JWUDZmTTRSVnNCNENaSWI1R2dacUtoVFkyQ2swQk5VTU5YYmFsemxodFF3SExoNWZrK012dGQwelI2WG5NV0N1Z3VZelpFNEsycmlPVTd0ZFNEZ3d3c0pRR3cybnJSRWVXN24vT2ZkTW1iSDZybWVaOFZZZHN5RDluc3hzcy91bGhpWW9WdWl3dFdPU2ptRVJCaXpwL1YzRUtCa0NGakQra0tWRUxZMndyWEJnYVhEc0JjZWZjaG5QeGJjL3lwM1RVdUdkcGNOd0cvSnNraXJIckhadXpUMUVoNkhQMHVKODVyWExmUlczZk4ybDVUbk5heXMxN3BPNmZXRDQ3N2lOZFpWL25PMTl3eThMQzBNVFFwcDRwM0FLeUdLeDhacGo3Zy9FbHlPV1RTbURVNjFRTmJXTlc2VHorb2xITU1zWXZ6bWkwTlJGd015eEtBS0d6U082RVFGTHRhbHdyTkIrNXdrWW9lSmVHem4xNm9xQVk4d0xXUGFhaVNtUzZNWS9uc0FsN29sRHZMTXFmeVNpb0NuNE9SVy9IQlZRTGVHbTFBZWl4bEtDSW1BZi9BREF0UUIrdlA3Zkh3RjZEU0EvaG1BL1ZLOEhvbjBRM0FpTmI0REtmZ0RYclZ1Yk4wTGtobzMrcTBDaXpZaHhBbFEySThKaFVBZ1VDcEg5RUxrZWl1OUJNWWVJUXVLREFXeEpkbzhoMnhEallJZ2NBc0Vob2pnWXdEWW9Eb1BJd1lBZUJPQUlBQWREa3YyYUZtS2t4T2IyUktEbTh2ODEwRTlwY1Q3ejJnNVdBSnhxL3I4eTczdWFoWU16MUNuK0VVS2FmcTl3Q2dnQTZEOGVjUmcyejY0R2NKT05QRlFlZ1M5bFpJcGIzRk9ralZvemliMFdHTThMcTRFaVlLN1FNRllSTUtRTlJjQXdBYU9PQ0ZpNjczMzB2MkFNWlVUQU11UDFYYS9jOW82NXNiMEFCZXVlZUw3K0cySER5VCs4aU9GeExlYTcyUXJyRFFrSFhweTdEVS9BRm91QzFOcS80QjVzWk93QmMxS3YvejhFOEcyb2ZnY2kvdzNCOXhEcjl5RFI5eUQ2UGN6MWU0ajB1NWh0K2g1VzluMWZMcm55eDZOZGkremFOY1AxMXgrS2ZmdU9RQlFkZzBpUGd1SW9xQndkQzQ2QzZ0RWlPQWJBMFFDT0F1U285VCt2MUZydUxwc0F5QUlnelk2cHFHMmYzbjhVQU1kcnBGUDhJNFMwOFc3aEZCQUEwTmNjOVI0QVoyeDQ1dVY0QUxwdW54aHA4VStRRlpWTSt6VFVNNHllZ01VaWcwK3dXRFlSc094OGhjeEp5TmpLQ0V0MXdvWjkxbU9vaU5hcENOaEMvL09zb2lHSEJDZS9MOFE3dTUrNklSVGFGWUpUSWNHMk9PajdwTnZDb0tmdmpYc0JCaXdwK2hRQjYxWUdybnorM09kcURzWC9JTkt2SVpadlFQQjFRTDRCeURjZzhYY1F6YjZGNitQL2xTdXV1SkdybElKTDg4QUhIb1V0Y2h6bXMxdEE0aE5palk2SDZDMUVjVHlBNHdHNUpZQ0R3MjdkTVFpQWJWUUE3cWlvaFBlUmFGbjhsSmJuTks4ZHczOUoyUzhIeFQ5Q1NGdnZGMDRCMGRjZTlkdFF2Q2dsNGkyTVdVZkltdTJCWXJZelZ5OUZ3b0xhdStYa0MxVFAvbm5IRHRsR0ViQ1o4WmZhWHFKTlp5Smd5THdVQ0JGTmk0Q2g0MnZVazY2aVoxeGQ4V3pJZVFHYnVHWXdCVHhrMzZlMndPYzdnVk5JZFBRMUkyWVlMOUJGLzNySUJ4aG0yZnFQMjRvWFlNbTVLTitIN3dIeUZRQmZBZlFyUVBRVnFINEZJdC9BLy8zNHYrV3FxMWE1Q3Vsb3JiTmp4K0hZdlBrRVJORXRFTWNueENLM0Z1QTJBRTZDNENRQUI3Y3RRaTJmQU5oRytHL0Y4elAvSDgzQzhSam41ODB1dWVEcEZQOElJUzI5WThoU0w0aGZmZFRkSWZnQUJGc3l4dWpDbUZWM0hxdGsreUluRllCWXN6a0FmZUtKYWN3V0NpeFdEa0tmWVU0Uk1MdTlqZ2pvSFdOWE9mOENSTUFnb1RCa3pDWGJVQVFzN3Y4UVJNQXk0eTA3NXVCeEd3SmZrSGpuRWd4bEkyZWdGTnd2eVhzMTd3dXZlcUI0UTVWVkFFVkFteHNCdVJxcVgwSWtYMENzWDRMR1g4SEJLMStSaTYvNElWY2FJMWtQblhubUNWQTlDYW9ueFZGMEcxRTlDVUR5djRPYkVJd29BT1k5U2l3QUV2WjZaUGp2eEExemluK0VrTGJmTTJScEY3c1hIYk1kTjhTZkEvUW5Gb2JqSWxkZkl2ekI4RlN4d25sVGhydFY4ZGZNK1dlR3VqbUZNOU9iTU05dzk0aUF0bmhBRVRCL1Rncm5HUU1UQVRHYzZyOXRpNENoWS9OWmtuVzk0MHA3MFRWY0lYaEtlUUcxNkJOcnZHUE5mY1RZNXZyTnp2ZVhaeUtJWFpYZE9rOWhIL00rSURXV0Y0TXNDaEkwRi9zQWZCNGluMFVjZndHeGZoR3p6Vi9FOXFPK0pudjJ6TG1xbVBCNjZjd3pUOEI4Zmx1SW5CcUwzRUdBVXdHNUhZQ3RaWmJhV25pN2RWVDhoQUpnQjJNMzJrckZlNlNKODFNQUhKTlJUdkdQRU5MRnU0WXM3WUwyZFVlOUNhcVBTaVdwTnozK1lGV2FOQVZBOCsrcHFyNk9ZaCttZ0Nod0M0RXBzVXB6Vm9sNXVmL2FFQUU5Qm1lWmNGaUtnTk9xL3R1NENGaG9GYm5IVnFhZHovS2Nhb1hnTXVNdGV4MUtYUXZEQUhNSmZabks2STc5N2JCaDJPSEN4bnZiemlGWStJblhBOFdXaENLZ284L2ZBUEE1Q0Q2TFdEOERqVCtIZlp1dWxpdXVXT1BxZ1FEckJVdXV1ZVkyaUtJN3hpSjNsQmgzaE9CVUFMZUNSM25LRndDWHVRTHdGQXVBTVB5WGxKcDlpbitFa0s3ZU4yUXBGNjZ2UGVMcEVQbjdBOGFmT29RaXk2TXZWUXhrdlgzR0U5Qm9HNXNiTFV2WE5GQlQ1M1dzRE5XNld6WEgrRzR0SE5oamNGSUVEQngvaVRhREt2elJzTGRnM3NwK2FCV0Myd3FsblhwZXdMejdJRlhvdzZIc2FZNWd0OWprKzhjUlMwRVUzM2cwZk56Qkg1TWFTNHpCaUlEeTM0QmVCZUFUUVB3SnpQVXFlZmVIdnNPVkFxbDBXKzNZc1IwSEgzeDd4UEZkWTBSM0YrQWVBSDVTZ1NqLzhXQUY0TmJHemdJZ05BZUhiWXhUL0NPRWRQbk9JVXUzT0gzdFViY0Y4SEZBdHkyTVV0djdUeFdJNUlCM1NNcGRSVGJ5L0xuQ2hWTjJyVGdNY0xYeVdlVUlPQ0ZWZm0zaUhNR0NJbUJPSDlzdUhGSWphaVlTQUFDQUFFbEVRVlNpVFI4aVlPVnhOOUNtVEo5Q3g1OG5rTlFWeGFZZ0FqWXhqakpqU1hudnBWK0g2ZTBCNXdRQzU4UTRjRzd1d1pwZWdJVjlIWndJK0NOQVB3cVJqeURXanlPV1Q4aTdQdkJ0cmd4SXErdXVNODg4ZEEyNFc2UnlENEhlUXlIM2dPRDQ2a3Z5OFF1QUxBQ1NiY3Z3MzZVMHhDbitFVUs2ZnUrUXBWcUU3c1ptbkhqRXg0RG9UaG5QRTl2REwrVUY2QkFBTTJIQWp1SWhUb0hCSVFUYWhuQkdCSFRseThveHZLY1lEcHdYL3V5YWo4RlZEeTdSWmtvaVlPaTVTcldyS1l4VkV0QkdVQndrOTN4bHh4RTRsdEErbXU4MnB5Q24rWDFidkZMVmZXK0w5WTRVeC9zejgzdkFOUW42c05SY2FyUXJBbjRaaWc5RDVNTUFQb1J0Ti9rQzgvV1JRYXpIempycitQa2E3aUZSZkE5UjNFTWg5d1N3cmRtbE93dUFoTzFHQVpEMFlvUlQvQ09FOVBIdUlVdTE0SHo5NFM4QjVOY1BpSFZHdFVpbmtXd1lwTEh4bTFmd3NqMEpyZDlzZzlRT05iWTlZcHpHOExySWFJZlYrUXg5OVJqaXJZbUFSZHNwQWpZbUFqYVJON0J6RVRDMFhaTWkya0FyQkx1dWo3ZnRHUElDbHJ3ZUMwL3BndERmMUYrczkzTGVQb3YzYVlnWElGb09CUTQ0YmpNaTRCekFaNkg0VndEL2lwWFpCMlh2RmQvbGw1K01ZbjIyWThjS3RtNi9leXg2ZjRIOGxFSlBCM0JJYlJFb2FIY1dBR25sL016L1Ivd3pUdkdQRU5MWCs0Y3N6ZUx5RFllZEFZM2VDY0ZzSXp6WHJDWnBoZnZHaHRGb2kzbTJNV3A3NW9sZFVBUklDNEgydmg0aE1EWVdNYVozWDVKSHE3QWdneWxnZW96MXFoV0FLUUxXRjh1R0lBSUd6Vm5CdUVxMXFYQ3NQTXRBdXhZQisraC96aGpLakxmU09NcU14Zk5aelp0bmNid0hZZi9aT2xZbWo2Q3JMem5ieGZQczkxa1pPTXo2dFprRHVCckFCd0ZjanJYNXY4aTdQdng5ZnUzSkpOWnN1M2JOY1AzMWQ0NVZUaGZvZlZWeEJvQWpLQUJXNkNjTGdOQVVISmJ4L2NyWmFTZWZLN3QzeDV3TlFrZ1A3eUN5RkF2Smk3WWZnOVZObjRIaVpodTZuWGlFTWRNd040VzhLQzNzT2NPSGtmNjdyQXVKU2I3QTVDUXFXVU00WXd4THV1Sndza3NpQ3FhS2lSU0pGNzY4Z2hRQmMrZWxhRzRxYncrWjM1QjVDR3pUcVFoWWRDODZYcjk5aW9DdU9TL3NlNFc1S0R2VzBPdlUxSGh6NTdmRVdJcXVSOHByMlh4L21zZDNWRjlQUkQreHFxMERTTDNURi84d1lyVXgyeUZubkVNWEFRVlhRK1U5VUZ5Ty9WdXVrTXN2djRaZmVMSVU2N2dOUWZDblJMRkRnUWNBMkY3NldWdUtDc0RMWGdDRTRiOEROcnpwK1VjSTZmczlSQ2EvYUZRSTNualVKWWpqczdMaFlSR3k0YnJZOE9LTEhWVXJiV0ZRRE1Fdk5vMU9sMURvTUVSTmowRmYvaXBUQ1BTS0Jsbys5MThUSXFEelhEa2lSSEJ4ang1RlFIdDdheUpmUlJHdzlGeWhIUkd3eXRoOGdsSWJ3bGhsQVcxQ3hVRUsreFl3anJKakticFhiQzlvbHpkMFJybEQ5bjBxMWo5K0pQdWxQS1FMUElDOFhvQTFsZ2hOaW9DQzd3QzRITURsbUVXWHk5dmUvdzErMVFrQmROZXV6V3MvdnVGK2tlaERBRGtUd08yRG5qTUtnTjJObmZuL1NIcW1LZjRSUW9id0xpS1RYeVMrOGZCbklaYVhMb3k3aFFlZGVrUVAwNGowZVBrdFBQUnNBN1lvSk5nbjNqZzhYa3dETjVWRDBCQUx4ZFYvMjJ1bXdIZ2Z0QWlJY2lKaDR5Smd4ZkUzdXQwemgyWG4yU2NjVlpxVEF0R29jUkV3MTNvcU43NHk4NWxubFRBdllQVnhpL25lczQ3aEt0NWhWMWRQM3FkaS8wT01kU0x6SDNsS2Z6aHFMaEdxaTRBeGdFOUJjVGtpWElxN2Z2QkRzaHNNa3lLazZKRTcrK3liekZmakIwY2laNm5pUVFBT0MzL3NXQUc0bGJHWE9EZnovMDNlNEdiWUx5RmtLTzhqTXVrRjRSdVB1QU5pZkF5S2cxSlgzQlRGeEZFc1l4RWliQnFXTG5FUGFRTTB0andDUzR0Vk9TSEZDMEVTSHFOWjBnYTJ3bk8rQVlxQW95L3VNVFVSTUdST1NyYnBxcmhHR3dMYTJFVEF5dU1vTTVZeTQzSGNCeWtIUUVkeEQvT2Q1L01HWEtSR3NQS3JpcWJmMTFydzlVK2xVeEFyUjJBbkl1RDNJZmdYeExnY2E3SlgzdldCYi9QclRVaU5SMi9IamhWc1BlUmVzZUFzUU00QTlEUUF3dngvWFl4OXZTM3ovNUdOV2FiNFJ3Z1owanVKVEhZQitIWnN3VFZIZkFLS08yUTJ4dWJWZCtRQ3RGY2thaHVlMFlhQmFoN1A5QXdVc1NvQ0kxc04yT1hwNGpYWXJWeFpUaUZRc24yeGo1dGJCWmdpWUtQamIzUjdpVFpkaUlEQjg5WkFHK1FJTW0za3lhc2JTdHVXQ05qV2VIM2pLQnhMbWZGWTgyTVg0aERydld4N09JdGF4N0hpZFcydlp5aThvcU92ZnhKNHpVcDlpTHhidmdySXhZaWp0MkhiVGE2VVBYdm0vR29UMHRKNjhLRVB2V1dNNkV6UjZCRXErdE1BTmxVekJTZ0FCcmRqL2o4Q2h2MFNRZ2I1WGlLVFhmQzk0ZkFYSTVMZldQeFFKUExCVlcxWExhOUFiSGpoYVk0UnVRZ3pOc0o2N2NyQUlSV0dNNEtocTZLd05RNm53U3JwcXNHMng2QkxKS0FJR0w1OWpDSmcwSHdHaUVGTmlJQysrN2JwZG5uM2UwaTczSE9WR1dmVFkwQXplUUZENzdVcVk3SEhrOG10YXA5WDAyUExWUDQxQkVFeC82RkRzb2NRV043Y1NQY2hVMVJKSEI2Q0RlUURWSHdCa2U0Rm9rdXg5NE5YMGlBaXBJZTE0Y01lZHNROGxwMlJ5QzRGZmdhUUxjMmJEUU1SQUVkU0FJVDUveVpyWk5Qemp4QXl4SGNUbWVRQzcvV0hQUkN6Nk4wQW9wUm5Sd3lyMHE3RHlMTzlSVXdoTUxVdE12THRxZHVySlRFa1k1Y0FhUDE5SVViWXJpaU8vSUYyNkZ0S3pOQWNRY0FTQXZPRUErUlZTUmFLZ040eERrVUVSTWZWZjVzU0FTdWNMOCtDV0tZS3dXM21CUXhxSHpvZTh3VXIyWGVuN2VDWHpJRm85ajNuZXIvWmFSdVNmNVF4VCt2cW1PWVlqdFZFUUlYS2h3RmNoRGkrV043K29mL2kxNW1RQWEwVno5aDEySHp6aldkSGtFY3A4R0FBVzVzeEdWZ0FwRGNCa1BuL2htSmcwL09QRURMVTl4T1ozSUx1clljZmpuMzREQ0MzOEFwSjZqTUU3UkJhcEQzL1JOT2ltQW95M25zcHd6WDVRNFNVOEJmbmVBUzZSRUNGVlNuWUVnN3RiUXR2R1RoeUE0cFZKVE5QT01nVDgwWXFBdHJibXhRQjdlMlRLdnhSVXlnY3ZBaUliaXNFdHpXR01lUUZ6SVRraXZ1OW5QcXo3Wm1zam5lNCtRNzJ2VWNSRUJMc0VRUERSY0F2UUdRUG92aDFjdkdIdnNLdk1pRWpXRHZ1Mm5YUS9OcjlaNGhnRjBRZkNjWDI2aVlEQmNEaEZ3Q2hDZGlpY1UzUFAwTElrTjlSWkhLTHVEY2U5Z1pBem5FYXVHWENJbjNGTm1KSGVGcksrTFR6VXFtL2pWMGgyRFJjN2NUNEMwRXkrUzFBaEZvSWZiWVJiQnJUNmhjMmZLSk9rTkRYc0FpWU9SWkZ3TEI1eEhCRXdGSnRLaHdyNUxrdWFqZTI0aUJseHVzYlIrRjFDR2pyRzNmUnNYMlZ6Q1h3Zk9Md0JsVExFTFNGUCs4L0FCa0g4QXFBM3FYRFJ3QmNoR2oySm5uYis3L0JMekVoSTE1SFB1aEIyK2FidGo0MFV1eFNZQ2VBcmF3QVhLS2Z6UCszeElhMW5qKzc1TUtuMGZPUEVETGM5eFNaMXFMdG9pUE9RYXh2Y0ZiNE5ZbXRxMi8vWGZORUw3T05JNXc0OGU1TExNelk2SWNkVm14NkFqbzlBRFY3SGxmbFRKZDNZMlljcm54YjV0ODFtMGkvc0hLd3gwaW5DRGhORVRCb1Rndm1KV1Q4UHJHbGRqaHRoNkcwYmVYU0cwcGV3Q2JHczNnbFNYNU9WWmZIWGlaVTJLSG9tZTh6VTlSTDhnRm0rcVRGeTRMMC9QOFhvRy9FUEhxVnZQMkRYK1lYbUpBSnJpdlAySFhZZk5QK2gwZUNKeXJ3d09LWGhPVCt4QUlnMldOU0FKeU1VVTNQUDBMSUdONVZaREtMdEl1T09oNDYveXlBSS9NTFloamI3TnhUZVFhcEhScHNHNWtLSy8rVUllU1pIaTJ1RUdGZktIQW14eDhjdVFoOVFxQ1JNMHRyaUhUTEpBSTYrOWwzenNBU2JRbzlYS1dmdklHNWZXOUFCQXc5cDZ2dlplYksxNjZ3L3dGajZEMHZZRTdic21NcE14NjcycS85VWpiZmljNEs2dWE3MFA2TFZkd0RNTHlmMWZxSEdVL3UxZXcwZncrS053UFI2MWpJZzVBbFcyZnUzSG1MT0k0ZUI5VnpBYmwxa0duQkNzQzViVmtBWkRJR05jVS9Rc2hZM2xka0VvdXkzWWh3MjhQZkErQ24zV0tMWkowN01rbm03VzBlc2NUZWIxRmd4T2R0WnlhbXR5cE8ydDRyS1NIUUZCQWRnNDV0cXpkSENFUk9ZUkM3WUVtdUVDakYyeWdDaG0rZnZBZ1lNamNOdFBITnRiZnZudGYvbUlxREZEM1BsY1pSWml3RmJVdVBSelp5blRxTElmbmVXN3BSY1QzSjBTcXVlVElLZ3FSRVJIWDNMLzNUalFEZUN0Ri93dVlUTHBjOWUrYjg2aEt5ekd2TzNkSGF4ei81VTFFY1BSbVJQaXFkTDVBVmdJZGZBSVRtWDdQR05NTitDU0ZqZW1lUmFTekc5aHorNjRqeGtrSmpOYmF1dksyZDVZVUNad3hQMXpFS0NtUEVqbk9uamlIcG5IMkpFR2w2SDNvRkppdkVOeU1zcm04d3F4MW5CRDlqOFpZUkdLMDJQbEdvcThJZ1JkdkhJZ0xhMjRjcUFsYWFVOGVydHFrMjNuc3dzRjNvR0pzUUFVUEgyZFFZOHA3UG9MWWRod1E3dlo3Tjk1bG1EYnRVZTNnOEFEMWp0eXVvKy9vZDRlTlkwMytDemk2UXl6NzRBMzVwQ1NHWjE5dURIclJ0UGp2b1VWR0VKNm5pQVlCRWVaWkd1d0lnQzREUS9PdmFrS2I0UndnWjIzdUxqSC94ZGRFaHB3Q3pUd0U0S0ZnWThWV0JUSVF2WHg0OWMxOW5RbmxQN3NCVTdqL2ptTTVjZjhaNWc3ekhrckZaeDNMbHg0b2xHKzZtam9rSXpvSG9lYXppQWdGZ2pDS2diMTU4b2swcjIzUEVtZDd5QmhiMHU4clljbzlUNFh4NVZzWWtLZ1I3UG1kdDVUZjBqYnZzMkgzdk1kYy9ra2pCcyszOXpmQytSbVM5OSswVUN3b2crajhvM29CNS9DcDUrNGMveHk4c0lTUjRQYnB6NXkzaStleXBnRDRGa0p2bXYvSllBVGp2azFHcG53ei83ZGlJcHZoSENCbmp1NHVNZTdHMUd4RnVkL2kvQWppOVdGeHdHTDkyR0srOVQxNG9zSDJNaFdFcDd1TW4vNDJOaFlvdHlLbFJHUmltMGFycE1HWlhLUExDU0xhcUN5L09hWWtaUlVKZ1poekpNVVBFQktraFlGRUVMTDZYS1FJT3ZrSndZZjhyanJXSjhaWU5DVzRpZk5nM2RtYytVMTk3KzJYcWV3OEczRjkyRVNqb3B3QTVIei9hL0dxNTRvb2IrWFVsaEZSZW0rN2FOWnRmdS8raGtjaXZxcVFMaDB4ZUFHUUJrR1V4b0puemp4QXkxdmNYR2ZVaTY2SWpuZ2ZvbjRVWnh6a0dyUzgwdUl4QUVPZnNvOWJ4RnlHOTBZWUlsd2h5YW5uekxYYXljZ0pLNkRuVkVRcnNDZzBXZHpMK1ZQRVRNZkptRlJqOVdzZmJiMFFpb0hPTVhZaDhIWXFBUVhQaWVLVzJJUlM2NXFCTXU5RHhlUzJUQVl1QXBjYUJBWVFFRys4MWNRbUN5UDdqaG5jdU5Cdm1hM3RoTDk1MVVUTCs2eURZQTQxZktwZDgrRlA4b2hKQ0dsK25QdlNSSjhlQ1h3VDBxUW9jV2MwRWFWb0FIRXNGWUJZQUdhanhUUEdQRURMbWR4Z1o3YUxxamR0dmk5bnNrNEJzTGZaaUNqRGlDejFJSk45YjBENkdiVFQ3Y2xhSnJCY1EwZlIyWDFodmJCckVyajRVaUV0MnVIS2hKNVp1RkRoeENZSEpHUExtSURNUEJkZWhjRnNEMjVkSkJBeDVKanF0L2x0UzlPcFRCQXg5Zi9qYUZmWXJZQXloYzF0NkhPaEhCUFM5bHlEWnl1d3czcFBxcU9SckduMXEvU05IeG1ONWNjei9CUEE2UlBPWHlscy85ajErVFFraHJhOVpkL3o4MXZuMkh6eGFWSDVEZ1R1ekFqRHovNDNVY0tiNFJ3Z1orM3VNakhJaDlUNnM0UDhPK3hBRWR3OFhPRW9ZOEVXR3RaMTAzdW1OaHczUkxpRTJiejIxY3ZRaFd3M1kxVmVmNkpmS001aVQ0TjRsL0xpcUdpdXkrYkV5QXBEa2JQTThhbkdBbUxJMEltQ09zRElFRWJEU25EaGVyWDJMZ0tIOThyVnp0aDE2Y1pEUWNRUzhEeXVOTy9UYXdaMUQxWDdYT1QwQXRmZ2R0dkdTamFIeVFjajhKYmo0WTI5anppSkNTRi9zZjlnajdob2hPaGZRSndJNHFEbFRoUUlnVGI5V2pXYUtmNFNRS2J6THlCalJQWWZ2QnZRUFNodXdwZk9mSWV2MWwrZGhKd0RtWm52SjV1dExHYmFPWEgyTGFzSldHSERLSzlCbElNTVMvVHhDb0t0aVppWVhZTEtZVW9jUWFNK0xPY1k4SWREbkpWaDBMVm91SE5LbUNHZ0xNVjJMZ0pYdStRWkV3TEx6VXZpOE5wQTdNUFNjWmViQjE4N1p0a1hCTVBmYXQ1UVhNS2lQQWZlbTVNMjN1cTlySmwrZ1pQZmI4QVQ4SVRSK0sxYjB6K1ROSC8xM2ZqMEpJWU5aeXo3b2tjZXViWlpmRWRWbkFqaXF2cWxTdmdoSGMyWVNDNEJNM0dDbStFY0ltY3I3akl4dXdmU213KzhDNkVjQmJDcm5CVlZWRUxIdFRFOE9RZkg4cGtXVmdhMytwNFJDT3pUWUNHK0wxUkltYlZIQ0pTSnFqa0Z1RmhCQlZpQVVoNUdlRjQ2Y0VVNDkxeW5JMjIvbzFZT0J5aUcvUTh6NTE2a0lHREozRmRya1B2OU41OU5qWHNEaSt5WHZreXZHUHlBQTJYLzRnT1VsNlBpSEJqTWRnUUtJNWZQQS9PWFlmTzByWk0vbjkvUExTUWdaN0xyMlFRL2FGcTlzK3lVVitYVkFiMVhOVkdFRllKcCtiUm5MZXY3c3RGT2VUdkdQRURLTmR4b1oxeUxwSW14R2ROZ25BTnl4bWtDQzhIeUFycjlyenEzakN6OWJpSEZ3RkFHQkZUNHNqb3ErdHRGclZ3WldkNVhoeFErT3lzQzJjWjM4dHZBK3RQcXdtRnZiNDJaOVAxc0lMQ09tMlFJQlJjQ0JGUDZRYnZJR0JzOWRRWnZTN1VaZUlkZzNqaUdIQlB2Q2ZsUC9XT0FvZHBUblBaaitCNGNZc1Z3Sm1lK1d0MzdzdmZ4aUVrSkd0Y2Jkc1dObHZ2M0lSMEhqNXdCeXQzS21DaXNBMC9ScncxQ20rRWNJbWRwN2pZeHJjZlNXdy84UXNmNStvZEhjWkQ1QSsrK3A4TjJjTm1aSUx4U0lvN1F1cDY1MlNBdHdMbUZEUFpXQkYvbXdITzBXeFVZYzFZVXpub091YmJab2FIamdwRUtXYzRRTERSQWpnSTJDSTc3eDV4MjM5WnlCQmNKTWs5dGJ6L25Ya2doWVpkekJjeE42bklydHZHMEhFT2JiaExEWGRVaXdGbngrblhPaXhqOSt5TWI3VTYxLzFFaS9nMVl4ajYrQVJzK1d0MzM0Yy94U0VrTEd6dXJPUjU0dWl1ZEM1V0ZoOWtxZkF1QllLZ0RUN0N0bkpPdXJacWVkOGxTS2Y0U1FhYjNieUdqUU54MXhLaVQrT0lETmpRcDZ3V0lJSEJWL3JVV1BMelRZek5IbkVnQnRjVkhFWFZURUp4Q29LOHpYL3J2cFdXUDhWNnk4Z1pvbkV1WUlnZXBKekcvT2xWMlYweXVzU0wxOGVMVnpQN1pkNGJkdFQ4RVNiVG9MR1M0WWQrTnRBdHE1amhkNlhtL2J2a1RBd0hHRVhxL0NaN1RDWExxOC9ueXBDT3lOcm4rY0VGd0xsUXV3WmN2ejVjSXJ2c3V2SkNGa2F1emIrYWpieitiNmJBZ2VEMkJ6a0VuREFpQTArMm9ieVBUOEk0Uk05ZjFHUm9HK0R5djQvbUVmQVhEWGZJRWhWUGlvS0hTNGZvdkZZZUJhN1ZORk91endXOGUrUlhrRE00WXkwcUhDOGJyWVpudktwS3BwU2pwWnZ2ZllPWGtCYlpFdjFYZUYwOHRuSVJ6Q24xT3hNRjlnMGZWcUlIeDFxQ0pnM3Z5NDVpaWtUV1BQeHNRckJMdkdHRG9YM3JZRHlndm9iVjhpSkRnazE1K3RDbnJQcWU3M0Z1UUhVUGw3SEwxdnQ1eDMxU3Eva0lTUXlhK0R6OXAxL0JyaTN4YlZjd0ZzelRWcEtBRFM3S3RsSEZQOEk0Uk0rUjFIeHJId2VmTmh2d3ZnVDhLTXoxRGhBL1h5QWRyNzVLMW1VaUxldW5lZmVJUkFYMS9zWWlRTFlURXljZ1dhWXpmeS9pMktob2kvc0lpendxYXJNSWp0aWVNVENNMk9pOGZ6VHdNRUgwY1Y0OURyMVhxRjM0R0lnTG4zS1VYQTNrVEFaYzBMbVBINmN4VTVza04rN1hHcUk2K3EvQUFxTDhOYlByemI0U05OQ0NIVFh3OC82SkhIcm0yS2ZsT2d2d3JnSU9mM1liQUNJUFAvRGQ4d1p0Z3ZJV1RxN3preS9NWE8ydzQ1QmZQbzB3QzJsczd0VjlpbWlYMlE3N0huMmljMkJEUFI3UDZwSWh6SUZoQXh1NXNVL1REelpybkNkSlB6cFA2c2prSWZscEZ1R3VpcHZqaXFjWnFlT2hrUngzVU9Vd2dNRUFIdDhmdUVpVWFMZTR6ZFV6RDB2cGJ5OTdwdkZkK0dDQmd5dnRBMjNuNEh0bk9OMGR1MkFSRXdkS3hOamJudXVETkZQVnpIMFBRL050anZyYlJRK0Iyb3ZFVGUvT0VYOG90SUNDRXVJYkJwQVpBVmdKZlBLS2I0UndoWmhuY2RHZllDWnpjaTNQSFFEMERrUHNVR3ZrZlVhQ0lmWUZWaHhLNkxZWHVucFF4ZHpScjNMb0ZuNGYzbnlKRWxXQTlKZG5qNG1lZTNQZmtTa1MrMnZYRXNvMXdkUm42cXVqQ3krOXE1RWpQSE1FWE9QQ0d3aGlmZzVFVkF4L3lVM2g3YUJvRWlVRk5DWWNueGU4OVZwbDBMWWI1anpBc1lPa2ZxK0xKbWN2MDVpaEpsaEQvN1gwM3dOY1R4YytYTkg3K0lYME5DQ0hHOGpoLzhzemRiVzhGdkMrUnBBQTdxclFKdzBDNFVBQWRyRUN0ZU1idnJ5VStqK0VjSW1mejdqbE13OElYTnhZZitCbUs4dU5BNExpdDZoQWdoVmZJQjVvbUFlVVozcWhxd0pialp4VVBzOHk0OCtaRGV6MVVJeEZWQjJBd1RWb2NIamxvTHJEaHZMSWxCYjFZbHR2L3NFUk5jQlZIRWNUM2JLdjR4K25EaG5QdTlkSDVNR1k0SVdHWDhoYy9ya0NzRWwybmJkRjVBejJleHpMRlR6N1NtcTVzRGpseW5WdEdnQSsrZ2IwRm56NVkzZmVpTi9Bb1NRa2pBZXZuTVhjZXNSZkd6UmZBc0FBZlhOMzNhcmNMYnZRQklrODgvTS9UOEk0UXMwenVQREhjeDg5YkRUZ1Qwc3dBT3JsZmdvK09pSUQ1Qnd4c2E3QXNmZGhUdmlLMDdONFpsWUh2RVF4aDVBQmNXZU9RbzlPRUs2Y1dHeUZnb3FJcmo3K3J1SDF6YmtWTVpHV2x2UXEvb1VPT2FkaWtDWnM3dG1yOHE5M1BGN1pYdS93RlZDRzVhQkhTZE03ZnR5UElDaHM1ejRYemJqN0o0dkJyVlVmVEhLUFFoQU9Mb2E1anJiOGxiUHZvbWZnRUpJYVRDMnZtaHUyNjZGc1hQRStDWDRhd2FQQVlCa0FWQU9qT0U2ZmxIQ0ZtMjl4Nm5ZS0FMR0lYZzRrUGZEZUNNOGdKQUZWR2tqc0JSY2g4N3A1K3YySWNyTkZoenhwRXFETExlTHJaeWJiazhBVjFGUVd3Qnp1VWw2RHV2VDl4SjVSTDBoUnI3eG1nSUJYa2l4V0xNQllMSnFNT0ZRKzduTGd0L0RFZ0VESmtEVjVzOGEyUVo4d0tXdW1iSWV2bGxqdUZMYjRERTgvbnJpT1UzNWMwZmZUTy9mb1FRMHNBNmV1ZXVXODAxL21NQWp3VVFsVGQ5V0FGNDhrWXd4VDlDeURLKyt6Z0ZBMTI0dk8yUUp5T1cxNVEyZG9kU0ZDUkVGRWw1OHhWVS9GMkVCa2NiKzZhRU44ZHhJZTU4Z1Judm13Z0J1YmlzNHhUa0ZiU0xsNWdDWVpKbkVMQ0VRT00zNXh6YTIxRWNVcHgzWFljcUFxYm1FZ1BJK2RlakNCalNwcXJBTjlUaUlLSFhLSzl0bVhrSk9yYVVITGVkU3NDdUhMNW85ajBBdnljWGZld2YrTlVqaEpEbTJiZnpVYmVmQVg4QXhhNStLd0J2TktJQU9BUURtR0cvaEpCbGZmK1J3YUZ2T2VRb3pPU0xVQnpUU1c2L1Z2WXBJWGpZRlgvdHRxN0NHM2FZYnlvVU9FKzBNUEp5WlhMbnJmOFlXOTUrS3Rrd1kvVVZKakd2ajYreXA3aUxBcmdxQTd0RVFMVW5LRStzSzdHdDdQWXVSVURYZlpEM0hIUWhBcGFlejRyanJ0VW1adzU5ODVEN1h1bXJPRWladGsxN05YcnVFOXZyTC9WZThhVkJXSGdkWHd2RWZ5c1hmZngzK2NVamhKRDJXWDNZbzg2SVJGNm93RjJiTlpINkZBQlpBS1NhOFV2eGp4Q3l6TzlBTWpqMDRrTmZDK0NKd1laOVgwVkJDdmRCdVRDNlJhaXRwNjB6Sk5aUkdkZk9ENWhibUVTeUZuMHEzNThycHlDeVljS0xQamh5L0dYNjZhZ2FuTW41NS9FbVd2elYvTHNXWE5zR3F3ZG5ya21MSWwvWjdWTVNBWVBuTG1SK0N0clViWmZidGdYQk1PajkxWEJJc09aOFB1MTNnM2c4aUdNQWtPc0JlU24rK2FQUEYzODVJVUlJSVcyc3J3R1pQK3puZmc2Q1B3VndVak1tRWlzQWo4dndwZmhIQ0ZuMjl5QVoxdUxrYlljL0FCci9TK0ZLWWN4RlFZck9IVnVMS1crK1A4bm1DSXl0dTlzVTYxd0ZSRkpqVTdqRGhzV2RwODVsNU52OTlWWG85VlVwOWdtQnFsa3hNeU9PNVJVcEVVdUlLTGhHbllZTDIrUG9ZM3ZvY3hFYUV0OVJoZUErUkVEWG5PYTJuVUJlUUhXOFYxeVZ1MU5qVGxVY24yT3VlNkEvOFdUWnMyYy92M1NFRU5Mald2dXU1MjZLYi9xRFgxRFJGd0M0U1QwVGlRTGdlSXhlaW4rRUVNS3Z3WkFXSkJmaElHdzU5SE1BVGd3WDJsb3VDdUlTUUpxc0RKelgzcTUrNjJwdlZnYjJlZXNCMktqNGkyeHVRV2Mva3hCZVdDSEFSdHNZV1crZnZPdWtudHlBY0lRVnA0cVdtTmZMbFgvUTQwbFlKSjZVdWtaMVJjQ1FlNVVpWUhWdndZTHhsV29UME01MXZOeTJFOGdMYUQ1NnZoUUEyWDBWc1h3QW03WStWbDcvZ1cvekswY0lJUU5hZHovb2lkdldOdC93V3dJOEQ4Q1dhdWJSR0FSQW1uc1Uvd2doaEYrRTRTMUVMajdraFJCNWJyRklVY0pZNzZ2QVJ5MXZKcXQ5YUxpZkwzL2dJa2RnbnZobTd4dkJXeERFekRlWXloZVlJd2I0dklhOFFxQmRGVGhBQ0V5RkpWdWRDQlhyYW9tQWFLREM3eEJFUG1ud09hZ2dBbFlaVzZrMk9XUDB2VmRDejFubStTOHpyN1hibHZFR2RCelhmbjdoU0JGZ040N3huNURvOFhMaHh6N01yeHNoaEF4NC9mM1F4NXc4aitLWEFQclE4dVpSZVJGT216TE5XQUFrY1BRVS93Z2hoRitFb1MwK0x0NTJSMGgwRlNDYmlvV0FxZ1o5Z0tFYnVrK3B2dVdjcTZ4WFdjb0x4OUUyRTBKci9ka09CMDZHa3doNW1UeDdubnlBWnVHUmhmaW1EZ0ZNM01VQmlncHpPQVZLY1F0L3FmbndpQkdadWNrUmJkb1VBZTN0WXhNQnE4ekhxQ3NFaHg2dmFSRVEzZWNGOVBWaElmQTcvckVBRGs5bGxXdWc4bXg1NDhkZXlTOGJJWVNNaDlXSFBlb01DRjRxaUc1YnlwU2lBRGhnUTVmaUh5R0U4SXN3TUhRM0l0ejFrQTlCY2M5eUJueFYwUUw5RlFXcEt3SUM2VngrYWkyRTdHMU9BYkVnREZiVTRhM25FUUpUWW9XbWhVQlhkV0JuSGo5TFNERkRoVk9QcWtjSU5JVkM4L2ptZUZVZGMreDUvR1BIdHNZci9QYnRLWmh6NzdkUytFTWFmRFk2cWhCY3QxMXUyd0hrQlF4NlgzbjZZUmZ6VVFVVSs0RG94WEloSy9zU1FzaG8xK1JubnJrbG5tMzdUWVU4SDhDMklET3Fsd3JBb0FCWU5HckZLMlozUGZscEZQOElJV1RadndoRFcyenMzZjUwcVB4OWVRR2pxcWdSdUUvaGNUcW9ET3cxdmdNRkE5dmJ6emRtWHhML1ZEZ3dyTUlnbXM0QmFJdHpsbDZZclQ3c0c2dDlmTjkySU9VQ3FGYkJFR2ZsWUMyK0ZrRC9JcUM5dmRkdzM0b2lZRWlieXFIeUxBN2luTi9DdnBWNDUvbkM5ck1oL2pGaXVRelgvZmp4Y3NuVlArWVhqUkJDSnJBMlAvdXh4ODNqK1FzQlBNRnZML1VwQUxJQVNQNkk2ZmxIQ0NIOElneHhnZkdXN2NkaVJiNEk0TWhxQWtjVCsrUVl4STBJSDJoUEJFeituSXFNTGVoVDNwZ3pZY1ppVmZLMTFBRzFWQUYxNUE3TXpRdm9xeVJxQzMwdVVjVE1QYWlHWjZPVko5QlZXWGdoRW5xdVIxQTRjTS9idXhZQnk5NmpvVzBxRi82WXFBam9iRjh5TDJEUXV5dm5lamlMZlppQ2ZPTDVGMzBDcXl1UGt6MGYvZzkrelFnaFpIcXNudjNvKzBheC9xMENkL0dhVVJRQWgyWGMwdk9QRUVMNFJSZ3F1dmVRMXdCNGNyTUZQbG91Q2xKWjFBZ3cvdXRVbWwyRS8rYmsyYk05OFZUeXF3d3ZqaTFXdjNPRXdGUVJqaVE4VUJ5UG52b0ZRRmRJOGVMdlJ1UFl5ajNvQ2pXMmhjQlVMa0oxQzZlbEt2ejJMUkxtM1BPREZBRXgwQXJCT1dQMHZWOUN6MWxtREkyMHJaZ09JYTg0a09sMUc4di9BdEVUNUlLUFg4NnZHQ0dFVEh5dHZtUEhTcno5bUY5VjRBVkloUVZUQUJ5Z1lmdksyV2tubjB2eGp4QkNsdjJMTU1RRnhkNURUZ2Z3ZnUrcW9GU29YNDZSUHBUS3dDRWlSOUc1UXNRZ3RZMTVSOXRVYUhBSjBjWWwwcVgrN1BBRWhDWFErU29BZXlzQ2E3YklpQ3NYb0xNQWl0bmVWN0VVbG1jamlrTXh4eVFDMnR0cjVjT1VCcCtoZ1ZjSURoMW5tZU9GOWkrdmJSTjVBVU84L2pMUHB3SXFhOURvZkxuZzQ3L0NMeGdoaEN6WnV2MUFXUEJMQVR3cTlaMHB0S1pDQzRDVU1jMG9BR1pIeWJCZlFnamhGMkdvaTRqM1lRWFhIbklWZ0ZPYk1lNnJDaHAxQkl3QXc3d3ZFVEQwdVBZY2g0bzJtWHgrbGhDNE9MZW5hRWlxbjlqSXorZmN6eElTN1FyRVhpSFFDbGt1OHVJVHVLc00rMFNWSWcrdFBrVysxcmFIM2lzOWk0QzEycFI1NTR3NEw2RDlEd0l1SWQ3VXhkZmtrOWk2ZGFlODZzcHY4UXRHQ0NITHk5cFpqOTRKNk44QmN2TXdhNnBQQVpEaUh5R0VrQTBpVGtGUFhIZklzeUdXK09mNlRvdTFYSkNBYjd0WXk0eFMrK1FzVDZSb1RhRUJiVnpIS1Y0T3BmYXgyL3ZPS1VaL3RHQWRKQm93UmttM2krQTQrUG81UmRmYmF2RTR4VnJNdWE2NUZNeUhlYzNWMXkram5maXV1V1RQazJtbjF2ZzkxMGJLWGpldDl5eDBzajNudVJLN1RjRHpJSUZ0eXI0bmFyVXA4ODdSWWhzajVMeEZZdzE1MTNqZlpaby9oM25GUGc2RTBsK0wvZEdUNUlLcjdrcnhqeEJDeU1xbEYrMmQzWWc3S3ZCU0FIUE9TTDlRL0NPRWtETHZUTkk1dXZlSVcwRFdQZzlnT3h5MjhUQUtmQXpRZTdDU3g1aHg3RXgxVDBkYkViZDNXMUZPUEZlQkQyZitQeW4yYmt3VjlEQ3V2ZWhHemordlI1OHJ4SGRkRkZSajM5UTlwZjZjaUtuUXlKeHJWdXJhRkhramh0enJRL0QwQzMxR3BFSHYyWWxWQ0E0ZForNnhRME9DODQ3citKY0NSWXk1dmdYN1QzcTg3Tm16bjE4dVFnZ2hOdnQzUHVhMENQRS9BbkszRUhOTG16TExwSVNuNEtRTldZcC9oQkJTN3IxSk9rY3YzWDR4SUE4UE05S3JDQmRON0dQc1YwVUVyRkladUVzUkVBSGpqcTBuSkhQc2FPUEhWRWd1c29WQ1RCRlBKV3orVWxWSGtUMkczY2RVaFYveFZCVTIraWErY041QU1hcG8vc3VJZ0psOVErN2JBWVg3TmxJdHU4TUt3U0Z6VVBwZDBIUnhrQkp0cTd4elVvVnlrUFlFbk9QZklac2ZMcS83eUJmNXhTS0VFSks3cmovMzNFM3h0My93YklYOEFZQ3RlZVlXQmNCR2pWZ1cvQ0NFa1BMdlR0THBJdUd5YlQ4RHlMdXJGL2pvb0NoSWlPSGZpT0NCZmtSQTh6Y3I1WjF6M0hsZWNMb2VKN2dRMTR5Mk1aRE9EeGh0aUhlSk41L2RUOXNURVVnTGVwbThnejd2Um84UW1LbFdiQjdiY28xMFZTNVd6YiszTW1OcHNQakgwRHo5V3FrUVhMR0tjSmNpWU9oY2xEbGVubFdrTFlpQTRybS9WUFlqbHVmTDY2LzZTMzZ0Q0NHRWxGcmpQK0l4Sjg3aitOVlF1Wi9QM0tJQTJKUUJTODgvUWdpcDl2NGszUzBNTHNKbWJOditXUUNubERQUWN3ejJRbU1jM1ZVR3JpeG1CQmp5YllpQUM2UGZtaDZmOEpQeUVuS2RXNEJZSFpWOGpUOURySXErNmhBaFBJK25Ha1ZBMUtvU2JJOUxqTUlnTGlFd3Rqd0pVOGZJRVFMTmdpVjU5K1RpUENIM2E0M3RreFFCTWM0S3dXWGFoYjdMOHNicWZYZmtGTEt4OC8yWkQxY2N2US96SHoxUzN2QWZQK0xYaWhCQ1NLVzEvbzRkSy9FaHh6NWJnVDhFc01YOEpqWlhBQVJMTFFCUy9DT0VrRHJ2VU5MZG91RHRoendYcWk4TUZqZHFHL1VsRGZObEZRR0JkYUhLRmdrODR5N3l0ckxEY2hlQ0h5elBQdE1UVUxQaVJTWXZuMllmV2ZVSkh0WXhUVUhRRGdjVzljeWRJNHc1VlNUQkVEeGQ5NlU5aGxyWHJtMlJNT1FlTHhFR3l3ckI2RFV2b091YTIxNS9HOEwrOTREWncrV2ZQbkVsdjFLRUVFS2FZTi9PeDkxK2hyWFhITWdOMkxRQUtDVXN1R21aZWd6N0pZU1EydTlSMGdWNjJiYWJRdVJxS0E0dE5HeWJ5TzFYVzhpb0lWeTQ5aHVEQ09qTkVlZ1pkeVpIb01PVHp3NEhGaU1jR0lZSXA0YXlabnIxTFk2cmFTSFFQSmNnTFNKbXJyVlBYRXpFUVdTTGYyVHVNODJLSjZrY2F1b1BxL1Jkenk1RndKQm5KbTk3NHlKZzRQMGQ5QXcwS1FLR3pGR1pkMCtQZVFGZGM1a08xMWZFOGc3YytsTVBsOTFZNDFlS0VFSklvMnYvaFRlZy9DR0FMUlFBNnhxdDlQd2poSkQ2NzFMU3pTTGdzdTBYUVBBNHY3SGFnZ2c0dGlxL3p1Tkl5ZjZodmdoby8xY0t4cDNKRVdoNUF5WS8yWjUvU2Y3QVJTRVJVOFR6Q0lHSmlKY1JBZ3RDZ3IwNUFZMXRMckVtSStwcGVveVorMG1MNzYvSzFZUFJyd2hZNnBrYllJWGc0RFlGWXl3OVRpbi9Yc3ByVy9hOVlJZjlIaERNZjRpNVBFcGU5OG4zOHV0RUNDR2tUUTU0QThhdlVlQnV6WmhseXljQVV2d2poSkNtM3Fla2RmU3k3ZmVINEFya1pRR3VrdHV2bENCUlI2UkFkeDU5enVOSS9mNVZFUUdUUDV1Rk9mS09wUjZ4d2M0enVLZ1lMTmFqcU9sUVpOaWVnUkZTNHA0cmoyQmVmc0hGWEhyRVB1U0VFNHNsL0tYTzZYaWx1RUtaWGErZXVNbzlQWENScndrUnNNbzlIVEkzd1cwSzVzQTF6cERuTXU5NG9lL0JNdThGdTYxQ01aYzM0cldmZW9LNDd6NUNDQ0drZVZ2ZzNITTNyZjNQajU0UDFlY0RXS2xubGkyWEFNaXdYMElJYWZTZFNscjk0RitFR2JadHZ3cUNPeFVhcTUxWCthMHFISWFLRnBpR0NBZ1lVa0ZlcUt6bm1taE9PNWNRR0Z2VlJoTFJMc201cDVIVkI4dmpMeVhhZVR3QjRRb1o5b1FMWjdhYlkvT0VIYnNLcHFqbjlhT29JTUtOUlFRTWZWYTZyaEJjTUw3Uzc2Tys4Z0xtWEFkYmpJL2xHc2o4WitYVm42WFhIeUdFa0Y3WWY5YXVlMFFTdlVHQms2cWJaYUVDNEJURVAzcitFVUpJazBTY2dwWTVkUHN2STNLSWY2N3Zjc2gzT21TZjREYmEwbkh6Mm1qRjQyakpjd1djUjBxMGpZdzUwNEwrTGlKNzFmcTc4ZWZNbkNSaTMzcGZJbk9ScCtuOUkvdTZTWHFPQkViUkVmdWM2ajQvZlBlREdzZTJLeHFyNStLcC85NjFyeEhVdmEzdy90U0ErN2Z0N1VqM3YraGVMSHUvT3R0bytXZEZBc2RYMUNaa0hncWY1NEp6K3M0YmVseXhmMTkvRUdPOEhUL3hxYU1wL2hGQ0NPbVR6WmZ1K2RoTWJqaE5nUE00RzBVbUQ4VS9RZ2hwL3QxS1drTXZQK1Fvck9xL0F6Z0NIcHZXK1hzVGxZRzliVngvN3pxRWVIM2ZNWG9DMmxWdGJRM01teVBROG5ZVFpQK3VyajdZWWNDV3loRTd6aWVPOEZ3Unk5UE9sMmZRbW11N1FuQXEzRGtuZDZBNW40S3N4bWlIUnVmZHU5cTJKMStMNGI2bDgyY090VUp3eVhrS2ZYYzAwVGJQNjAveEE4U3poOHRyUHZrQmZwRUlJWVFNaWJXZGozNmNRdjRld0dIbHpMTHBld0F5N0pjUVF0cUJIb0J0c3FvdlFDTCtsZnF1YS9IM084UmJKMmdmYTc5UzNubGFzbitXMVQ1R1QwQXgrbUY2OW1sTys0WFlaM21DcFR3Q2JTOCtTZmRwY1Y1TFRZdVE5WnhUNDFnUjBnSmNaQjhqcDcrUzQrMG81Z0RzZTBpTTdTNXZOSEhNVjU3WFdvN1htRmozUkcrZWZscDgvVU85QlVPZUg5SEFOZ0VlZkVGdEF1Ykp2dWFGNzQ0QXI4RXlYb2hpWGRSWTNvNWJmT1pZaW4rRUVFS0d5TXJlaXk1Y1FYd3FnUGVYMm5IaTdoc0hQUDhvL2hGQ1NEdnZXTklLK3M3dHQ0ZmkwN0FUL1laNkFRTHRWQWJPUGM1QUt3bzcyd3pFRTlCVnpNS2JJOUNSTjgvWlQ3UFF4L3JmTTU1MFJsVmZjejUwL2Y4Uzd6MTdqdTE4ZzJybEdmUmVFNnNDc2RsM3V6Z0lyTXJFc2U5MVk1emZkZStheEk1dGJWWUlybHpZZ3hXQzI4c0xXREIzeWZaWWZvaDVkRGFGUDBJSUlhT3dHWGJ0bXEzdG0vMHVGTDhQYjRFUTgxTlh3bE53ZElZcHczNEpJYVRkOXl4cDUyUCtqdTN2QlBEZ2ZHTzJBY09kSW1DNWM3VXBBdHFlZ0VYaGxySDFCTWJtNGNTb0ZveU5BaURtc1ZQNStLSUQyOFVLN1ZYSk91azV3NFBWVVFqRW11dEZVUkZEQ0hTRk1MdGVNNnFlY0ZPSEIyRmVXS3AyS0FLMnRyM004OUoxaGVEUWQwZUx4VUhLem92NXJNMW4vNElmbi9SUTJiTm5QNzlDaEJCQ3hzVCtuWSs1RnlCdkZPQ1crZGJiTkFWQWluK0VFTkxGdTVZMGpyN3JrTE9ndWpjM0lqYzRIMkFaWTd1S0lWOUhuRUJEWXQ2QVJVQjdlMmpiMEFxbmRrN0FqQ2RodEJFNnZNaHRaZ2lCdG5kZHlqUFFJUVNhb3FOYWxZUEYwVWQxOWQydUZHemtKN1NyR2pzckUxdkhUKzJqN211YmR3MEhLUUtHM3RjdFZ2K3Q5YndNUFMrZy9YdTBocm44dXJ6cTAzL0hMeEFoaEpEUjJoQzdkaDIyZG1QMFNrQWU1YmZlcGljQVV2d2poSkN1M3JlazJRLzNKN0FKMzkzK09RQ25GS1hrNjEwRUhKUkhuNFFiL0dNUkFaTS9Pd3VGK0FwcndKRTZiMTFrOHdtQmFpZjVzNHA3cElxSVNGbzRUQlVIc2MvaEdKTmRSQ1ExbCtZNUhNVkR6SEVuUXFCS3VzS3htbUhTY0JRdjhWekhzWG42VlNrT01rWVJzTkk3SmZDZHRYaFdvditHclB5VW5IZlZWL2dGSW9RUU1ucGJBcERWc3gvenE2THlGd0EyWlpjLzB4SUFLZjRSUWtpWDcxelM3RWY3WGR0K0F5b3Z6aldJODR6cVJnenlFZ2I2MG9xQUtCRmVIVENlb3JheGRTbnlCQ1JuSldIWkNBMVdTd1hKaE84QytVSWdISjU1c0x3Sk5Uc3ViNjVDVFF0MTR2RTZWRWNsWTFjWWNTcHNXZlB2UTFmNE5RTG11TFB0b2M5RGd4V0NKNUVYc0dDOHliMHlqOTRpci96TW8vamxJWVFRTWpWV0gvYlkreUhDaFFDT1QzL21weU1BVXZ3amhKQ3UzN3VrTWZTZGh4NEp4RjhHY0ZTaDBSeXl2YXhnRlNKU0JBa0lvQWdZT2c5bFJDRm5qc0NjK2JWekJHck9HTDE1L0ZMdWRkbGlIN0hWRjFmZXY4VThxZVA4QlVLZ09zUkhPSVJBMTdFWDNvRmFjQzg2Q3JHRVhJL0d0b2ZjSDEwTGZEMkxnQ0Z6VWVWOXNDRVkzd2lOenBIelAvTldmbmtJSVlSTTFyYlkrYmlqMTZDdkEvQ1FqVy9oTkFSQWluK0VFTkxIdTVjMDk1Ris1L2FYQVhpR2UyUFJ6cUcvVVFUTVAvL0FSY0RrN3lraHNFQVF5UWlCT2ZOakZndUJWU0hZOUFRMFEyL3RmUk1STHlNYUFsbFBRa2R4a056cldpUUU1dHdMWnRYanZPczRXRTgvYWZCWjYxb0VESDJIdENFQ3d0Q3NJMkF1WDFnUCtmMHV2enFFRUVJbWIxOEFzcmJ6c2I4TjRFOEF6S1lnQUZMOEk0U1F2dDYvcEptUDg3c08rVW1vZmc3QVN0NFh2UFEyaW9BVnh0cW1DT2pwVzFWUnlKZjd6T245aDNRQkQvczRwczZuWnNHTnlQTFNzL1ozQ1lGcTV2Y3poTUJrZjVjUTZQUVFMSm9QandkZ2J0RVBqeEJZS05TVktBNVNWZ1FNT24vSTlqTFBXdGNGUk1xOFEycm1CWFMvRDJPc3p2NVlYdm1aUCtBWGh4QkN5TEt4K3ZCSG40RjRkaUVFUjQvWnpLUDRSd2doL1JGeENocEM5VVdRSFBHdjZEc3NKWDRYRFdqaityc0d0RUhEYmJUaWNUVHNYTTVqYS9seGlKWWJrNFFldjJEOEFpdmZuZlZrcXF1ZDBWOUJxaER2UXRDTERNODZpZFBuTXhVLzMzMnlPSzZWWE0vY1h4enpKNDY1Vk1jY2lYbFBaa29RcjI5UEtackdHSXhDSWVxWmIzdk9ncTV4M3I3V1hFakFNK2JkcmdIM2pEYjBqR2pnODZETnZVT0s1c0UzVnZFYzk0QmcvUU9zeVQwby9oRkNDRmxXTnIzdG9zdFhJajBOa0krUGRRd1Uvd2docE8vM01LbU52dk9RKzBIMC9YQm9FTzRkS213YmhDZGdoYkE5KzFhakoyQisrM2k5cmFXSFpUejFmTmN5dHFiY3JMNHJDc1NtV3VnSTI4MWNNM1Y0R3hxaHUyYkJqNktRWHJNZkxnL0VoZmNoMGw1K2FoY2xFZitjRk4zalFmZC9GeFdFUSsrSlpTa080dWhmY24zWDVEMDQvbk1QbGQxWTQ5ZUdFRUxJMHRzZE8zY2V2SXBEemhmUmM4Wms1bEg4STRTUUlieUxTYjJQc0VMdzd1MVhBcmgzb1VFY3VyMUpFYkJ4TVk4aVlPc2lvRm5zd3luNkZmUTNkanpoWm9YZlJjVmZoeENZaUM2TEVPUmtmRmJld0ZSb01LeXdZYk40aDFXbDEyeTNFQ1FkNHplTGlhUUdvOWt4cDQ0YmNKOEhWOGRtaGVCbTNpTWxuaWZUb3pPT1lzUjR2cHozdVJmeVMwTUlJWVNrMlgvMk9lY0s5R1VBTmczZHpCUEZxMmQzUGZrcEZQOElJYVRuOXpHbm9CNzZydTJQQWZCRzk4YThIWXNPSFBoN0x4NTlGQUU3RVFGOVl3YlNPUUlYb3B4UENEVHlBVHF2dTZOQ3NOUHowSkhuTCtXUmx6UzIyem1FUUlqbmQ3Ty90dUNJOUlETk9VcFZNbGJMZ3pKSElCMTdjWkF1S3dUWGZ2L2tWTWZPbkNlNkh2dHhwcnp5YysvblY0WVFRZ2h4czNyMk9mY0hkQStBWTRkcTVsSDhJNFNRNFVBQnNBWjZFVGJqc08yZkIzQ1N2MUhlQVlwT0VQajcwRVRBRURHdjZuNFVBZE80S2dRbisyYkVNenVVTmpLS2dpVG5Ncnp6VkJ5aHM0N1FZYlhPTFhaSXNOV25wTi93SE5NVUlzMStaTHdoelVJbjRxazRERXZBaEVkUURIeTIyaFlCcXh5ajBuUFNjWEdRdkhHb2RTbm04bFdzSG5KM2VlV0h2OCt2RENHRUVGSmdMano4c1RkZjArak5nTjU5YUdZZXhUOUNDQmtXTEFKU2g4TzMvVElrUi93cit2WVdmWmREQzRQVUt2QVJtcXpmL3J0V09KZTFiOVhDSUpVS2t3UVc3cENjZmRvb0RDSjU1MC82b05tS3dQWVRyRWFmWGRmSHZOYUpaMTFTSE1RVTdwTDJpVWdXMlFWQkhIMFZjNzRNd1UvaTlIMW1ldVZGT2ZNam1zMkJLSnB0YUFxTm1ldTdua05RVEtITFYrU2pxRENIaGo5N1ZZckIxRDFHeUwzb2JOTmdjWkJTaFlsOGJRV0laNitWZi9pM0V5bitFVUlJSVdISTI5NzRqUlg5OFE0QWV3YlZMK2lyS1A0UlFzakF2aG1jZ21ybyt3NC9IS3RyL3dIZ0tKZE5DOHZXemo5WXhlM0w3QWxZYWIvMWZadndQR3pLdXk5MDdud2ViTjVpSVVaWXJramFVOUF1RElMMTltcTUyS25od1pmeXhGdi9QYllLZXFUNmFZWHdBbTZQeWxUNHNycm5UeTB2d1lXb1orVUVYRlJIRnMvOW91N3JHWHh2amJBNFNLUFBSSlBGUWF4N2VCN05zWVp6NWZ4L2V4Vy9Mb1FRUWtnRjJ3U1F0YlBQK1FOQWZ4K3Bpbkk5R0pqMC9DT0VrRUZDRDhDcXJLNCtENG40NTlBRzRMRFZHOSsreko2QWxmWkxsa2NWemxmRnV5L29XcFZ0di81bjAvUFBESzNOOU1Nb0ptSnFiQkdNdklDeTRiMW5Ia1EwNitrblJwOGp4M250Zm1hODduekttL3F2cituZFo0N1BGQzlONzBOMXpVVVNVaXpJZUpKSzRQVVRSWDF2UUczb0hncHNFK1F4Ry9wTWFHQWJuNmVsYTA0QnpPWDdXSnZkanVJZklZUVFVaDBCZE5NbEYrd1cxU2NEMk5kZlArajVSd2doQS81V2tMTG91dzgrRG9qK0hjREJjTmpTL2gyTERseHhleFA1N2hhLzBSTXc5M3hhWmw0Nzhod3N2Rzg4bFhCekt3UmpvN0p1eXF2UWtRTXcrYnRLemp3WTFZSXp1UUZOejc4Y1QwRG5mTm1GU3h3ZWdHTHRGK0tWbHBkN2NYUVZna1B2ZDJraG42YkxvOU80djlid2FkemttSHZMN2l0dTVKZUZFRUlJYVliVnN4NTNiMFJ5TVp6RlFWbzBMT241UndnaGc0WWVnRlhRYURkYzRwOWwxNWZhRnJJOWRML1F2RjNPTm1QekJOUm1QUUVieS9OWHRuMEZUOERrNzFIUmZaZmprWlhLeDZjYlJVRUVHeUd6a2FUSG8ycThPVHplZXJaWG5SakhNVVhGaFdlZTFkZmtQT1p4RlBsNTdFUU5qMGM3bEJtR1FBai90VS9sNU5PYzU2MEpUMEN0ZmsrVWFoTjZ2emVjRjlCK0w2UzJpV0l1ZnlWLy8vbTdVUHdqaEJCQ21tWFRwUmQrZUUxbjl3THdoYTdPU2ZHUEVFS0dEejBBUzZLWEgzSXlWRDhQeFVwK3c0cmJxdTViTng5WDVyY3hlUUt1NzF0cFA0eXpRbkRlZFhKNStmbjZiT2JoRS9zM3F5OGlRR3hYMW9XUkt6QkNLdmVmZVE1ekorZHhQZU5MemltU25TZlY3REV6WXpXM0pXMWhGUWVCVWYzWTZyZm12Q2JiOXZScjlCZzU5MkxJL1YzMUhXTjcvZ21BT05xSEdJK1FsMy8rbmZ5aUVFSUlJUzNhTGJ0MkhiYTJmOU5GVUR5b1hZTlNYelU3N1pTblV2d2poSkJoUXcvQTBsOVMvU01BSzdXazB6cWVnRkxpOTFLVk9lM2ZXdklFckozWHpQZGJGWTgrenp5RjlFSEs1RnBzb1VKdzNuVXlQZGxTQlVNY2ZZNXk1dGIyNWx0NDVFbGF2RXM4NzhUanNlZjBGalJ5RktwbTk3WG56dlJJRk1lY212a0ZrMklnWW9oNlptNDZzU2NtR1FlTWdpU2VPUzd6bkZUSitWZnJHTnBjSlcxcE1DK2dPYlpZdm9kWWJrUHhqeEJDQ0drZjJiUG5tcFZydnZVd1VieWl0WE1vWGszeGp4QkNSdkpkNEJTRW8rL2NkaWZNNUpNcDJhU1BuSDk1MjhiZ0NaaTduN0Z2NmYzVzk2MjBIL3J4QlBUdVU3RkNzR3Q3N0hqaWZmMWVlR21aaC9SVnpSVkRsRXU4QXlXN2orMWRDR3QvTzNlZzdlMW43cC9waStXK21QcTduUi9RZFg5cVRvVmZ3MlBRZDMrVWVrNEdWaUc0NnZOVU5ENlgxeDhBckVWZnd1cld1OHA1VjEzUHJ3a2hoQkRTTGFzN3oza3VCSC9XcFAzSHNGOUNDQmtYRkFCTG9PL1ovaTdBNFVMZmRiaHYwWGFLZ1AyS2dDRnowa1Z4RUJ0YkNNeTdKNXhoeEE0aGNDSFlHUldGNFJFQzdlUDZRb0poRndKeEZQYXc1OFVwQkpyOWRod3YyVytSLzlBaFJKcDVBelhrV1ZyUzRpQ3UwR3hUdEYzRk8rVGxYM2dvdnlLRUVFSklmNnlkL2ZnbksvUjhBSnRxRzVFVS93Z2haSFF3QkRnUWZkZjIrd09lL0JsdEZmNm91dThZd29Gejl6UDJMYjNmK3I2aCsxVXRjQ0RXUHEwVSt5alpQcS9ZUi9LMG0rRzV5TGtuN0VJZTZwalhSWGl2NFhHWG1ndk56cWw1ekV3Qmo2U0JXdWNVejdXeENtbjRRcVpUeFVSMEk5dzNPWVlhbm9OaWh5bWJZelBtV1FydVcrODFhemhrMkh0ZmRsd2N4SG5OMTJPeDQ5a2ZVL3dqaEJCQyttZmxramY4RTZBUEEvRGpPc2VoK0VjSUllT0VBbUFvTTd5dytsZXl4dlloaUlDbVlSKzYzMWhFUU9leHRNSitaVVhBaGtSRFo5OEQ4akNtQkxDY1kyYUVRTTBSSHhPeFRvdzVkT1Q5Uzk0OHlYRWlzNy94aGhDWXlla25qam1SYkU1QTF4aVN2cHU3WjZyK3dpaG80bkp2TTRWQWRRdS9SZmQ4R3hXQ3k5NDNJZmN1QXU0dDMzc251WDRxYzhUeWVQbmJ6LzAvZmtBSUlZU1FZYkRwa2d2Zm80aC9Hc0QvVmpKcktQNFJRc2hvWVFod0FQcWVneDhPaVM2MmJmczh1Ny94N1F3SEx0bFBZOTlLKzNuMnJYSytwaXNFRng0VDVmSUltcUd0Z3ZCenBQcHVoZ0VqSFQ2YjZvdVI5OCt1dUp2a0hremFpQmllZVFCaU96VFlPSzhyUkhqaDVTalppc2ZtTVZJVmpjMitHdjEwVmtZMis1VXpSeUhYdE5VS3dhSFBRZGx3Y3lOczJzN1JxSEl0VnVWKzh2TFBmNXBmRUVJSUlXUjQzUGlJeDV3NGkyZnZBSENiWU1PUjRoOGhoSXdhZWdBV29BcUJ5Qi9tZXROWTluTXIyeGtPWE5HanI0WW5ZS1hLd3RwTWhXQm5PR3VJWjFqT3RmS0Z5SnFocmFtcXdVVmoxM3lQdkVXNHJWaFZlTEZSMVZjZGZZblVlRFBGR3h2RUR1VzF4cGpNdlpwL2wzUmZVNVdOWFhOdlZpc1I5ejJScW9ac2hUMEwvQ0hCZWMrRmQ2NURLZ1JyK0gzV1ZCVnVNOVJYckREcFdMK0pHdzY2RmNVL1FnZ2haTGhzdmZpZnY3SXltNTBPNEZNaDdTbitFVUxJK0tFQVdNVGwyM2NCdUZPdWdWeG9MRGUwZlJsRndOTGhqSzdmR2hZQmM4Y1lPTC8yMkFRdDVnWFVzSDRuNGx0eUNsdWNLNXBiMHl2T0pRUkNEb1Q0Sm0yU01HQlYveHhHbmpHbkJEZlRoVThPakdFUlNtek50enJ1UmRQOVQ5UTZwcnJueVF6akZuRzNTVjNmdkxEeUVKR3ZpWHNpdEkybnY5NzcxOGlmdUlaUDRjZ3YzVXJPdStxNy9IZ1FRZ2dodzBiZStycnZyR3haZlFDQUQrYTJvL2hIQ0NIVGVPOXpDdnpvYmtRNGZkdW5BZHd4TTIxRERQY3QyajdXY0dEWHZsWERnWFA3VlhLdVFvN1ZSNFZnN3o0bFFvaUJkR2lySUR3azJDd0NyRVpvTUhCQUxJdXg3cWtYSVJVaWJGYVBqWkVUbW1zY1c2MlFZRHNVMWU1ZnJFWjRzdSs0NWhpc2MyVE9ZNTFMUFpPbG5uT0ZQaGQxS3dSWHVXL1UwZFkxN3VSNnpXZXZrSmQrL3FuOGNoQkNDQ0VqczNsMm5udndtbHo3SmdCblpsWlBGUDhJSVdReTBBTXdqOU8zUFE0WjhTOXJxemUrdmExakQ4RVRzQ2hzc2ZDM21wNkFsY0o2UFhPVk8wWmpueTZLZzFRSkNTNmFnOGoyN2l2YVI3T1ZnOFh5a2xNelpOVHl0ak5EZzEzVmhqTkZLS3dDSXk3dlRWTzVVdlY0RU9aNFNhb1ZSbXlkMm5rL214V043WkRxRUU5QTVEMXZUUlVIQ2ZEeVcxeFR1K0NKcEwwdVl5am0rRldLZjRRUVFzZzRrYjNuWGIreVpmVVJxdmhuYStsTDhZOFFRcWIwdnVjVWVNemVpekREVWRzK0QrQVV0MTB1aFRaNzdlMVQ5UVJNL2RhWFIxK040aUFoWG4ydXZ0WXREcEs3VDlrQ0RxSDlnRlg0QXVXOEFaTnRpNGhhWTJlekw2a2lIOG4rVmhHT1ZIK00rR1JGMm50UXphSWdodkJveHdHcnVJKzdLRHdpYVU5RU1jNGxudkdaWXhkNy90VC9EbW1xZUVpbGUwSUMzaG1lZXliR0hQSHNjZkkzWDlqRHJ3WWhoQkF5Y3ZzSGtMV3p6M2tKZ0YraitFY0lJZE9EQXFEdkEzajV0aWREOEpwOHc1Z2k0TVp2U3lZQ1Zxb1FIRERIbGF1eVZwbUxraUhCS2lYdktYR24ybHNjUzkxOWlXV2ptSWU0UW5DTktzRUxnVTQyUEE1dHo3dlUzQmlWYSswS3dyWkk2Uk1DN1FyRGl6K0tKZkpaODVVUzJqeVZWa3FKeGhKMkQxV3BNaDF5WDhYUkd0YWlCOGxMUC84K2ZqRUlJWVNRaWRoQWdNelBQdWZuWnFlZC9HYUtmNFFRTWkwb0FMbytmSi9BSmx4ejhCY0JPVEZYRU1rempsRmdkSmZaVGhHdzRMZXl1ZkNzZlpzVUFVUE9XV3FPSzRxQXdmdVV6ZU1ZNEMwV0l4MHVxcFlMbjlQcnp0Ri9Xd2lNaldJaWlVQ1hDR2thYllTMHFrYzBUT1ViaENOUG9TUEhvQzBFSmdLaHFIOHUxUEprVExhbkJFYXp2U0pYQ0N5Yzh3S1JMKzg2Qzd6MVVCWlZqczJORy9NWFk1ODhVRjcycFN2NHhTQ0VFRUlJSVlTUTRjTWNnQzZ1T2ZqblUrSWZrQ09WQmxRR3JydDlxamtCVTcrVnlHZVgrYTFFWHNDcVZYNjkrMnI1YzRybVZJeDF6VXRnWHNEZ2lyRTUxNnhNZFdNNzM1LzlWbGxVQlk0M2N1S1orOWs1QWxONTdtU2pJakdzSElHcHFyMUprempiTmpYZnlUMnlMdDVGam55QWtXZXNxZjdDeUdIb3VmZkU5dTdUN1A2aW5rbDJpSGxtRGo3N2Y4QzZnT2dSV0dHZFU5UjkzUkpoYjFHdFdZeXhhTnBqVVdVVk4yeTZBOFUvUWdnaGhCQkNDQmtQOUFDMDBJdXdHVWR0K3pLQVc3b2JGRXpsRUQzOWlyWVAwUlBRMWE1SlQwRFh2cFU5QVRIdXZJQWgxeTFrekxIanJaS3BxSnMwMFBSK3BqZWVHcUhCWWxVS05rTjJmZjFVUTJpMFEzYWQ5N1g0ajUrWnorUVlkZ1ZpODgrV0NLa09UMFRuK2EwK20rZk9DeTJ1ZEIwbGUwOEozUGtJMVJBRDEzQURWdU5ieXQvK3gvL3hhMEVJSVlRUVFnZ2g0NEVlZ0RaSEhmeGtpRWY4czhVTmwyVTlSRSsvb3UxdGV3S1c4dWdyV2FtMnFpZWdhMTlCdXhXQ25lY3NtT2ZRUHViTlpmQ1l5czY5WnQ4bTYzcGR1dkp0MGgyMXZOOGsvUlpLUkxvSWhrZGd2QkdPbXVxZlpqM2hrbU9Kdzd2UEhvZUlZeXlPNCtlTlBYSzBoZUZkbUNwNm9vNDVzNzBlYmRWUnJTcktWa2NXbnBQR3RzVzhKVzBjMnlIcC9vcGFmYkFFeXVTYXplVWFISHJjc1JUL0NDR0VFRUlJSVdSODBBUFFOTGtQVlA3OUlnUzNnYVdIWkJzWFRPbFVQUUZkN1VJOGtVcnRaKzFiT3M5ZUhVL0E5ZjBIblJmUWM1NDI4Z0lHWHpmSFBvNUkyTVYvelNxNnNQSUFtdnZabFlGaDVmSXp2ZnBTZWZhUUxnNlM2cVBEVzIvaGlXZUc5N3B5Q1NKYmhkaTF2NWgvaDFVSldMSlZneGZITmtLVmZkZW1iS1hld3Z2SHZqODBQWDhBTUpkdjRxK3UvZ2tCNXZ4U0VFSUlJWVFRUXNqNG9BZWd5VkhiemxtSWYwVXNxeWVncTEySUoyQ3AvYXg5UTNQN1NjQTFDTTd0MS9LK3RmSUNlczVqNzVQS21hZUIvWURERzY3Z1BLNzdSSkQyN0xOMHRYUnVRMDNyYVVrYk0wZGdSdGtUYXovMVgvdWtlWlI0MUJtZWQ2TFpPWFhPbWFibkp6TCtiTzZ6NkpxbXhUeHp2R0xOaCtsNWwzZy8rcW9ucHp6MlhPOGVqeWRmMFAxaHpHOVNBRVFBck9GejhsZFgzNXppSHlHRUVFSUlJWVNNRndxQWllbThHeEVFejgwVlIxQWdudGdXTzBWQUJJbUFSU0dzdWNjdjJMZFNVWkgxL2Jzb0RoSWk2bm4vM25GSWNKQ0k2UWdMdGowQXhYRU9zMDNrT0ljcDhFbHNDSG1HbWlhTzlwSG5QbEpORjdxSXJIa3lRNFhGRXY4VzNuc09ZVldzNjVpSWdhblFZeldxR3hzZEUwbmZQK0tZTDdGQ2ZWTmpsblRJcngwT2JGOWJVNlMwNzk5a2ZLdnlQbm54bDAvbEY0SVFRZ2doaEJCQ3hnMEZ3SVQ3Ylg4VWdOdTdqZVVjS0FJVzdHZk1SV0U3MTkvcmlvQmxSUy9yR2xZV0FkRnVYc0FRVVM5dlBrT0Z3eEJ2d0tKeFo2cldPdHFMWXh3UnN0Ry9pN0JVM2FqbUMrUHZadlhnUkh5TDdITlkrZnZNZm1hRXdQWEtKcjRjaE9ZeFVwV0dIYi9iWTNkNVJOb2JYWldQWFY1K3RpZWZ1UDRNSTNUYXpBbm9FVExqNkpYeTRxdC9taDhIUWdnaGhCQkNDQmsvRkFBUGFBU0NtVDdQMjRBaTRQcHZQWWlBUlNHc1FiOXBoWE1hKzdaUkhDVEVteTU0SHpPY05tZWYwSkRnTmdxRUNOeEZPOVRheHc2UFRVUTVVd2lNVERITEtMcGhKdFpMUFBjeXg3TUtjbVRDaSsxK0pzZUpqVzJtOTZCMW4yVEdiaFVya2RnNnZpdFUxeEEwN1lJcHFmNFprNW1iLzlFby9KSHhTRVRhOHpBNS81cThYUDd5NnFmdzYwQUlJWVFRUWdnaDA0QUNJQUM4NytDZFVKeldqaEEzUlJHd2FsaHZnVGRaNFc4ZGlZRE9mYldpZ0loc2ZyKzhmWXYyYXlza09HaWZCa0tDN2NxNkdhOUFxNHF1cXhKdkVpWnNDb0ZpaE0ycUlKT3pMM05PUy9CTGN1L1p1ZnBNNVRGVEdWZzl3cWRhdVFFQlo4NCtkY3luR1VMczlSWmNiNmlXbDUvWUlxYmtQTmN1a1hLOWZTd3ZsYis2K2huOE1CQkNDQ0dFRUVMSWRLQUFDQUFpditjVk1mSUVqdUR0VXhNQmJRRUJIWWYxb21KdXY3NkxnN1NZRjdCS1NIQ2ZCVUpjUW1EcTBKb3VJdUx5SUZUUDhTT0hhR2ZuRzB3VjhUQXFFRHVGUUZOY05JVTJzZG9nTGFTSlp2dHRGd3NSejczaWVqdW5DcU5vdmpjbHNPSHBaMTRuTzB4WnJmRGtOZnkxL1BuVnY4YVBBaUdFRUVJSUlZUk1pNlVYQVBXOTJ4NE00TzdCT3l5ckNGamtFZWJiUDFkNEtyRmY2cmV5QWxUZ2RXaGRCRVN6ZVFIcmhnUzc1clRMQWlGMmVISWl5aTJFUUUzbjYzTVZFUkhQT1JaaXBha3V3bDE0eFBTZ1M1MURqRUlnOXJWWFJ6Z3YwaDZBc0s1SHFyaUhlbkw3WmJ2c3I5YnJ1VmEyRjZMcmZ0SVltV0luYy8wcitjdC8vdzErRmdraGhCQkNDQ0ZrZXRBRFVQQjhweUdkdjAvRjdTTVdBVjNicW9xQXJuMmJGQUY5ZlhVSlpIMFZCNmx5M3FHRkJEZnREWmo4M1NrRXdpT0t3ZU0xYVJVSHNTc0dwOFpyaW5LR2NKYXFJT3pJKzJmbTZqUFBhVllQdHIwQVU5V0tOWjJyY1BGTTJEa0FQZmRybmlkZ0t0K2ZHcDZMU09jT1RIYllyN3ZsTC83ak9md2tFa0lJSVlRUVFzZzBrV1Vldkw1MyswOUI5QXAvZzZJRFZOMHU5WS9mV3Q4cW5Gc2R0NUlHSGpOazM5eGpTY1Z6Qmx5TFZ2ZGQzNy9xZWF2TVVSUDdWTDMrenVNRTNET3hQZDJ5SVF5S2ZYN2QrRDIyeHJFUUZNMmQ1RUE3VVNOdm9HVEhvMlovTlQzL2lnT0NXaEpLcTJMODNaeER6VjQzZFIwSEtRMXdrZFBRM2k4Ujk1eHpuek92empuZTlIejVzeS85S1QrSGhCQkNDQ0dFRURKZGx0c0RNTkxmNjhmYmJvS2VnTktRSjZEMytMNWoxZkVpTExnV1RSWUhjZjZtNHdnSjdzc2JNSGxEbVNIQXF0azhnTW41YmVFc2dpUEhuK0dwcDBuQkVkdXpUejNGYnF4S3YyYklyZW1OcUxFaDBLMmZ3eFFpNGNrUmFJYzhMendlWGFITmFvVW4yL05xaFIzN3ZFSFg5SGNvL2hGQ0NDR0VFRUxJOUZsYUQwQjk3MEgzUkJSOUJKYmU0VzVjZExDcTI2WGw0emR3N0x3MlZiMjZxbm9DRnY0MlJtOCt6N3o1Mm9hY1Z5dU1jd3plZ0xZbUo3WUgzZnFmWXppcUN5ZC9qelorVFBxcW12YTBFK05nc1RYUFl1NW5IOXYyRG5TcG9BckVZbmdkbXNkeWVDQ3FZeHkrZXlXMjVuN2hEU25wQWlMSnNWYmx0K1JGWC9sTGZnWUpJWVFRUWdnaFpQb3Nyd2RnRlAxZWNOc2hld0lXYlplYTIvT09IMUxrb2xTMTNqcGVoTlo4RHFrNFNLZzNYT2xjaHA3emh1WS9ESjZmRW5QVHBqZWdtUjhRU0hzRGl1ZXRsc21iRnhzNUFjMTVYMWZJSWl1MjJQYk9NNDhwbXZaK05UMEpCUnZlaHVaK2tJMXppRjBBUkt4am12dnFSblhqU0xOZWZ0Q3NkMkJrOUFPYTlqNk04WnNVL3dnaGhCQkNDQ0ZrZVZoS0QwQjkzN1k3US9ESnpQaDd5NnNuUForLzV2WlFqN2JPY3Z1Tk9TOWc0Tnc1NTdQc25Fc0pyNzZDZVcwMHYyT0pjU3lLZ3BRWWk2bnhJVEp5NlpuOVZTUDNuaHI1K1JTWmZ6ZHg1Z2hVT0hQelpid0lOWnZuVDllRndGamMxMHJWNkRzMlJFS2ZaNkw1VzZ5SzFVMVBreGQ5K1h4Ky9nZ2hoQkJDQ0NGa2VWaE9EOEJJZnc4dThiTzN2SHJhOC9scmJnL3hCSFMxYXkyMzM1anpBdWJNWFo5VmdzVVlXNWxyMllRM1lONStwamRnb1dlamJIakdMYm9WYitUU1c4eUp3ME13RWRyTTZyNTIzOHljZnBHNHIydHFQMDNmczR0OTQrUTk1YWxRTEFlT24zZ0YyaDZlb3RsekpVcm0ydXhjaW4rRUVFSUlJWVFRc253c25RZWcvdXYyMndMNmI5QWM4Wk9lZ05XMnQ1TGJiNnllZ092N2E1MzVxNUZYc0hRdXhoRjdBeWEvYWNGckxiVjkvUyt4dVl1c2UrS3A0eDdROUR5SmVVN0hmYUpHbmovYml6QWhodkdiMFNkSTluek9Lc0RJeVExb1gwOVJyT0k1OGlkZmZURS9lNFFRUWdnaGhCQ3lmQ3lmQjZEaU53RkV3Nnl3TzBWUFFHTmNoZTBLOWkyZDIwOVIzNXNQOWZNQ2h2VFp1NzlXTzNmcFhJd0Q5Z1lNclRCdDk2M3ducEtOS3NNTGtjN3dDQlJEWlpQMWc2dlZuOGpJMVdmMndjenZGM251cTBXVlltT2NxZHlDZ2xSbDRNaTh0dXYvTXowQUkzVWNiLzN2KytVdktmNFJRZ2doaEJCQ3lQS3lWQjZBZXVYMlk3R20vd1ZncTIyTHUzY29PbUJiMjBmdUNlamExcVFuWU9sOXJmMVpKYmg0ckdQM0JqVC9hM3ZlcGZMd0FSbVBRREhPbGNyOWh3MVB3ZGc0UWVLUkY2L25CeFM0cS9jbWJSZlZlRTN2UWtIR0N6RHBqOWxGTmZzRWYxVmlNNS9nZmpsZi91US96K1huamhCQ0NDR0VFRUtXbCtYeUFGekZNMkdLZnc0ZEluaGJxOXRIN2dubzJwYnlpc3JadiswS3daWDJMYmdtZGFzRXUzNXJ0RXJ3eEwwQjgvSURDcXlRWHMrMVNUWkUxcnlwa1hjUGhoZ29obWduNXB6WjFYdXRQaWJlZk9ZMWRlVVZUUG8wYyt3ckhvOUQ4eDVKZmwvRGF5bitFVUlJSVlRUVFnaFpHZzlBL1JBT3d1cTJyd000MnQwZ2IrZWlnN2UxZllLZWdNQVNWd2h1WW45VXJ4TGN0emVnZDc4SzNwMVY1c0QwbEpPaWE2UWIzbmZKYjRMMTN5UXRMSnA5VWFzaUw0eGNnSGIxMzlSWU5IdC9MRHo4SE1kUDNVZldQWlg4dG05MnNmelJWeC9Kenh3aGhCQkNDQ0dFa09YeEFGemIvdlB3aVg4T0RTSjRXNnZiSitnSkNOU3JFT3pLQ3hoMFRtdE9LKzFiY0UyQzh2MTFYQ1Y0U042QTN2MGMzb0JCRlkrMTNCeUl0WjlhYmV4N1pGRnRGeHZlZ0pIeFp6RUVQakZ5QlNiN1JUaVFVOUM4M3JiM0hsem50cndKemZsTWpnM0QwekNLRDV3bnlRRVlLYkNHOTFMOEk0UVFRZ2doaEJDU0p5OU1EbFVJUHJqdEMxRDhaT1BlYkoxc0g0a25ZRjZiUmozWnNIeDVBZXZ1UDJWdndLcjNraHJYejk0OXRuOWI5OXB6VnFZMnZmdlU0N21IQStKY25CUVhnWkZiVU56em9JWndtRHF2STJlaHVlLys2R1B5QjErL0p6OXZoQkJDQ0NHRUVFSWNGdnAwMGZjZi9IQkFMczRWQm9xRWd5YjJyYlY5SUNKZ25XTzBJdVJOUUFTc3RUKzZMeEFTZEd5MFd5VEVlYXlLZ3JKS0pnSjMwYzdXNTJJajU1ODVmNmJvbHlvQ29nSHpiWVVsSjMrT2ZjK1JiUFRWTGpheVAvcVMvUDdYYjh0UEd5R0VFRUlJSVlRUWsrVUlBUlo1ZHZydlJlMHJibXQxKzBEQ2dlc2NvNVVDSHdNdkR0SlZTSERiQlVLa29MKzVZYnRsaTMyZ3VFaUk4MWhWeG9PTnNGbXowbTdTTHJJdVZXUVdBREhtUG9MaEFXZ1dBVW5DaEdWanZzMnhpUmpuc2ZhTjRDK0c0cnJ2MTJiL2hmanJkK1JualJCQ0NDR0VFRUpJaUp3d0tmU0RCOThOc1h6Y3ZiRm81NHJiV3QzZWtTZGcyK2NJOFdUcjFKdXZ3cjZaMy9zT0NVYjNCVUpjN1liZ0RWaG5MdFNhQzdIYTJkNTZpZGVmZVR4VFJGeDQ5RW42NzY2Q0ljNythTnJieit4VVVwUmtiZmEvV0pXZmtOMWZ1NUdmTlVJSUlZUVFRZ2doTnRQM0FGVDVMZSsyWmZjRUhIcHhrQ0FQT3ZpTGc1VGVWOHZ0bXhsSGllSVh6dCsweHJrOWN4ZzhuZzY4QVl1S2hKVHhCZ3phVjhPdlE4WWowSGc3bXFIQXVSNTVadkVRWkVOMG8zVVBQMXNoRkVrZkoxci9INHpDSWtrN3NUb2dBT2J5SS94b2RnckZQMElJSVlRUVFnZ2hQaWJ0QWFoWGJyMGw0dGwvUUxHUzM3RG9RQzN0VzJ0N29DZGdyMzJzT0g5VExnNFNmTXdSRmdoeHRXdHlubXRkbjVxZWtlcDQvRno5UytVTWpJdzI2ajZIblhzd3lmc25VVHFQb0gyKzVPL3hiQit1bDl2SjdxOS9sWjh6UWdnaGhCQkNDQ0UrcHUwQk9KLzlPb0NWemozWk90bWU0NjAybUQ2aXVJOWVMN1lSNWdWMGVjYlY5UVlNblV2bi9pUDJCZ1FhOXZTc21COHdtUXM3SDU5bWI1VkZMcjlGbXhpUTJNalJLT3Zod3BJK2xsaHY1R2g5WDhTZSsyajlPQnJGbU10WkZQOElJWVFRUWdnaGhCUXhXUTlBL2NpUmgySnQzOWVoT015MDVmTjNhbkY3cXpuNUJsSWh1TTRZaHU3TlYzZi9QcXNFRDhVYjBQVmI3ZXZVY1g1QWV6NXNJVkE4KzdzcTl5YS9MMzdUN0xIVU02Y0s0SWFWYytYL2ZmMThmc1lJSVlRUVFnZ2hoQlF4WFEvQS9mdWVuaEwvWE1hNXc3WnZiYnZVM0o1Ny9JRlVDSzR6aHR6OGJ5SHRmTC9WeVF2bzJEOWtQRjFXQ1E3S0Z6Z1FiMENnMlJ5TTluNmxybEhOK1JCcis4SnpEOWtpSU1uNXhMb1gxSndyNjVpMnQ2QTlwemVzdklqaUh5R0VFRUlJSVlTUVVDYnBBYWlmd0NiY3NPMHJBRzd1YmxCMGdMRnVINGduWU4xalRDVXZZT2IzQ1hvRHV0bzFNbWJwOEJwTHhlc1pNQ2RGejZyZHhsVnAyRDd1RFp2ZUpNLy8raTUrdmdnaGhCQkNDQ0dFaERKTkQ4QjkyeDREbi9nSGpDTm5YcVh0SFhvQzlsMGgyTnZPOTFzVGVRRkxldk5sMmxhb0VsekdHekNvVHcxN0F3TGgzb0JTZHI1UjBtdXpSclhnRUM5SG9IemxadnQvaXlsWnJ3aXN5T1lEdEhNSm11eWZmWlRpSHlHRUVFSUlJWVNRc2t3MUJQZzNwaXZ5RlczdlNBUnM2aHlkRndjSkNCY05DUW11WE9DanJvaTRmb3hhK3lNZGNscDJQcVZFc1kvVXVHc1dDUm1LRUpnbnpCYTFOY09Ga3pFbVFxQjF1SXc0dURiN0JtNzg1dW44YkJGQ0NDR0VFRUlJS2N2a1FvRDF5b1B1RFkwK2xES21jM2VZNnZhR3dvRzdHRU5lbTlCd3o5eTJBZnVQSVNUWStidlUzQi91RU5qZ2ZyVmNKTVExNTAxZjV6THpVaWRVdXV6Y21MK3Z5WSt3c3ZtVzhodGYreUUvVzRRUVFnZ2hoQkJDeWpJOUQwQ05uZ0dIUGUyRm5vRFRLQTdpTzBhckljRkZmU3c2NWdTOEFkc3VFdUthODZhOUFYUG5wYUpIb0dnTkQxTk5ld3JHMFNwV045K1Q0aDhoaEJCQ0NDR0VrS3BNeWdOUTMzZkkwZGdVZndQQTF1ekdvcDJudWozUUU3Q0xQdFk5Uml2RlFhekhvSkkzbmRRNGR4UDdGMXpuS1hzRGx0NjN3VUloZGVZbGRIK1ZHTmR0ZW9nOC8rdnY0ZWVLRUVJSUlZUVFRa2hWcHVVQnVDbCtDbHppbjhQdVg1N3RPZm5KMnVoREw4VkJhbmp6MmQ2QWxiejVtc2dyMkhLQmtMYThBWXVLaEpUeGVCdGJmc0RnL1N0NkJDcUFHK1JwRlA4SUlZUVFRZ2doaE5SbE1nS2dLaUlJbnBiYmFHbEZRR0RheFVGUU1WVFRQR2JEVllMckZnaXBGRks4Zm95eTU2OVRLZGgxWENsYjdNT1l2emFxTTN1dmQ4TkNZT0Y4bFJRQzk4MytTWDduVzYvZ1o0b1FRZ2doaEJCQ1NGMG1Fd0tzSHp6NGJJaThiYUVKNURhZStQYmNOaE1wRHVMYnBoMFVCeWs4NXNBTGhKUTZidDFqVENRc3VPNzlWdmI2M0RqN2xQeldmNS9HVHhRaGhCQkNDQ0dFa0NhWVRnaXd5Sy9Bb1FPNDIwNWdleGZGUVREa2NhQ2RrR0RVS1JwaHpYRmV1eTRMaExUaERRaDBVeVJrS0dIQjN2MER4K2Y4M2VNUnVCcDlGOWR0dWc4L1Q0UVFRZ2doaEJCQ21tSVNIb0I2NVdFbkFtdGZoaTFvVHRxVHIrNzJxUmNIOGR6ZVhSU01TUDArbEFJZlRYZ0RvcDFpR1BRSTNPanZYSzdERDJaM2x0M2YvQTkrbmdnaGhCQkNDQ0dFTk1VMFBBQmw3Um5Pc1l6ZDA2L1ZjMmkzZldnN0w2RFhzeXZnUEhYekFyWmFJS1RnV25YcURZam1pNFFFWFpNVzh3UFc5UWgwems5RmowRFJHeUhSR1JUL0NDR0VFRUlJSVlRMHplZzlBUFZET0FpNjdac0FqdlEzS2pwSXo5dDc3WU9NYTV4RmJack9DN2o0dmFJM29KYVk2NkY2QTVhWjExSmprK3B6MklVM1lOMXJYMmFNZ0VKeGpqenpmOS9JenhJaGhCQkNDQ0dFa0thWmdBZmd3ZWRBY3NRL2gvM2V5L2JCZWhzV2VFbjFNYzQrOHdLMlVTVzRqRGRnWVo5NjhBYk1tOWZLWG8yb1h5MjQ3ZnlBaTk4clZneGVqREVvQitLZlVQd2poQkJDQ0NHRUVOSVdFeEFBNVpjWFJuVnVzdzYyajdwNHlJQ0tnOVFkUzJoSWNPa0NIM1dFSUd1ZTg4NVRwa0JJTFNGUnkvZWhpU0loSVlVd3lvUUZqMTBJRkhrWGp2N2YzZndjRVVJSUlZUVFRZ2hwaTFHSEFPc0hEN29Yb3VqRDJRMTVPNFVjZU9MYmM5dDBXQnlraTJNTUxTUTQ5YnZVM0QvZ2VnVWZkd2hGUXVwY0crbWhTRXNUb2NGNk5XYXI5NVNuL2VBYWZvNElJWVFRUWdnaGhMVEZ1RDBBbytoWG5MOFhoWWlPdlRoSXE5NklIUllINmVJWVpVS0NTM256OVZRZ0pOTzJDVy9BOWVPMFhTU2t0YkRnblA0SFhZT1NIb0V1YjhMUzk1QUNvajlDRlAwc3hUOUNDQ0dFRUVJSUlXMHpXZzlBL2NRaFIyTi8vQTBBVy8yTmlnNHk4ZTIxamlFRDZVZERiZW9XYVdqREU2eHVnUkRmTWJyMkJ2UWVXMm9lUStyTlplZUZXa3JkQnpFMFBsdCs1YnVYOFRORUNDR0VFRUlJSWFSdHh1c0J1QlkvQlpJai9qbnM4VWx1SDBOeGtLNk9rZGNtenhNcjVCaUZubUFCKytjZXN5bHZRTzNlR3hBSXozc1hQSmFrSDFyeVdoVE1RK2krUVcxZDkwR3dSK0FMS1A0UlFnZ2hoQkJDQ09tS1VRcUFxb2lnT05jclBPU0tDaFBiM3RRNWhsSWNaTWdod1VBSEJVS2FLdkNCbWdVK21pb1Nnb2JDZ2tzSXRhNHgxQlVDUy9XOThGNTRMNDc2emgvejgwTUlJWVFRUWdnaHBDdkc2UUg0MFcwUEJIQ3JYQ0dnU0NnWTIvWmVoVVR0cnA5Tm5xZHVsV0JmWDNJRm9SRjVBNWJ4d3V1OVdqRHE1UWRFVlJGU3k0ODFYd2o4RGlSK2dqd2FjMzUrQ0NHRUVFSUlJWVIweFZoRGdIOGhTRVFZMi9abEtnN1NkMGl3YjV2UEd6QjBESTBXQ0duWUczQ3NZY0daWWg5MUNvVm9QU0d2bmhBWVEvRUVlZHAzdjgxUER5R0VFRUlJSVlTUUxobGRFUkQ5eEJHSFlYWGZ0d0U1eU4yZzZBQUQzejZLYzBoMy9lamlQRzBVQ0ZuOExqWDN0NDVScThESHdJcUVsRDFPbVdQVUtSUlN1SC9WNnlGL0tFLzd6bTUrZGdnaGhCQkNDQ0dFZE0zNFBBRFg5ajBCd0VGZXk1dWVmaDJjbzhPOGdFMk90OHNDSVl1MlMrZ05XRFlzdUU1K3dEWUtoUlR1WDhrajhBb2M4WjAvNGllSEVFSUlJWVFRUWtnZmpERUUrQmVjdWRKczR6dVBxWWg4NkhNY0E4c0wyRVNiUGd1RTVPM2ZSRzdBT3NVdG5MOVhxRGpzL2IycC9JQmFjVTZyVms0T0ZnSy9nNWsrbm5uL0NDR0VFRUlJSVlUMHhhaENnUFgvczNmZjhmSmtkWjMvMzUvcSs4MlRHSklNQ0VPT2dzQklNS0Jqam12WWxSVURabDFkMDZxck1LeS8vWm9qS2loSUVFWVJRUWNUNmlJWUdNSkVtR0dHd1VHVUtBS1NabUNZK1AxKzcrM1A3NCtiT2xRNHArcFU2bjQ5OXpIcnZkM1ZwMDVWOTYzKzFwdHp6dWV5WTUraHpLK2J6UTFLRDRQcHZCM3N3OUwxczZ2anJkcW03eW5CUWUzYVFOcVlhU3ZKdE9DQzh4emRSNnY1ZXF2NXZoYSt0MVBKdnR5Kzk2UC93TmNOQUFBQUFLQXYyY2g2KzkzS3VWZnZkU1RneW8vMHEycWpZZ1JWNm1OSmVUeTFwZ1FIakFhc25CTGN3V2pBNERhOFlSc3piU1daRnF3MFZZZERDNFVVblpQWTk3WG92Wlg5UE9FZkFBQUFBS0J2b3hrQjZOZnJvRzQ1K2dHNTdycjhaTVhoakdHVTNUb1ZCK21xcnltMldadlJnQUh2WC9EanFkclphU3RGZjd6dTZ4dU1DSFM5WG1kKy9JdVkrZ3NBQUFBQTZOdDRSZ0RlY3VScmM4Ty9tWHYwMWtZQ3BtaGo5Q1A5UXRyd3RNY3loUFVGV3k4UTBzSm93RGFMaEFTMVBUT0tMdVo4bDYwUDJMUS9zU01DODQ0bGJrVGdSNVhwbXduL0FBQUFBQUJETUo0QTBPMDdTNTlQRVFLdVEvR1ExdHZ3ZE1lUzhuaWFidE5XZ1pBVWxZSUxwNS9HdHJIUVRwSnB3WjVtV25CVm9SQnIwSitnMXdjRWdmdVBUeldkZnF0OTk4Yy94RmNNQUFBQUFHQUlSakVGMks4NGNpK1p2VS9TSkh6cXFBVnNNOURuVjZhTkZad1NYUFI4N2FJVEZaL2JkTVVvYXZadGlOT0NsYVpRU016VTRLampzVisxNy9yWTAvaDZBUUFBQUFBTXhUaEdBSnA5dTZUSjdIMTM4YmJLSHhHVmMrOWUya2JiejQ5K3BGL0k4d09kRXN4b3dJZ1JlQTJtQlllT29LdlZ2aGRQdzI0NlFySFppTUJyZGRySC9qKytXZ0FBQUFBQVF6TDRBTkJkSnVrN2dtN3lGN2ZadTFFdmUxNzlQSjlxSCt1MEx1Q1F0aWtNbVRwZUc5Q3FQdnNwQXJ5YTA0SnpIMit3UG1CYkZZUHJCSUg1VllOUGFKSjl1ejFaSi9scUFRQUFBQUFNeWZCSEFMNzU4Sk1rUFNBcUxGaDZ2c2NRY0MxRytsVnRVekg2Sy9VNVM3MU5uVkNxcmRHQVhSWUpXWG84NVNpK0d1c0RGdmJUMHdhQnRkcHdTZE1MN05zL2VoMWZLd0FBQUFDQW9SbkJGT0Fzc1BoSDFmTTloWUNwOWpHVWZxN2psT0NxL25RNUdyQldHem50REdKYThFNWJxYVlGcHdvQ2EwMHY5amZxMkkzUDRpc0ZBQUFBQURCRWd5NEM0dGZyTk4xeTlEOWxPaTFkNFExcitQb1VmZWh4SDEyMVVicU5kYlNmRnJhcDJxNndnSVJGYk50bUd6bC9CNDBLYzZScUorQno0VFUrWjBuYXFpd1djcE0ydHg1bDMvUEpmK2NyQlFBQUFBQXdSTU1lQVhqcjBhZklkTnBzTnFDU2UvMnc1eHVNQkZ5RmRRTzdPdGJTYlZxWUVyd09vd0V0d1dqQXRxWUZCMjlmOW5qaVFpR3Bwd1lYcnhINEk0Ui9BQUFBQUlBaEczWUE2SHBxVUpBUS9Yek5FREJwSDBxZUgwSWJuZXhuaFF1RXBGZ2JzTXNpSWRLQXF2d0dGQXFwRXdRcVFiOFdnMERYWDlsMzNQQVN2a29BQUFBQUFFTTIyQURRMzNUazAyWDY3TndiOHpJcFFrQ0tnNlRmenhpckJEZDlINXVPQml4dEkrY3pYS3VOaFhZYUIzaXAxd2RNR0FSYThpRHdvOG8ydnArdkVRQUFBQURBMEExM0JLQm4zMXpZdjZRaElNVkIrZzhLQnpvbE9NV3hqMkUwWU5KMkZ0cnFLZ2lNUGZmTmcwQ1hUYi9MbnZxUmovSTFBZ0FBQUFBWXV1RUdnQk4vU3VuelNZT3ZFWWVBWGJiUituNFlEVmphVnV4b3dMYW1CUWMvSHJnK1lKc1ZnMHYzMFNRSXRPZmJ0MzNpLy9FVkFnQUFBQUFZZzBFR2dIN1Y2UStSNjFIZGptNXJNUVJrWGNDSWJUeFJPNG0zU1hGK1lvT290b3FFQkxXZGNoUmZ3QWpQNFBDdTVscURkYzUvOFd2ZW8xUDJVM3g5QUFBQUFBREdZcGdqQUtkYjMxd1pESVErSDlYR2dDc0VkOW5HVUtZRWQ3S3ZHdHUwTVJwUWlwOFdYTmgyNnVtOEtkcVJhZ2VLdWNmYld4QTQxVlRmYXQvOThadjUrZ0FBQUFBQWpNVXdBOERNdnFuODVqL2laaittRFVtOVZ3aGVtd3JBSWR2MEZBTDJPaHBRaVVZRDVueVdVNjRQcURydExMU1Z1bUp3NmlBd3Y3M2Z0VysvOFhLK09nQUFBQUFBWXpLNEFOQ3ZPdko0dVQ4dzZrWitkcHNrei9kWUlYaE1iWVR1WjJ4VGdtT09QY1Zvd0RhTGhEU2RGcnowZHhId2Z0UlpIM0NJUWVCeThaSDM2MFQyZi9qYUFBQUFBQUNNelFCSEFHYnRGLzhJZXQ3YjNRY1ZnQ08yNlhGS2NGZHR0VlVrWk8veG9WYjVIVkVRNk5rUE0vVVhBQUFBQURCR2d3b0EzWlZKL28zZGhYeFZRVURPNktsVSt4aGJHMTF1VS93SjZiNC9NZWV3elNJaEd0cTA0SVcyVWdlQmF0TFdUSHVwZ2tEWHkrM2JQdjdYZkdVQUFBQUFBTVpvV0NNQXJ6cjJoWkxPS1EwQlptL1MyM3grYnBzVkNBRkhNZEl2cEwvclBocXd4V25Cc2FNS2s0OHNuR212MXRwOWFpc0l2RkhaZ2YvRjF3VUFBQUFBWUt5R0ZRQm0vcFNsRy9BeW5VNkI3YmxDTUVIaGdzZ1FjR1ZHQTZxOWFjRlNnK3E4S1F1RnpMUTNoQ0JRL2hQMnpSLzlDRjhYQUFBQUFJQ3hzcUYweE4rcFE3cnA2SWNsbmFXOGUvZlNGemQ4UHFvTjYyQWZYUjNMS214ai9mU242N2E4NkRFTGI2djA4VlR0Ukx3dkhucThWdU0xVlk5YjZHc3UxbE0rOFVWbXdlOGtBQUFBQUFDRE01d1JnSjg2OHBYS0MvOFc3djlyUHorV0NzR005SXZjcHFVcHdVTnJhMmpUZ3R0Y0h6QzNMWTk4VGRYalFTTUNiMWMyL1Y3Q1B3QUFBQURBMkEwbkFMU1dxLyttYUtOb3VtTWYvU1FvWEpDNFFFaE1uN3BjRzNBbzA0SXIrNVBUMXRpQ1FOUC90Vys2NmQxOFRRQUFBQUFBeG00UVU0RDlrcnVjcmlPM2ZVVFNrVzZuODZiWXg4Q25CSy9VZE4vUWJTenR2dnBvcSs1N20zdzZyelZycDdXMkZ0cExQelg0cmZyVUp6N0x2bCtuK0pvQUFBQUFBSXpkTUVZQUhyNzlHeVFkeWNzSWN1L1BWNkZDY1BKK05EeGZLek1sZU9ZOUdmSm93RkZNQzFiemRwYitWanhSV3d2dHBSMFJ1S25KOUxzSi93QUFBQUFBcTJJWUFhRDVmeSsreVE4SkFscDZmcDNXQlV6WmwwRnNNL0MxQVZQdE0rVzA0RTdYQi9SRWJlVzgxNDJEUVBzdGUvSk5WL1AxQUFBQUFBQllGYjFQQWZacnpqcEwwNU1ma1hRd2Y0T3FCbHArUHFvTjY3Y2ZROXJQb0xZWmVLWGdsTnUxT1MwNFpWdXRUdVZ0MU43N2RmVG9RKzFyUG5RYlh3OEFBQUFBZ0ZYUi93akE2YW12VmxINHQzQXYzOXJ6eWRwb1dCeUVLY0V0OWJubjBZQmRqaHBzY3hTZjFFS2hrSnozcC9FSXZnYnRtZjhFNFI4QUFBQUFZTlVNWUFxd2YzM2xKcDJ1NlplaWpaYlhCVnpIS2NGSit0elMyb0JEQ3hVN21SYThlejQ5ckYvakNBSmZhMCsrNmMvNFdnQUFBQUFBckpwZUEwQy9URWNrZlZuUXhvTWE2UmZTUm92ckFuWjF2R1BlSnVWb3dDR1BHcXdWQkhxL1FXQmxYM3NKQXJjMHNmL0ZWd0lBQUFBQVlCWDFPd0x3NE5FdmszUXNlUHNoVkFpT2FzUDc3VWZLY3phMmJTcVAzUk8ycGZSdHBkeXVNRUFybUxKZU8zQkxOTVU0NysrblNSQVlFaXlhbm1QLzdSUFg4WlVBQUFBQUFGaEZmVThCL3Zyb1Z3eWhRbkJVR3lOWUYzRFZ0MkUwWUxvcXY2cDRQT1ZhZzZtbUdTODk1L3YvYlQ5K2d5WmJQOGZYQVFBQUFBQmdWZlVXQVByRjJwRHBLMnU5dUl1UmZzbW5EQTlnWGNBeGhvbnJNQnB3bGRZSG5HdHI2RUhnWHJ0UHMyKzQrUWErRGdBQUFBQUFxNnEvRVlCbkh2dDhTWGRwMU1ZcUZRZGhTbkEzeDk3SGFNQytwZ1gzdVQ3Z1hsOEhIZ1M2M3FMcmIzb3hYd1VBQUFBQWdGWFdYd0RvL3ZWSjJsbVY0aUJkOVhYTTI0eDFOR0RLWTR6WnJzbmZSOXVGUXVxMFZkWmV2U0RRWmRtUDJYRk4rU29BQUFBQUFLeXlYZ0pBZDVsY1g1dXN3Y0dOOUN0NXZpZ01hV1UvQ2JaUm9tMFlEVGkrYWNGU2VhR1FzUWVCNW45azMvaUpOL0kxQUFBQUFBQllkZjJNQUx6NnlPTmt1bGZTTmdjMzBpOWtteldhRWl3TmI4UmdaVnMxUmdNT3NRcHdhUDlpQzRXVTdidTNJTkJEWDNPek5nNCtuYThBQUFBQUFNQTY2R3NLOE5lMzB1cVFSdm9GdDhHVTROckhOY1RSZ0NtUHNZM3RRclpOWFRHNDB5QXc1ejNMZTUzcDUreHJQLzRodmdJQUFBQUFBT3VnbndEUTlIVXR0ajNTZFFGSE1pVjQ1WXAvaExhMTh4Nk5mYnB2aXM5TmJNWGd5cllLL2daU0JvSHp6NzFMaDIvNkhTNy9BQUFBQUlCMTBYa0E2Rzg1N1dHU1BiajFIWTF1WFVDcDFSQnd6TnNNWmpUZ3pIczAxT3ErYld5WHFsQkkyWE9kQm9IVC8yVmZxUk5jL2dFQUFBQUE2NktIRVlEVGIraHNWK3U0THVEUXBnU1BlVFRnVUl1RVNNTlpIMUNxSHdTVzdxZTFJUENOOWcwMy95MlhmZ0FBQUFEQU91aytBUFNXMXY5VFNRRFFkSnN1cCtIdW5LUkI5R1dNNFYybkJUdGFMQkl5dHZVQnBmZ2dzRTZWMzZidFpmNDBMdnNBQUFBQWdIVmpYZTdNMzNMNFB2THN2VjN2ZDc4RERaL3ZxbzI1YmF5ai9ReGttOUcyWmUzc00vV3hwdDYzbHoxdU5WNVQ0KzhodUQzL0MvdjZtLzhybDMwQUFBQUF3THJwZUFTZ2ZhMzZDditrOGF3TE9MZE5CMU9DeHpwaWNJaEZRbEx2VStwdkhVRXBRYUdRQVl3STNINXVVKzcvaDBzK0FBQUFBR0FkZFIwQWZtV1A4ZDkrS0ZEMS9GaldCWXh1WjJUYmpMS3RrVXdMVHQzbWtJTkFTVEsvMEw3aGxuL2hrZzhBQUFBQVdFZWRCWUIrbVk1SWV0TGVqWHFmeHJZdVlGSGdrYkl2cWJkWmg5R0FxWXFFSk50dmplMVN0em5JSU5CdWx3NzhQSmQ3QUFBQUFNQzY2bTRFNEpHalh5anB5TnhOZXA4NkwreVJhcHVSVEFsT2ZleERiS3R5dTUxd2FsV20rNmI0alBRU0JFNmZaVjkzNDM5d3VRY0FBQUFBcktzdXB3Qi9SZFNOZlJlNkN2RFdmVXJ3V284R25IbS9WbVdVWDRyM3Rra1FXQm9TTHJYNUNaMjBYK2RTRHdBQUFBQllaOTBGZ0s0dkx3MEoralNVa1g0cHB3UXpHakJ0VzZtbkJmY1pCS3FGTnJzTUFpdmJtem5mNXI5a1QvN1VqVnpxQVFBQUFBRHJySk1BMEs4OTlDQko5NjhNQ1BxMGFsT0NXOWxYUjlzTU9lQnIvRm1xdVQ2Z2VqamVOcmJ0TmdqOG9PNjQrVGxjNWdFQUFBQUE2NjZiRVlCYjJWY0diYmNLSVdESU5xMU1DUjVJZ1pDeFR2ZHRZNTk5VEF2dXU4Mm1uNE9VUWFEcForekp1cDNMUEFBQUFBQmczWFUwQmRpK0luelRuczlJTDZQNEd2WmxTQVZDVXArZlVVNzNEZDJ1eFduQlVuL2hYb3JQVlBNZzhCMDY3ZVkvNGhJUEFBQUFBRUFIQWFCZnBhTXlQU25xUlgwWEI1RUdPdDAzWkpzQlRRa2U2bWpBcmtjTlZtNVhjMXJ3MEVmNXBmZ3MxQThDbjI3bmE1TkxQQUFBQUFBQVhZd0FuQnc5WDlMaFdxOWRwM1VCa3dhT0F5a1FJbzA3NE90ODFPQnU0UW9SQk9ZKzdqdGhZT1ZyM3FxdnZ2bVZYTjRCQUFBQUFOald4UlRncjJqMGFxWUV4MjBUTWlXNGp6NTNHU2ltN0ZjdjIwVk9DNDQ5TDJNT0FxWHFJRER6bnpjcisvQURBQUFBQUxCZTJnOEFYVi9ldUEwYndKa2E5WlRnaGdWQ2hqYVZkOVRUZlVPMzYyQjl3TlVNQXQrdU45L3lsMXphQVFBQUFBRFkxMm9BNkc4OS9jR1M3cCtrc1RHRWdDSGJXRi9iTkpnU0xJMi9zRWZLdHZxWUZoenpON0RXUWFEL3ZCM1hsRXM3QUFBQUFBRDcyaDBCdUxuNUZVbmJHMHB4a0RGTkNaN2JwcU1wd1FSOExXelg0dnFBZGJaVlQzMG9Ed0xmcWR0dWVRV1hkUUFBQUFBQTVyVThCZGkrb3AxbUIzRG1PaS9za1dBYmt6b3BFQkxkcDRHMTFmZDJiYXdQMk9kYWdtMzBOMjhiOTUrekoydUx5em9BQUFBQUFQVnU5NlA1WlRxaXcwZHZrSFNrdGQ0UFlabC9IL00yMXY2K3h0N1dvTGV6ZW44TDNzTGZsN2Y0dHh2Mm5yOWJSMjk1aUoydlRTN3JBQUFBQUFETWEyOEU0SkdqWDZnMnd6OXBkZFlGN0cwYlJnT3UxUHFBWTZrWTNFcmI5b3VFZndBQUFBQUE1R3N2QUV4Ui9UZkVtTllGSEZ1QkVHbDlBajcxdEYxZlFlQVExaEpNMXJhL1QzZS8rYVZjemdFQUFBQUF5TmRhQU9qU0YzWjZKSXdHYkxqTmlvNEdiR09mYlFSc1N0SG1TQ3NHMTIxN2QzdkxmdG5PMHlrdTV3QUFBQUFBRk45S0orZHZQZTF1dmpYOXNDVHJQSmZ6Z1p4WlQ5RFAzdGJPVzlHMUFWZHB1NkJ0cllVMk85ZzJidnYva04veVFQdEtuZUJ5RGdBQUFBQkF2blpHQUc1dW5hK1ptck9kR3NLVVlHbFkwMzJsR3FNQkc3YkRkTjkyanlObzN4MVVETzU3UktEcFZ3bi9BQUFBQUFBbzEwb0FPRFU3Zi9iM1hnYmxNU1c0L2paNzBXMkRLY0hSKzB1NFhSLzdYS1gxQWJ2WU5rM2JIOWFuYm5reGwzRUFBQUFBQU1xMUVnQ2EreGNzUGxZU0o3Vm5LQ0hnMkFxRXpKMjdBWTBHYkdPZll3Z01WekVJVE5LMi9hWTlXYmR6R1FjQUFBQUFvRnp5QU5Ddk9ub1BtVDI0OFBtdWo5QUdjcVlaRFJpeHY0VGJxYWZ0eGxJb1pMeEI0TTI2WS9KQ0x1RUFBQUFBQUZSTFB3SndZcFhWZjFrWHNLTnR1aDRObUhKL1RQZHR2dS9WRGdKZmJGLy95VTl5Q1FjQUFBQUFvRnJ5QUhEcWZuN0lkbXU5THVCZ2kzK0U3SzlpTXZlNkJIeURudTRicyswb2c4QXRUU2UvdytVYkFBQUFBSUF3eVFOQU01MGZ1dTNhcmdzWTJvK2hqUmljYThzVHRwV29YMzFOQ3g3NnlNR2diVWNWQkw3U3Z2S21kM1A1QmdBQUFBQWdUTklBME45MDVOUGx1bC8wNjdvKzZyRk5DUjdpaU1FaGpnWnNZNThyTWQwM1p0c09nOEM2YmJ2OUZwZHVBQUFBQUFEQ3BSMEJlQ0Q3d3JvdlpVcHdncjcyT2hwd3BFVkNWaVV3VEw1dEIwRmdyYmJ0YXZ1S215L2gwZzBBQUFBQVFMaWtBV0RvK245Rm1CS2NhSnRlUmdOS25ZNEdYSVhwdmtPWWFqdTJJTkNteitTeURRQUFBQUJBbktRQm9FbGZrS0tkdFo0U1BOamlINkZ0ZFRRYXNJMytyOTEwMzVodEJ4RUVmbEJuMy9wblhMWUJBQUFBQUlpVExBRDBOeCsrbjZUN0pHdXZqN1BCYU1DRSt4dmdhTUIxbnU2clZPMzJHUVRhcyt3OG5lS3lEUUFBQUFCQW5IUWpBQ2ZaK2FrN3QvWWhJS01CMTIrN3RyWk5QaVczNnlEUWI1WGJpN2hrQXdBQUFBQVFMMWtBMkhUOXZ5SzlyUXU0aXFNQlV4MTM2dEdBZmEzbmwzcTd2b1BBTmo3YmJRZUJ3ZHZiaSt6TFAzVWpsMndBQUFBQUFPSWxDd0RON0F2YTdDaFRnZ08yNlcyNmIwaGJGVkV1MDMyN2IzTUlRV0RZOWxOTkpzL21jZzBBQUFBQVFEMUpBa0MvOXRDREpOMno3YzR5SlRoUmYxZGhOT0M2VGZjZFFxR1FvTzFiQ0FKTmYyMWZkTk83dVZ3REFBQUFBRkJQbWhHQTA4bm5kdFZocGdRbjZtOWZvd0V0NEYxa3VtKzNiZGI1akhjWkJMci9McGRxQUFBQUFBRHFTeElBVGsxUDdMcmpqQVpNMU4rK1JzanR2WXNqTFJJaXJlWjAzK0VGZ2UvUlpiZGV6S1VhQUFBQUFJRDZrZ1NBSmoyeGozQ3N0eEJ3blVjRE1pMjQvdWRoVEtQOFdnc0NQYTRBaU5zTDdMaW1YS29CQUFBQUFLaXZjUURvMTV4MWxxU0hob1VBNmZVeUpWaGEzZEdBWXk0UzB0WjJZeGs1T0lvZ2NPRzlMdC8rbEtaYkwrRXlEUUFBQUFCQU04MUhBTnFweHkrMXMwNmpBWWRpOEFGZmFGc0RuQllzTWNxdmp5RFE5RmYyNWJmOUo1ZHBBQUFBQUFDYWFSd0FUdDJmV0JnQWRJd3B3UnIvYU1CVm1CYmNkNXRkYkp1MDdhSWcwRi9BSlJvQUFBQUFnT1lhQjRDbWtnSWdUQW51eHlnQ3ZwQjk5akF0bU9tK2NaK3o5b0xBOStpU1cxL0xKUm9BQUFBQWdPWWFCWUR1eWlROVB1am12Mk9NQnRRd1J3UFcybWVIb3dGamo0UHB2dTBFZ2U0dnBQZ0hBQUFBQUFCcE5Cc0JlTjFwRDVOMFp2Q05mOGU4cjdQS2FNQVd0Z3NZRGJncTZ3T09jZHU2YmVkdnY2a3QvME11endBQUFBQUFwTkVzQUp4T254aTFmVThoSUZPQ05ZTHB2cUhiSlp3V1BQVDFBY2U0YlpMdG5lSWZBQUFBQUFBazFDZ0FuSmF0LzVjcUhFaGs3YWNFU3lPWjdodTZYWUpxd2JISFFSRFlUUkJvOWtJdXpRQUFBQUFBcE5Nb0FEVDVaemQ0Y2VlWUVxeVJUUGVOMlc3azZ3T09lZHQyMm42djNuanJQM0pwQmdBQUFBQWduZG9Cb0Y5MzVwMGtlMUNqdmEvYmxPQlZIZzNZOWFqQnVlMEd2ajRnby94aXRxWDRCd0FBQUFBQWlkVWZBYmgxNnJPVkl0SmFweW5CMG5oSEE0NWkxT0JBMXdkYzlXM3J0cjI4L2FZMktmNEJBQUFBQUVCcXRRUEFxZXNKU1h2Q2FNRCs5TDZlWCtydFBNMjVIMElJcDVhMkhXUUJFSHVWZmVsdEgrS3lEQUFBQUFCQVdyVUR3RWJyLzVXRkFUMWdOS0Q2RGU2VWVEdmJmVmQ3V0I5d0xPSGlrTnJlMy82UHVTUURBQUFBQUpCZXJRRFFMOUpFWnVlMTBxTjFuQks4cWtWQ3BIN1gzdHQ3WndjYUJLN3VPbjUxdHI5WnQ5N3l0MXlTQVFBQUFBQklyOTRJd0FjZSt3eEpaN1RhczNXYUV0elQ4VGJ1ajJsazA0STdYQit3elRhSHZZNWYzYmIvd3I1R3QzRkpCZ0FBQUFBZ3ZacFRnUDJ6T3VuZE9rNEpYdmNpSWJIYjliays0TmdLaFF3NU9IUzlqTXN4QUFBQUFBRHRxQlVBVGsyUDZheUhQVTRKWmpSZ1pIOTZuKzRiMm1haWFjRnRIcy82clBzblNSOVZkdXRydVJ3REFBQUFBTkNPV2dHZ2VZY0I0TjVPK3psQmpBYU03TS9RdDV2N0xDVU9BdFZDUDljakNIeVpuYTlOTHNjQUFBQUFBTFFqT2dEMGl6U1I5SWhlZXJ0dUJVS2tZWTRHSE0xMDM5RHRSbEF4ZUpXRFFIT20vd0lBQUFBQTBLTDRFWUFQT3UwaGtvNzIydXQxbkJKTWtaQzQ5MzVNaFVMV09najBkK256Yjd1S1N6RUFBQUFBQU8ySkR3Q24vcGhCOUh6ZHBnVDNlTXlsL1JuTmROK1lOanRlSDNBbzI5WnR1OW4yTHpYcjk4OEtBQUFBQUlCVkZ4MEFUazJQSGt6djE3VkF5RHBNQys0ek1PeXJVTWhRdHUxeSs2M0p5N2tNQXdBQUFBRFFydWdBMERSOTlPQ09ndEdBNDNrZjJocTlwN2IyVFJEWTR2WnZzaSsrK2QrNERBTUFBQUFBMEs2b0FOQmRKdG1qQm5ra2pBWWMxL3N3aUZGK01kdXRhQkRZWjNCb292Z0hBQUFBQUFBZGlCc0IrTGJEOTVWMHAwRWZFYU1CaC9NK3JPejZnQ3NVQkhiVjl2SnJ0alRWbjNJSkJnQUFBQUNnZlhFQjROUStjeFJIMVdNSXlHakFtdS9GSUtvQXgyeExFTml3L2RmYStiZCttRXN3QUFBQUFBRHRpd29BcDI2UEdjMlI5UmlJK1pvZWQrTStEV2E2Yjh5MjNuMWYyOXkycSszbHIrRHlDd0FBQUFCQU42SUNRSk1lUGJvalhNZlJnRDBlZDJXZlJqWGROM1RiZ0hlYklIRFdsZzVrcitUeUN3QUFBQUJBTnpZaXQvL01VUjdsYmlqUlF5TG42akdMNi9HNEsvdmxpYmNMT2M2WTgxRnJXMTk0b01FeGRkTGZsajVIMWR0ZllwOXp5MGU1L0FMQXVEem1GL3dKVTlOM2NpWUFBQUI2Wm5ybnRSZlliOFM4SkRnQTlMY2R1N3R2VHM4WjV0Q3k0QlBVV3dpNHUvdDFPdTdLUGtuOWhIWnRCbXNlOEk2M0djRFYyYmFOdHN2YU4vc3pydFlBTUQ1dWVwQk0zOGVaQUFBQTZOMEhKVVVGZ09GVGdFLzVZL2J2NUgyOHA2akgvSksxQVJ2MGF6RFRmV08yUzFnb3BLMytObW03WHZzdTMyTDZMd0FBQUFBQTlkM3pNMzdaN3hUemd2QUEwS1lMNi8rTlBBUmtiY0RodlNjcDM3czIxOUdMYm5ORmc4QmEyOXNWOXZtMy93ZlhhZ0FBQUFBQTZwdHM2YUV4MndjSGdDNzd6THhIUjQzUmdNTjdQOFlRQkRhcUdMem1RYUQ3WDNDWkJnQUFBQUNnb1lrZUViTjVUQlhnZ2dyQUt6QWxlSjFIQTY1Q0VEaVdOZ2tDSlUyWS9nc0FBQUFBUUVQdWVuak05a0VCb0YrbG81THVWN0hWdU0vY3VvNEc3UG5ZSy9zMXVsRitNZHNPSUFoc096aWNmODIvMk9kLzZwMWNwZ0VBQUFBQWFDeDlBS2dEUng4U3R1MEtoSUNNQmh6bSs1TDZHUG9zRkxLMGJZOUJZTjErMTJ2L2I3ZytBd0FBQUFDUVJBc0JvRThmRnQ3a3lLY0VTNHdHWkgzQW5yWU5EQUxIV2dBa3l3Z0FBUUFBQUFCSXdLUlBlK3h2K0YyQ2I4bEROcHA2OXRENHJqQWFzSzVCUktpMkF1L0xxZ2FCYmZhanZlMXYxS21icitBU0RRQUFBQUJBR3ROTkJRL1lDd29BVGY3UWVsMWhOR0FUVEF0TzFMZEJoWHN4MjY1VUVQaTNkcjQydVR3REFBQUFBSkNHZTNnbDROQXF3QTlyMktWeG45R2VnekNtQlNmbzIrREN2Wmh0UnhvRXpyN0dqZW0vQUFBQUFBQ2tOQTFmQjdBeUFQVHJkVkRTL1p2M3lzZC9ZdGQ1TkdEUHg1K3Nid1NCeTl1Mlh3RGtsRTRjK0FldXpBQUFBQUFBSkdRSkEwQnRudllnU1J0cGVyWWlVNElaRFRqKzk0WWdzTHZ0VFpmWmwzemlKcTdNQUFBQUFBQWs1Q2tEd09uV1E5dm80ZWd4R3BBZ3NQZHRSeElFdWw3RFZSa0FBQUFBZ01STWQzbkVML3JkUXpZTldBUFFIOVpPTHhrTnVCSm4wRmJrL1JucnRoYjRTZWd6Q016ODFWeVZBUUFBQUFCSUw4dkNSZ0ZXQm9CVHQ0ZTIyMVZHQTQ3K0RBNTVOR0JzLzhhMjdkejJyc293c1BzQ0lCL1JFMis3bGtzeUFBQUFBQURwVFFJckFWZXU3V2VOS3dDSGNBMDdRUXBnTTRmU0ExL294anFlZzZUOUc5dTJTOXRYZkNJczU4TVQwblpzZjB5dk5sdUZsQjhBQUFBQWdFRjZZTWhHcFNNQS9TSk5sSVUxMU53S1RBbVdHQTI0ZXc0WUVkalB0a3ZiOXo0OW1QWC9BQUFBQUFCb2lVc1BDdG11ZkFyd0F3L2RUNjdEblhkOTdGZ2JjUDg4ck1yN1pDMjJ1N3BCNEZRbnNuL2djZ3dBQUFBQVFHc1NCSUNhUEt5ZnZxL1FhRUNLaEl3akNHempXTll0Q0xTbHg2K3g4Mi8rT05kaUFBQUFBQUJhYys4dk9PNlZnL2ZLQTBEM2gvWjdEQ3V5ZEJqVGd0ZDNXbkNiYlZ1VHRpT0N3UHJIK2xxdXd3QUFBQUFBdENxNzZhRHVWN2xSMlpOVHM0ZjJmeHlNQmx5cHMwZ1FPSnkyUXlzSDErMFBBU0FBQUFBQUFLMExXUWN3SzcrSDk0Y042bkJXd1FCR0F4SUVKdTdmV0lQQXBlMlRCb0duZE9Mb0pWeUdBUUFBQUFCb21WY1g4QzBNQU4xbGtqOWthRWZFYU1CMFozSXc1MkpWM2l1Q3dOa0x5SlYyL3NkdTRTb01BQUFBQUVEckdvd0FmUE94dTBzNmJaaUJHNk1CVTUxRlJnTzIwTWQxREFLWDlwSDlFOWRmQUFBQUFBQTZZTlVqQURjS256a3duVmxBMEdmdTlvZkNOZnpVS09oTm1qL0ZQWjNKUWJ5N0F6Z1hTZnNZZXp4RGFYdnh3K0JlOEVUcFBsai9Ed0FBQUFDQWJ0U2ZBaXo1ZlhNZUc5anhyY2lVWUdrdzA0SVpFZGhDSHpzcjZOSEM5a3Y5Q1JvVmVMdHV1dVZLcnI4QUFBQUFBSFRpSGcvK1ZUKzliSVBpQU5CMS82SW5oc2RYNXkwenp1YmN1U0FJSE9qMnBVSGdsZmFWT3NIMUZ3QUFBQUNBVHRqaHFSNVF0a0ZoQURnMTNiZjRaVU1jZWNkb3dKVTltN1ppNzFuZFVYc2E0dmErL0dseGV5UFhYZ0FBQUFBQU9sVmFDR1NqNUI3L3Z0VnREM0VkdmhWWkcxQmlmY0NCbll0VytqbkVkZjlxclJNNDg4Sk1CSUFBQUFBQUFIVEp5OWNCTEpzQ2ZML1FQVEFhc0dYR0daMDdGNnMySWpCMis2NUcrTlhieDZZMmoxekJsUmNBQUFBQWdPNlkxUWdBL1hvZGxPbWVjYnRpYmNCMjMwbXhQdUFBejBmeWZnNjZBRWlRYSt4elAzNHpsMTRBQUFBQUFMcmpGVk9BODBjQW5qcDBya29yQkpmc2JvaW5nQ0J3ZGM4b1FlQ3d0czlZL3c4QUFBQUFnSzVaclNJZ1c2SFRmL01NTlhCald2QktuMUdDd0c2M0wzeU5Fd0FDQUFBQUFOQTEwMTBlL0t0K2V0SFRXY0dqOTJ1KzU2R0diWXdHYk9PTUVnVFc3T2RZS3dFWHZjYnRjcTY2QUFBQUFBQjA3N0RyM2tYUDVRYUEwNkFLd0NFWURkZ0oxZ2NjN0RsSjN0ZGhGd0I1anozaDFvOXd5UVVBQUFBQW9IdTJwWE9MbnNzTkFNMVNCWUM3R0EzWXpUczlqRE5LRU5oQlg0ZFlBTVNjNnI4QUFBQUFBUFRuM0tJbjhxY0FlNG9wd011Tk1ocXdBMHdMSHZSNWFhV3ZROW5lZENYWFdnQUFBQUFBZXBMcFBzVlA1YnR2ZTcxaE5HQW5DQUlIZlY1YTZXdmYwNE5OakFBRUFBQUFBS0F2SGpFQzBLOC80MnpKem1xN1I0d0c3SWh4Wmd2UEMwSGcvUGJOOW5GQ1o5MytWcTYyQUFBQUFBRDA1dHlpSjVaSEFKNjQvWDdkOVl2UmdKMFlVTmhGRU5oaFh6dFo5Mi92djJ2c2dUckJ0UllBQUFBQWdONmNXL1RFY2dCb2R0OXVZeHBHQTNabVlFSGc0TTdOMk43SElVMFBscjJKNnl3QUFBQUFBTDI2NjhPUCsybDVUK1FFZ0xNRlFMcU1hWVk4R3BBZ2NDM09yR2xjSXdMcnZKZHRqU0kwWGNWMUZnQUFBQUNBZm0wY3ppOEVzaFFBVHFkMnIvbEhHQTI0MzdjVnc3VGc4bk5ERUJqK21pMjdtc3NzQUFBQUFBRDlzbWxnQUdqU09mbE5NQnFRMFlCcmVIYlhKUWhzRmg3ZXB2ZmY4cTljWmdFQUFBQUE2RDBYT0RmdjRZM2xEZjJleFdtQXp5UUFiZXR5WDNYNlpxdjJBWmsvN1QyZjNjRzk4d002UDFIOWplbXoxZHhldXRhZXJDMnVzZ0FBQUFBQTlNd0RSd0RLN1p5UTFycnMrVkRQNk1wT0MyWkU0Q2pPVDJ0OWpqOUdwdjhDQUFBQUFEQU01K1k5T0JjQXVpdVQ2ZFBDMm1OdHdPSDNyUUdDd05HY245YjZIRG85Mk8wdFhGOEJBQUFBQUJpRWMvTWVuQjhCK00vSDdpcnBRRnk3akFZY2Z0OGFzR0dkWVlMQW52cGM5cHFKQ0FBQkFBQUFBQmlHYy9NZW5BOEFOMC9lbzE3YlhZZUFqQWJzMU1CQ0xvTEF4SDF1Tmlyd2hQeldmK0g2Q2dBQUFBREFJTnp0aWIvcFJ4WWZuQThBTGJ0WC9mYTdqbVdHUGhxUUlIQXR6L0lZZzhDNi9kNSt6VHZzUEozaStnb0FBQUFBd0REY2NrSkxBL3dXaW9CTXoya2VxVEFhc0o5ejBTR0N3TkdkbzliNjdmNDJMcTBBQUFBQUFBem8xdDUxejhYSDVnTEE2VjRGNEJRaElFSGc4UHZXOUJPbHdRV0JuS1BFL2E3c2UwWUFDQUFBQUFEQWtHN3BUZWNzM2IzUC9UYTFtUTFTQkZkZFJ6Sk1DKzduazhWWkRqcEhOdUwzdDdEdmpBQUVBQUFBQUdCUXBoVUJvTW5QV1U1UEdBMll2bjhyaUduQmNlZHBWVVlGdXY4elYxWUFBQUFBQUFaMCsxNDVBbEE3RytTR2dJd0dUTnMzZ3NDMVA5UGpIeFY0a3o3cjlnOXdhUVVBQUFBQVlGREsxd0NVK1g1Q21KdWNNQnB3dmZyWHdFQ0RRS1lISi9VMnMxWDlBQU1BQUFBQU1GckZJd0Q5S2gyUTdLNUxMMmx0TkNCQllNbEpYaDBERExjSUFwTjVPOWRVQUFBQUFBQUdwbndLOEpGN2FIbEs4TFpXUmdPbWFtUEkrNHZ0RzBFZ1oxd2pDZ0w5SFZ4VkFRQUFBQUFZMnUxNjJSUmcyendub0lHY0J4Z051Rjc5YTRnZ01QNWNEVFVNTkNNQUJBQUFBQUJnZUk1KzVuRS9hL2FCbVJGL2RrNVFFNHdHN0xCL0JJR2M4ZUdlTDAybUJJQUFBQUFBQUF5UUhaeWZCandUQVBvOW9scGlOR0NIZlZ6bFQ2UUlBc2Q1dm03WEkrLzRkeTZwQUFBQUFBQU1rQlVFZ0ZPenUwWEhIaXMxR3BCcHdUMS9NQWtDeDNXKy9zMU1VNjZvQUFBQUFBQU1qeStzQXppekJxRGZlV2NUMVFvQ2x4NFkyMmhBaVduQkEwQVFXTzk4ZFg3T1dQOFBBQUFBQUlEQktob0JLTmZaODFzeUduQzRDQUk1NnoyZk0vTi81V29LQUFBQUFNQXdtUmNFZ09aMjUrWE5hNDRHOUladHBPaEhZNndQT0l4UDdERFBPa0dndll2TEtRQUFBQUFBZzFVd0F0RDg3T0xYMUlnN1doc055TFRnL3M5Sng0WllBVmNqQ2dMYk9IZGIwL2R3TFFVQUFBQUFZSmhjbWl2Mk8xTUZXSGV1Zk9rZ1JnTktqQVljYXg4YkduZ1F1RmFqQWoxN041ZFRBQUFBQUFBRzY2Nnp2MFFFZ0h0My92RzdYS25SZ0FTQnZSdG9FRGlLczU5bVZPQnQrcXhiUDhLMUZBQUFBQUNBd2JyTDdDK1pKUG5GMnBCMGVuZ2I2endhc0s5OTF1bmptZ1NCVEE5dWR2N2l2Y2RzSFJhZ0JBQUFBQUJndE01OCtIRS91UHZMOWdqQU0zV25lbEZBcXRHQUZBbHB0NTlyZ0NDd3UzUG5Zdm92QUFBQUFBQUR2OXMvZkdCL3R1OTJBRGc5ZU9mNjdhVVlEU2d4TFhqZCs1anE0eTJDd0tibnJ1cjhtVkVBQkFBQUFBQ0FnZk9aZFFBelNkck1wbmZ5UGtiaHRUSWFVR0phY01MM2FLd29HTkxlK2JQcGU3bU1BZ0FBQUFBd2JFc0I0SWI3bmJlZjZDRjhZelJnUHg4QmdrRGVoWmp6TjNzTzNkN0haUlFBQUFBQWdHR2JadnVGUURKSjJ2SnNid3F3Ny95L1pvWldKSVFnY056OVRJQWdNTjA1ek93L3VJd0NBQUFBQURCNDh5TUFiYUk3TFc3aGZVM0ZYYmxwd1FTQmcwSVEyTnpKakFBUUFBQUFBSUNCcytuQ0NFQzVuNTIzNFhCR0EwcmpIUTBvalNkY0l3Z2MwcnN3MEhmaU5udjh6VGR3R1FVQUFBQUFZUERtUndESzhnUEFYYXM1R3BCcHdVbmZxN0VhY0JBNHpFK05mWURySndBQUFBQUFJMkNMQWFCbloxZTladlZHQTZac3ArVnowSXMxR2cyNC9VZEJFQmpXay9kekJRVUFBQUFBWUJUbXB3RDdUaFhnb052L3ZrYmdyVlNSa0Q3M3U2cjlUR1FrUWFEM2QzNVkvdzhBQUFBQWdIR1lId0dZbWM2S2VYV2EwWURiTFRWL3lTb0VnV093cGtFZ293SVhkL3BCcnA4QUFBQUFBQXlmTDQwQTFISVY0TENHaGpJYVVHSmFNSDF0RFVIZzdMbjRUeTZoQUFBQUFBQU1uMGwza2J0Sk93R2dTY2ZxTnRiN2FFQ21CZmVFSUhDbzcwaXI3OHJVUDh3bEZBQUFBQUNBVWRqNGpGL1pudlc3TXdMUWp6VnRzYmNpSWRLS1Rnc21DQnlzZ1FlQnJiNHJtVDdDOVJNQUFBQUFnSEU0SU4xWmtqSS9ya3pTNFZTUkFkT0NVeUlJSExRUkJZSEozcGxOWndvd0FBQUFBQUFqNFZ1N0l3Qy9Ya2MwRjJPa0NRR1pGcHowN1JyVFIwdHJHd1N1dzZqQWczY3dBaEFBQUFBQWdKR3dpYzZRcEV5bmRHVDU2WkdQQnBTWUZ0eTdOUXdDcGRVZUZlaCtzejFLdDNMNUJBQUFBQUJnSExha015VXAwNkc4QUhEdmpsOU5RNXkwb3dHSE5pMllJSEQxK3B2SUNJTEE2SGZITWdxQUFBQUFBQUF3SWpiZERRQzNEaDJwM3B4cHdXMmVtL3I3SlFnYy9sK2FSaFVFbHI5RC9sRXVuUUFBQUFBQWpJZlp6aFRnVXllblI4TmV3clRndHMvTitQYTlEdjFOOVJlblZSZ1YrSEV1blFBQUFBQUFqSWp0akFDMEEzNDA3cFZER3cyWWFsb3dRU0Q5N2V5UGI2eWpBbS9neWdrQUFBQUF3SGhNOTZZQXU0N0V2M3hJb3dHbE5OT0NwZkd2RHlpTkwxUWpDQnpMdXpSMXY1RkxKd0FBQUFBQTQ3RTNCZGpjajlUUFlFWStHakQzRUZLdkQwaWhrTlh0YzZxL1JvMGlETXdzWXdRZ0FBQUFBQURqa2pNQ3NGWUdrMjQwNEdwT0M1YVlGcnpxZlU1b3lFRWdJd0FCQUFBQUFCZ1YydzBBSjVtT0xBVXVQUWVCYWFTY0ZzejZnUFM1KzcvUXdRV0I1b3dBQkFBQUFBQmdSRnc3VTRDbjA5MGlJRG1CeXpwUEMxN1o5UUVKQWtkbFNOT0RiVUlBQ0FBQUFBREF1T3hNQWJiRklpRERHZzNJK29CdElBZ2NwZDZEUVA4azEwMEFBQUFBQUVabGV3U2dsRmNGT09Wb1FLWUZkM0dPeHJmdmRlcHpZbjJOQ3N5MmJ1SzZDUUFBQUFEQXFPeU1BSlNPRm0rekVMYXNlN1hnbFN3VWt2bzR1dTR6WVdCblFlQ3BBemR6M1FRQUFBQUFZRlFPUGZ5NEg1eXZBbHlJYWNIbEwxdUYwWUJEMlArNjlUdWhMb0xBTTI4bUFBUUFBQUFBWUd6TzBHbVpLeVFBbElaVUpHUzdsWjVEdDZXWHJjcTA0Q0hzZjkzNm5WQjcwNE5QMlFOMWdxc21BQUFBQUFEamN2QTJuWjVacGdOeEwxdkYwWUNxMzUrVlhSOXdDUHRmdDM0bmxqWUlaUFFmQUFBQUFBQWp0SFZBaHpPZmFpUCtwY01yRXJMNjZ3TVNCSzVQdnhOTE15cVFBQkFBQUFBQWdCSEtOblVrTTFsV3Y0bmhGQW5aYm9VZ3NGMEVnYU5YUHdqOEZDY1BBQUFBQUlEeG1ab09aUzZmTkc5cU9OT0N0MXNhMnZxQVV0b0FpaUN3V2I4SkEydU1DcnlGa3dZQUFBQUF3UGhNcE1PWlRCdHFhOVRjU2t3TGxocXREOWhhb1pBMjJodmIvdGUxNzRrRmhZRitPeWNLQUFBQUFJRHhtWm9PWlpscFp3cHdxa0FrNWJUZ0ZWZ2ZVR3A1V3JEVWY1QkZFTGd5Q29OQXU0T1RBd0FBQUFEQStHU3V3OWwwNmd0RlFGSUdnU21hWGZWcHdhdXlQdUJRK3JDT2ZXL0I4cWhBQWtBQUFBQUFBRWJJVFlleVRDb29Bc0swNEZiNlJCQTQ5RDhMRVFRdU1Nbk5UbkFpQUFBQUFBQVlIM2NkenFiU1Jza21ZbHB3UzMwaUNCejZuNGNJQStmT0J5TUFBUUFBQUFBWUlUTWR5bVFLcUFMY1VqR05BVXdMSmdqc3d0aUROSUpBTVFVWUFBQUFBSUJSY3Vsd3lSVGduQWl5d3Y0QUFJQUFTVVJCVk0xWGNGcndka3REckJpYzloZ0pBdWwvTXhRQkFRQUFBQUJnbEhmMDFWT0E4NnptdE9EdGxnWVF0aFVHZ2VxL2J5dlZoeFQ5WDZNdzBLY251V1FDQUFBQUFERENXM3JwY0NhRlRBRXVlSG1xYml6K3V1N3JBK2FlM3RTQkUwRWd4eEREVG5ISkJBQUFBQUJnZkRMcFVDYXZHd0JLclU4TFpuMUFnc0RSV1BFZ01OT1VTeVlBQUFBQUFPUGowdUdOc0NJZ0FVMUpraXg5TzE2bjJWVDkyWjhXYkFuYXF0MnYzSmVsTzhaMjJtdlNoNzc3c2U3SHNDeHpBa0FBQUFBQUFNYklGVndGT0tMSk50b1p5UHFBakFqcytPUEpxTURoTUcxeHlRUUFBQUFBWUl5MzlEcWNtYWNNQUtYaFRnc2VXcUdRQnYwaUNCeVpGVGdHUmdBQ0FBQUFBREJPcGtPWnBLeWQxbHNPQW11M2xhSkgza0lRbU9vVUV3UU8xNGlyQjVzeEFoQUFBQUFBZ0JFeTE2SE1wSTEyZDlQU3RGbW1CVmU4bENCdzJFWjJITTRVWUFBQUFBQUF4c2hOV2ViZTFnakF1VjJKOVFFNzZCZEI0QmovRE1keExEWmxDakFBQUFBQUFDUGtya2xtMXVYYVhxdS9QaUJCWU9jZll6RXFzQVBUYkhWS0dnTUFBQUFBc0VaTXlqWmNmU3p1Ny90ZFNOMU83YVpUOVdtL1VJakorajFYdVM5TmQ1enR0TGNxZlVseEhBTTZGa3RkTEFnQUFBQUFBSFRCVFpPczMrcWVMWTZXODc3N3RCc0VydHVJUUtZSHIrU3hUSDFEQUFBQUFBQmdkTXcxeVhaRzl2UTR6R2pWMXdkVUN4V0RoeHdFdHRYbW1QdVI4bGg2T3A1TXg3aGtBZ0FBQUFBd1BpWk5NaW43TkxWZUNUZ0U2d04yMXJlMURRSVpGVmg3ajFOL0dKZE1BQUFBQUFER3g2VXNNOU5CRFdyUnRKYW5CUk1FVnJ4MGxZUEFvZlVsMWJGMGNEem1aM0RKQkFBQUFBQmdmRnlhWk81RHJKalE4dHA1QklFQkx5VUlITjJmYzV2SFF4RVFBQUFBQUFCR3lVeFpKdlZaQktSS0IwRmd6LzBpQ0Z5bHo5aVFqaWZ0TVUxZEI3aGtBZ0FBQUFBd1FsTnRaR1pERGdCM0RiRlFpSlM2WWpCQjRCQStZNHdLekpNWkFTQUFBQUFBQUtPVUtkdHdIMVBpc2R0VlM5OU83YVpUOVdtM05kOXB6Zm8vWjdrdlRYdTg3Ylc1U3YxSmRUd05qc250RUZkTUFBQUFBQURHeDEyVERXa01Jd0NYdXE0MDRReEJZUDJYSmdpVkNuZVVzczJlenRtZy8zYnFuR1BmRUFBQUFBQUFHQjNicVFLOE9jN3VyMzZoa08zV2hqNDFPUDB4dDlkbTA3NzRpbDBDQW83SmQvNC85NmtBQUFBQUFNQVk3LzRuRys3WmJaSzc1RGJhdzVERWlNQU8rMWY0VXFZSGovdHZhUGE0WEhMSlRKcHVyeFB3TVM2WkFBQUFBQUNNejg0SXdPeTlwbzJwbEdrcDFCaFZ4ckg2RllPM1d4dmdpTUMxS3hoU2V2Q2p2QklzSFplN1hGTk5mVXZ5VFdYdXQzUEpCQUFBQUFCZ2ZGeWFiTmcwdTBtbXFkd21zdWxPdURTVlRESzVQTlZ5ZTEwZVZsdWo1Qm9OL2xyaEVZR0ZMMjl6UktERXFNQ2FiS0hidnZPRG05eW0wblFtMk56ZE5wdFNCUmdBQUFBQWdCRXkwOGFHTXAyVXpNMG1rbWN5YzdtMjlrWUFXU2E1KzNZUU1KckJUcWtEbVlWUWtTQXc4dVZ0QldSTUQ2N2RSWGVaU2U0bWw4dDJSdjNKZCtiOTd2N043Nno4TjVVT2M4a0VBQUFBQUdCME1ybU9iRWphMm52SXR2OC8wMFF5bHluYkh4SG92cEFnak1GUTF3ZE0zVGVDd0hiYWJkcWZJZlZwWjBUdnp0KzR6RFYxbDdudmZIcTJIOXNyK3JIN2YyenZLRTdqbWdrQUFBQUF3TWlZSm5LZHZTSFpkQ25VTTl1dUNiSXpTc2dzMng0RnFPMVJnZHFPQy9hQ0FuZHRMeUU0Mkd5UUlMQzNjMWNhQktZNzdqYk81U2o3dEJ2YXViWUR2ZDE5dTJ1Nk85SlBPK0hmZGlTNHYyMXBuVjgvbmFzbUFBQUFBQUFqc3gzaGJXeEkyc3dORWFUdElIQjNWT0RPbE1EdFVZRzdTY0ZVdmplVlVEdmh3a3k4TTdocHd3U0J6WSszWmg5N3FSeWN1dDBCOVdueGIyc254TnVkMXJ1ZCtmbmVYN3I3ZE9idmZpYkFEKzJXR1FFZ0FBQUFBQUJqNU5LR3BGTlZHKzBFQUh2LzEzdzNQc2oyUmhScHJ6cnR6RlRoM1Y5TkF3c0RDUUo3TzMrRmdkTzZUQSt1MGFlOHY1MnA5a2Y0K2ZZRzd0dnZ0cGxyT3AzdS9HM2F3a3NYcHZkYWNKY0pBQUVBQUFBQUdDT1RaM0svSStwRnZ2MUt5V1NXU1piSk5aSFpocmJ6eEluTUpwSmwyMkhoOWh6aTR2Q3YxMXpHRTdmbGxRODFhcTlSNzN3dkRHejFtQnUvM05WT1V0eFd1eW42NVBOL0I0c2orOXdYK3IvemJycnZqT3pia3Z1VzVGdVNUK1UrblluOUNvNDcvdS91aUYra0NWZE5BQUFBQUFER3hTWGZrTm50ZFlLUi9Wb0JOak00Y0hhb1g3WXpMM2k3c3VoK0FZTFphWWNGd1lSM2ZCcjJkdHhTZTR3SXJQSHl0a2NFdHRGMmphN3Nkc0h6UHZTMlBaclBkOTh6MzlscysrL0szV2IrWEJaRzNxWm51cmVPU2ZvVWwwNEFBQUFBQU1Zams2WWJrbTZMZVpHWFBXRzdVY1JPdkdRNzhjUmVKZEg5YWNJMnMwYlo3cWErTjlwcFlXZWQ1RFFFZ2IyZncwNExoblQrQWR2YjAzYUdOL04zWWFidEpmcDIvejVNTnZXOWlmVzdZZDkrTjdkRFByT0ZhZlp0TzZ6VFJRQUlBQUFBQU1Db2JJOEFsTjhldUhINXN6TUJ4R3hPSWR1UG1IYnJqdTQ5c0RzaWNEZjQySzVXc1AyVXpZOXJNdlA4UVZKdG5KYjVvMGpmSGtGZ3paY1BkSjNBd2dCdU9iemN6cmgzUXZDZDBYelRxZTJFZkw2VG1adW1PMjN1aG54bTN2NUh0ZExCczZTVEgrVFNDUUFBQUFEQXFPeE1BUzVKMWlxRHZ6S1c5NnZ0RFlQYS8zMG03TFBka1lMYmo5aE1TRGcvbW5Bbkt6U2Z6UTNudTlZb0dDRUliT1dZNjd4OHFZa09wd2Q3L3VkNE5wNjJ2VTMzWCtQbTI1V3p0UnZ1VFhjK3AvdXZkTGY5ejdlN2JHWnF2T1ZWK2UzYjF2UnNycGtBQUFBQUFJekw5Z2pBcWQydW5ORkZqWUsvZ0Qzdi9kL3R1Y0x6b2FEWmRwZDJSdjFacHBrcGszc1RJN2VYRjlSKzVkUGRUWHl1eVlXcXA0djltQjJONkdXZEpRaHNmc3dOK3BsaW5VREwrZXlWamQ3ejJmbzF0ckRYN1UrZXVXbXE3VFV1NVR0aDM4NXJwNzZ6THVidVIzQW1wZDcrbk1jRjZIM2J5cHdBRUFBQUFBQ0FrVEhUZEVNMm5ac0MzR3J3dDlTRCthYm5wZzd2VFlIVWZMRVIzeDRmYUpLVTdUZXpGd0x1eGpXKys5ek9JN05oeSs2Z3c5MXN4anhnTUtQUEIwR05pNVdNSlFoTTEyYWpmcHJtQzlyT2ZYWm1Qanh6YStVVmZYeDlQOWl6NWZmQUZ4Ylc4K251U05TZFNIbG1mKzY3bjQ3ZEZ5K0VmTE9wZE5Xb1ZCdjRGV09hM1VuYTRzb0pBQUFBQU1DSW1PUWIyckxiTmZGdWc3OUtuaCtHN000Q3RzVnB4RHRCNGRUMlJsYTU5cWRtN3E5QjZIdmxpM2VmTjk5L3ptdzc3RkcyUDlod2RwRGk5b2E3Z1k3bGhvQjd4VXgyKzdzUWNpNGQxMTRIclBpMFcrUzVpMzlSUld2emJWcU5UOXJ5eDJqbXVLM2tkVDcvM211MjBMVE5uc09kdnUydUZXazJkNHAzMTVqMG5XbTUrLy8vN2x1NlU2VjZiaGpwZHZHTi9keHdKb0gwaUwrUDdtdU50SFBCTUVZQUFnQUFBQUF3TnU3eURXM1liVjY0Qm1BUHdWOFZLOWgwTGx6YkdTMjRFTkNaYkh2VTRPd0lycDAxQjgxMlFxR0o5c0tmL2FabkdyZjVLc1UyMnk5ZldJdlE5c05Ebit1SHp3NUdtL3ZCWlB2YkZvd3lORk5BUVpRMlVxZUFOcTNndlpsOXJpaThVMG11dGpNVjNOMzNSdDB0dlMwbVRYMW5UY2pwN2lnLzM1NktLOG1uKzFONmR6TmMrZmFiNXBubXc4YVpIWnRwR0d2dzlXMnFPM0VTQUFBQUFBQVlIZCtRcHJmbFBONTFQOXB2ZGpmMW1XcC82Si9QajJtem1lMThhdnVqemFZKzA4VDhGR0RQVzVOdVpvU2d6eWQvODYrWm5kSThNNlYwZHJEaGJyT3p3VlhlYU1IRkdiRk5jci90a1pDenhTMXlkcFkzOGxHNzUzZW1JOW4rTkZueitiN3REYmpMWEQ1ZE9KRGRxYlc3YjhyU3lNcjlkU0MzSC9MdGZlOU4rZDQrQnRuQ0tGSHRWOWFkTzU2cGl0Y0VKUHpiT1UrTUFBUUFBQUFBWUd4Y21tNVBBYzc2S2pmYTRiN21ScHdWNzlvWEI3bk5UQ2VkV1FadWZwdTlmZGpjNkxMWnFjTzdheFR1UHJpN24vMTFEZmQvM3lzZVVYS21iR2QrOHV4Z3VLVmpyWG1lUE9jVTdZVjFNeU1kdDBkTnpveVBYQ3lzWVRZZmFHcGg1clROektxMWhjR1F0bnpVZS92ZkcvWG54V3N4VGhmZnc1eVRtVmVieExnd0ZNdnV6QnFBQUFBQUFBQ015L1lhZ0xaNXU3UTM3N1VqZlF5cENsemwwR28wa3pNVjFSYk85TndQT2N2ZXpmNCtOK1UwbTkrbnoyMjA4NWpQL1pyZmFJMVB4Mno3YnJ0VGNQZVBkN2NZaHVWVjE1MXBaclovdG5DTWxsZUZPUys0MndzZlBleHR0VVRuQWZ1bjJ2enVuQVVBQUFBQUFFWjJQKythYmlqTGJnOVlVQzdWTHZzNHpQWjdreHMyRmF3Vm1MUGp3dkRPVlJ3NHpvUmxab1Z2Y0hUMmxWdW5aUGVCeFdtNkZuWWl6UUpPdnBlY1YvZitQajdZZnp1bU9vZXpBQUFBQUFEQXlPN25UWjdkZW1KeWUvdTdLa3F5K3RsbnU3MUoySHBaZFZ4VFpicG5DWGM1dDkvVU84MDlqYjcvSDNyanMvK1o3c0VaQVFBQUFBQmdkRGYzVzlteHMyNjlyZTI5ZEgxVW93LysxdnBEU2VqWC8zV2g4Tk44dWwrdjB6aERBQUFBQUFDTXlxbE0vNm1XUmdCMkhZajFFZnk1Q1A1U25FWkcrL1Y2K21NK3lTY1BNUW9RQUFBQUFJQngzZmVmek94OGJVbzZtYlRadFFuK1VQOFVFdnIxK0lkZk83cmU5QzNXQVFRQUFBQUFZRVRNZENyYi9rbTNObStPNEE4aHA1RFFyL05Ucm5SalZVMFpJd0FCQUFBQUFCaVhPellrU2E0RzZ3RDJzY1pmMXowaHNHcDIramgvR3N4ZlNhejVxaTdtVGdBSUFBQUFBTUNZbUU1czdQeDBVM3hrUVBDSHNsUEh1UnZHWDBmOFZhSE1WRVlBQ0FBQUFBREF1SnpjMkw3bDl4dkNBd1NDUDVTZE9zNWQvMzhaTVN4eWEyY05RQUFBQUFBQVJzU2syemNreWFVYnF6Y24rRVBSYWVPODlmc1hVZU5Qdno1R0FBSUFBQUFBTUNKYnZqTUYyS1FiKzRqYll2ZEg4RGN3Qkg4OS9qWEVzSlI5WVFRZ0FBQUFBQUFqc2pjQ2NDcmRhR1czL0ozb092Z2p2S3AzMmpodi9mMGxSUHhwdDljUFJnQUNBQUFBQURBaU50SHRtU1JsWmpjdTMvcDNGZlFVNzZ1ZFhuUjViQ3ZFbmZDdmc3K0MrbWZZWnY1cjNvZVNmcHpwYjlVeDNqRUFBQUFBQUVaaXVoTUFicm5mT0I4QmRJSGdiL0IyUXorQ3Y5WStqVU1LL1VLZDJEekVLRUFBQUFBQUFFYkNmU2NBbk5qMFJvSS96SDR5Q1AzYSsrU25DZnlzY1IvcTltT2lyWHZ6YmdJQUFBQUFNQTZaNjdaTWtqWTl1N0g5M1JIOERScWovVnI5MVBjMXlpL05TTVBGTnUwQnZMTUFBQUFBQUl6RFZMcGxRNUkydHFZMytzUmEyZzNGUFFhTndHK0FuMEFiOUYrQXllN1B1d3dBQUFBQXdFaE1kTnZHOWgzOXhnM1NWZ3Q3OEloSDI5a1hpazRYNTJzNG56NGIyYWQvU2dBSUFBQUFBTUJJVEtSYk0wblNtYmNsbmdKY1B0MjNxMzFoOFZReHpiZU5UMTY5c3ptOHFiMFJmV2NLTUFBQUFBQUFJekdkNnBaTWt1eUJPaUhwMXVaTmRybk9IOEZmK0traTlFdjlxZXM3OU92NUhOemZYY2FuQVFBQUFBQ0FFVGkxT3dKd1c0TlJnQVIvZzBUd2wvUVR0K2FoMzJ3L1R0T2JkWGMrR1FBQUFBQUFETitCRFgyc1lRQkk4RGM0VFBOTittbnJPdlRyZDJwdmVEODJiWU4xQUFFQUFBQUFHSUhEUi9XUjJRRHdodkNYZGhuOFNRUi9JYWVJMEMvRnA2enYwRzhJeHg3U0R6ZldBUVFBQUFBQVlBemVlSmx1Mk5qLzFXNEl2UFdQZUxRcEFxM3FVOFE1NnU4VFpxUCtaRGZwZzJmR0NFQUFBQUFBQUliUDlRbzd1YkgvbTk5b0ZkdUhQOXE4YjZnNlJaeWpmajVkNHczOTB1M2ZaQklCSUFBQUFBQUF3N2NsU2ZzakFOMXVrT1ZGQk1XeEFWTjlPMGJvMTlPbmE5MUR2OXpqWndvd0FBQUFBQUREZDBxYUNRQXo4eHZtd3dLQ3Y4RWcrT3Zoa3pYTzBLL0Z3RzhSQVNBQUFBQUFBQU5uMGtsSm1pa0M0aC9hK2IraXN1OUFVTmlqMGFmSzYveFpqTENRUjVwOVJ4Njc2MnkvVG5maTB3WUFBQUFBd0hENWNnQ1lmWWpnYnlqdkRzRmYzVThVb1YrZDQ2NDMydkhVNWdIV0FRUUFBQUFBWU1oY3QwbXpBYUR2amdDYzNZYmdyOXMzaGVDdnUwL1V1RUkvVityUXIzay9KRDJVVHlBQUFBQUFBTU5scGx1bDJTSWdKMDU4VUljUHp0M29wMFd3bFg5YU9DL2RmWkpzVkovYzV2dTFWdnZnYnAvQnB4RUFBQUFBZ09GeTF5M1N6QWhBKzJ6ZEx1bVRqUHJyN2gwZy9Jdi9GSFUxeFhjSUkvM3FTVDdLcjh3aitXUUNBQUFBQURCY0x0MHN6YTBCS0xuMG9hUzdJUGpMT1MwRWYrMS9pZ2o5NnU0L3NnOEVnQUFBQUFBQURGaG11a2xhQ0FCTi9zSG1UUlA4NVo4V2dyL1lUMUQ5NEcvNG45aG1vVi96QWg2SndzNTcrRnQwVno2eEFBQUFBQUFNMDNTcVQwaExJd0N0d1FoQWdyLzgwMEx3MSs0bmFEeWovZEtGZnMzMm5mS1k3L0REckFNSUFBQUFBTUJBdWVsR2FTRUFWTzBwd0FSY3k2ZUU0Qy8wa3hNZlNoSDZEZVY0elowQUVBQUFBQUNBZ1RwZytxZzBXd1Y0KzNiK1ArUGlBZ0t1NVZQQ09XbnZrMk1kN2FlUFk2dC9qRDBmTHdFZ0FBQUFBQUFEdGJtbEc2U0ZBTkRkUDJoQitRTWgxL0lwNFp5MDg2bXhEdmZWOWJFMU84WWgvQ1dhT1lWQUFBQUFBQUFZcUFNVGZVUmFtQUk4a1ZkTUFXYWR2K1ZUd2xUZnlsT2tiZ3A2ZEQzRnQ2L3B2VDZRdjhTZFBqekNMOUtFVHprQUFBQUFBTVBqMG51a3hUVUFmZU5ENWJmNzJEOGRCSDhWSDdCTzF2WWo5T3ZuUFozcHg1RVREenAwZno3eEFBQUFBQUFNeitrbjlUNXBxUWpJN2Y4cGFacC8yNC90MDBId1YzcDYxTzFvdnk2UGFkMUN2OURLd1RabEdqQUFBQUFBQUVQamtyL3V1TjBoTFFTQWRwNU9TZjd4K2R0L2JKOE9ncitLRDlYS2p2YUx0eHFoWDZncGhVQUFBQUFBQUJnY2swN3QvcHpsUFA4aGdyOFpCSC9GcDBaTmdyLzQvUXozbUdhUGExeWhueWZZdjdrWUFRZ0FBQUFBd01DWWRNZnV6OW55emJ4OWtGTWtncit5VTZQVkd1MjN6cUZmbzh2SS9uK01BQVFBQUFBQVlHQ20wbTI3UDJmTDRVQlZKZUFWUi9CWGZHcTBPcVA5Q1AyYUhQZlNzZC92VTFlZWZtZitRZ0FBQUFBQUdCRFhUYnMvNWt3QnR2VU1BQW4rQ2o0cjdRZC9mWXoyaXpldTBNK1ZPdlFyMy9EZ2daT1A0NjhGQUFBQUFJRGh5S1JQelB3OHorWC92bFpuZytBdi83U291Mm0rWFIxTFY2UDloaEQ2MVZmem1OMGV6MThOQUFBQUFBQ0Q4ckhkSHpZV241bVl2MmRhWTZUVDZCRDY1WitXNkZkWXkrMTNkUnoxanFmcjQwcS9YMHZVQjM4Q2Z6MEFBQUFBQUF5SG16NjgrL05TQUtqTkErL1J4dVlLSHozQlgrNXBpWDdGS2dWL2hINU4rK0RTNDkyVm1XbktYeE1BQUFBQUFBTmcyaXYwdTd3RzRHZmQva0ZKSjFidW9KbnF1M3hLRkR0bGRKalRmSnRQOGEyM3YyRy9WMFh2bXpYZXYrZnY0YXlUYnpuNFlQNnFBQUFBQUFBWUFKUGM5ZjdkWDVjQ3dKMFJQS3UxRGlEQjMvenAwR29VOVZqMWRmM1NoWDdkN0grcWpHbkFBQUFBQUFBTWdVdlRUTy9lL1RYTDI4Wms3MTJOZzJYVTM4SjczMG53MThVeHRGMmdwUDYrK2ppK1pzZVp0Kzk2KzNjS2dRQUFBQUFBTUJBYnBuZnQvWndmQlBoN1JuMkVoSDRMNzJlczRhM3YxOVhhZmo2Szk2ZlpNYloxdkM0eEFoQUFBQUFBZ0NFdzZacmI5NHVBWlBrYitUaEhBRExpYi81MHFMMzEvYm9ZSGRmSGFMK3UzNXUrUi9vbHZyWTh3cS9RR2Z6bEFRQUFBQURRSTVQTXRhWGp0bGVvTXpjQWRNL0dOUUtRNEcvK2RLaE84TmRHMjEzMHY5NXh6TzdITzM1ZnVnNzl2T1ZqbldsN2NzZkc0Y2Z5RndnQUFBQUFRSSsyWTdJN1poL0tEUUFuMlVpbUFCUDh6YjYzb3c3K3VocnR0NDZoWDdmSE5XVWFNQUFBQUFBQWZjdDA2K3l2dVdzQWF2UFVlNVFkR1BhQkVQeHRuNGJvVnd4cmZiOVZYTnV2cnpYOWZBREg1R1lFZ0FBQUFBQUE5TWtrVFhYRDdFUDVWWURQMDAyU1BqSElnMkRVMy9acDBMZ3IrcTdhYUw5VkhPbFhzMjBDUUFBQUFBQUErcks5L3A5ayt1RHN3MW5KemYrN0IzVUFCSCs3NzB0cndWOS8wMGJUOUwvK09lcnkvVmc4cnBVSS9YWmU2M0w1M2U1NDgrSDdjY1VGQUFBQUFLQUh2bjFQYnd1NVhtRUFtRW5EcUFSTThMZjcvclVlL0EybjczSDluOTNIc0VmN0RTLzBhMUlneEJmKzM2NnR5ZFlYY01VRkFBQUFBS0EvTHIxajl2ZVNFWURXZnlFUWdyK2FoVDNHR3Z6Vm4rYmIxZnV3YXFGZi9HdVhBNytsSTNiN1FpNjFBQUFBQUFEMFlDZCsySkwrYmZiaGplSTdmWDl2ZzNvRXpSRDgxUWpPMm1xNzdiNFByLy9OOXpXOFFoNWUrM1h4cjNUekwzYVhtWWsvWkFBQUFBQUF1ckt6L3A5TG1tem9uYk5QRlk0QW5FNjgreW5BVFBldE9lS3ZqYmJyOWJ1dDBZcHQ5Ny9ac2RSN1A1cnZyNTEyUTBiNWxlN1Q3ZTYzdk9YZ1E3anlBZ0FBQUFEUUlkL1BBSTVzNkFPelR4VUdnQnRiays2bUFCUDhqVDc0VTB0OWI3di9pL3ZvYW9ydnlvVitTL3UwTCtMS0N3QUFBQUJBOTl4MDYrVS9icmZQUHBZVmIzM2kzeVZ0dGQ4cmdqK0N2K0wyZlZEbmYvRll4aHY2RlJYd2lOMmZGMjdnckFNSUFBQUFBRUNYZHFZQXkvWFJ4YWNLQTBBN1Q2ZlVaaVhnTlIvMTExYncxM1p3MWxYdzE4VzU3MktLNzFCRHY2VDd5MGtFVFRyZkw5S0VxeThBQUFBQUFCM1lYZi9QSkpQZXYvaDBWdjVhZjN2eURoSDh0UnI4dGRubnRxc1JyK0pvdjM3ZkI3VTh5aS8veVoySHo3cnQvZ2Mra3lzd0FBQUFBQUFkOExsYjlBOHNQcDJWdnpiN2w3U2RJZmdMTTZ6Z1R5MzB1KzIrTCs2ajNuSDBQOXF2cjlDdjlFa1BlKzJXTXFZQkF3QUFBQURRTWN2MEg0dVBsUWVBNW1rQ3dEVWU5VWZ3MTIzZm0rMkQwQy8wU1EvcXA1L1BaUmNBQUFBQWdBN1lUcUt4UFJYNGc0dFBsd2FBRTZuWkZHQ20rNGEvU3dSL3lmcmY1V2kvUHZ2ZVorZ1hJbk05eWEvWFFhN0NBQUFBQUFDMHkyWnUxamM5Y2cxQUhUejFMNnFiY3pEZE4rVHQwYW9IZjEyczd6ZlcwWDZyR1ByTm1zcVAzWHo3eHVPNERBTUFBQUFBMEM2ZitiK1RxVDYwK0h4NUVaQ0g2eGJsTEJ4WXZrZW0rNFlaVy9CWHI3REhjTTUzL0RITTdtT2xRcjhhNi9uRjluTzNyeWF4RGlBQUFBQUFBRzJ6N2Z0NGMybmpZR1FSRUVreXQ3QjFBQW4rd3QrUmdBQnFlTUZmRzIzWDczdWJVNVhiT0k1QmhYNGxUelVKL1hLZk55TUFCQUFBQUFDZ2JhN2Q2R1B6M0hQMXNjV25Ld05Bejd4NkhVQ0N2d0J4bytmRzFOLzR0dHZ1KzJ6L3h6UGFyNi9RTC82NEl2cnBldUlOVitnTXJzUUFBQUFBQUhUQTlORlhQTm0yRmgrdURBQTFWZkVJd0RVZDlUZTJ5cjdyR2Z5cGwyTm9Nc1UzeVg0Nm10b2IwYytEazhuQkwrVUtEQUFBQUFCQWU4eDJidmluZWwvZTg1VUJZQ2JQRHdBSi9xcE92VlkxK0d1N3NFY1gwM3hUSGtOWDYvcjFGZm8xUFI5bS90VmNpZ0VBQUFBQWFNOXVUSmVaM3B2M2ZQVUl3TTNOdHkrMXVLYmhYNWpWRC83YVBNZGRUZlB0bzcrckd2b0ZyQ0g0MVg2UkpseU9BUUFBQUFCb3djek51R2MxQTBCN3ZHNlE5Tkh0VmhqMVYzS21SUERYUmIvaitqN2JmaCtqL2RZaDlBdHc1NXZQM1hnOFYyUUFBQUFBQUZwZysvZnF0YWNBUzVLNy84dTZoWDhFZjZzenpiZjdjNngwb1YvSnpnY2UrczI5YnBwbFg4TVZHUUFBQUFDQXRHYnYwVzM3cHYxOWVkc0ZCWURtL2kvcmRPTGl3clRVYmJiWjErRUVmNHJ1ZC9mQlg5dWovWUpDUDIvV3A3cDlXOXlYTno1M3JBTUlBQUFBQUVCS1pndHBpVWxaa3hHQVVyWVdBV0RxTUkzZ3IwbmIvVS96RGQrK1hyQVdlaEI5aFg1MXoxdkJheC94eVNzUDM1ZkxNd0FBQUFBQWFiaHJNVHJadW1OTC81RzNiVkFBT00zODdTdDl3cFIydWkvQlg1TzIxMnkwWDhDNmZuSEgwVjNvRnp0QzBDWmJqQUlFQUFBQUFDQTEyL3UvSDd6K3VKM00yeVFvQU56SU5sZHlCR0JiNi96MTE4LzR2ZzRqK090L21tL1l0aTFNOFkxNVRhSisxZDFQazlkSjBoYlRnQUVBQUFBQVNNTm1idFNuT3o4WFRQK1ZRdGNBL0V4OVVOSW5WK1VjaldXZHYvVUovdUxhOWtSOWpBMytHcCtEaEZOOHh4RDYrY0wvTStuelAzYUpUdWNxRFFBQUFBQkFRenMzNlhQVGdMT0dBZUJPdTlldDBQa0owTjkwMzdFRmY2NXVncjh1ejJ2YlUzelhJZlRMY2VqQW9jbVhjcFVHQUFBQUFDQ05iUFpHZnFyM1ZtNVh4YVJyeG54Q3hyRE8zMWlEUDdYUTUxVDk3bjIwWDhOaldvSFFiMzVieTc2R3l6TUFBQUFBQUEyWlpDNzUvdnAva2xLTUFIUWZaUUJJOE5mbk9ZM3ZjNnArajNtMDM5QkR2OFdwdlhINzg2LzBpelRoU2cwQUFBQUFRSDAyTS9YWGQvKy9GRk9BSnpZWlhRRFl4anAvcWZ0SDhEZmZkaC9CWDZPMlc1amlHOXVmcmtNL05kdmZYVzg4ZCtQeFhLb0JBQUFBQUtodjlsNTdKZ3g4WDlIMndRR2dQblh5N1pMdUdOTkpxTmJ2cUQ4bDdHTmIvWXh2MTNycGMxdkJYK1ZvdjRiSGs3U3ljT0xYMVIvbFY3NC9NMzB0bDJvQUFBQUFBR3F5aFIrM2Y5ODg2NFErVVBTUzhEVUF6OWVtUy84ODVPTmZyZW0rWXczKzFGbWZZMEt0dWtGYnlBNjduT0xiMXZscDByZktmUzBsZ3Y0TlhLMEJBQUFBQUtncC81YjlQMTUzM0RhTFhwTEZ0RzhhN2pxQWJZUnFxZnZYeHBUa2RRNyt3cllkM21pLzJPUDBHdWRtVUtIZjhtZm1BUisvK3VCRHVXSURBQUFBQU5EUS9yMzMrOG8yeStJYXphNFo3bkZXNlNkVWF5Tk1JL2dMMlhhY28vMVdOZlJiSEFTWStaUnB3QUFBQUFBQTFMUjM2NzBUejdqMG5yTHRvd0xBekhUTmtBNTB5Tk45Q2Y3UzlibU5hYjV0anZicllvcnYyRUsvcGVlbXJBTUlBQUFBQUVBdHZwek1tUFJ2WlMrSkhBRjQ2anBKV3dNNHpnQ3JWK0NqamZQWVpqRVNUOUMzbU9DdjBURW5ITzNYeGpIV1BhL0pRNytLQ2gvQmZUUTkvb1lyZEMrdTJnQUFBQUFBUkxLWkcrL2QvNXZwWDh0ZUVyY0c0SG02VFNwdnNFMXRUUGZ0cjMvOXJmUFhkdkRYVmQvYW51WWIwNGN1cHZpcXBUNVY5aTFpYW0vTTVXUTZ5YjZLcXpZQUFBQUFBRFhZL1ArZFRCTUdnRHN0ZHo0TmVIV20reEw4cFdoalNOTjgyem4zM1ZRV0RqcEgzcnh2eGYyMHIrT0tEUUFBQUFCQTVMMjFMOXlrUzV0M25FeTRCdURPWGpvTkFGTld6dTEvblQ5MTNzZDYvUnhlOEZkbmZiK1FKOXFjNXR2bEZOODY1N3lMME04WC90L0NKKzJMYnJwTVozUHBCZ0FBQUFBZ25HVmFIQUg0dnV1UDI4bXkxMnpFN21ScXVpYnI0R0RhQ05iV3FYL3hiVnBMN1RackkzYVVYZWlPWWtPMjlzNTd2VkF0MmZuMjlPOXpSUDhPbkRvdytXcHA2eVZjdmdGZytGejZUMG4veUprQWdOYXVzNWxKUjZhYTN0dmxoMjN2SnMxa1ptZVkyd1puQ1VEQkRmdS9WYjBrK2dLeWNXRHptdW1wRFZkTVl0VDRPUElRL0tWcGsrQ3Z0VDRrM1g1bFFyL0YvZjAzU1FTQUFEQUMxejdEL2tIU1AzQW1BS0I3ai95bHpmZVpKdmZoVEFESVk5STdxcmFKSHN4bmo5UW5KSHQvR3gwZWNwR1B0dGI1YStNY3FvVitkajNWTjdTOWtQWDk2bFFVYmx4Vk9LYlBpZm9TZEY1YW10NWI1N093ODZvdnZlRUtuY0hsR2dBQUFDaTdlN083Y3hZQWxGd2szbG0xU1ZhdjNmVHJBQTY5eUllQys2Zk8reGZYWm5mQlg1M2dyWGFmRWxYelRYMWNkYzVqc3RDdlpPYzloMzZ6RG0xTkp0L0kxUm9BQUFESTk5am4rMUZUZHBnekFVQmFTSFIyYnJLbkZSV0FwWm9Cb0x1U0JZQXBSLzBOdmJydk1BcDhxUFYrdGxuUk4vZkJqb08vbUcyN0dPMm55UFBTUmVqbmNmdjdUaTdoQUFBQVFMNlRuemo1Slp3RkFIdlJreTg4SmluYmFDc0FsRitkb3UrcHc3VlVWalA0YTcrZm5RZC9PUSsxVlZGNDhLUDlCaGI2Ulc3NzJSKzdVZy9pYWc0QUFBRGsvZHM1TzUrekFHRDNKdHFYNDUyYnIva3AvV2ZWeTJzRmdCTnRYYWtHV2RIUVIvMHBVZDhrZ3IvNTdieTE0RThSKzA5OW50c2U3ZGRrWGIrNDk3RzkwSzlzUktCTHRqWForQTZ1NWdBQUFFRHVUZnRqT1FzQWlwajBUcGxWM3NqWFd3UHdQSDFjWHIzQVlGRVFFTlI5UnYwMWFLK2JRaVNwMS9jcmJIUGd3WjlhN0VmYjYvcDFGZm9WUGU1N24xaC9xbDhjWDVVY0FBQUFXSFUrdFFkd0ZnQVU1UUt1NnVtL1VzMEFjUHVWZG5uTnZwWG9QbHdieTNSZkpleGowMzZ1V3ZEWDVqVGZaRldGRTA3eDdUdjB5MzNjZGMrUEhKMThPVmR4QUFBQVlQSFdPN3NMWndIQW5ObjR4OElDd1BvamJseVhTL3IyMFBBZ3JQY3Ayb2s1aEpnenE5SDNyMmtmWTBLdlJ1MTUrL3VPUFJkMXB0TTJidHZUdllkZTQxWGVjTHZZeDVYcHV5WDlMVmR5QUFBQVlOdERmdW1PQjdsOHc2M09YWUExdUhQc1FtUnZmTWpIQW5UQXRWOEV4T2IrRnY0dDVPVzFBOEJNZHZtMElpTHdoSC8wNjdiT1grb0xKc0ZmdlhNUk83SXV5WGxORlB5TklmUmJlUHlyUC9ZV25YUFh4K2hEWE5rQkFBQUFLWnRzZnRabTBML1NyZm91MFhlZnQ5cjNsMlY3c1pBMlBPUlZCYjlaMFkwRlVTRFdnOWwyQVJEZitWdlkvZVJ2VGRzZUFmanVrOWZyL2hzM1N6cTlmcEF3MUZGL1F3Lyt1dXRqNkZUZjJtMDFETHZHRnZ5dFMram45ZHJaT0RYTm5pcE5mNFZMT3dBQUFDQ2RuUGo5TTk5YytNZDBSR2kyTUV3b0pBUXN1OU9jSDRnWUZ3S2FMQ2ZFODV6dDV4K2IrODBzWnlTZ2l4QVE2OEIzL2orYi84UHdFeHRoTlRwcXJ3Rm9UOWFXU1cvSzYxREt0ZjVTbnFqVkNQK0dVOWszZFVYZm1INjNzYjZmcTUyS3hxWEhsYWlLYjVkcitubkE0d3JZUHZjMWJ0L2p6cmMzQUFBQXNIM0Q3bythKzFlejdmL3NjLythbnM3OTY5b0xIdDk5dlM4K1ByTzk1ejYrKzgvMThydFlMN203TGJ0ZjhlQTc1TGg5QWl0ci8yL3gzLy8xcCszbXNPdEpBNzY5RG1EbG4yaFJMNnRDaHhSV3A3cnY2Z1ovZFlLM2xPZWg3WXJDSHZpRXE5MENJK0h2Yjcxd0wvYnhndWZ1LytFM2J6eUpxemtBQUFBZ3lmWFk1VnRETDdnSEwvcXRhUEc4ZW9GY1ZRaFk5cmpuUmdKZXZjK0M0NC9MSW9EVlk2YTNoVzdiTUFEMHkwTkRoYjVHL1NsaHY0WWMvRFU5ZHpFQlhLMjJPcTdvbS9ZOVVHdWovYm9NL2J6R05xbER2NkxIWjUvYk12OXVMdU1BQUFCWWQvZi85WnZ2NXZMN2VOVGRYM2dJR0JQL0xiVm1JZnNzYWFOeENOaDJtZ0NNZzAvMXo2SGJOZ29BSjZlMnJ2Q2d2N0loai9vTGEwK2Q5eTJ1Zjk1eWYwSkNwMVVML3BKTTgvWG01eURtUEZUc05taWJya1lBbGp6KzMvNzlPdDJKU3prQUFBRFdtY21mdUg4M2tIZXJXQjJhVmQzUGVrbllWeFU4Vm9lQUZWT0JHNFdBdnZSNnBnSmpMYThUV1VjakFPMnpkYU5YbGh0bTFGLzhjYmJmdnlFSGZ6SEJXNXZyKzZsSnV6Mk05aHQ1NkRmNytCRzdJM3NLbDNJQUFBQ3NzMHg2NHZ6ZFFkNnRka3pzbFQ4VnVFa0lXTDIzZWlGZzJGRVFBZ0piMDQ0Q3dPMi9WNys4NkptcUVHdW9vLzVXZVoyL050YmFxOXBCbThGYnluTTE5dEYrc2RzTUxQU2JlOXhNMzgrbEhBQUFBT3ZNTlgxaXhkM1gzTzFqay9VQTQwUEFuV2NwQ2dMMDZkVFdxYXBCZWZzU0JJRFo1YVZYb2VBLzB5WVh4ckNlRHJ2eWNMdlRrVnN2c3JFR3dWL01hTCs2ZldoN3RGL2ZhLzJGUDI2UGZOOVZCeDdEOVJ3QUFBRHI2QXVPKzRaa2o4MjdiMWkrbmFRb1NKdjM5Y0JRbWZTTzY0L2J5ZER0R3dlQW0yNlh6MTg1R1BVWGQ4SHBacDIvNm0wYVZ2YXQwZGZHd1Z1RDg1UmttbkhDYWI0eG40SFVvZDlnUmdENjluKzdHMlRUS2NWQUFBQUFzSmIrNDdTYkhpWDVzZUQ3TzJ1L0tFamRFSkNpSUVBN1hPRUZRS1FFQWVEQng1NjhYdEtuR1BXMzM5YVlwdnMyRHY0OC9sd09vYkJIN1RZVFRQTk5VbHlrdWt1MWdybVliV01EeGR6SFowTy81ZGQ4eTRldTBsRXU2d0FBQUZpL08zdDdZdkZVMXZLMStXb1hCYkh5cWNCVmoxTVVCT2hjdHdHZ21hYVN2U2treEVoeUhkUXdSLzBSL0xXOHo0YmJKZ3YrR3ZXMW5kRitWYS9yZWdSZzViWUxHM2p4YTg0ODVaTnY1Wm9PQUFDQWRXUG1UOXEvanc0TUFTTXFBNWZkcFZNVUJCZ0hsNjZMMlQ1THNsT3p5Mk5DaWdZSEYzS3BWSmZUa09NdUo4Tlo1NjlXV3lzYy9MVlZ6YmVMMFg1TlIvWDFIZm9WdGIzOU92dFI5OEEvSEFBQUFHQWw3dXJkSkQycCtpNnhmbVZnaW9JQTQ1ZEZWQUNXRWdXQXBxM0x3LzcwYWw3L2d0cGl1bS8xTnRWQlZNcmdyL3JySWJhdERvcVpKRGptbVAySEhsZWJBWjhpdG0wNzlGdCszQi8yM3FzMnZwaExPd0FBQU5iRmc1NTV3NE1sdi90K0dCZDVKNWlvTWpCRlFZQkJ1L21hWitqOU1TOUlFZ0JPcGx1WFNkb3FDeGJxR25lUmovRk05MjBqK0t1MXo0Ym5KOG5VNW82RHY2cm52Y1pqVWs5VGhKT0Vmdk9QWis0L3dyVWRBQUFBNjhLVmZjSGV2NDduUXNDSUNiZ0pLZ09YVFQvT2Z5YTJLRWpKcUVhS2dnQlYvbGxtVVIvcU5DTUF6OU5Oa3Q2UzhrOXFOVWI5cWJXK3BaNTZXOVg0V2dSL2FuYk1xWU8vSm8rMU5RSXdkOXNXUXIvWng2ZlNWNzNuelhvdzEzY0FBQUNzaCt6ejgyNHQ2eFlGcVhxOFNXWGdzc2Y3clF6TWVvQlljUjQzL1ZkS0ZBQnU3OXRldDhxai9vWXkzYmZWcWJjakMvNWlncmMyMS9lTGVkODg0dmxCandCc09mUmIrcWVIYi93Z1YzZ0FBQUNzZzZuOFNVVjN4MjBWQmZGYTk1YlZ3YU5iMVgwL1JVR0FPanpyTVFDVXBxOXRmQUJLRy80bE83SEJXNDU4bmI4YS9hdzl5ckRCdVdtam9tL2YwM3hUUDlaS1FOaHQ2TGRRRU1TLzg1MVg2QXd1OHdBQUFGaGw5LzNWanoxWThuT1cvbVVjRklUVkx3cFMyRzdEb2lCVmZhWW9DRkNQU2Y4Yys1cGtBZURHNGMxTEpKMnErL29oVnZodFk5UmZXLzFJdmM2ZkV1d3Z2TytyRmZ4MVBkcXYxUkdBUFlaK0M0K2ZubVhaZDNLWkJ3QUF3Q3JMSmh0Zm1uOVB0cmdlWU1SZFordEZRWnlpSUVESEpnZDZEQUR0NGJwRjB0V3hyeHYzcUwvK3AvdDJYZUJqeU1HZnE3MWlKaW1PdWEzUmZsWG5JRG9nOUpuZ1QybENQRS95dVAyb1g2UUpsM29BQUFDc0twZC95ZjZkU000ZFJWQlJrTHdRc00yaUlFWDMwQlFGQVZyeS9xdC8wajRlKzZJc2FSZk1MbzY3dUFVMXF1R08rbE5yL1VxNXpsOVZwN29PL21LT3I5RStXMTdUTUxUTmtQQnRFQ01BRjU1SUdmb3B3ZU5UNmI3dk9uZnlsVnpyQVFBQXNJb2UrM3cvWU5Mbmw5L3hwYWtNWExiMStJdUNGQndMNndGaVJaaDBWWjNYcFEwQXQ2YkJBZUE2alBxcjI0ZFdSLzFGN3F2b2E2ZE92MU1lWCtreERpRDRpdzN2bFBpeDROQXdZSXB2bjZGZnp1TS95dVVlQUFBQXEraW1Xei81MmRMaXV0Y0ZkeWNOS3dPdmRsR1Fra0NURUJBcndHdk12cFVTQjRBYnRubXBwQk1WSFEzNDgxcS9VWDlkVHZjZGFtWGYxQlY5VXgvcmJIc2UwYmU2ajdVMkFqQng2Q2QxdWk3Z0Y3M2ppb09QNUpJUEFBQ0FsYnVwZC8rU3NEQ3ZyY3JBUlhjNHk3ZkVxMWNVQkJqVHRXSUFBYUNkcDlza3ZTbjhqekszbFJxWGlRWW5McmhQN1k3NnE5NG0zWFRma0gxMUdmekZIRi9NbE9ZdWk1bTBFZWlwd1dOTDdVV3U2eGR5UG5zYUFTakx0bjZJU3o0QUFBQlc3cVplL3FXekFWM2xIVXJ5eXNCeFJVRjhwWXFDRUFOaVBETFRXMnE5TG5sUGN0WUJURFhxTC9SU0dIWnhYZUZSZnkydTg5ZEc4TmRsRVpPWS9ZYTAyZlUwMzlwVmZBUDJNZUJwdjR1UGYrdTdMdFhkdU93REFBQmdWZHozdHo5eWQwbVAzUSs0UE9jT0p1ZHVaTENWZ2RzckNwSi9tMDVSRUt5TmY3L21BdnRZblJlbUR3Q24wOWZGL3dtMVcxQ2ozcDkxdjZQK3Vsem5MeVlNUy9VK2pUbjRxeHZ5cFNqMG9aREhBa2I3cFJ3QkdMTnRvc2VQYkcxc3NCWWdBQUFBVm9adGJYelY3djE1Y1FCR1VaQzVzMEJSRUt3aDkzb0ZRS1FXQXNDTm16Y3ZsM1JIK0o4T28vNFVjRm12UENjTnB2dW02WFA2S2JjaHh4ZXp6MVRCWDlsalhSYjZXSG9zWXJTZkF2czgwQkdBY3ZNZnV1WWFuY1hsSHdBQUFDdkIvS3ZDaW1WUUZHU3VaWXFDWU4wdUZWbTk5ZitrRmdKQU8xOTN1T21LSVJiNlVJOTlXdFhwdnEydnRUZWdpcjVsai9WUjZLUEphTCttby9wYURmZkN0ai9qeU1uc2YzTDVCd0FBd05nOTRObnZQQ1RYbHl6ZXVYcmhlb0JkRlFXcER0TW9DZ0owcTI0RllLbU5LY0NTYk9vWFYyeFI0MCsvOXNucGZTVGkyS2I3eHF6enB3VDdTM2w4TWZ1c2FqUFY2TDVXUmdVMkhPMm53UDYxV1NRa05sQmMzSDVxOXIrdXYxNm44UlVBQUFDQU1kczhlZllYU0RxOStEWTFJSWhycFNoSVVXdXJYeFNFR0JCRHRYR2dYZ0VRcWFVQVVLYUx5NTZzc202ai9xS1BJeUQ4eWR0UGwrdjhOUTcrUFA3OHgrNHpOdmdMMmFiVlVZRUpSL3YxTlFKUUNkcVllZnpPZGx2MlBYd0ZBQUFBWU16TS9LdUs3c3FLaTRLSW9pQ3pqeVV1Q3NKVVlBelUrNjcrU2Z0NDNSZTNFZ0J1SE42OFV0SnR5MWVFYnFiOHJ1eW92eEdzODVjeStJczV2allyK3FiYXBuWmcyTUpvUDlYb1g4enI2N1liL2JqYlQ3enpuVHJFOXdBQUFBREd5Nzg2TEtqcXJpaEkzUkNRb2lCQWkxY0tyei85VjJwckN2RERkVkxTWlhOWGdxb0RTWFZDd25xb0lZLzZHOXAwMzVnUmVMWE9UNHZyR0lhMDFYYndwNXF2YTNPMFg1Y2pBRnN1RW5LdkU1K1lQSld2QWdBQUFJelIvWC9qWTQrVmROKzRhYkpWZDJIZXVDaEkxZVBqS1FvU2N5eHhheEFDWGN1c2ZnVmdxYTBwd0pMTS9COFo5YmQ4VWZMWXdkZzFSc1VOY1oyL01RWi9ubWlicU5jdFBORlpCV0dOcDBoSXp1TS9mZEZGbXZCMUFBQUFnTEdaWnZZTjgzYzZ4WGRrNFVWQjhscFkxNklnTWNlaTNQVUFpZjh3bU91RjFWLy9UMm94QUhUWnErUC9uT3Z1SzhUNmpQcExjYjVhSFdIWXNMSnYwNzZIaG5wS3RFMkthYjVqR3dHb2lHMFRQSDcvaDl4bjh0LzVPZ0FBQU1ENCtEZEUzYTFSRktUMDhUUkZRZHBNTDRENkY0dERRNXdDTEVrSEhuM3FPcE0rcUtnLzF4cG5JR2lyY1kvNkc5cDAzOW9GUlJvR2YwMlByK3ZnTDJTYjBHbSs2dUN4cHFGaGp5TUFaV2JQY0cvdmVnWUFBQUNrZHY5bmZmZ1JrajlrZWUwNUw3eXpvaWhJNExFMENnRlpEeENEOUw0M1hXQTNOR21neFNuQWN2ZmxVWURkVHZtdEh2Vlg5OCs0bFZGL0xSWDU2TDNBQjhIZi9PODFwdmtPWVFTZ0dyNCtWZkdRL08zOVlXKzdhdkkxZkNjQUFBQmdMS2JUeWRmdi9ZczJTUWk0YmtWQll0Y0RqQm5FUWdpSXdibTZhUU90anBqeHpQOHU3czh0c04yZ3JjS0NQMjloLzdWSC9VWDJyZForYW0vVG9NQkhqWE5lZTVSaHliNVNoSHFOMWdWc01NMVhIVHcydEJHQUlkdjYvTDlQTHVBN0FRQUFBR1BoN3YrMU9uREtmOFNqN3R6R1d4UkVUWXVDQkIwUlJVRXdDbGMyYmFEVkFQRGc5T1EvU2pxVjhrK2t6eW0vMVNQTnZKTlJmME9iN2h1enpwOFM3SytxNzdIQm42dmxVWUl0VGZNZDJnakFya0svb3NlbjB1UGU5dWFOTCtGN0FRQUFBRU4zN205OC9DR1NIalYvbjdRWUFpWXVDbEluQk95NUtFaFZ6RmdaQXRhWUNqemZmNHFDWUNDbXVxeHBFNjBHZ0hhZWJwcktyaGpTbE44MlIvMUY3N2VGSWg5RERmNjZxT3hiTi9oVFc5c2txT2JiNWFqQXRndUgxRzAzNkhIZlB0OWJVLzlGOTREL0JRQUFBQURvVTdiMWxPTFFxZW9Pc0U0SUdEcUZscUlnUzg5UkZBVDlPM0hMR1FPZkFpeEo1dlBUZ09zWThxaS84Z3Rad1g1YkxQS1I0aHgwV2VCamxZSy9zc0llSWUzMFBTcXd6bjU3TFJLeUUvcTV6ejMrV2RkZU9ma3ZmRDhBQUFCZzRMNXA5czZxZkhKdjNjckFPZTBFVmdZdXU5Mm1LQWhUZ2RFeDA5WHYraEU3MGJTWjlnUEF6RjlWOTdWakdQVlh0YlpBeUtnL0JleW42ZkcxUHVxdmhYMVZ0ZFZGOEJjOFBiaWlzSWMzN0U4WG93SzdIQUVZczYwdlBKQVQrczIzYmY0TFZBUUdBQURBVU4zdk56OTJucVFIRmQ5V2RWa1VKT0plbUtJZ3dmc0VrdkxtMDMrbERnTEFBNDgrZFoya0Q4WWZYd2hHL1ExcHVtOU1nWThtNzBIZG9DOUZHM1VMZTRUc214R0FGYUdmUXNORGU4UzFiNTQ4aFc4SkFBQUFETkdXYlQ2bDZHNmxlVkdRVkpXQkIxb1VwUExlT0gxUmtEcGJBaW01ZEhtS2R0b2ZBV2h5U2ErSlBMaVFsaE8xRS9lYUxrYjlwU3p5b1lCOVJaK1RGZ3Q4dEJIOHRUSktNR0h3cDVxdkc5c0l3SFpEdjRYcXdLNWZ1UDU2SGVTckFnQUFBSU55M0RONTl1VEtFWDI3UDBXdkJ4aHgxemZHb2lDOXJ3ZFlZNG8yME5DR2p5UUEzUGtqRDFvSHNNOHB2ME1hOWRlOG55MkZqQzJ1OHpmRzRDK21ldkFZUmdYVzJVZXlnREJCNkxmdytMbTMzNXA5TjE4VkFBQUFHSkp6ei96d2syUityOXo3eDZBaUZPdFFGQ1RGZW9BbHg1SzRLQWhUZ2RHeTkxNzlEUHZQRkExMUVnQWVQSG55N3lXZFV0REZvY3d3Ui8zbHR1RWQ3S1BGWStsNm5iK1FmclF4dGJkSjhLY1U3V280NndMMk1nSXdNdlR6aU1mTjdXZXV1a3BIK2I0QUFBREFnSHpuL3ExdHlHaXlkU3dLRWhESWRWWVVwT0JZQ0FIUkZkT2xxWnJxSkFDMEoraFRMcnVpK2crcDhpb1c4cWNjSmZtSXZJR1Arb3MrSHcybSs2cEJuOXNPK29ZUS9JVnNrM3FhYitySGFnV0VBWVU4RWxVTXZvZHRaZitUYnd3QUFBQU13VjJmODlIVFhQWU5zN2U0SGhTQVVSUWt0eldyNm0rS29pRGhJd3dKQWRHU3kxTTExRm1sVEhQL093VUVDem12VkI5VGZzY3k2bS9kcC91dWF2Q25tcThid21PNWozY1grczJaeXA1KzNSdDFKNzR6QUFBQTBMZWpKNmRQbHZ5MHhkdmRzS213RkFVcGJ5MHVrRXRTRk1Rb0NvTDIrU2dEd01sOEFNaW92MkVVK2VoeXVtK2Z3Wi9VVGZBM2xuVUIyM3lzYUYwL1ZSeExjTHR4ajkvcDVLR05IK05yQXdBQUFQM2Z5UHQzRk4zSlVSUmtyRVZCVXFVVVFLNWI3M1JDYjB2Vm1IWFZhM2ZaeWJjYy9JQ2tjMUtFZjIwRWY5V1hselNqL3ByMnM5WHF2a3AvUERHWDR0Uy9CNy9HRTdUUjBUWXBYNWY4TVk5N2ZZcHRxeDUzNlJiM3JRYzg0UW42Q044ZkFBQUE2TU45ZnVmRDkvVk5mN2Nrczd4NzNwMDB5a3J1aStkK1draWhTbC9uUmZmWGk2K2JiOWNVK2pyTnBXbFdjbDl2UmZmN1hyNi8vR2NXanpGeW43Tkg0algyV2ZoK2xCMExFTTZsZjNyckJmYkZxZHJyYmdTZ3lTVzlPdFdVM3hvbnJ1SjVyeHdHSERKRnRtb2ZWWDMwbG84ajVsaFNoWmtlOEhobkkvd1dmMDgwNGs4ZGJqUElFWUFGeFR4aVJ1K2xtdmE3VkF4RU9pM0xOcDdHMXdjQUFBRDZNajAxL1M2VlRlSU5MZ3BTNHk1eEpFVkJ2R0ovYlJRRmlWc1BVTVhIUWxFUXRNQmNWNlJzTCt1NC8vOHY0TXJVNU5KVzZ6VXBSdjBsWDA5UWNmc0lQWTZoVFBkTi9YdDBlTmhEOE9kYXNYVUJBOWIxVTBXYmRiZU5mdHo5ZjF4MWxlN05Wd2dBQUFBNmQ5dzN6UFNkbGJFUVJVSDZMUW9TdEZkdnZDVVF6SFJaeXVZNkRRQVArc2xYUzdxdDhHcFhZYXlGUHByME1YUWZ0WTZqcGFJbFF5bndNYlRnTCtRMW94Z1YyRkl4ajdaR0FPNDRmR3ByOHN0OGd3QUFBS0JybjM3R2g3NUswajFuNzdyS1F6Q0tnc1E5azZnb1NPUDFBT3VPNEFUeVA1YW5UbzU0QktDZHA5dmsrb2VjWjhxUFd2WENQOVc2cUJTSEhtMFUrbWg2M0YyTytxdDd6b2NXL09WLzdmVWIvSVZzay9KMXFVYjdOUjNWMTNMb04vZTRTVSs1OHNxTkovSTlBZ0FBZ0U3dmd6UDd2cnc3cDdnUWNCV0tnZ1RjUmE1WVVSQ21BcU9CZjduK3VOMllzc0d1cHdETDVYODUvOWZSejNwL1VhOVBQRkp1S0tQKzJwN3VPNGpnVCtYSFhQZjN0VmdYTUtDS3J3TDcwdFcwWHk5LzNLYnkzM0h2L3JvSEFBQ0E5WFRPTXovNDZTNy9zcUxiWGkrNUF3d2UwUmNkQW9hRWVYbS9OUTBCdzZjQ1Y5MFZ0N0Vlb0NyV0F3eWJFczE2Z0VqRTliclVUWForSTN4NGN1cVZrazROY2NydnVvMzZVeHY3S1dnLzV2ZFVCVUJVTXQyM2l5SWpNZnNaMUxxQUVRVTloakFDTUhUYm5aOGZlOW1WazIvaDJ3UUFBQUJkbUV6cyt5Uk44b0s2MHJ1bzJLSWdRU1BmcXRyTzJWZnZSVUZpN3FwalFzQ0s5UUJySEhkMW1Fc0lpQWpaQ2dTQTltaDlVckkzVkZ4bWVwbnlXL1lBby83Q0w3bE5SOWdwOHZlWWRmNjZtT3FiZXBSZ1o2TUNhNHoyVStCK1U0OEFqQXo5Rm9mbC8vSnIzcXBqZktNQUFBQ2dWY2Q5US9Mdm5MdVB5UW1tQ2dPeW1LSWdsZmUvWXkwSzBtQTl3RDZMZ2hoRlFkQ0liMDcxaHRTTjlqVVY3aStqTGh4Vlo2YnkrZjRMZlZROTMvYWFoYUhITWVycHZnTUovdFRoTm8xZkY3RzJYOThqQUVPbi9BYTg5cDdIYnQvNGFiNVRBQUFBMEtaN25mV0JyOVZlOFkvUU1HOUJvNklnZ2VzSVZ0NTVqcTBvU013ZXVsc1BzSDdpZ1RYMDluOStobjBrZGFPOUJJRFRTZlpYcXM3ZEt2VTk1YmZKU0xudzU5TlVLbTY3eUVmUjcwTVAvb3I2UC9UZ0wyUWJyL2lzcHhqdHA4RDlwaGdCV1BlWWM0TkI4NSs4OUZMZGgrOFZBQUFBdE1XVS9VanVmVmRsc0pTcUtJald0Q2hJN0hxQUpkTjdHNFdBckFlSXV0Y09YZHhHdTcwRWdFYy84L1lQbXZ4TjVSZW1xTXRDNkNXcitQVXRqUHJ6QnMvWDJzY0FSLzBwOFBlMmc3K2kvYWNNSTJOZTA4VTJTNDhWRlBWSVdpMDRvQytwUmdBMjNPYkk5TURrVi9ocUFRQUFRQnMrL1ZudmY0VGtUeXFjbmx1cktFaGJsWUVwQ2xKNlB4NjBIbURKTzBNSWlGaVdmdjAvU1QxV3c3VHRhY0JqWGUrdldmK3EyeC9DcUwvUUloOTlyUHUzT0ZLemF2czJSeUcyOVpxNjJ5dzlWbEhVUTRrZmF4b2F0aGo2elcvaitxYlhYYm54ZVh5N0FBQUFJRFdYL2EveU84QTZSVUVpN2k0cENxS3cwWTUxaTRKRXJBY28xZ05FM09Vak82RFh0OUZ3YndHZ20vMUY2dlgrK3A3eW02clFSOVhydXhyMUY3TC96cWYvSmx6bnI0L3B3bDFza3hmOHFXbGJTamNDVUpGdHRyYU51OHludiszZTQvOFFBZ0FBZ0pWenptOTg2QzV5ZTBwUTBMV21SVUVVY201U0Z3VXBQVC9GUnhTM2RtUFJlb0FSRloyeDd0NTI5VS9heDl0b3VMY2IzOE9QUHZGT3VhNFAzVDRrbkt0NmZka0RmUmY2R1Bxb3Y1U2orc1lhL0kxbGVuQ0thYjVxOEZpS0lMSE4wTTkzLzl0KzVERnZlTlBrMi9pT0FRQUFRQ3AyWVBxOWtoOVp2aS95Z0h1ejlTZ0tValVtcnBXaUlFR2pJcnNyQ3NKVVlCUjgxbDdYVnRzOWozeXh2d3c4QVJYUGozL0tiOVhyK3g3MVYvUjc2OEZnaDhGZlVmOUdNVDI0b3BxdkVqeVdlZ1JnbmNBelVlZzNYejNZL1pjdXZsaW44VlVEQUFDQXBoNzcvS3NPbVBrUGhLOTdSMUdRcUx2cHlxSWc3YXdIR0Y4VVJCSHZCeUVnNWo3anIydXI2VjREd0ttMi9qTHl6ejMwVXBRZlFuUTg1VGZWaUx5eUIvb2U5UmV6YlhRd0dMak8zeENDdnQ2RHY0RDN0T25vdk5EMlU0ZDhiWVIrQysyY1k0ZXpwL05OQXdBQWdLWStjdUx1VDVicjAzZHU1QlVXRUkyL0tFalpZOTBXQlFrWWxWY1pBc2F1QjFoOUxzcmZ4NURrQTJ0aXVubWluZlgvcEo0RHdHUG5uWHFMWE84dHZoQ1dYeVNqVXYrUkZmcndSTWVRWXRUZjBLZjdLdkwzbFNnSUVoajh0VFhOVnpXUHAwN0lGOXBHWk9nM3Q4M1U5SlAvZUlVZXh2Y05BQUFBbW5EWFR4VGRYVldHZVFYQlZPN3JyTGlsWEMwWEJZbSs2eHg3VVpDZ3ZSYTlGeFFGUWFIcnJqOXVON2JWZU8rTDM1dnBsUW9JRkVMLzZITC9lRVk0NWJmc2hIUTk2cStvYjJPZTdqdVc0Qytrc0ljclVkR1FGaCtyZTd4dGhuNEwyeHcwVFo3bkx1TTdCd0FBQUhXYzgreC8vMkxKSDEyL2VtK2R5c0JES3dvU1hvb2p2aWhJekgydlI0UnFzVVZCbEh3OXdMQWtBU3ZQZEhHYnpmY2VBTHJOcndQWTVwVFp2cWY4cGlyMG9kVDd5SG04N2VtL1Mvc2RTZkJYMVAvV3c4S2E2L3YxTVFJd05zVHJNZlJiZU13Lzc3VlhUcjZEYngwQUFBRFV2SHYveWYzN2hmeWdMbXkwMi9LajYxNFVKUGV4eXZVQXZmWlU0S3ArTkE4QldROFFPWC9PM3Q3NmY3a2YyYTY1Szd2akxZYytLT25UbXE3M1YvYkFLRWY5UmJUZjVCaXFSdXFwNXU5QjIzcUxiVGY0ZlNodHl0TzAyL2JybXI0L2xkdTR0M1llRm42L2NXdHIrdEF2K3h4OWxLOGZBQUFBaFByMFo3My9FVlBwdXRsN2JNdE5lQ3puUm56eHQ3ejVyWXV2VzI1N2FYKzVXOXZTVURRcmlRbk1pMklEV3o0R0wrNXQ2ZjZDejB2WnNSZnZMLytaeFdNczI2Y1ZoQ2xGODUvTHoybjUrMUcrVDZ5MDZaYnBMbTk3dW4yaXJSME1ZUXJ3Vk5JclYzMjl2NmpYRDJqVVg4eTJVYTl0T04xWExmL2U2L1RnblYrYWpQZ0wyU2JGcU1DaVVYYXh4NTA3U3ErMWtYNmwyNXh0V2ZacmZQY0FBQUFnNnM1ZC9wUExZOHJ5a3AwVkxnb1NXQnlqSU52TWVjVWFyQWNvMWdQRTNzZjQyamJEUDJrQUFlRDJrZHJMU3k5K1V2Z2ZWa1I0MXZlVTM2b3F4U0YvL0cyczlkZjY5RjlQMTlaS3JRdTRHL3dwY2wxQXBRdjU2cXp0bDN6SzcwTG9GOUxQbE1HZ1RFLzloOHYxQlh3RkFRQUFJTVNuL2RaN3o1WDB6WGwzY0dFaElFVkJab2ZoMVE4Qlk5Y0RESnZyVkJrQ05sNFBNSFRPRlZhWm0vNnA3WDBNSWdBOC9PZzczaURwMzBQL1RBdi9KQ0xYKzR1OEpFVSszenk0VEw2ZVlNN2pUVWY5eFd4Yk5lb3ZxcTBCL3g3OW1zamdUNG0yYWZxNnBPZHRaclJmMWY0NkdBMW9XNVk5LytLTGRaaXZJUUFBQUZUZVZFL3NweVFkcUgvM1dMVE5taFVGVVg5RlFlcXZCOWhPVVJEV0Exdy9VK25WclYrcmhuQ2dabkpKcndqOTg2d2FPYmNPVTM2cjJ1OTcxTi9jY3kxTjl4MTlRWkNaYWI1ZEJuOXErTHBrby8wQ3B2aldHZTJZSWhnMDZVRW5qbVEveGRjUUFBQUF5dHoxT2UvOU5FbmZVUllnamFjb1NPbldoWGRBeVlxQ0JFNlJMdXh4WlZFUTFTNEtFblNIYjVIdmxTZ0tnajIzM25aTWw3YTlrMndvUitzK2ZYblpKYVR3RHk5aGVOYjNsTjhoalBwTEhnUzJPTjFYZ2IrbkN2YVVxdjh6SS81VW8xOWRULzNOZXo3SmFMOEd4OVhKYUVEVEJhKzVUQS9odXdnQUFBQkZOamJ0cHlRZGtVSUNwRG9oWU1nVTA1RHBzS25XQTR5OXkwNFZBb1pQQlZiSi92S2ZpUWtCSzlZRERGd0hNZWhZUlB5M1JpNSsxNC9ZaWJaM01wZ0E4Tmg1cDk3aThyZTNGZjVGRnhLSmZuNDFSdjBwMWJZRG11NnJ5TjliNjAvTnFiNnV0S01FNndSdGVkdTNQZHF2eHluQXU1L2hROVBKNUhudWxPQUNBQURBc252KzdnZnViS2J2bmIyemlCclJ0MkpGUVpaK3J4R0c3WjhYUlp6UEZTb0t3bnFBYThsTnIrbGlQOW13amxwL0d2d0hzMkxyL2FtRi9yY1I5c1dNK2x1bDZiNk5wd3Q3TjJzTHB0b20xZWkvcHFGZnpQNWFDUWJkUC8vVlYwNitoYThrQUFBQUxOOXduZm9KU2FmTi9ZdlNBa2IwelJwS1VaQ1liU3kwNWJDaUlMblBXWC9yQVFZY2xWZ1BFR212SmZyN0xuWXpxSkV0ZDF4MTZQNWI1dTlVMlZLbkhZVm5yYlRkUS9Bbk5aczZHN1d0cDIrM3k3YmErTDFvcW05VUd4MXRrK3k4dS9kLzN0TnU4L0hweHZTaFgzT2VQczQzRXdBQUFLVHQwWDgrUGZWZXlVN1B1ODIya2tUSEZoL3ozRWVMWCtlbHJTMjFiYm0zL1l1dnM1eUJkRllZSDloQ3Y4dGVOZHUyRmNZUVZwQ2JGYjNDU24rYS9jZTlGY1llVnQ1dTVYdFkxTE9pMURQMFBTNTZQNHJPSFVidWZkZGVZUGZ0WWtlREdnRjQrTHdUNzVaMDFlemZhMXZoWDhoNmYzWGJ6bjA5by81cTlhR3ZkUUFicnhzNFUrQ2phWnVwcGdmWEdkRVhOZnF2NVNtK3ZSUUVjWmZjNzVKdFpzL2tld2tBQUFDN3RyWk8vWlJMcHhldWJiYzJSVUVDNzJSYkxBcFNiejNBZ0dPc1dSU2szZlVBR1FtNGd2NnVxeDFsUXp0eWs3MDg5MlBOZW4rVmw0MjJ3cjdTZGhiVytvdlpaNVBBc2UxMUFHTi96NnZzVzdlL1hiMG1XU2hZRVB5cDVkOWJXeHR3Ty9UYk82YWR4NTc2dDVmckcvaHVBZ0FBd0tjOSs1MTNOYk1mckFwbDFxTW9TRWlZRjFwTW81MmlJRjU2RjExK3h6MjA5UUNKLzFaUTFzMzZmOXU3R2hqM3laKzR0RlgyS2U5cnZiKytxL3k2NmszcjlFVFBwUmoxdDdMckFJNDgrQ3Q3TG5mYm1hSWVNYThkN0dqQW5OQnZ1UjE3M2w5Y3FydnhEUVVBQUxEZXpEZWVMdmxwOC9jcytYY3lxMTRVUkN0UUZNU0RrNEhZOVFBOStYcUFZYWtHUm1SeklyMnVxNTBOTGdBOGR0NXQveW41Ni9NKzIyMFcrMGplOXNDbS9IWXg2cS90Y0svSmE0Y1UvQlVkejlDQ3Y5em5BcWY1TnVsVFo2TUJnMEsvdWQvdmVpRExuc1YzRkFBQXdQcTZ5Mis5N3g3Sy9QdkRSclVOcnloSTNGMXk5VGErME9meVZ6VW9DcUwraW9LVWplUU02bldqRU5BcENyTGFMcjM2YVhaVFZ6dkxobmdHelBYeXhjODB4VDZXSCtzazdGdDh6dE8wazNMNnJ4TDJvNHZncjh0UmdtVUJYZFMwMzVMUmZxSHR4dTYzamRHQk5VSy91VzJtOG05NjVXWDZScjZuQUFBQTF0UEJ5ZlFaa280V2ozekx1WE96Z0cwcUgvT0F0aXZhS1Z3UE1DZHd0S3A3MW9yQXNmQk8xMXRZRHpEZy9GbjF2WGNiNndFcWFqM0Frak5NQ0xpYXJMdnB2OUpBQThCVEIwLzl1VnduUXY4MEJsUHNvNGNwdjYyR2ZiUFBKUmoxMS9jb1A2WFlWMDd3RjlwK0g4RmYzZWUydzk1NjAzd1Z1eCsxUEFXNFllaTM5SmpaYzVnS0RBQUFzSDQrN2JmZWUrN1U5RDBsTVkzU0ZRVXAzckw4WHJhbm9pQVdlVWM5dUtJZ0hubU1IbnpXaTR1Q1JLd0hLTllEWEVXWjlQY2Q3Mjk0em5xa1B1SFNxME0rMUcwVis2aTEzbC9VdnROTSthMzdYRlJvbUdqVVg4eTJmVTcvTFh3ZlBIMndON1RnYi91WCt0TjhtMVFjYnZMNzB2NFNoMzQrLzk5ZHpld0ZmRjBCQUFDc0Z6OHcvUVhKRCszL0Q4TkY5MnRkVmdZZWYxR1Fzc2Z5UTBBRm5KZXlZMjl3RjU2MEtBanJBYTczQlVVZmY4c0pYZFBsTHJQQm5nelR5L3VxOUxzdVUzNkhOdW92WlZnM3RBSWZRd24rU3FjRVIxVHpIZExvdjhYUVR5MkVma3ZIWWZyYXY3eE1UK0ZiQ3dBQVlEM2M3Ym52ZWFUNTdyLy9adTdvY2tLdjhpQW85RGQxVUJRa2NPdktFREMvejVWMzVBSHJBZVlYQmZGNjV6UG9LRHhpQmlIckFhS0JUSy9XY1p0MnU4dUJPdTFUSjE4cDZWUHhmNUxETGZiUjU1VGZNWXo2aTltMms3WTZDUDZLK2xzbitBdFo3eSszalVUVGZQc2EvYmNZK3RWYUc3RE9OcGs5OTZMTGRFKyt1UUFBQU5iZ1huMXIrbXVMOTgveEllRFFpb0kwV0h0UUpmdXkvRzNxclFmWXJDaEk3bU9WNndGNmd2VUFTL29SSEFJV3RFc0l1Qko4MnUzNmY5S0FBMEE3WDNlNDZaVWhmNG9obDRHUVA0bTIxL3VyMCsraGpQcHJ1bytockFzWTFGWUx3Vi9SL2xOVThXMWEwVmMxMjB3WkN0WWQ3YmM0eGJmMTBHOTJHOWRaRTdQbjh0VUZBQUN3MnU3K08rLzZRa2xmVmhxN0ZJYUFPWGQ0RkFYSjdmTncxZ01zZXFaNVVSQ1BLZ3JDZW9BcmJPb0h1MTMvVHhyeUZHQkoyVFI3U2RYbG9peHdpZm1ER05wNmYxV2htZHA0em91ZjY2VFFTT1R2VFY1YjJPZWFCVDZxZmsvVjM4YkIzMEpoRDFjTHhVTVNIV09kZGYycWZrOGRERXI2TDM5MnViNmQ3eThBQUlBVjVXNlMvVkxRdi93dDVPNWc1dzZSb2lDUnZZMEpBYnRaRDlDVHJnY1ljRTduK2g0VEdHSndURmRjOTcvdG8xM3ZkdEFCNExIejduaXRTZStML3lNSmZ6NTZMY0dFNGQvWXB2eTJPZXBQQ2RxdDg5bysxL25ySmZpTGFLTnBLQmphYmtqZjY2enIxOFZvd08wcER2YmJUQVVHQUFCWVRYZC83anUvU2VhUGp4dlZ0bmgvUWxHUThydG9yejhpTGtsUmtOajFBTVA2VmptdHVkRjZnR0lxOElpWjYyLzYyTytnQTBBelRWMjZjSXpGUHVvV0tSbHlvWStRNTVxMjAza3d1SUxCMzF3NFZTUDRVMVdiU3JmMlgrb3B2cTRlUmdPNnpqS3pDNC83c0srbkFBQUFpSE92My95UEkzTDdsZXFwdGV0ZEZLVDhwajVpWHdGRlFid2dUVkgwMlEzTkJpb0MzcUJ6d1hxQVdQTFhmZXgwOERlc2s4M0ppeVZ0QmYveEY5ejB4LzBaZDcvZVg0b3B2K3M0NmkvbGROK2hCbjlTallBd2NmQVgrMXpSdGsxSCs4WCszdUZvd0M5NStCWDZTYjdIQUFBQVZzZkpRN2YvcEtSN2g5eC8xZ3NCK3lrS2t2dFlnNklnM21sUkVLODMxYm5zR0NxTGdneHZQY0M0SUJjRDg2NXJMckMzOTdIandRZUFSNTl3K3dkTWVtM01oM3FNNi8yVkJSbWh6eW5ndWJxai9tTDNOK2dDSVFXai9sVHo5NllGUVpxTThscyt0bnJCbjlkOExzbTJpVWI3OVQwYWNDcjd4WXN1MVJQNVBnTUFBQmkvdS8zMmUrNXVidjk3N2w5OFZsWGx0WDVSa1BxbExpdnVOSFBDcWNKZU5Tb0tVdHdmajcxN1Rsb1VKSHdxY05nZGUwRnJIYThIT045MzFnTWNtYi9xYThlam1MSTJkYnN3OUtQY05Qd3JlNkNMOWY1Q25tc1VFbnE5ZmFmdVMrcHRnMTdiMG5SZlJmNmVhcFJmYVBEblNyeWVvQktGZ29sSCsxWDkzdlpvUUVrYlU5TkxMN3BLWi9LZEJnQUFNSElibTc4aStlbEwvNXEzOGlxMzg4Rk15QjNDZnJ0RjI5UmZEN0Q0cmpkOVVaRDY2d0Y2eVBrSnVmdE9zaDVnN04wKzZ3RWlqbVg5clA4bmpTUUFQT09zazM4aDZZYXFqM0JmNFYvWDYvMkZidGZGbE4rNnozVzE3Vno0Vi9lMUxmMmU5MXhNVUxmOVEzWHdwNDZmaXlsSTB0Wm92MDVIQTg1WFZyN2Yxa205a0s4MUFBQ0E4YnJyczkvNWFFbFB6YiticXc0QlIxOFVSTzBVQlZHTm9pRFJJeU5IdWg1Z1hBaW9nUGVDRUhDZ2JqanpEbDNXMTg1SEVRRGFBM1hDVFMrdkcvNDFxZlRiNTNwL2ZVNzVIY09vdjZCdEcwNzM3YVBBUjlPcXZpbkNQVS9jNXVJMDN5Ym5xODJRTHpiMDIvN2pXdHJtRy8va1VuMG4zMjBBQUFBajVHNldUWjg5ZjY5Y1ZiVjJ4WXFDRkladmRhY2l6enhUdXlpSVIrek5JL29mdXg2Z3Q3SWVvRmdQY0QwdUw5S3JYbmZjTnZ2YS8yaXFWcnJyd3ZoTFRMTkt2MzJ2OTZlQTUxSk0rZTA3N0d0dGhLQzNONzIzN2VDdmNIOGRCWDlsMjBVRmhqblRmT3VPM29zOTF5bUN3NGpRYis3M3FlbDNYbmFaSHNKWEhBQUF3TGpjOWJudi9IWkpueHN5TlhXZGk0S1VqendMSEQxWWVYZnRpZGNEck83Vi91dkxYOTBzQkdROXdIV1ZtVjdaNi83SGNxTE9PdS9VV3lSZEcvTlJibHJwVnpYYjduSzl2OUx0UEs2TmxNLzFPbFY0UDZPcHZaOVU2LzQxR3VXMytITkZjUTgxYVZ1SnB3U1hUUE5WUkx1OVR3R09DUDBXMmpubTBrVVhYcXpEZk0wQkFBQ013OW5QZnVjWkp2K2wyUUNvOUs2dnhhSWdWWGVqMVlvQ291VnQwcThIR0JPUWhkL0J4NGVBZVgxSnN4NWcvZmNsSUFSa1BjQlZkZUsyVEgvZlp3ZXlrWjJ3aUdJZy9WVDY3V3U5djdudEJqTGx0L09wd29GRlBtTDJrM3FVWCtoN3ZCVDhMUVJRTWZ0c3N3akkvT2V1ZXBwdlc2UDlZbjh2M1gvOTBHL3hzYzg0Y0VpL3pQY2NBQURBT0d4a203OGsrVDBXUTVUU29oOHRGUVZwYlQzQWdqdlY4aUFzL1hxQVhtTTl3S3B6dHNTODlBeFd2Nzk5ckFlWW9pZ0k2d0VPMUQvOTYwL2J6WDEyWUZ3QjRNbFRMNVYwb3NtNmZGMFgrMmdsNEN2YnJxY3B2NzFQRlI3WWROK3Fkb0orYmhqOGhlNC9wTDNTNXdLcStRNXA5Rjl1V0pjZzlQUDh4Mzcwank3WGYrRzdEZ0FBWU5qdStudnZmTFRNL3NmY2cwSFRheWtLVWp6NnJDSndxcjBlWVBqOWVHajQ1b1g5Ry9wNmdFSHZTdUNyMFNhWC9ycnZQb3dxQUR6enMzV2pxM3pPZEp2aFg5Z2ZXblg0SXJWVStDUGhsTjhoaG4yNTdVUVcrZWdxR0d6MDgwendKNldkd3B0MHU0ajEvY3JhU1RINnordThmcjU2YitQUXIyQWIwMVF2ZXZrbE9vZXZQQUFBZ0lFNjdwbW1XOCtSTkZuNkYzalFxTDMxS0FwU2ZSZGNJemkwaXZPVmM0N2JXQSt3OEJqNlhnL1E0dlkzMzNmV0F4d1E5NG4rWDkrZHlFWjQzbDVVZWlFTC9hUHNPUHdMZWE1Mk9OZkNsRisxOEZ6eWRRRjlPS1A4bWxiMjNYMGpGNE8vWk9zSHFwdmdyK3gxVGJhTmJTdG9pcTlhQy8zbVJ3T2E3bklxMHg4ZDl6RmVid0VBQUZiZlhlLzZMOThwK1JNTDR6WEx1eXVNRytrM3RLSWdxbEVVeEZzdENoSjRGNTQwQk94bVBVQzNxaXdocGlnSTZ3R08xTlhYL2JSOW9POU9qTzZHOU16SGJ2NmpwUGNIWGg3eVA5NWVIT3pFdGhzVC9yVzIzbC9EOWtZM1ZiaUZVWDh4MjRhK044SHZTMkJsM3lFRWYyV0ZQYm9hL1ZjckpDeVk0bHUxdjRUQjRCZWVlN24rTDk5N0FBQUF3M0xPOC8vMUxwTDljdjdkWDJUSU42S2lJSjRiRVBWWkZDUWt6QXNkMGVhNWZhODRFOHZIRUh6c0hoR3BzUjdnT3FxYXlkcVYwUVdBWnBxNjdBOW4vOVNhaEgvbGIxTGFZaDlsWVVPdDdRWSs1WGRvby80R085MDNZbnVwMytCUE5kdElPZm92K1AyTVhOZXZyZEdBTSsvWi8vbkR5L1RWZlAwQkFBQU14K2JXNXJNazNiWDRMbkI1S2laRlFkSVhCWkdGM0tIUHR4dTlIcUExV0Erd01pTVk0M3FBaElCZG1Yai82Ly9sZm96RzRKTlhIcjZ2Smx2dmNubW0wRC82bGl2OXRqSE50L1ExM3M1KzIyNGo1cm01M3oxUk93MWZtK3pua2pYK1V1Mjc4WGJ1L2I3bmRWL3JYbnRmcVY1VDh0Z250NlRQK3A3UDFydjRHZ1FBQU9qWFhaOXovWmZMN08rMi82Rm1TN2ZLbG5mYlBETWt5d3B2cTIwaC95cHBPMmVJbHhXMXFjVU15d3A3SE43WG5kY1Z0RnQyRHF3a1hwamJxNWYwY2ZFMVhuRytGczV4OGZrcWVKMlh2YUxpdUdlT3hRcjJWOWx1NmZ0WEhORllidW9aY3h6S25ZdHM0NHlFeHViZnJyM0FIanlFam94eVRhcXpIbi9IZTEzK1QyWGIxQTMvNmxiNmpRMWQ2a3dsM2NzMnZGbDdiYTRMMkVxQkVHOTNiYis2Mnk1dVUzZWR2NnErZEQ0bE9NR0l2N3JQMVI3OVYzT0tyeUwzSHpMU3IrS3hzeWJTbnovL0toM2xleEFBQUtBL2QzM085YWU1MmZPS2NwN0NPNHplaW9MVUdORVh1QjZnMTFnUHNONy9sQjR4ZXJEaVZXMFhCU2tiQVJtZURPUzBOcUQxQUt2VEVhUmcwa1ZENmN0NEY2VjNmMDdBNVhtd2xYN3J2Q2JGZW4raDIzVmRQQ1EvTEN0ZjY2K1A2YitMUHdlZjU0YnIvSFV5SlRnaStQT2F6OFgwSzZqZGlJSWVUVUkrQld3VDhkZ2pENXpVNy9OVkNBQUEwT1B0cFBuUFM3clAzTC9XU3Flc2pyUW9TT1hkVHZIeEYvVnF0OC90clFjWWY3Y2VId0txL1BoVXZ5aElTRDNuOG5TQzlRQlh5V1kybkFCd3RPTTkvU0pOUG5tL3lic2tPN2Z3ejZTblNyK3RUQWRlZ3ltL2k4RnRpbW02Ylp5TE5xYjdlZ2Y5SzN3dVlxcHZGOU4rSzdkMVQ3S2ZsSytwODVpNWZ2UzdQa2ZQNWlzUkFBQ2dXM2Qremo5L2xwbGRMbW15UEFseWVUcHMza1ROMmZTdXlWVGd1VWNYRXA3U3FhMHhVMGtMcDczbVRDRXVTTXZLcHNSV1R1c05PcThMVytlblhmbjdjcFgzc1dCdnUybWpWY1FrVm5EY2hlMEdIMS9aL2lxT28vSjlxbWpYcTErTkJFei9ldTNUN1NGRDZjNW9Sd0RhazdYbHNoY1UzbWlQS1B5TEtmYVJ1ZytES3g2U29NSnYyWE1wcDJRSEZmakltWkxhZEtSb3NpbkJOVWI4cVlYbmdyY05HTzJueU44N21QSmIrTmpVOUJzdnVrS2Z5N2NpQUFCQWh5NjYvcUNadlZEU0pQOXVzR29rWDNkRlFVcEh0YlZWRktSeWhGbURhYjJWMDR5THowWFozbXNYQlFrWVBWZitYc1hXRG1oZUZNUUxpNEtFSDNYb0VhTTVjNzFpU1AzSnhud3lON1Q1UXBmdWFDdjhjOVVQLzVKTkIyNXh2Yi9RN1RxYlV1eHB3NzZtN1lUK3ZOUk9CK3Y4TlpvUzNFTHdsM3BLOEdMd0Y3SzIzNENuL09ZOFpwTHNnRS90ejM3dk10MlRyMFlBQUlCdTNQbmovak9TUDZyMHJ0QUNwL01HcmJGWEhRTFdtOW9hR1NJRnIzM25oZUZTN2pGWS9VaXBNamkwMFBQRmVvQ3NCemhNUTVyK0s0MDhBRHpqUEgxY2JuOVc5cGx0RXY1VlBkNVhzWTg2YlEraFFFanBjOTdleU1JbXh4UWR4cld3emwreTlmOWFEUDVVODduQ2JXZUtlalF1RUtKbW93R2JQT1phQ3Yza3N0bkg3NzRoZThWRjErc2dYNDhBQUFEdHV1dnZYZjlvTS8xMDlaMktLQXFTc0NoSStScDBJYU1IWSs3a1YyYzl3UElRVUt3SE9IU21mMzNiMCt4dFErcFNOdlp6NnBtZWsvYzM0MG9iL2pXWklocjdtdEJpSDNYNk5yWXB2MzJQK2d0OUgwS20rNllJK0ZTbnJRRUdmNFhQRlp6SDBIYUhNUHB2L3ZmbDBDL25kVS84NUNlejMrQWJFZ0FBb0QwUGVQWTdEMDAxZllta0EwVWp0NVorUzFvVVJMMFVCUWtMZEx3b3dBaVBoMW90Q2hJUzVoVlBYNjU4ekZ5Qm40aVNIbnVONUtGOEZHZlFjUVNIZ0RIdkJTRmdDajRkMXVnL2FRVUN3RHMvOXRRVjdycEtIbjZKcXhQK0tTSU1raHFNQXZRYXIwbThYV2NoNFlCRy9kVU82aUttKzliOXpEVHBtMFlVL0tra1FPMXE5Ri9zTmcxQ3Yvbkh6SC80Qlpmck8vaWFCQUFBYU1jbkR0eitjNUllVWI2R210Y1BBVVB1TksxNmZGdFpDRmpXYnZuOWJjMzFBQ3RieXhzTlYyODl3Tks0dE1hNXFMc2VZUGpqV3VqZmtOWURiRlp4bVBndmplbGtXT3YvU1NzUUFPNTg0cDhYK21GdEV2NDFIUVhZWnJHUDBhMExPTEJSZjJYSE1vVHB2bEVqQmhlbXpzYSt2ck8xQUFPbStTcGkveWxHLzlYZnBrYm90L0RZMU8wNUw3aFVuOGxYSlFBQVFGcG5QKys2SjByMkUyRVJ5NENLZ3VTMk5vYWlJSFVpcFlyNzlCVllEekE4QkF4N2RYeSt3WHFBM1VWVXc1ditLNjFJQUhqQ1RyMWMwbzF0aDM4aHo5VWVQZGV3MkVlZDEvUXlXdERucHpqWDNYZHNYNXFNK2xzK2h2eFJmMzJzK1RkM2pBTUkvaFR5WE9KcHZtcjRlLzF0bW9kK0M0OGRuY3IrK3ZsdjBEMzR4Z1FBQUVqalhyOTUyUkZ6WGFpOXFyOHovNUsyNGp1TlFSUUZzY2d3YURCRlFkcGNEekRtdlVnVkFxWlpEN0JlRWhId3Z1ZCtWbGdQc0U5RHEvNjdheVVDd0hQTzAyMitmVkV2djNEVi9KTnJkUlJnNG1JZlNyeGQwdEdDM3ZKNmd1cDMxSjlhL3JseUtySmFLQnlTYUx1OWM5ZWdtbS9NdGszVytndW8zcHN5OUp0L3pQVHAwdzM3MjVlOFZjZjQyZ1FBQUdqdTlpT24vNGFrQnhkT2NiV1F1eVN0ZFZFUTFTZ0swdDU2Z0NGMys2RlRZUFBXQXl3K2U0WEhFSnc5c0I3Z3V0aHkvZWtRKzVXdHlnbWVaSlBma3pUTit4TkxHZjdGYmxkWjZiZG1DRFNxN1ZvcTlOSFhxTDhoVFBjdEt2RFJOT3hyWldSZ3hibExValZZNlVLKzVkZVk5a2Y3dFJENkxULzJtRnR1dFpjYzk5VzVQZ01BQVBUaDdPZTk5Y3NsLzRIaUVLYzhCT3kzS0lnQ1FzQ2NWMWgxc1pGcWdmdFNiRkdRNXVzQnVvWGN4YyszRzcwZW9Ibjk4MUs1SHFDekh1Q3FNLzNyZGMrd2Z4NWkxMWJtQnZPczgwNjhXOUxmVi8xcHhmd3B0RG9LME91L3ZvMSt0alp0ZU9Dai9vSkNzWVdBTGZROWFEdjR5eXZ3b1FUN1NMWmRSV0dQc2picWJDdWxEZ2JuUTc4MktnYlBQVGJ6cEx1KzRXNlhaVC9QdHljQUFFQTlkLys5dDk1TjBvVnVidVVoemxDTGdoU1AxcXU4b3gzVWVvQWhJYUFDUmhoV25RdWxXdyt3NGhXVnlZSlZIMGV6RUpEMUFJZk1CenI2VDlKcWpUQ3hxVDhuNU1OZmNxbU0rcm5PYTVwVytuWDFIeGdHdCtFdFZ4RU9iRE5xcEo5eWlsU29YcUNtTm42dXVjNWZwMU9DR3dSL1pjOVZiWnRpR25ETXVuN0pRNytsOXYyQzUxeXE3K1VyRkFBQUlQb08zRFpOTDVMMGFkdUJTc3k5NGJDS2dsUUhOM1dMZ2l5R1BtMnRCeGdTMWRVTkR2c29DdEwxZW9CRlc3RWU0SEF2UDhOYy95LzNvekh5RTUzZGVOWGtYUzdkTi93QzN6eVlpUXR3R3I2K3dmNDczYTZsUWgrcHpsbGxVT2ZldkkzVVAxZU0rR3Y3bkZWL3RyMno5enZ0N3hieFQ1RjYyOHkvajFHdlBTbjVsL3pRNStnTmZKVUNBQUNFdWZQenJ2MWhsNTQ5KysrOHBZR0FXdjU5Zm1CWndmTjcvMmdyZTM0eC9iT0ZSM1A2NHVYUFcwNTc4MXRYdFpuM3VyeWtwNnF2TzYvenFoN01ud1BMalI1eTl1V2xQWnpmMm9zaURWdnVpMWVkcjRMOXVSV2V2WUplTFoxVEs0eGRRbzR2Y24renJYclYrYTVvMXhYd09jT0N0MTk3Z1QxOHFKMWJyUkdBcHFuTG4xZTJ6ZERDUCs5dy8xMnU5eGZhWGh2UExmNGNNMHF2enFpL3V2dE9zYzVmeXBGOWJZNzQ4NXJQaGZhbDNqVGcvQ20rSWFQNFVvNzBxM2p0UVpmOXhiT3UwQVA1TGdVQUFLaDI5dlBlOGpDWGZuVTV4d244bjRmN0tncWk4dlpxRlFXeHlLSWdNWDJ6Nmg3TVowbDFpb0trWHcrdzZqd3Y5NzNCZW9DbDV6bjArQnJzai9VQWV3aWw5TkloZDIvbEZwbmZPRFI5b2FUYkF2K2MwMWIwTGZ1NW90SnY2L3V2OFpybzdUcWU4bHMzb0N0YjYwOTFYcWVXcGdFSHJQUFg1THcwRGc0amdqL1ZmQzc5Tk9EcWdoNUZiY1p1VXo2OU4reXhuY2Z2YkZ2Mk44OTlvKzdFTnlvQUFFQ3hjeSs4K0xDVXZVelNrZHpRcENJRTdMVW9pRlZWNHExZkZLVGM4cFRkNmlNdnZyTXVueEticWlpSWxzNXQ5YjEveUZUZzJJSW5BWUVhNndHdUU1ZjA4aUYzY09VQ3dMTWVxVTlJK3BQWVA4MTJwMGFHQnphdDdML0JhNEszOHc3WEZsVGFVWCtoRlg3cjdpLzY1OFRyL0tVcy9ORlY4S2ZrdjhlUDlsUEJOaWxDUHdVK052UDRnMDlsOW9yblg2VURmSzhDQUFEays5U0pzNTdyOGtlVjNRbkdoNEJsc2NvNGlvSjRaMFZCU3VPazRFZXFRNmVGUFZqb3VVNjlIbURnY2JNZTRMcDQvYlZQdC9jTnVZUFpTcDUyMi9wMVNkUHl5MkM2bjV1R2Y4RnQ5ZkNhNm5YcGRnYXFKV2l2U1VoWU82eXJxUENiZXFSZjBIUmZ0UmZ3VlozN3JvSy9KdE4rNDM2dk45b3ZLaGhNSFBybFBiYnorQmZkY1NKN0h0K3JBQUFBeSs3MHZMYzh4VTNmbVIvaHhJYUE1ZUhUc0lxQ0JJWkJuUlFGcWJqenJwaXlXeDQ4QlZZVFRuSytpa0xBbUU5THlBakl3SDRHVlVndU9mY1c4MGxSd0h0UjllcjE1SzQvR25vZlZ6SUF2TXQ1ZW9kTHJ3bTRCTFUzQ25EbXJyMnJZZzJkQjRIZVRyQllKNmhhM0w1eTI1NUcvUlcyMTJDNmI4ejVyaFVjdGhEOEtlSjE4Yi9uVi9KdHNsNWc3allCYS9xRnRCTVpCSDdYYjErYS9RUmZyd0FBQVB2T2Z0NWJIaWJUQytmRGp0aDE5bklDbVpLMjVxZEtCbzVyeXczV0dvU0FNZXNCS25KYWIxQmY4d0tpaW4zVlhnOVF0ZGNETEIrMUdaSWFGTC9QcWp5ejViMHBmNGIxQUVmazlvMkovbnpvbmN4VzlleGJaci9SVmZpM0hKZ2tiQ3Z5NTdaZkU3TGUzeENtL0pZKzM4R292K2dpSCtwdXVtOU04T2M5Qm4rSy9yMjcwWDd1TFJRS0tYeHNLZEQ4OWQrOFpQTHRmTWNDQUFCSTkvck55NDY0NldXU2ppMUhWU1ZCVTZ0RlFVcTJIVlJSa0RxeFR1RGFnNG90Q2xKM1BjQ1FFWWJLUFJkVlc3TWVZTkhuTytienNoNU0rdXVybjJZM0RiMmZLeHNBM3VXeG02K1YvQnBGaEVoTmY1YWFoMzlOKzl2RmErVGRCWHhGejhXT0FOeDljL0lLZmJRUjdBV2R6eHJWZlR1WkVyeml3Vi9WNzBzQlhzNFUzNkxYaExSYi9kaHNvWkxjNHpLWnYrQTNMOTM0VXI1cUFRREF1cnZ0NktIblNucFVXTGd6a0tJZ0ljODNMQXBTR1BkMHRoNWc5ZWpCZXVGVFJaakZlb0FWNXlia0Zhd0hHR3VxWVZmLzNaV3Q5THZnOXN5Z0lDYlJ6Nm5DUCsvcDlWMnU5eGU2WGFQQVQ4V2ovaHBOSDFiRFVYOHRUL2VOT2VkTEl5TXJncitZOXloMmFxK2lYaHMyelRmMjk3bjlOVmpYcjFub0YvVGFnNjdwWHo3ek1uMDJYN2NBQUdCZG5mbjhxNzl2YXZxTzNDZXRLTUpwdVNoSXlQTldFakF0QkM3QlJVRnlnNXMyaTRMa0hHbE1VUkNyUGdZVnhsT3NCMWgrdEMydUJ4aXdwelgwc1kwN2J5OUJOM1FySFFEZTVkYXRQNVgwL2s3Q0ZVL2ZiaCt2TDN6T1d5d2tVcU92c1ZOK3ExN2YyWlRnQVU3MzlabHpsS1JLY01CclFyZGRmbTNhMFg2THY0ZE04VlZCSDJPM3FSSDZMVDUyVko2OThqY3UwMFA0emdVQUFPdm1qTjk3OCtOTWVuWnBJSlFzQkZUcFhVejVlb0Jlc2g1Z1ZjQVN1eDVnZUxRVGM0Uk4xd01zM0RQckFVWThNNUQxQUMxbTdjRDE0TktmWFAzOWRtb01mVjNwQU5ETzE2Yk1uMTBuWUlyNjJkdHBkekNqQUQzeCtvRTErdHAweW0rVGtYd3gyeGEyVVRMcXIvZmdieUdVTEh0L3VncitscDlyTi9oTE9jVzM1ZEJ2OGJHN3lMTi8rSlZMZEc5dUF3QUF3TG80N2ZmZWVyZHNZbjh1NlZEbFhVcWlvaUJWYlZVVkJjbmRiK2g2Z0JYckM2WlpEOUFEd3FuQW9OU3FlekI3RHRaNVBVQmZnZlVBMTMwcXNObndxLy91eWxiKzNiaGorZ0pKbjJ3Ny9ITzF1SzVndzU4YnZjWVRyeCtvZnFiOFZyMisxU25CRmFQKzFNZlBDNVY5UTk2REpsT0NxMzV2RXZ6Vm52YmJZTFJmZkRDWU5QUmJmT3hlRzVhOTZqY3YwOW5jRGdBQWdKVjMvT0tOamNtcFA1VjByOW1nelN2dVBKb1dCWEUxS3dwU1ZoVTNmaXB4U1hoVEdBTG12TUlVMm1yRXROZmk4S3Q4S21uZ3RONFZXdzlRSmZ1cmZFOHE5OGw2Z0swenZmUGFwOXVieDlMZGxROEE3L3E1dXRsbEwyd2xUUEhxUzMvZm93Q2I5RXNkci9kWDluTndTRmV6MEVjclU0S0hPT292c3NCSGY0VS9sb08vSm1zSHpuOUdGRFRhcitrVTM0cENIa2tmbTBvUDM5VGtWYi8rR2gzanJnQUFBS3l5czg0NTdWY2xmVUZ4UU9FVjRVNXhtREtzb2lETFlWUHdlb0JCSXd0Mzl0bFpVWkRpT0NuMC9ha2ZITVpOeSs1K1BjQWlyQWM0ZE81NnlaajZtNjNEbTdLeHRmbHNTYWZHRnY2VmhRNnR2OTdiM1U5clUzNmJ2RjdER1BYWDF6cC9xVWI1bGIzUFRZSS9OZjI5SXZpcitqMW1pbS9kME04REg4dHR6LzN4ZnJxOS9QakYydURXQUFBQXJLSXpYdkRtYjNMcHg4dW1lcFpOTmEwS2pMWkRsVDZMZ2lSYUQ3Q3dOWThPa3VxUGVvdGZEMUNob3dlajF3T3M4MTVGUEdZZWRQYkdzUjZnQXMrRFdBOVFjdC9TSDQrcHcyc1JBTjc1Q2ZyQVZQb1RCUVl3bFQ5M0hQNnB5OWY3Y2pYanR2b3A5VGZsTi9iNXNtM0xSdjNWQ2VxYXZ0ZDExL2tyK2pubG1uOWx3WjhuRFA2cXB2azJHZTJucGRjc3IrdW5nSGJyVnd3dWVkenRhNDRlbkZ6b0h2WlZEZ0FBTUJabi9mNmJIMjNTNytmR1QxWVZtVFF0Q3FLSVdLZEpVWkNxcWJKdEZBVUpITkZYR2ZTRUZ3V0pXdzh3Ync5eDZ3RjZUTVhoaHVzQmhqMCs1UFVBWTZZQ2E2Mm5BcHQweVhVL1krOGRVNS9YSWdDVXBJbG52NWtrWVBIeWtFUWE4U2pBRG9wOUZJVTFpOXVrcnZMYjlQbmc2Y2ZxZjZTZlpzOUxnblgrdWdyK0ZOQk9VYnZMNzRWYUgrMVh0SzVmYktDbm1xL0xuMnBzbWtyZitxdVhiZndLdHdrQUFHQlZISDMrVmZmd3FmK041TVhMblZoQU1ZMjV3Q0ttS0VqRHRsSVhCU21WcWloSVZUK0w0NmJ5bmxhRW5BMktnbFNsTldIVFZsa1BrUFVBdzdqcHBXUHI4OW9FZ0hkNzNLbHJwOUkvS2pDY3lmM1p5N2VwM1c3RXp5bmFpZzMva2xZVVZsZ3dsdmRZa3lxL3JRYUNOZGY2aXprZlhVMzNUVjNzSTFYd0Y3eitYOFBncityM2tDbStLdWh6MlhIRUI0SDdnVi8rdHY1VHYzUlo5cFBjTGdBQWdMRzcxMjllZHVSQU52MHJTZmVzREJrR1ZCVEUyeXdLWXRXVG5zdEN3TUtZcUxQMUFFT0tnbFEvc3J3RjZ3R1dueXZXQTB6b3RvbnBUOGZXNmJVSkFIZitLcDRaRzc1SXd3bi9XaXNLNHUzdFAyUzdrUEJ0NmJHV3Avd0doM1dSYS8yMU9TVzRhTHB2SDJ2K2hZeWFVK1cyYWRmM2k2MFdYTlR2bElHZW9sNDNIL3JsYlRkZnhNZCs3WmN2eVg2STJ3WUFBRERlK3plM1cwNmZ2RkRTNC9LQ3Rub2gzeW9VQmZHNG9pQkI1MlZubjUyc0IxZ1JJckVlWU1RenJBZllDOU5GVnovTmJocGJ0OWNxQUR6bmNadXZkdk8zaGdZcTByREN2NVQ3cXhQK3FjbCsxR3kwWDlkVGZxdWU5eFpHL1RXdDdsczAzYmZ1ZTlaa2xOL3lkbkhGUFdLQ3Y5RDEvUlQ1ZTUzUmZpcm9RMW0vbW9aK2VmM2U2YnU1WmMvK2hVc1AvQ0IzRHdBQVlJek9lT0dibnpHVnZpVXE1T3U4S0loS3dwT0JGQVVKWGcrd09qcnlrb3JENVdjOWZzb3U2d0dHdHNKNmdKM3o3ZlZJeDJhOVJnQktzcW45ZGxRdzRuRi85R01JLzJaLzZXb1VZbkM0bDlQR0VLYjh6bjhtMmhuMXA3cHRKSjd1bTNicWJ3dkIzMEpoRDhXOE51ajM1cVA5MUdpYmVxRmYzcHFFTHBuSmYvZVhMam53M2R4Q0FBQ0FNVG56aFZmOE41bi83RnlRWUdVaFJGOUZRU0pEdmhhS2dnVHR1OUY2Z0xIckVCYnRxeXBnU3JjZVlHa1BXUSt3K0RuV0F3dzVpZjl5N1FWMjZSaTd2bllCNEkzSHRsN20wbjhFQlZnOVZmdnRZZ3F3K3pENkVyWGVYK3hyMm5pK1lOUmZURnRsMjBhMVVUSHFyOStwdnkwR2Ywb1gvTVZVOHEzNlBXWmtYNXVoWDg1cmJXcitnbCs4YlBKVWJpVUFBTUFZblA2aUs1OG82U1dTWjBXQlRHWG9zVVpGUWFyTGdoUzNWeGdGV1VTSU5NRDFBQ3RIalZyRXVVd2FBbzUzUGNDd3M3MzY2d0dhOUtLeDluM3RBc0NIUDF3bkpmKzF5bkRHcS85TSt2cTVjVnVlcnEwbXIyK3kzbC9uSXdBWHB2eW1HZ0dvbXE4TEdmVVgrNTQwbWZvN3RPQXZkTDIvMEVxK01TUDVGUHlhMk5EUFlrSy91YThvbDJWVHoxNzhjNWNlL0ZadUtRQUF3SkNkK2VJMzM4K20vbGN1SFNrTWlFS250QTZxS0VoK3FKUWY2QVJPRmM0Tmk2ckN4NEJ0ZHZlWnBDaEl6cEYwdGg1Z3lPaEJ4WjNybU1jYVZVc3VPb2F5WjlwZER6QTQybHZ0OVFCUGJoM1VINDIxODJzWEFFclN5VnVtdisrbUR4YUdJaDRmbm5UMWM2UFgrM3o0bDJJVVg1TnF0a1dQelQxZnNONmZZdHRSMmltL1ZhOXZiVXB3Z2lJZjdZd0dMQjQ5RjlwR3l1Q3ZldHYyUi92bHY2Wko2RmRuM1VEYk80OXlUZVQrQnovN3hvTlA0ZFlDQUFBTTBlbC9lT1dkZmJyMUtzbnZwcW9JWVJSRlFTcUNwWkFRMEVJaWxJajFBQXZQYThGWXdNWkZRZXF1QnpnZkF0WmJEMUNzQjFqblBXYzl3REt2dk81LzIwZkgydm0xREFEdmU3N3VrUHN6cS82Q2hoYitOUXJzdkwzcHZDSGJSVS8valZ6dnI3QWR0VFBsdDhsSXZwaHRpMGI5cVdGN29aK3owQUlmell1RXpCNm5hbGYwVmVYdnpZSy9xdCtycC9nV3YyYitzU2FoMy82VHN3VlNkcmFkbVBrZi9ld2xCLzg3dHhnQUFHQlFMcno0c0U1TlgrbnlCNWROUVl3TytYb3RDaEk1a2kvQmVvRGhSVUVDMXdOVVpGR1F5cnZGb3NJcFh2bitzQjVnZFM5anRrMjNIcUFDM29mVkNBSGR4bG44WTlkYUJvQ1NsTm4wK1hKOXRHaHE3QkREUDlWOWpiYzd1akRaYUwrWk42SnBlRmZuTlRGVGZxdGVuM1JLY0lOUmYxWHZXZE4xL29wQ3JhTDJTcCtMQ1A0VTlYdCtOZC9ZYWIveG8vL0tSL3RwcVozWTZiMjVvL3lXcWlJdjdzTmxFMGt2K2RrM0h2b2E3alFBQU1BZ0hQZnNqTTFEZnlqcGMwTHVWRmE3S0VqQmF3UFhBNnlJTDVLdkI2aVNjMTAzT0N4ZlQ2NTVRUkxXQTFUQU9ZeFpEekR3T0RUNk1ZRC8vdFlUK3NkUjUyRHIraDF6em5tNnpUUC96Wm5NcVRENEdOTFAwYS94RGtZWEtsMG81d0hoWDFBNzZuYktiOVh6dGJaZEdBV3BtdnRMTmQwM2J4U2RBdHZ1TXZoYkROVGFHdTJucGYzdC9sNDkyaTk1Nktmb1lQR2dtLy9aOFRjZSttcnVPQUFBUU45T3UrZmx6M1RUaytkQ2t0REFheVdLZ3BRRk9zc2hZUDMxQUJjZTdYdzl3SkNpSUNVaGtwV2ZmOVlETERnKzFnTk13cVFYNjdoTngzeXRYZHNBVUpJT0hKaitycVNQRHpudzZ5cjhVNHQ5anluMmtiZGQ3WkdFNm03S2J5dWovdFI4cEYvSXorRUJZVmlCRHdXMjV6T2YwWlRCbnpvTy9uYS9EdmJYNjV0L3ZtaEVZZytoMytKMkI5Mzh6NDlmY3VncnVlMEFBQUI5T2UxRmwvNWZNLyt4M0RDbkpLQmFyYUlnM3JBb3lISmJ3VVZCSW82NytYcUFCU0VUNndGV1AyWlZiYkFlWU11bVdhWS9HUHYxZHEwRHdFOTdsRzUxODJmdmZ2YUdIZ1MySGY2NWhoZitoVDdXK0RVTnAvekdQbCsyYlJlai91TFhBMnhXNEdOcHU1bXBxcUZ0cEFqK1BQbnZvVk44ODR0NXFLRGRGa08vaGNmczRGVDZpK052T1BoMTNINEFBSUN1bmZhaVMvNkh1WTZYQmd3V0dLY2tLd3FpL29xQ2hEeHZsWEdMNHRjRERBbG8ybGtQTUQ4a1lqM0EzRDFiWFB5bmtyN0Z0TUY2Z0pLa1YxLzlOSHYvMksrNWF4MEFTdEtKemVtelpQckVTbzBDOUk1SEdpcCt4RjdLWWg5MSt5QzFOK1czNnZuY2JTUFgrZ3Q5SDZxMlR6WGROeWlrOC96UFoxU1JrSkkrcGwwN3NPajNPcVA5WWdxRmxJZCtDK3Y1YVhGOXc0RFFiN0gvaDZhWi9lbi85OGFEMzhodENBQUE2TXJwdi8rR3J6UHBkNnVteVphRkQxVmhWZTd6bFVWQm1xNEhHRFBCczJvOXdPWkZRWUwySFZNVXhLcGltMkdzQjFnOEFtMFYxZ09NbVFvOCsxbXRzYitjdndtRmJCdncrSmppdjdFWC85aTE5Z0hnQTUrZ1Q4bnRkNXNHWDEzOEhMU2RkenpTVUExQ3V4ckZQcEtIaEIxTithMTZQdldvUDBWdUh6dmROM28wWU00NmYzVUR1LzZEdjZydGJXbjl3ZkxYeEl6MEN4L2xsMStNeElxMlBlaG1MLy8vTGpuODdkeU9BQUNBdGgxNzhSdS9XSmI5cWFSSitkMVBSSEF6NEtJZzgvdXNXZzh3YlZHUTZySWdaZTBWdkdJRTZ3R1dCMCtzQjVodWYvV25BbGZ2ZFRBK3NuRzIvbllWcnIxckh3QktrbTF1L3Jha213bi9JdmVuZHNPLzBNZHFoWVFkVC9tdEd2Vlh0bTJka1lWMTMvKzg2YjZOcHY1MkZQeTVtazhoenY5OXVaSnZ6R2cvRmU1akpwQ0xtTjViWjVSZjliWjcvMDJtMG9YUHVPVElqL0d0QUFBQTJuTEdDeTk1UXViNkM4a1A3dCtRbGY5cmRaaEZRVlFhbCtTR0oxYnhmRzVRMG1ROVFNV3RCNWc3T3JKdVVaRDhkbGtQc09yek5QRDFBSU9uQW52RSt6RHNFTkJjZjNEMTk5dXBWYmorRWdCSyt2VFAxbzJTUGFkSmNKTDY1N0kvNERHRmY2R1ZmanNaN2FlWjhFODlCWDZ6ejBkTWZZNmRCbHh2UGNEODZiNVY3Ulp1NXdtS2hDZ3MrRk5FTzJHdmJXTzBYMDdvNXlHaG45V2QybHN3SXJCbzNVRGJuZFR4VzgrNDVNalQrR1lBQUFDcG5mbkNOejdXcyttckpaMitIT1kwQ3dHclJocWxLUXBTRW5vMVdnK3dabEdRMU9zQlJnZENBY2M3OTU1VVQrc3RDbkc3V1Erd2FvUWw2d0VtV1E4d3NBY0RNYlZzTmFiL1NnU0FldzVrbTgrVTY1WjFxZmFiYWdwd1ZZQzN0SDNpWWgvUklXSEJlbitkamdCc2FkUmYvUkdBNmFmN3hoYjRLTjh1VGZDbm9OL0RnNy9vMFg0NVUzeVhYMk9xbXRvY0UvcmxQUlkyamRoLytZSkxELzhLM3d3QUFDQ1ZZeGUrL2pPbUUzK05wRE1ML3pWb1hoMURWUllGS1I1dDE3d29TS0wxQUlQV21VdS9IbUI0VVpDNjZ3RUdGdndJT1VlbFBXaHJQY0M4b0t2dDlRQ3J6MEovNndHV3ZGOU4xZ08wbUNDeWQ2OSt5OVB0WGF0eUhTWUEzSEhPZWZyNE5MTVh4SWNuelg4dSsraDNIZjVWOVNNNDZNdDdyR0g0Ri9wWWFjR1JCdTBrZVQ1dzFGL012cVFtSXdBdEtqZ3NiYXVpd0Vkc1NGY1doS2xtbTNXRHY1aXB1UFB0V1ZBeEQ5VlpNekFpOUZPTllpRnkvZlRUTHpueTNPUE85d1FBQUdqbWpBdGYvMENUWGlQNW5Tdi8xYmx5UlVIS1FwbllvaUFxT1dlQlU1cEQrbWFob1pDWHJNWEhlb0JCajVrWG5vWFFkNis5OVFBOWNuLzExd01jNmxSZ2MvM3VLbDJMdWJHYmUzTTNmMTNTN1FvTVEySitWdGlsZXhEaG42dUZZSzZqOEsvd3NjajEvdkllU3pubHQrcjE3YS83MTZ5Njc5elBnZXY4S2JCdGIxamNJMjUwWVBuNmZyR2o4bUpHK3lsaVhiOVVvVi9lZHNWckI1b2svY0FkbHg3NXcrTVhhNE52Q0FBQVVNZVJsMXh5YjNmL0I3bnU0VXVoVmxWSVVxOG9TSDQ0VmJLOUJiWWRXc2dqWlZ1aDZ3RmFRREJsWWZIV2JIc2hvWlluS1FxU0V6SWxXUTh3Wi9RZzZ3RXVIRi9aNjFKTUJSN3Rlb0R2dnVhVVhyTksxMk1Dd0JuM2ZadytiSzRYdGZHUlN4N1VlYmRUa1ZPRWY2RlRiNXM4dHRTWG5HSWZTdFIyeWltL1ZlMm5YZmZQYW9lSXVkTjlHL2FyckcvaHI0c0ovb3JEdFBuZnE2ZjVhckc5R3FQOXRMUk5UcnVGMjlRTC9lYi94aXYzODYxM0hEanlaei84S2gzaVd3SUFBTVE0OHBKL3VQZGtjL05pbCs0elA0S3ZLc3hKdFI2Z2w2d0h1Qmg0SlpncXZCZXF4SzRIV0RIMksxbFJrTDdXQTFST2FOWFZlb0FLQ0o5WUQ3RDJ0aXU4SHFDN25xUGpObDJsYXpJQjRJSlR2dldya2paRFE3SmVmaDU0K0xjVWZxbTcwWDZMNFYvSzRpSnRUdm10TTgwMy91ZDZSVDZhVHZjTkN3akRwdURHUGhlemovM2ZZNE0vMVI3dFZ6NEtyMnliK3FGZnppaS9rUDE4N2RFemp2ejUvN3BNUi9pV0FBQUFJYzY2OE9Kek56WTMzaUQ1L1lwRGxaSi93YlpTRktRaXhBc0pBUzBzdW1oV0ZDUTI1R3VwS0VqQzlRQ2Q5UURMWHpmQzlRQjl0ZGNEdk5WTzZjSlZ1eTRUQUM1NDRCUDBBY25lUmZoWEhsWVZQVFkzNWJiajhHL3VzY1RyL2RWNVRjeVUzNnJubS85Y3Y4akgvSGxWNlhUZkpnVStGTmhlMjhGZlZVaTNPTTNYdmY1b1B5MjJXVGtxc1hub2w3ZGQySDdzcXc1TWo3MzZhVzg4ODA1OFV3QUFnREpudnVUMTk5MlN2MjU3NUY5SmlCUVZBaGFFUUt0UUZFUUI0WkxGRndVcHZkc3poVVE3eWRZRFhINXZpODV3bXZVQXE4ZVdEWHM5UUVWOFVnSStGWlhuaFBVQWw3cjZ4OWNldDArdTJyV1pBRERIMVAxWGdzS1Fybi8yYnZZVlBjcHZxWi9lenpwL3FoZitLZURZb2w2VFlNcHZ1dmUxZXRSZjBYdGZaN3B2VlZ0NS9VcXpibURlNy9XQ3YrSnQ4NmY1NXUwM2JMUmYzQ2k4MUtGZjNtUHpvYVhsVEJuMkoyM3AxS1UvY2VuaCsvQk5BUUFBOGh6Ky9YKzZ6K2JXMWorNWRKK3kwVDBlK3EvYUZTOEtFbktNMVFGUi9qRlV4VVpWOFZaVjFlTGNPR2dnNndGcTVPc0JoazJPalZrUHNEcGNaRDNBdWFEc09hdDRmU1lBekhIL2Y5OTZxV1R2V01md1R4VWhWZFZ6VGNLL0pPc0JWaFQ3U0RYYXIrMHB2MTJPK29zcDhxR0diWGxnOEJjYkNpNGZkM3hGMy94MkxURDRxelBhYjdFL3k2L3hEa0svbUFyQk94L3ZoMDZtMmVVLy92cWpqK2JiQWdBQXpEcnp4Zjk0djQySjNtRHkrNWFIRWtYckFmWlpGQ1F2U0tsb08wRlJrT3IxQUdzV0JjbC85ZEw1Y01VY1E5ZzZpRkZUU2xrUE1PQjhWTDhUODhkZC9LcndJaVRwMWdOVW5lTlFyMk1BWC8rV1o5aDFxM2lOSmdETXUxWThXVnR1L3JOMVFySldmbDZ4OE05ajJ3MTVMTERZaHdMN1VxdWRoRk4rbTcxZmNhUCtWTkNIdkZGL1RhZjdwaGpsMXpUNFUxVHdwOUpwejU1Z3RKOEsybFRIb1YvZWRuUFZqSDEvWDFQWlBiSk1iL2pmbHh6OVNyNHhBQUNBSkozK290YytlQ3ZUNnlYZHV6aTRDUWtCODBLWExvcUMxRmdQTURDb2FMWWVvQWEwSG1EQWVRdWQxaHNSRFJXZlk5WURERC91c0xPZmZqM0FpR2h2SU9zQm11bDNWdlU2VFFCWTRQN25iVjNrOHJjUy90VVAvMW9KK3ZJZXk1bHVtM29mZGZyUVJ1RFh4cWkvM0ZETzR6NTdWWDJLWGVjdmRMdjVkZm1xWGhjUi9GV3M3OWZHYUw5NmhVSmFxQkNjRS9qbEZVWngyV2xUdDFmKytDVkh2NTl2REFBQTF0dHBmL0RhaDNzMnZWaXVleFgrcTY1eXZiK3E1M3NvQ3RMSGVvQWg0VktOOVFDclFrQ1ZQRiszS0VpNVZPc0JsaHpmdXE0SGFLV2Zpc3B6a25ZOXdKaXB3QnJDVk9BUFpXZnJyMWYxV2swQVdNQk1VM1ByZHhSZ1J3VS9xZ0tucXVlS3dqKzE4RmlUU3IrdUZnTEJtWkdIWFV6NUxYNnY2by82V3dxaVhHbW1EaWRlNXk5L3UrcFJkU0ZoM1ZKaEQ0V0ZkTVg3alJ2dDUwRnRxcDNRcjJDVW44TDJzeUczNS8zNEc0Lzl5bHpIQUFEQTJqajZrcjgvVDlwNnZVejNxSHRIMGt0UmtNSWdvci8xQUpzVkJTbDRiV0JSa01wUmpLWHRGUnhQSitzQjFqbit2SDJOYVQzQWdCWWFyZ2RZdmFjVTZ3RVcvQlgyR1FLYW5udjE5OXVwbGMyNStNb3ErUkM2N0Yxdm5sd2g2WEh0RkdpbytObmJiVDgwL09vai9PdXEyRWZJWTRYUFIxWTVqbmsrN21kcjFQYisrVXpaTnl2OVowYnM1M1A1T1F0NG5RVzBPZjl0WE5aTzlUK2RMR1RsbWJsTGI5aEtLeGF3emZKbHZYUTdMMjQvN3A4RU02TUN6Zi9ndHNPM2Z0OEx6dFBLZm1FQ0FJQjVwMS80NnM5em0veXRwRFAyL20yUU8yZDBkazZqRlQ1dmM4OFh0VkcwajdKMjVyZTFwWFlLbmwvcTgrN3pCVzE3eGZPU3JLUmZjNi8xaXVjTGpzRksrbFg0L0V4YnB1Snp1NXdwbFp5ejJVYzk0SGh6RWlRcmZFM3grMWZZZjY5NFgyTFBxV2F6eFpKemxkT3VGVVl4VnBDZFdlRlpLRHVTNHVPdTZPZmVaN1hHL25JL3c0SDdtK3UzQmZVMnNST2JydnY4OHpQc0k2dDZ6V1lFWUFremVXYjYyYnBaODlEQ3Y2TCs5Um4rMVo0bTNGSDRWemlTTURMOGk1bnkyN1RRUit6bm8rNm92NnJSZHFyMStxcnQ4cWZVenI4dWZNUmZXR0dQOGltNVZkTjg2NDMybTUvaVczZWtYOTU2ZnN0VGV4VzBqK1g5ek8vTDNMN2p5TzJuLy9VUFhuelgwL2oyQUFCZzlSMzl3OWQ4aFZ2MmFzblBXRWdieXY4Rk9zcWlJSUgvTTY5VnR4Vy9IbURGS25BaFJVRXM1Q2lIdEI1ZzRIVHAwbjNsRmNkSXNSN2d3bXRXYmozQW1LbkE0YTJXOWE3NlBRalphNG9BU0s5WTVmQlBJZ0NzZFAvUDJucVZwRGZXQ1ZkaXRCSCtoWHhWOWgzK3FjNWpIWVovdVkvVldPOHY3N0ZtNndHbW1mSWJ1OVpmMGM4eDZ3OFd2NzVzdSs2RFA2L3NXOWcwMzlDQ0hxNllxY096N1pZY2M4blVYbGRzc0dpVkFhSEp2L3pnZ2RzdisrR0xqOXlMYnc4QUFGYlhzVDk0OVZNejF5c2xIYzM5MTEzVjlNTzFLd29TdXg2Z2w0WWd0U3IvUnF3SEdCNENocThINktGM3c4R0JWK1I2Z01HUGpIYzlRQlcrNzZuV0F3ejRPNGw2ZjhyT1ovZFRnWDFyZFl0LzdDSUFERGxKVS91L25hM0ZsL0R6WEdjYTZwakN2eVpyLzlWNmJHZTl2NUEreDY0L0dQcCtwU2owa1dyVVgxV1JqNktmNDBMQi9NcSs4OXUxRS95cHNKOXBnci9sOXFwSCs4V3M2VmNWK2kyOVRuSEZRb3JXTkhTM3o4Z09iTHp4eDE1LzJrUDU5Z0FBWVBXYzlwTFhQTVBNL2tEU2dkSi96Vm5GM1FsRlFjcWZyd2lwcXRZRExDNktFYjVvVGVWOVpzUjZnR0k5UUxXOUhtRFo2TWZpbG1QQ1JZL3ZzU1U4RHJVNkJ2REt0LzRmZTlQS1oxdDhoVlY3d0JNMkx6YnBOVTNDbTZDZk82ejRPNmJ3Ynordzh1NUgrKzBkdHVjR1dFV1BWYlZkdG0xNXU4TVo5VmRWNUtQcENNRHF5cjd6d1paeTk5Vk44RmMxemRmVnBGQ0lGRlhJSXpMMDAxejdGckR0L0xuYjM5Zk0vbHpuVGpPNzhrZmVjUHJYOGcwQ0FNQ0t1T2lpeVdrdmVmVno1ZjRMa2x0bFFGZjdYNW9VQmNscnF6S29DNXkydW5zTVh0R1dLMmEvQWNGb1VGR1EvSGE5NnZObEVRR1RoWTZHcTVwZXJkTHpVUG9acVQwVk9HUktkY2g3R3JDL3VjOXB4UHRXK2hrT3ZVNm80bTg4ZlF4bzBtK3N3MldjQUREUWREcjVLWmVtelFLVGtwOEovOHEzSDBqNEYvcmE5Tk4vaTBmWjlUWHF6OVZrdW5EMU9uL0ZyeWxmbTI4dTBHb2MvSld2eFZkM3RGOVZlM2tqOFJiYnpBdjl2RUhvbDdkZFVSWGlzcW5FTTl1ZDdtWi8rVU52UE9NNEZZSUJBQmk1WjcvcTBMSGJUMys1dS85QWZ2QVNQOVczNnViZVEvK0ZXYkh1WHRXalhoSWk1ZmFqTXN5SURPNUt3NXdXMWdNTUNuMGlwZ0pYdklOVlIxamRhZ3ZyQVdwZDFnTU1hclhrbVpqMUFEMXlmL1hYQTJ4aEt2QjdIL0FBL2VVNlhNcTVLWXZ3TDIrYXZOeWtieHB6K0pjWFh0VU40TVlhL2pWWjc2L0pmdXUrUDhsRy9TblZxTDkwMWFkRGp6TjAvM050ZVAzcXdHRjlDVzJydXBKdlZYdUwxNHZGWXduLzU2WFZHTXdmVW9YWXFzN3huNXc2Y3V5N1gzRGVoMjdqbXdRQWdIRTU0L2RmZmZibWdla3JUZmE1Ky8raXNKd1VvNlI2YjJsbDRQTG5peXNERjFYcExXb2o3L1kzcDNKc1lXWFp4UlFpb0FKdVFGVmdLYll5Y0VYRldhK3FTTHZjVmxubDM3akt3Rlo2ZGtQYVhLN0FYTlJTemprcVNNeHk5K1g1NzB6MVo2S3F5bk5SekpMelBpd05rQXVzZk90V3VIWFpUN1AvUUxlQ1BsYTI2MlY5clRoMnI3Ry8wdmNoVGFUbHBoOSs2OVB0ZDlmaGVzNEl3QWptV3hlNGRMSlpnTEo4TTAvNDF6ejhpMW5UTDdnZkFjVSsycHorV3hWRXhZUi9iWXo2U3pzQ3NQNDZmMXBzWTIvOXUvQTI0b3FON0g3UmRMZGVZTXk2Zm5WRytpMmVwK3A5N0c4ejNldjM3cysyMUk3THZtbHl4MjJYZk44bGQ3bzMzeVFBQUl6SDRRdi83dHl0ZzF1WG12UzVwZjhUcFZYOEMzQTBSVUVVWGVHMitIbWxYdzh3WklTWnhSY0ZLZHJ2ZXE0SG1QUHVydVI2Z09GN1M3WjI0RERYQTd4eDg0VCtZRjJ1NlFTQUVSN3llTDNYcFJlRi9za1Evb1U5bHlMOFUrckhBb3Q5S09CNDZtMmJkc3B2czg5TWRaR1B1dUZpN0hUZi9PMlcxL2xUWkJ0TmdyK3ljQ3ovK2ZLMS9WdzVWWHlqQ29YTXRoc1grZ1ZNNjUwTC9NcitteTV1NC9ib3pPMktIN2prN0Nmd2JRSUF3UEFkZStuLys0ekpaSHFKcEljc0J5QTEvbFU1MktJZ09WRkVTRkdRanRjRHJKck9PeC95QkVaS3JBY1lPQlY0RmRjRGpKa0tQUHM1alhqZjhsb05HckRYM1hxQUpqMzMrdU4yeTdwYzF3a0FJeDA4dFhWYzBzMGU4Wkh6QWYwOHRQQ3ZNSHpySy95THFQUWI4cGhVYjcyL2V1c0V6cDVEQllWL1hZMzZXLzY1T25Dcld1ZXZyTEt2QjdheDMwNXhQMElLbnN6MUo3aXRnaUludWFQOXl0dWNEeE9iaDM2TDJ4U0hmQ1dCWDk1MnJudE1wL2E2NzMvajJkL0p0d2tBQU1OMTdLVi84MFdhK2lXUzdsa2M3a1FHZUxYL0JkbEdVWkN5bUNTMktFaFpkSkp1UFVCVnJnZFlYaFNFOVFDTHR3cGVEekN3TCtuUDFTcXZCK2lGNzBydUh0S3VCM2dpY3oxM25hN3RCSUNSSHZBNStxamNmaWZ1SzZ2OGVqR1c4RStSUVZqdDhFOHRUT2N0NmNkYytLZTQ2Y1RwUndOYW8vYzNkc3B2Y1h2dGpmcXJNOTAzdExKdjNjQ3UyK0JQNWNGZjFCVGZpa0loT2VjMmRHcnY4bitxK0QwMzhKTzc3ZiszL2R5aHFXY3YvdDQzM09XWjMzaVJKbnlyQUFBd0xNZGU4dGZmb2FtOVN0SVorZUZUYkFoWTlYemlvaUJOd3JYY3ZsYTBaZUhUYUt2Q2l1cXB3SkZGUVVyakZ5OEprdkxQUjFDd1phR2hrRmRVcGwzOGJJUUdYaDR3MVhTNVhRLzVqSVFHdnNwWmlySHNmYkNZejI3SWRnRi9EMWE5ci9BUU1EeVVLd3ZoZzZjQ0p3b0JYWHJwMWMrdy8xeW42enRGUUdwNDkxVTY4OFIwOG02WDdsd3JsUE9ZQWhBOVZmNE5LSDdSWmZpbmhvKzFVZW0zeVhzV1d3VERFMzYycW4rMlZqNkQxY2RYWFZERFo3Nmg2eFVKeVN0WWtkL1htSGJLdDdYaS9kUXU2R0VSLzV0b1ZidFc4VDVWRmZpd2hlTXBmdjFpRzFQcE5ZZnM1Rk4rNy9OdStnVGZMQUFBOU95aWl5YkhUaHo1TmJsK3ZMU2dSODVkL0hvVUJha28rdEZaVVpEeXdodHhSVUdxaW0wc0g2T1ZSZ2xWUlVFS1hsTXl4TXZxOUZONVJVRXFDb2w0UlhHUDNNOUUwVkZWRlFVcGVJMlhmWDRLWGhkY0pLWG9QUzE2WDRyZnNiMzllWTM5YWJHb1RjUzVMUGxjMXlnSTRpWTk0cG9MN08zcmRKa25BS3pwK2pkbFB5TFpzNkpERU84bTNBc05xN29PL3dxM1R4VCsxUXJyT2dqLzZnWnVLYXI4cGczcDZ2NWNGYnBaMk9zOS9CeVc5YUhzK012NkVkN084cmxjdkE0czlyMnEvK0VWaDVjdjdYR2hYMFFBR0JuNEZaem5kN215cjczd1NSOWVxeTlmQUFDRzVPeVh2dXFNRTc3NVVzbStKais4S1Evd0xDQWtyQTRCdzBQQytSQ3dZQjlKUXNERm9NS0NncW44UUdLK3JiZ1FzQ0JBOG9ybkM4NUZXUWhXK254TVZlQ2djekx6dXRJd3lRSkNyNEpBcURRRURBbkQ2b1NBQzY4WmNnaFlXaFc0cEo5N245T3EvVmw1cXg3eWl2UlZnYzMwTjljODNmN0x1bDNybVFKYzAwZHZuVDVYc3JjUG9laEhucEJwdTRSLzljTy8yT205eGM5YjdYWm5RNWpHYXdZR1RQbXQ5N01WaG45cHAvc0dGQWtwT0Q4cHB2cEdyKzlYTUJWWEplZWd2Tkp2ZnNHVHZQTlFYY1FqZjZydjdMVGU2Y3lVM3JLcHdkT1NmY3c4OXdESnIvaU9OOXo5bS9obUFRQ2dlMmY4OGQ4ODhJUnZYaUhwYStLcit1NCtrdUp1cHMyaUlNdjdpU29La3ROKzIwVkJ5cCtMWEZ1UTlRQUxlakRPOVFCTDhySDQ5UUF0NkYwdlByN2UxZ05zT0JYWTljeDF2TjR6QXJDQjY5ODgrUy91ZW1YUVY1dDN2OVpmYkVpMjd1RmZONlA5NWtPM3hpTTlQY1huWlBpai9ocTl2clNmN1UwWlhueWZ3dHNLYUMvblBJUzlCOVVqL1hMUHJjZFBDdzdweS9KNXNoZmNkcGV6Zi9nVkQ3LytKTjh3QUFDMDc5Z2Z2ZkxMSmIxYzBsbUtHc1ZYTlJWNDUvRUdvL3ptMDRXQ0VYeTFweFBQdEZBeUNqQi9Qd1hQNXlRaVZyTGYvZnlpZUtSZitWVGd2RkZVRlNQOVFrYXRCVTJ4alJnSm1Ec1ZPTDdOc0tuQUJlZW9vSUpHMFlpNG9xbktTNjlwUEJXNC9IMUtNd3F3NkVqelJqOUc3Ry9wYjZnNFlxcHMxME5lVWZDYlczQnZaMXgxN1FYMldldDR6V2NFWUFNUC82eXR2emJwSDRxZTc3UEtiOTVqSWVHZkt0cXMrMXpyUVdMazluMkZmekhGUGtwSDhwVlUrWTByQURLOFVYOTUxWDFqWHA4WE5xVWE4YWVBZHZZL1k4cXQ1dHYyYUwvNUVYa3FHWWxYTWxKdnFYaUhJZ3VDYUtGQ2NNaElRNU9idnUvd0RaKzQ3SnZmZVBmNzhRMERBRURyNGQrUFN2NjMyK0Zmd2Ivc3JPSmYvTUZGUVFyK1JkVmdsRjk1VVpDcWY3a3VKZ250RkFVSkcwVlkzRzU4VVpEY1p3dVB5U3ZPaHdlZmo1SjlGeFlGVWRRNUxodHhXVm5wdGpJUDhvWDhMV1EwbkZlTXJGelkycXA2dXR4dWZGWGd5R0lhQzYvM2tQY3o3OW5RdjQzUzY0Z2kvcGJ6Lzk1QysrQ20zMWpYNno0akFCdjY1eXNQUE1wdGVyVzBYYzB5WnBSV2x4Vi9ROE8vMWd0OXFMelNjQmZobnhLR2Z5bEgzTlZkN3k5MW9ZODJSdjJWclhXM2RGNDhZSnZJL1pjZGQxa2JaZjBvKzN1dk91YmwzeTE2dEYvNXVuNkxVOHV0ZXJ1Uzlmd3FpMzhvZk8yL3NEVVZzMDlKK3E2WFB1a0RmODYzREFBQWliM3FWWWVPM1hqaStaSjl1MmIrRFpCL2kyalZ6K2UwMGJ3b0NPc0J6bWNjQVVWQldBOXdFT3NCVnI2bTlmVUF5ODlDMlpIMHVoNWcwQ2pBc1BlZ1luL3ZPK3VrSHZpNjQ3YTVqcGQvQXNBRTNuYmw1RVV5ZlZlS0tacHRoSCtsejVXRWNJUi9xVWNEcGluMk1jd3B2NlptbFlXN21lNDdyT0N2M2pUZjhuTnJqVUsvcUlxL05iWXZlMDNPdVhGMy9jNXB4Kzcra3k4NDcrcFRmTk1BQU5EYzBaZS84aHpibXY2bHBNY3RCMUhoVTMzYkt3cFNyM0t3UlUwbkxtcWp2SS9OUThEaXFjQlZ3ZEYydUdMVm9aaUhoR1l4VTRFWG4rOWpLbkRGOFhqRmNVU0ZUQ0ZoV05WVTRJb1FzUFpVNEtJNExLY3RydzdQQ3M5L2FRZ1lFTXA1V1Y4cmpyMkxFTkQxWTljK1k3dVk2enBpQ25BQ0J3NXMvWXhMdCtZRkFxa0xlblFWL3FscDI1SDdWV0FvNTdoK0xRQUFnQUJKUkVGVXRpcmhYMndSa2REd3I2c3B2OHRUZG92MmIrV2hXZVBwdm5FRlBsVFkvd1pUaHVjS2xJUVU5cWllNXV1YUx4UlNWTkNqdXRoRzNuVGJtZW05TWsybGlLbTlzZjhwb0o5NTA1U2xxY3pjN0VkdXZ1MmpyLzNHZjdyWFBmbW1BUUNnbVNNdis0c24ydGJXVlpJL0x1ZHVYekZUZmRNWEJRblkxaXBlbDZ3b1NINS82aFVGS1RvbmkrZTJ2TzN5ODVRM0ZiaWlGRVJJVVJBclBzckZ0b0lLWFJST0JhNXFzK0w0Z3d0Z0ZFOEY5b3AyVmRycm9tSVVCWHV3a00vK2ZMc3g1V0hLem14UUN4YjY5Nm1JditYQWJVMFJmd05WbjgzY1Y5OXc2cFJldE03ZkF3U0FDVHprTWZxUTVML1dOUHhyR2dwR2hYZVJJL0JTckFOWUZ2NzFWV3lrYVB2WXFyOWVFZjdWQ3Z3VU5vMDh2TnF3TlZvejBJdkN1OUo5cW1LdFAwVlg5OVhpNjlWc25iODJnejh2Q1A1VTJKK3F0dktxK0piL3ZGKzl0MnhOdjdEUWJqWXNuT2FHZCtGci94V0dscjcwMytkT05ySnJuM0x4dmI2Y2J4c0FBT281K3NkLy9uMDI5ZGU1ZEkvQ2Z6bGF4ZDJHVmR5eEJLOEhXRFBBcTZ3YVdqZG9EQWlrS2dLMFFoWTIxeU1rc21FOXdKTDNxZlo2Z0JXZmpaYldBeXdLM0wza1BLUlpEOUREd3JPVzFnUDBrRStKS2V5OEJQMjlMWjMzMzdyK3VOMnl6dDhGVEFGTzVMTExkT1MwamNrN1hMcjNUTjdVT1B4TFVmUWpkNXZJUUN6SmN5TUovMExhRDMvZW1yMCswWHAvdzVyeVc3WFdYOVBwdnVrcSsrWStGekRWTitYNmZsNHd4VGR2Nm03ZUZOK2dxY0FGN1lWc1d6MHRPTzhjV09DNW5OdXZTL1pyL3BIM1BlTVZUOVlXM3pvQUFGUTcrNlV2UGVPRURyL1F6WjY4LzZXYU42VXpjSnJ1MGpZeDZ3SE9KZ3YxcHZyR3JRZFkwTThrNndFVzl5Vi8ybUZBWldEV0E4eU5LMWdQY0hHcWVNbTVXc3ErWXRZRGpKa0tYUFRNb05jRHZFa25kZTYxeCsyVDYveWRRQUNZMEZ1dm5EeFZwai9zcXVoSDA0cS9UVU00d3IvMnc3OCsxL3RyVXVnamRxMi9wa1UrMGhVSktXbWpsZUF2dktoSHlOcCsxZXY2MVEzOXlvcUs1TDN2QmZzcFBZY1dlQTd0bnc2YzByZTgvSXZmK3hHK2RRQUFLSGIwai83OE1jcjhJa24zWHd3U0xDTEFveWhJVVJEQmVvQkxmVnpwOVFBdFlGVzdjYTRIV0I1OEZ2ZXhzdDNXMXdNcytNMlgyODFrdjNETkJmWXo2LzY5d0JUZ2hCNzV1SzAvTXRlYjIxcmZyNmk5dWhWL2E3Mit6djdYS1B4ejlSUCsxVjN2cjNxYWI3MHB2NFd2OWFKakMxK256OVhzOVhsOUxKMmlHekhWVjJYdHpQMmNmenlWMDJQTHB0ZFdyT3MzclZ5VHIyeHRRVlZzdS96NzdOVGpxV3V2YjJYN3FKcU92UFBZRjUwOFlHLzdiMjk0d05meXJRTUFRTDVqZi95S3B5cWJYaUw1L1pmK1pWYTRabHU5cWI3SjF2aGJUaDBDbmk5YTc2L3ErZEQxQU90TkZXWTl3UHpueDcwZW9BZDhFc2E1SG1EZHFjRGhqN2UxSG1Ed1ZPQmJzNE5hMjhJZlM1ZHZwSFBObXpZKzI5d3ZXZnpZdFZVSk9HckVubnV6MTlmWnYzczMwNHM3Q1ArYWpyb0xmcjAzSDNsWTkvTlVIdURWQ2Y2YWp2cXpSdE9SNS9hdmVwVjlVNDM0U3ozTnQyeTBYMWwxNERyYjVaL0hxbEYrOFNQODhxZDNXK0g1bnByKzZNRFc0Ujk4eGZuWHIvVmFIZ0FBN0xub290T09uTkx6emZUTklhUGc4a2YrMUp2cVd6VlMwQkpPOVoxSlQ1WmZwN3hwbmpIN21HbWhaQlJnL241eStqRDNqNXVZcWNCbDU3ZHFLdkRpU01DWXFjQ0x6K2VQWkN3ZDZlZGxjVVBWU01BNlU0SHI5RE52SkdERktMT2FVNEVyUnc4R1RRV3UrbnlVdk00RGprMnhVNkNyajIwNWkrdHJLckQvMmxzdm1QdzBYeEFFZ0syNDlzckpYN2owOWMxRGw0WWo0QlJXOUtPMXFjQ0VmOG5Ddnk3VysydHR5bStDdGY2aWd6czFELzdDMmxnKzUyWEhXdFRIb21tK2hRR2RoNFo0WVczT2Z3N0tRNy95Y05kSy94NWlBcitBcWNDN1A3N1RNL3UyVjM3ZU82L2syd2NBc002T3ZleGxqNXdxKzFOVDlwRGlnR3c1UkNzUEFlT20rbGF0S1dnSnAvck85NC8xQVBPT29TeG9ZejNBTnRjRFhCNnV0N3JyQWJZMUZUaFpDSGo3bHR0OS8va1p4dkpCSWdCc3hYVnYxdjIycHBPM1N6clUxcnAvcWNLL29OZlhET0VJL3lKZjcrM3N2KzV4dFYzb28vNm92NlpGUWtyMlVSSDhsWWRiS1lPL29xSWVjYVA5NnEzL0Z4RDZCWS95U3hQNGVjN1gxY0pqbTVJOTgrN0hUditaRjV4MzlTbStoUUFBYThYZGpyN3NGZDhyK1cvSmREUW00RnF2b2lCRFhRK3c3THcxV3crd3Fpakk2cThIR0RMcWJSWFhBNHdaQlZnU25pMjhQaXB3bkQwbmxhTUFLOXB0c0I2Z1NjKzY5dW1USCtPTG92Z3NJNEczWExueFRKUC9lTXBpSUVPcCtGczNoRnVYOEMvNmZXeFE2VGQydmIvd3oxMWJVMzZiajlwcnBVaElyOEZmOVRUZnlzSWZDcTMyYXlYdmNjVlU0SkxRci93OWlBc0pGOXVvT3FjTHIzL1RWcFo5MjZzKzd4My94cmNRQUdBZG5QYVNsOXh0dW5Ib3haSi9WZDJBYS9XTGd0U2RUcndRTkpUMHNXd2tXVzVja2JBb1NOeFU0T1ZqS0FxWENwOHZESlA2Q0FIclRBVXVPRWNlRVloNTZHaTQ4S25BKzBFWlU0SExQNzlscjFqcStRbHRaZmQvNi8reEQvSnRzWTBpSUMyeGc1cy83OUxIaThLRStFQW1MTXhhMnNhOVZqdEppbjlFdnI3UmM3MkZmNll1dzcrWVloK3V1cUZpM2ZBdnBOQkhrNm5HOFVWQ1BPVDFjd1UrOHZkZldpUms3dWVpSWlHaGhTNW1maTRwbkJIN1gxNmhqYWxVdlowdkZoZXhxRUlsZFFxS1RKZjZtVmZNcExBWXl1T3lxVi83MWE5LzhJL3lMUVFBV0hYSC91UlB2blM2Y2VEYTdmQ3Y1RjlaVlN1VHIyeFJrS3JuNnhRRnllK0Q1L1l6dkNpSW9vdUN6R2FYNVFWRHZMQ293dHl6aGYxd0ZlVmNubnVVNWU5YlFkdUZSVUZVMFdaRklaSGNmaGIweEJUK1diWENNN044VGl6Z2ZKYWNoL3pYTEJZRjhZRDNWaEZGVW9yUGc1Y1U5S2d1ZUJMNHZsWHV6d3Q3dC9EVGhZUi9oUjhCcFBhV04yVS9JcmRucFp5V21icm9SL0twd0RXbkd6ZDZydGZ3VDUyR2YycXcvK3B0NjArOWpTMzAwV1RVWHAwaUg4M1crYk9BYzVweXhGKzlhYjcxcGdMbnJQL25lZHN0bnNld1VYL2gyK2UvcHV5enNyUy94ZW5tWnE5ME8vVzlmL2VrZDMyTWJ5TUF3RXE1OE1MRFJ3OGYvblZKLzNQL1N6WnN2Yi9seDFleEtFak1lb0N6L1c5alBjREY1MWtQc0h5L1MyZFMzYTBIR0RMU3JJUDFBRDN3WEMxOHpvckh4T1djUDY4ZVFWZjhtUzFwdDdYMUFHdE5CVDZWS1h2UXRVKzM5L0dsSVJXZmRTUno4Y1hhT09Ob2RwVmtqNG9OYUJxSGRRMkxmdFRhSm1lZlRmZFIrZHlJdzc4dUsvMDJXKyt2cnltL0xVMFhibERnSXp4OFRCdjhsUWQ1NGRWK1M5Zi84M3FoWDJ4QVdQeitSa3dGOXVYM092ZmZCTEtQdXRuM3Z2cnpyLzlydnBFQUFLdmd0SXRlK3JEcFZ2WXlTWThxRHZkQ0FycFZMQW9Tc3g1Z3dUNjZMZ3JDZW9CaVBjQ2lrS3pPZW9CZFRnV08yTjlzRDJ1dUI1Z2YwQmFmZnpOZCtOYW5UYjZMYjQyeUt3YVN1L3JLamMrVC9QVUJBOC9UcmZ2WFl0R1BrSXEvcmE4eHVQdnpHb2QvYlJYN1NGM29vN2dmL1kzNjg1TEFLSHovUmVlbWplQXZiQ1JmekRiejZ3c3VIa3Y0T29IbDU2eloybit4WVYvSjZFQ1g5UHRicHc3LzczLzhrcXR2NGxzSkFEQktGMTAwT1RiZC9IRjMvem5KRGhlRmQ2WGhYRVNBTjY2aUlESHJBV29FUlVGWUQ1RDFBRmtQc0xUVjZ2VUF0OHduRDN2ckJjYTY0S1ZYQkxUaTZpc25MM0hwMitLRG1ab2hXWTFnckl1S3YwbW5Ba2NjWSt6K3lwKzNadTEwRVA3RnJ2ZFh0cS9LZ0czZ28vN3FUUGNOTGZEUlIvQVhNcEt2Y2hzUDN6NXZ1L0x6WFJYeUJZU0VIdktlNUlWOXhkV2ZkL3I5NGVuVWYrZ2Z2L0Q2UCtkYkNRQXdKb2YvK0kvdk56RmQ2S1luRllZcm9RRmZ5RFp0RndYSkRjV3M5WDNzNzZYdWRPS0ZzTUVEcG40R0Z3VUptQXE4OTk2VUhYdHNDQmd6RlhqeCthcHdMZWUxWGhaREZJZUE5YWNDMStsbmNRalliQ3B3L21laU5HNXJQUVFzajA5THozK3lxY0NCK3l0OGIzSmU0WHJaZFJkc2ZBdmZIaXA1QjlDYU43MUpuNWI1NUIyU3prd3g0cTgwWk1zcCt0SHFWT0RBOEs5cFArb2VZK3h6NWMrUFAveXJHOFFOZjhxdkZaN3o2dGNXaFZQNSs4ajdYQlFIZHUwRWZ6N3pqK1RnQU5BRDF2OHJhS3Nva0d1KzlsOUk0R2VsSXpBWFg3djh2aTYxY1ZGMnduNzQ3Ny9zdW8veTdRUUFHTFRqeDdNakQzN2dqNXI1TDhwMUpHaWR2NUNBTDJTYnFQVUFaMyt1VjlVMytYcUFKU01GTGRFK2pQVUExZjk2Z0NIVFNnZTJIbUFuVTRHTDRyZDY2d0cyTWhWNDd2d21YUTl3YXJiMXlMYys3ZEQxZkltbzVGMUZxNjU2VS9Zajd2YXNxaENpU1lEV1pkR1BWR3NOUnZkanpjSy9rRXEvc1orcHh1djlkVHpsTjlWMDN6cjdMdHAva3VEUEpiZXd3aDYxQzM5RVRmRmREdWRhQ2YwOGRwUmdYTmhYV2loazN5ZW41ajk5OFpQZTlzS2NmQkVBZ040ZHZ1Z2w5N1dwdmRoa1g2RENzTVpLZzVqcTdjWldGQ1FtSkZUTm9pQ3NCMWorWHBTRWZBTmREekRkVk9DQzkzYWgzZmoxQU90TUJTNTQvMWR1S25ERnNlZXZCL2p5NjU2KzhjMThpeFM5SStqRVJSZHBjdC83WkZkSjlwa3AxLzBiV3RHUG9VdzNUdnRZTytGZjA4QXVaYVhmdXV2OU5RL3craHoxMTNTNmIvM2diMnFTTEpOUFhXWW05OTN2N1BMQ0h0WFRkdU5HK3pVSkIzZitISGQrM041MnJ3Mlh6T1pIK2MyMk85MTVmdnZYTE9kL3ZMREE5eXRtS25CT202YlgyR2IyL2EvOW9tdituVzhwQU1BZ3VOdlJQMzNwOTdyMFRFbW5MZDFDaHhUN0NOMXVORVZCNHFmNmhqelBlb0NydFI1Zzg2bkFJU0ZneFd1U1RRVU8rNHdOWWozQTBxbkFLVUxBcUtuQVcvTEpJOTUyZ2IyREx4TUN3TjY5K2MwYm42T3B2OUcxUEdwMXFPditwU3I2a1dxNmNkMjJtejFtS3hmKzlibmVYNWVqL3VvVSthaXp6cDhYaFhBNy8vQ2FtbTJQUjkvNWNwM3UvQ2U1Sm5LNXNwM2Y2bzBJTEF2K1F0WUx6TjkrSitUMG1YL1Q3WVNaWnRycC8yemJMcmxwYXI3ekQwNlRtKytjQTVPYlpIdlhEVnZhNzk2T3pDVmxPZTlmYUpYZzR2ZGYrY1A5Ym5IWkJhOS8zVFhQMFhGTithWUNBUFRsMEovODRZTXl0eGZJOVBuTHQ5dE5ROENpSUduSVJVSHFUU2VPS3dvU001SXdKZ1JrUGNDcUVMRDc5UURyVEFVdWZ1OVNyd2RZK1pxZ0VIQXhJSTRKQVlld0htQ3pxY0JtOXFMcm5yYnhQWHliRUFBT3hwdXVtRndvMDNla0NMQ0dzTzVmRit2L0RUbjhLMjJudy9DdnJVcS9kZGY3NjN6S3J6ZmZiOUhyODBPMytUQ3RlUFJkSnNtMXRUUGRkMHVtVFRkdDdRUm9KdW5RenBkZVpvcWJVcXl3YWI2aDA0Vm5SKzM1d3Y5eVB0MzdkcldkaE16MmtyTHA3cjhYWFB0aHFMdW1POGUrTzBKdzZsSm12bjNjcnAwUkJiYjdaYjN6Slc1NysxRnV1QmM2RlRoL1hxOFhmTzN0ak5TOFlzdTN2dWZTTDN3cjY0VUFBTHAxOGNVYlJ6NzIvditwcVg1UnNtUHhZYzFxRlFXeDJLbStEU29ISnlzSzR1WHZRM1dReEhxQTVmc05DUUhycndlWWZpcHc4ZnRTUEFxd3kvVUFZMFlCRnJXVWNEM0FORk9CVDlybTVrT3UrNWtqNytWTGhRQndNSzY4VW5jMlRmN1ZwVHNuQ2M0Q3B2N1dtbEtzZml2K3ptMno1dUZmODhJZjdSVDdhSFBLNzVCRy9WV0hjdnZUWVdjZm05cjJpTG1wcEUyWk5zMDA5ZTBSY2RQZHBNMU1tVndiTWsxeS9rSGdzcG52OE9MZ0x5Z0EzQjI2TjNPTTA3M0liZm56NWp1RDh0eE5ubW03NzN1akdMVTk0aysyMDc3TGQ2Y3krODYwNXQxUmdUUDlzZDBSazc3N21HOC90aE0rbWpLWlNabG5NNEZnK1h0VUhQWlZUUVhlSHJIb3MvLzJjdHUwcWY1Zzg0YURQM0w1a3krL25XOHNBRURianY3Sml4L2pscjFRc3NlRWhIc1dNL0l1YVFqWVJWR1FtUFVBRi9iUnlucUE4OGRmOW56eTlRQXJRMERXQSt4M1BjQ0tRTXhEUjhPeEh1RDhzWlh0ejhwYm5kcnZ2TzJDalIvaFc0VUFjSERlOUtic0I5M3RPWTNEdVE3WC9ldHRyY0VhVTV2VEJJSU5SdDk1dThWR1VvWi9NY1UrVXF6M043UlJmOFhWZlpmRHROelJlTDcvM0hhd3RSMG9iWWQrbWJaMlFyYnBicGkyRUxidE5XU1pKcHBxUTZac0x5amJDZjk4b1RydnRLQjR5RXhndUJUeXVjMk00c3VXM3RQcGJvQ1piWWVVdXdIZmRMYXZ0cjNoMUNxQzA5MGdjTy9mcnZNdjJBMy9sbzl0OW12Y1pHYWFLTnY1eCs5T2dMZ1RZa1pQQmZiNTNHOTNldkowWitpaTd3U1lXM0pOM1RVeDNXS2EvUFNWWDNEMWMvbkdBZ0MwNHFVdlBlUElnYzFma3ZRRGtyTFFJaDVXcTloSDZIWjlGUVdKV1Erd1pCL0oxZ01zUHY3bUlTRHJBWFlSQWpaZkQ3QWdaT3RsUGNBNlU0R2JoSUJ0VFFWdU5RUzhiWnB0M1AvNm43SVA4K1ZDQURnNDdzcXV2SEp5dVV5UGF4U1l0Ynp1WDVkRlAwSXEvblpYL0dQVnc3KzZ4VDVhR0wybmJndDloSTJBdFBKMS9uWkNxR2xPQUxqbDBxWmwyMEdTWmR2VFozY0xmSmlXaW9Mc0hZUHRmK0daVEpsTEU4c1d2b2g5WjBxeDluN2VuWHBiWEJERWQvcVhTZWJ5blFCdjkzajIvL081OHpIZCtjbG4vKzB3cy82ZmUzRUY0TkwzMS9OZnMvaSsyRTZRYXNwa3lwVHRuTXVkQi9jN1pTWDc5djMzYTNmOXdkMTUxbE5OOTlaZ25PNnNVN2ovL3ZoZXlKaEpINW00ZmQyVjU3L2xDcjY1QUFDcEhQMlRGMysxbXoxSDByM0xSbldGaFlBcGk0TFVYUTh3dm8zUWtOQVNUZldORHdHSHR4NWdWUWc0MnZVQXZXS1U0T3lqSzdrZTRISkYyK3Fwd0NFaDRPSWFneVhCWmtFSTJNWlU0TXAyYTZ3SDZHYS9ldjFQSDNnYTN5NEVnSU4xeFJVSG5pQ2JYaW9wcXhYT0xWWE5iSGtLY05kRlB4S3RhN2hPNFY5WXFKYSsyTWVRcHZ5bUtmSlJQdDEzdXhERzl1VFZxYmJYOWR1eTdmQnZPaE1XdXMxWHZ5MExITFczaHA1dHo5TGQvVm43LzJ0anR0ZVAvYSsrN1JEUVo0Skl6UnlEenowMjNadXlxLzFwdUxiZC9temd0MWpadC9nelpRSG5QVDc4bS90YXN1M3puY21VK1dSdk5LRXRGZ21aRFVGM3o5L09hWjNPYk9SeWJVbjdVNU50ZGwzRC9YMHVWQzMyaVUvKzMvVDA2WCsvK3J5cmIrUGJDd0JRMStHWFgzaXVaZFBma3V6cjRncG50QkVDMWw4UGNIL3ZMYXdIV0JvQ3RyUG00UHhlRXF3SFdQR2VzQjVnL251U2ZEMUFENWpXdS9TUDJUYldBN1NBS0t1cjlRQlhZU3J3MHVPZjJwd2V1Tjg3THJBYitKWWhBQnkweTYrYy9MNUozeDBheXEzQ3VuK3BpbjYwTXhwd0ZjSS9DOTVQM2ZDdjd1aTlvVTM1TFJ2MVYxUjhZMnZuSHp0YjBuWkJEek5OZDZiazdrNmgzZjU3cWFvaVhCQ2kyY3lVMVpuKzJOSng1UVJwUGhPMDJjNzZlelBUYkV2UHozTG9GUjdzMVE3L0F0cTEyWC9FNzhTaFB0a3JHckw4ZWQwTlUzMjdBckgyUnpqdW5xRHA3SERMb0RVRmQwYysya21UZnY3cXo3LzZGL2oyQWdCRXVlaWlnMGYwcVIrUXNsK1FkRnBWdUJjZEFuWmVGS1NMOVFCbkE0aTIxZ05jN2h2ckFiSWVZSFhvTmVUMUFGTk9CUjV5Q0RoM0hmeS9iM3ZhZ1ovamk0WUFjUEF1dTB4bjIyVHlyNUx1MHRYVTN6N1gvZXVpNHUrUXdyK3dkdm9QLzJJcS9iYS8zcDlWbk9QMG8vNldpbWJzL0tOb2FqTUZQU1RKTTIxcXU2REhsa20rRy96TkZKTW9PajZ2RTZMTnJwRzNVMFY0YjVTZTdmOUQwSE8rcExkSEtucmxTTDc4Zm9TUDBnc0ovNG9Ed0pqek1mdVA4OW1RTmRQTXFjaTlIdGpPQ0VudGpOcWNXdyt3SU93cisxM0tQakxKL0w5ZTlhU3JMdVZiREFCUTVlaWYvdjdYdU5sdlM3cGZjRUFWSEpaMVhSU2tpL1VBWjg5Ulcrc0JxbVpSRU5ZREhQWjZnSFdtQW9lRWdHTmZEM0R4c3hFVEFyYTFIbUN5cWNBMzNISEhnZnU5NjdoOWltOGJBc0JSdVB6SzdIKzQ3UGVDUTdRYVUyUDdYUGR2SEJWL200Vi96ZnBpZ3c3L1lrSzh1dXY5aFUzNTdYTFVYN1k5V2RRbHQweWJ2ajNhYjJ2bjkrM2lHRHR0MnN5MDJZVmpyUDZNeFFaaXhhUCs2b2Q1MVZWMlE5b3NmVTJEOEcvNU5UYnppTzJ0VGJnWGRPNkVudk9WalhkZVk0dm5LeVRzSytpUFM2YnNkV2ZxMk5lLzd2elhmWkp2TWdEQW9rTVgvZjRETXVtM0pYM1YvOS9lbThkcFVwWFg0K2VwN3BrQmhrVVFkeE1WalJ1SlJzRW95Q0tLb2dUM01LN2dMc1l0YWlKcTFzbGlYUE5MWEdJU1l6YXptRUNNVWZtcUtBZ2lLaGd4YUVSY0VGd1FSQlpaWnAvcGVuNS9kUGRNOS90VzNmdmNyZDZxOXozbjgxR211NnB1M1h1cjNyZHVuVDduT1M3TFppb0oyRTBvU1B2MmZQVUFHNGkyN1BVQVI4N0Jlb0JHRXBEMUFEdXRCOWlKRmJpTldPdTJIcUE0S0NxVEZWaXIwNy94cGpYdjRCT0hCT0Jnb0lycVMxK2V1d2pBdy9wcy9TMUsrbm5JdjloeldjbS82R05ublB5TERmc29hZm1OVS8ydHFJdTNwUGFyVVdGQmwrcjZTVFVXbXRIV0w1Zk5Wd09JT2JNNlRsUEl2ekJpenRtUEpQSnY5YVBJTkQ4eVlubGVQa2JHdDF2SlBqUDV0MklocEpDZGM1VzgrYXZIZnZrUCtUUWpDSUlnQUFBZi9PRDZmZFp0K3gwVmVSMGc2L3dFbUlHTUN3b0ZDU1gzMGdrOGFTUHdna25BVXZVQUhlZGdQY0RXdWV0OVBVQ3JmVHFxSG1DTUZkaERBa2JYQTR5eEFyZGMvK215QWwrN2J0dmErMXl5VVZpam13VGdzSERoeFdzT0Y5UVhBWmlMc2Y2V3N1RjJRdnExakMzMVhMbEl1R2tpLzhaSUdnMXJNNXhvQ3lmd1ZzNXZic3R2RStsWEw5ZVJrOFV3ajNxcHp0OXlvQWRXRUlPK3VXZ25PTXVvN3NMSXZ4Z2xYNkpxTWJidW42ZnY0VDhua24ydDVOL0s3ZktUQ3RVcC8zdmNSZWZ3aVVZUUJER2oyTGl4MnV2UXV6MVBnRDhCY05kYzVON01oNElrMVFPTU84Y1lBWmVzSlBRUWhJNTJXQS9RUWdMRzFBT01zUUpiU01DWWVvQXhWbURiUFphdkhtQ0lGYmhwTGt1UWdQckt5OTY0MTEveTRVTUNjSkQ0NHNYei81OUNYenRwNjI5ZjYvN2xKUDJTeWI5VkJOVTBrWDk1a242VFEwS1N5YjhHWlo0dXB1c3VRSmJVWVN0VGZJRUZWTHNUZkJmcUZXc1VrUWJDdDUzOGF5Y2NJMG0wS1BJdnh6blM3TVR0QkdEWDVKK05BQXdsLzBiN3UveHpoZXJ5aGFwNnh2OGQrNlgvNDFPTklBaGlkckRYR1gvN2FKSDZuWUE4eEUwS3haRjdEQVZwR1djR2dtNzErRmdQa1BVQVM5UURqTEVDajgrbjl4aHJQVUIxak5rMWY0bFdZTmQxOGJhclkvZlFEN2F2WDN1L0sxNHQyL2tFSWdFNFNKejlOYXhmdjIzdTZ3QU9TYkgrWmlIbkJsVDNyMVRvUnhma1g5bzQra1AreFlaOXhOYjdDdzhSa2QwMSs1WlZmeldBWFV1a1g3MkNjTlRGZkFtRGdyQzVUNm5XM3paQ0xJd0F6SnpnYXlIR2tLL3VuMVV0bUU3MjJYNXVJZ0E5aEtFcXFuTmxSL1djcjUvd3haL3k2VVlRQkRHOVdQdWZmM1AvT2RWM0FISlNPM0VWUys1MUZBb1NaUm51TWhRa3BCNmc0eHlzQjloK3oweXdIcUJMVFRhY2VvQXkvbUxpdFFLM1g3TjJGV0NwZW9CRHRBTEw4eTU3NDlvUDhpbEVBbkRRdVBDaStlTWdlcTVpdGRwNlV0YmZJZGI5bTFUaWIvSHpUZ0g1RjF2dkw5N3l1NVRtdTBUc0xhaWdGc0dDQ2haV3FBQ1h5U3JYK01LdHZ6R0t1aExXMyttcCs5YzUyUmRIL3ExVW5kWVZxdjgrU05ZOTUvemp6dC9HSnh4QkVNVDBZUDh6UG5EUUR0bDFPb0RYQ21TdGs3U3pobjMwUFJURVIrQ1pTTUJTOVFCWHppSHJBVFlUUGF3SDJOeW1od1FzV0EvUXBvYkxVUTh3cHhXNEZ5VGdwWmR0VzNjWU5rck5weEVKd0NrZ0FlZitRUVhQejJIOURUN0dhTVBOUmd4T0tQU0Q1RjgzNUY5MzlmNVdqRzBwRGJaZXVwMjFxckJMOTFoOWRZa01yRld4S2tVV051dnVFS3kvWVdSZVgrdit5ZGdhS3JTdVgvbTZmK00vajQ1bjhlZHFPeUR2L01aeFgveGRQdUVJZ2lBR2pnOStjUDFlNjdlOFdsVGZvQ29IdEJKUndlUmV5VkNRbUhxQWFRUmVheWhJYWoxQUp3bFlwdVpnem5xQUxvS21uZlJoUGNDaDF3TjBFYUI1NmdIR1dJRlRTTUNRZW9BRnJNQ3FqN25zVFh0L2xnOGtFb0JUZ1M5K0VRZnRuSnY3cGdCMzZwUDFkNUoxLy9MVi81UDRObWFBL0V0UzhBV1Nmem5xL2VuU3c2TmU4VzIydTQ2ZkxvWjZMRUJRcXdBVlVDLzlWVnBseFRWVnUzVlhEZVBOYmYxdEkvL2l5THpacWZ1bkRZdGZqZjFaUThnKzE4L1ZKcTNsVFpjOTVndnY1Wk9PSUFoaVlQaWJ2MW16MThFTEw0REtSZ0IzYVhvcGw0N0l2U0dFZ2toR3EyL2VVQkRXQXh4cVBVQ1hiYmRNUGNBWUszRHp1SjFqTTVHQTR4Wmp2eFhZUWdLT0VvQnQ5RnYrZW9CQmhPUEttVkI4L0xJMzd2VWtQcFJJQUU0VlB2Zmx1UTJpK0krYzFsL3ZNUjFZZjBQcS9zV1NmcVVTZjBuK2hmZkRlNjdFZW4rcXN2VGMybFBiYnpmcEp3SkZzOFYzWlRDSWpkQnJPVDZiOWRlb3VtUGRQOVBQYWVyQXNOQ1BrSi8zZkI2cm0rcTZldEhseDMvK3YvbTBJd2lDNkRrMmJxejJQdlNPVDFmQld3RGMyMDFJZVVoQU5SQndNeGtLa3A0Y1BMWDFBTTBrSU9zQlNndFoxemhmcXdrbEd3bW9EaEp0OUpoQUs3QTM0YmZ4T3lTdUhxQTRiZUlCcE53RXJNQUNMS2pLZzcvNXhuV1g4ZUZFQW5ENlNNQ0w1TDhCZVhJTXlWZmErcHRNRUU0NDlDT1UvSXMvdjExeDZHOVBla3orNVF2N2FEM1hTdkpMS2l6VDFjdDEvWGJwTXVtMzFPNUltRWN6Q2QyRjlUY1A4UlpHL3NXUWVZbjlIbkRkdnd5aEg1SFc0TGx2aU9LNWx6MzZ3cS94aVVjUUJORXpxTXJlSDM3djB4VFZId040Z0plTU0xa3NHUW95U2hMR2pYK3k5UURIU1I3V0E3U1RnRjNXQTR5eEFudUl3MFFyc0lzRXpGMFBzQnNyY0FJSjZMUUN0MndSK1p0dm5yN1h5L2lBSWdFNGxUajNpN2piZkZWZHBzQUJ1VWk0WGxoL0Uyb2FocDdMUjBLVlRmeVZwREZNTGZrM0V2Ymh0UHdxSUFJc0xQVjZtZHlybC82M1N3VXFpeW0reThOVmxkM3JET2Y4RGRUNm00Zk1tOTI2ZnlWRFA2TFVnUXFvVkpkV21IL0JaY2VkZnltZmZBUkJFSlBIdXY5ODc0a2krRU1BaDBPTnFybGtFckJ2b1NDaEJHVkVQY0JnRXBEMUFGa1BzQXdKNkZZQldrakFGcjFhQi9VQXZjZVlTTURSZThNeHBqRVMwRzhGYnI5ZlhTVGcyQkczVmJzV2Z1RWJ2N1B2ZFh4S2tRQ2NXbnp1NHVvMFZmeDEwUUNRUk92dkpJTkdyRVJjanRDUEZNc3V5YjhJOG0vNVZxbXd1NllmbGhOOGx3aEFyQWp6MkcwRlZ2OTE2Sy8xdDBWMTF3UHJiLy9yL3ZVcDlDUHM1OFhmVlFEa3NqVnpPUFhyeDN6K3EzejZFUVJCZEkrOVB2enU0d0Y1TXlDLzBrYXFPTWs0ZGFqUllzbTlxUW9GU2JmNnNoNmdod1NjdVhxQUhxV2F5UXBzSVFFblh3OHd0eFhZWHcrd1gxWmdCWDczOGpmcy9XWStxVWdBVGpWVUlSZGNKSitwUlI2VGxZVERkRmwvYzZqd2NvUitUSXI4R3p1bUVQbVhSQmdHaFgwSTZpV1RyNkxDQWhTMVZxaGxLZDBYaWVxOXFiWCtwaW41WW9pNllkVDltMVRvUjBCZHdEMm5xdXU2T2w5M3pyM2lPeWVjL3kwK0JRbUNJSW92dG1YZGg5OXprZ2grRDVDSFdjaTlkQkp3MWtKQlF1b0JOaEJwckFjSTFnT010QUtiU1VDM0ZYajg4Mk1sdmJxcUJ5ais1TnkrV29FTkpHQ2wrUEZlMi9hNjd5VWJaUXNmV2lRQXB4NmZ1d2kvVUtQNm1nSjdKNUY5TFFSZ2RsS3hiVnNMK1plZjlCdGU2RWVZdW02S3lMK1YxdDFsc21zcHJiZUdZRUd4cXE2ZndxYSttMDdyYnhpaDJBVmhPRTExLzBxRWZuakpQdGZQZ2gyNm9HY3NRRGRlOFpndmZvOVBRb0lnaUdMRTN4OEFPTXhQN2dXRWVEQVVwSEY3bVZBUTFnUHNSVDFBYStwc2REM0FicXpBcmpZbld3L1Fid1YyeldjMzlRREZTL3UxMzYvdHZWbGFwei8vVzIvWSs1LzQ0Q0lCT0RNNDc2THFqUXE4SlptRTg1Qi8yY2krbHZQbGF0KzJmMlRkUHkxM1R2dnZiT1JUSTltbHcxTCs3U0gvQkxYc1NmTGRRL2l0ZnFZa3FmZlVyOTVMdGY1bURkeklhdjNOYkZIV0pySXJwaC9kMS8wckYvcVJZbUZ1YmdNaU8ycklQMVphdmVWYng1My9mVDROQ1lJZ1VoZlZHK2YzdnVuQURTcDRFNEJmTkJOckhvS0dvU0F3S2VIeWhZTDBvUjdneXJPazJZa1hpVFlQUWVnNHp5VHJBYnF0d0NuMUFQMVc0RFFTTU1ZS2JDRUJZK29CMnEzQVkwZGI2d0ZhU2RveEF0QXhwaFlTMEtsR2RJNjU4ZWhMTDkrNjkySFlLRFVmWUNRQVoyZXRjaDdtZGUvcVlnVWVta3JZNllvMytKTFczOVdXUzgzV3Z1MTNDU284blVDdFFWaFZpNUpFL2pVZTB4WDVwM3Vla1l1RW55NytWeGFKdjEwcXU5dXZXODgxUk90dkpQSFdvZlhYUmxybXNQNTJYL2V2ZDZFZkRyTFBvM3pjQ2NXL1YzUHl4NWNmZThGMytWUWtDSUlJeE5udldML1hsclhQZ2VwdkFmZ0ZPOEhsSWdFWkNoSkQ0TFdHZ2d5bUh1QjQzOFUwZnRZRGJMdVhYSFpZTjJua1VRbXUvTzFFNndGMlpRV09xd2NvVG9Xb1k1N0dDTUMySTFLc3dOWGpMbi9EWHAvaFE0d0U0TXpoc3hmaE1FVjFFWUQ1Wk1KdUlOYmZPQkpQNHR2U0NkUWFMRWIrR1k3cGdQeVQzV0VkSzlSK29salF1Y1Z3ajVIeHFZZjg4eE9DMDI3OWpTTVV3L3JrMmFjbmRmL2NoRmwvUXo5czVGL3o3d0RaS1lJUDFYWDkvMzNuMFJkK2pVOUdnaUFJTi9iOXIzZmNjWmZNdnhLS1Z3QTRLSzdHbnBVRW5LVlFrTmg2Z0EzS1BCTUpXS29lWUN3SjJHVW9pTTBLM0V3Q3NoNmdqQzFJKzFJUE1NWUtiQ0VCUGNSaG4rc0JqcEhSOHNuTDM3RDNpWHlTa1FDY1daeHpVZlYyQUs5UEl0UldrSDh4SkY5WDU0c25CTHVyKzVjMzlFTWlDRVp4OUwxNzhtKzFpbks1bHBsQW9haHJRVjB0aFhrczFmaGIrUnpXNVdlTWhoRndmYmYraHRYb2l5RUFVeE45QTl0VVB3bVoybThMV1pqMmM0OUNQOExJdjlGNS8wSXQ4cllyanYzY1dRMU9hb0lnaUpuR1hoLys4ME5FOURjVWVERWcrM2dKTGl1eFZvUUU3RnNvU0lsNmdDdjcxWWQ2Z0k1ejlDSVVaUHJxQVlybk05UnVCWFlRaEZFa1lGZjFBR09zd0JZU3NLdDZnS01LVWNlWXhoYXlXYXpBQzZnV2Z2bnkxKy8zRFQ3UlNBRE9MTDc0UmV5OXVhcStMc0I5b2dtN0FPdHZNa0ZZMlBwYnV1NWZVY0xSVE14MVQvN0ZFb2F5UkJEVlM5SjVYVXJ0clpmQ1BPb0dsVjhNQVVmcnI1WDh5MEVRanBCVm5WaC9Pd3o5R0NNQUp4VDY0ZXh2MDNsVy9mNHlnZjc1d3RiMS8zTEZpWi9jemljbFFSQXpUZng5NUIyUFVzeTlTbFNmQWtobEl1bENnelljQkl4dnY4bUhnaVRXQTB3aUFmdFFEM0RsWE9jUEJXRTl3Rm1xQnhoakJXNy9yQ2ZYQTh4Z0JmYlhBK3pTQ2x6OTllVnYyUHZYK1ZRakFUanpPUGVMT0xLdXFnc0F6T1VJL2lnV0FGTEkraHVxa3N0Wjk2L0x4Titoa1gvTHhOREt4TjRGeUZJOXZ6Mi9heUwwVWdrNEozazQ0OWJmTkpWZUdldHY2VHAvWGRUOXl4UDZrWVg4VzdtMi82bW8vQldBOTM3bnVQTnY0Tk9TSUlpWndTZmV2VzZ2SFR1ZklhcXZVOGlEbTBtb2ZwQ0FNeE1LWWlUb291c0JCcE9FZ2FFZ1VTbysxZ1AwazRCRHFnY29LOGd5QXdtb0RoSnQ5SmhPNmdHS1c0SFg3M3FBTjlYVnd2Mis4MXY3Y3oxTEFwQUFnRTkvcVhxYkNFNFBJdXdpVTNpakNjS01xYjg1YmJpbDYvN2xDUDB3cGZjbWtuOUpoT0d5VFZkV0pQbldBbDJSNGd0Z2xjMTNUNHF2YSs3c1Z0dWhXbitkTmZvR1ovMjF0Wm1QREJ3bkIrUEpPMHcwOUVOYkZwcnFlRXc3eWIvVnY5OHVLbWZvM01KYnZudnNCWmZ6aVVrUXhMUmkvUmx2di9QQ0dua1pJSzhBY0xDZnFNbERtREVVQkFWQ1FVclZBMXhKUXJBZW9JWHdtbXc5UUhIYVlmUFdBNHl4QXZ2bTJFcDY1YWdIR0dNRjl0MWZqbU9pU0VEeDBuNU5iYXJpMTcvOWh2Vi96YWNjQ1VCaUNaLzRCTmJOSDFUOUQ0QmZtblR3UitPeEE3TCtscTc3RnhmNjRVbnYxUkRDTUNGWXhOUGVjbHB2RFN6VytKUEY3YldQdkFTeUUzQzAvbWJvUXhENWw0T0VMRm4zYjJpaEg5bkl2NVdyODFwUm5TVUw4bWZmZmN4bkwrQ1RreUNJYWNGZS8vMzJvNkg2U3FCNkdvRDVyQ1NkaVFqTFRRS1dDL3ZvZnloSXFYcUFLK2R4Q1BVQUhZcTFxYThIR0dJRkh0M2VUVDFBdHdyUVFnTEcxQU9Nc1FLUHo2ZmZDbXdoQVVjSlFNZVlXa2hBYXoxQUJTNzk5ajMzT1J3YlpJRlBPeEtBeEFwOCtzdjRaZFRWeFFxczlSSnBYUVovVE1ENkcwWGlUYnp1WDg3RVh6dmhGa1ArclR4bXBhVjNRV1dSQUpTbFBza1NXU1RTTXNlVHMvNjZ5RWQ3d3ZEd3JiODJsVjRPNjIrUDYvNXBPWEt2Y09pSG5mekQ2ajhXQVBnS2dML2FaK2VhLy9qNkNaL2V6Q2NvUVJCRHd3Rm52ZVhBYlF0enA0cmlwVkE4TUlqTWl5RUJaemtVSkF2NU9hbDZnQTNuWUQzQUFCS3dxM3FBN1FTVG53VDAxd05zSjdiY0pLQlQzWmE5SHFDTXYzQjVyY0R0MTZSZEJSaFhEM0JDVm1DdDY3bGp2dlBHdlMva1U0OEVJTkZFQWw1Yy9iWXEzdXhYdW1sNXl5K0dhLzN0UkcwWVFIQTVTYXFpNU4rSzluVFB0ME85UkZLcEFMWEtZcmlITHBLQlVBV3FwZTJCL1lraDRLYk4rcnVhL0xPUWM1S1pEUFRzTTVHNmYrbmtvSE1PMVZiWHJ3K2hIN1o2Z0Y3eWIrWHh0eXJrM3l0WitLdnZIbmYrcFh5S0VnVFJkK3p6a2JjY1ZsZlZTNkY0RG9EMWJ0TEZSYklFa0ZwUjlRQ3RKT0NVaFlJRVc0YmJ0NHVISkxTUEszTTlRQjlKeUhxQUVmZFRROHVCOVFDeldJSE5KS0RiQ2p6V2FyUVYyRThDaXVPUHhubnJBWFp2QmE2QWY3bjg5SDFQNFpPUEJDRFJnalBPd053QlB6LzNlWVVlNFNMa2lsdCtkNU1GazdQK0JpbnhKbHozYjdLaEgyRUUzWEo0UjcyaytGdmVyOWJ4WjR1bFB5SHF2Mmp5a05iZlBHMEcxdjJMT1VjTUdlZ2s5NHFHZm95T2RYS2hIMjd5cjJuaDEzaXVMd0w2Tjl2MzJuYm0xVWQrYVN1ZnFBUkI5QVczKzhqRzIyMnQxajFYdERvTjBGOE1JOXN5a0ZYUkpPRHdRMEdHVncvUVFOQ3hIdUFFNndHNkxiZkRyZ2NZWXdXMmtJQ2VZN0xWQXh3NXhrUUNqcExEeld2UlNDdndiVkM1LzdmZnNQNGFQZ1ZKQUJJT25QTS9PR1RYUXZVMUJmWnRKRmdpMUg4cHdSK2xVb1Z0aEU0WjYrOGs2djdsRHYxd2tuKzZkTXhTaUlkQWQ2ZjRMcXY5RkZnay9ad2thSWpDTDNRdVp0MzZteGppRVVQTWFmNXpsUDI1djNYL3lvUitORCsrMVViK3JXejNsaHI0RDlUNHk2dU9QL2ZyZktvU0JERVJiTnhZN2ZYTDZ4NE40RlFBVHdld2o1ZWswMEF5ejBwV3hSSnJvY1JrNTZFZ05uSnZHUFVBRzRnMDFnTkVQK29CdHBCSWc2c0hHR01GdHBDQUxjZGtyd2VZeHdyc3J3ZVl5UXFzT1AzYmI5ajNIWHdZa2dBa0RQamtSZFhMQWZ5bGk1RHJTL0JIUGhYZ2NLeS95WUVjNmliUGJHU2I0L3hMdGw2RlFwZXN2VFdXZjdkaTNnUjdFb0JEQ2N3Q0JOeTBXMyt0cXJuK1dILzdYL2R2VW1SZko2RWZEdkp2dk0ybVBnT0FYQ0xBKzdkdTN2dGZybm5peDdmdzZVb1FSR21zKytnZjMyOE8xYk1VOGp4VjNET0l6RE1yN21KSndHa1BCVEhVQXd3WlQ2OURRWVpRRDlCL25iUFdBL1JhWDZlZ0hxQjZDTUtWdnkxY0R6QzNGZGliOEd1YVM5djlsYzhLM0h5RVNuVkZ2VzZmWDd6aTFiS2RUMFVTZ0lRQnFwQlBYU3lmVXNqalZwSi9LZVJlMThFZmZVajl6YTQyTkpOenVVSS94RVErcnZ4OXJVdktQd1hxU3BZSXdOWHRxTHJieUczOTlST0NZZGJmZUVJd25mU2FCZXV2VmUxWHV1NmZzdzVnb2JwL1BRNzk4SkNOWHB2eERhTDZUd3ZWM0FlK2Y5eW52OFduTEVFUU9YRzdqMnk4M1k2NU5SdFU4VHdBUjY3NkRyU3EzYktTZ0F3RmNaS0F2YWdIdUpva3RJK0w5UUJ6MVFNVXoyZGw4UFVBclNFcW5ucUF1YTNBTGhJd2p4WFlkbitWclFjb1QvajI2ZnQraWs5SEVvQkVBRDU5SWU2NmE3NzZQd0FIaFZwL2s0bkNUb00vSk82NHpOYmZTZFQ5U3czOUVPeXA2d2NvYXV3aCs1Yi91eGoySVh1KzA3V1pFTEpmRXlzQmx5ZjRnOWJmRXVSZjNuUFlTREpKcnRPWHArN2ZKRU0vSmtiK3JScXZBTitzQlIvVXVlcURQemptN0d2NXRDVUlJZ3JuYmR4cm4xdm1INnZBeVJDM3hUZU5CQ3lkRE55SFVKQ01mYzBlQ2hKNlRsODl3SVo5V1ErdyszcUFyVVJQUkQxQU5aQnhEZk13T1N0d3l6R1pyY0F1RWpETkN1ejduaG5aMDNwOXh1NEx4NWpHRnBpcnh2WFJiNSsrMzFQNGtDUUJTRVRnLzEwODkyeW8vbXRxTGI0Z2dyQ253UjhsckwveEtzQlEyMng4Nk1mNHVHWDM4MU1oVUZuMDhpNHNrWDhBRnROOHNTZndvM25lOGxsL0xmYmJZUEpRVTVSK2Z2S3dqZlRxMHZxYnFyb3pxUVVIWi8wdFEvNVpDTUQraEg2VUkvOUdVQVA0RWlBZlhMdDJydzk5KzZpUDNjYW5Ma0VRVHB4eHh0emVlMy9uQ0sxeFNnVjlwZ0w3VzRrOURTWGJzaWNERHp3VVJGUEcxSTlRRU1sbzlXVTl3RkhTWlRMMUFOMVc0SlI2Z0Q1eUxaNEV6RzBGZHZWemZINDh4M2l1U2JzS01LNGVvQVNSdysxSHJaaUw3WE9vZitueTB3LzRMaCtZSkFDSlNIemlvdW9NVlQyNVMvVmZYNEkvdXJiKzJnakIrTHAvdVVJL2FsbDhkYTlGbGxSL3k2RWZpelgvM0tFYWJVUmN2dUNQc0pBUXYvcXZqUEl3c0lhZWlRRE1iZjFOVkF0R2tYL3VmYm9sQTBkK25tRGR2NjVDUHdJU2YxUEp2OUZydHhuQVJ4WDZyL2VTblo4Ky83anpkL0hwU3hERU11bTMxOTdmUEJvMW5pRlMvUnFBZzgya1VDb0pHSlVNbkNNVXhOcCtUME5CZkhYbkJoRUtNbHYxQUcxVzRQWjJTdFlERExNQ3Q4MVArLzNtc2dJN1NVQlBQVUJwSWV2YXlTMjNGWGo4czlQV1VubzlRSEdVbHVtekZWaUFQL24yNmZ2OUhoK2NKQUNKQlB6WHhiajkyZ1g1UHdqdWtrenUrWWk2SGdSL0RObjZtNlB1bnlYMG84WWU4bStSOE5QZHFiOHJGOWpONmNDaHhKbDdXNGo5TnNUNjYyOXY2TmJmVEFSa0VQblgzbWJNT1VxUWdVMEVYek1CT1BUUWoyeUp2MmsyNCtaMmY2cVEveERVLy9yOVIzLzZZajZGQ1dJRzhUZC9zMmI5M1g3eTZJVmFueWFRcHdLNFF4SnBOdmJjeksyNEswRUNacWczYUtvSG1KZmN5MXNQTUJjSk9NdjFBRk90d0tNMFRGZjFBRU9zd0NuMUFCMzEvckxYQTdSWmdWMXQ1cTRINkJwN25ucUFJOGVZU01CUmUzSHpPbkw4S1BuaGJadjNmY0ExRzRXaGN5UUFpVlNjZFRGK0ZiV2NWVndGMkZCbnNCd2gyRS9ycjVzUWxDRFZYSmE2ZjB1QkhwQnFNZGhqS2IxWGw1Ui9aaFdoV2xTUStZSS9Rc2pERU91djVkelcvbGhJcjBsWmY1T0pPaTNicDFpQ3I1dTZmM2xEUGlZYitoR1UrSnVEL0Z0MXJDaStXMWZ5cjNPS2Y3L3EwWi82TnAvR0JESEZPRy9qWHZ0c3FoOExWRTlYeFpNQUhCaE9tdm1KcWQ2R2dsaklJUWVKWWRsUE9pTDN5dFVERE8zYkxOY0RqRk5KVHJZZVlJZ1ZlTHlQcm5xQThWYmd0dnNsRndrWVl3VzJrSUF0eDJTdkI1akhDdXl2QitnL1JvQ25mUHYxKzMrVUQxTVNnRVFtZlB4TDFmc0JmVWswdWVjanVUb08vcGdlNjYrSHpOUDR0ckFVNExHd2JQT1ZwV0NQZWluWUk0U283RW53QjYyL2ZiWCt6a3JkdjJrTi9YRFlpVTF0bXNid1RVRCt1NjcxdjMvMG1FOTlwYlVaZ2lBR2cvMys2MDIzMzdsMi9nbUM2b2xRZlFKVTlzdExtblZOQXVZSUJjbE5BbllWQ2pLc2VvQ3JyTFBtUHJNZW9IZytFK0gxQU8xVzRIRVNNTUVLbkxrZW9IZytPMTNWQTh4dEJmYmFlazF6YVNFQms2M0FIL25PNi9kL0dwK3FKQUNKalBqb2hkaXZxdVJTRlJ5U1NzeUZXbi96RTRJU3B4N1VEcTNHWTcrTHNQNXE0UDVMV0ZiMjFWaEs4eFZCWGEvK2ZnK3FzemVBNEk5bTYyOEFlVWpyYndENTU5OG56UG83clhYL1VzaS9FS0t1czlBUDU3Z0N4M0MxUWo4cW92OTloLzF1K053bGgxK3lrMDlwZ2hnRzFwNzF1dytZVTNraWdKTUFIQW5JWEJKcE5oRVNzRnkvK2hrS2ttQVpEaUlCV1E4d2xTUWNSajFBRjFtY3N4NWdpQlY0ZEh0Sks3Q0ZCSFRYQTh4dEJYYVJnSk96QXB0SndOdTBubi9nRlcvWTUybytZVWtBRXBueDhTL2dDSzNrQWdEeldWV0FCZFIva3dyKzZJUDFON2J1bjJKSjVhZUxKT0NDVnF0SlA5bnpoUjFFZGhyVWY3bXN2MzVTcm1YZjdOYmZmTVJhSDZ5L1pxS3VBK3R2N2pxQVRRVFpOTlg5ODZyME5GKzZjRWZrMytqNWZxYVFzd0I4ZE9mT1haKzY3b1JQYitiVG1pQjZoUE0yN3JYdTFoMUhWekozSWtTZkNPRGVYb0twVXhLd2RESnczME5CWXNpOVFCTFFXZzh3WkR5c0I5ZzZ0bjdXQS9SWlg0ZFdEekMzRlRpOHpSZ3JzSXNFVExZQ2p5em0vRlpnQ3drNFNnQTI5dS9WM3ozOWdQZndZVXNDa0NpRWozMEp2NjJRTjZjU2MxMnIveVlUL0NIUi9mVVRpUGE2ZjQxdDZZcnZhaFdnQWhaMFQ2S3Zydmd2WkpSTXRCTnpKWU0vd3UyM2JRU2xkSGJ1WkdLc1UrdHZvRnF3OTliZmZ0VDlpNmtET0dXSnZ6bkp2OUhGN3pZSUxwUWFaMVZ6K0kvdkgvZUpuL0NwVFJEZFk2K3ozbmhJaGJuakZUZ2V3T09oMk05TWZqVitONVVMMzhpWEROekhVSkNZZW9BeDVGNUdFcEQxQU8zWG9NZjFBTU90d0tOa1R4L3JBZnF0d04zWEEyeTJBcnY2S1Exa25kOEszSDVOMmxXQWNmVUF4WGxmakIzelA5Kzl4LzVIWUlNczhNbExBcEFvaEkySzZpRVh5ZGtBanAraytpKzFGdDlRZ2o5aXJiK3V2bUE1eUVObDZWa3MyQVdGb3NKaURJdnNUdlZWdGZhbmJQQkhLZXR2RXdHWVl2MjE5bWMycmI5aGZTaExCbnJJd2NpNmY4MVc0V0dGZm5TWCtCdEMvaG5JeHZIUHh3S0FMd3B3dGtJK2MvV05lMStDRFdkeWdVZ1FCWERBV1c4OGNBZmtPSVdjSU5BVEFMbEhNcGtYYzl4VUpBUDNKQlFrcE9aaGhsQVExZ01zVVE4d2xrUnNJeEt0eE04MDFRTU1WTmlwUnlXSTBIcUFzb0lzTTVDQTBWWmdQd2tvanJWY1REM0FERmJnWGRENllkODkvY0JMK1JRbUFVZ1V4a2N2d3AxVTVWSUFkeTZwL3N1ckFveFU0MDBnK0tPazlWZVh2bFlWaWhvVkZuUko2U2U2aDdnU2UzaEltZUFQZXoyK29GcUVtWU0vU2x0L3gvYlh6SVJpVnZLdjdEazZKUU03cmZ2WHA5Q1A3aE4vUzVCL2puWTNpZUFpclhIV3pnWDUySFVuZlB3cVBzMEpJaEpuLzliNnZYYk9IeUhBOFlBY0JlQlhBS3h4RW1FZEtmcjZsUXc4STZFZ21uSjlXQTh3ZnozQUVRS085UURSMzNxQVhWbUJMU1NnNTVqSWVvRGVZMHdrWUpNVkdPLzg3dXR2OTNvK2tFa0FFaDNoSTEvQ0V3VHkveFNyVmRaOVVmOWxVK05OTFBnamwvVjNqNDFYRlN1c3ZhTjIzK1Y5QWhSK0xyS3pvUFczNlhjcDFsOS9lK25uVGliR3B0NzYyMkdxYjVMMXQ5czZnTEVrMlJBU2Y5V3pmRENUaW1vN1g4TjhYUUhnTXdMOXpOcDY3ODllK2RnemIrR1RuU0JhOE5IVDkxcy9KMGZXV2owS29zY0JPQXpBdkh2NW42RitYZ3hwNWlHWnlwQ0FEQVhKWlJsbVBVRFhkVWkxQXJlUDNUVzJrdlVBWGFxMzlIcUFiaXR3VkQxQTlSQ0VCVWxBdHdyUVFnSzJISk9wSG1CdUs3Q0xCS3lBSCt5RmJZZCsvZlYzWnQxbkVvQkV0eVJnOVU1QWYzUG82cjgrQm4va3RQN1dLOEk3RnJDVTdKdkZldXZZMW1Id1IzVHR2Z3pCSDdUKzV1L0QrTThka29OVFVQZXZQNG0vSGRpSk5kdjVGZ0M1RkpCem9Eam53SnZXWG5EWmhqTjM4Q2xQekNyVy83L1gzMW1sZXBoQ0h3bkZVWUE4RE1EYTV0Q2dXU0lCYzRTQ0JMWWZTZ0pPSkJSa0FQVUFQVVJaT3drNGhIcUFGaFhmck5RRERMRUNsNjBIMkI1MDRTWUJ4WFZNUkQzQTNGWmdyNjNYTkpjV0V0QmxCYTZmZE1YckQvbzRuOVlrQUltT2NjWmxXTHZtVnJsUWdZY0ZFM1U5VnYrTkIxaDBRRFlpci9XM1hyRi92ZlRmQlFWcWtjV0hyb1NRanQwRWYxaVRpbjJFVzJucnIrWGNXY2s2YlQvdjVLMi83aEFQRnhFMmVldnZOTmY5bTRIUWozemtYOVB2YjFQbzV5RnlvU3pNZlg2Zm5kdis1NG9UUDdtZFQzMWlPaGR6SjgrdDMrOGVoK3BDOVFpSVBGS2hSd0Z5U092K1UwTUNsZzRGc1pJdHNTUmdWNkVnZWNrOTYzakNTVURXQXl4ZUQ3Q29GZGg5MytXekFvK2ZweDlXWUFzSk9OcW1mWTVqck1BdUVqREdDdXlhcnlBck1IRG1GYjkxdXcxOGVKTUFKQ2FFajN3Qjk5Wkt2Z3BnLzc2cS82SlVlQjBGZjhTcTRNYjJYN2IzNnNvMWhxQldRYTJMZGYxMkIzODB2dnpHcWYrR0dQelJibk9XN09kT0p0OW16UHFiUnB3bEtnVzFLNnR2dityKzVVNFg3amY1WnovZnlEaTJBZmdmQUJkQTljSnR1dTVMUDZObG1CZ285ajc3ZFQrSGhmbUhBL3J3U3VWWGROSE91OTczbWM5SEFsb0pKUmNCRWt1RytZK2JyVkNRQXZVQVE4aktvcUVnckFjNFRndDVTTURPcmNDdXVWamRWcG9WT0tVZW9EaHI0azJERmRoRkFzWllnZHZ2aFN4VzRGdld6SzE5d09XdlhYOHRuK1lrQUlrSjRzTmZ4TE1oOHE5bW9tdUsxWDhUQ2Y3UVVRSk9vQ0tvb2F2c3ZpcUwveGRHT2diYWNuc1cvTkc0YndicnIzOStKazMrRlNZSXM1Qi9IYXI3ZWx2M0w0WDhDeUhQd2tNL0pwZjRhNmd4cUoyU2YwM1hwd2J3TGRSeU1hcnFmK29GL2ZwUHJ6cjR5emp0L1R1NUlpQjZSZlo5NHZTN0MrcUhRUEZRaUR3VUtnOEQ5QzR3ZmI2bmhBVE1sZ3hjbXB6TUhRb1NYZzh3amdSTXNBd0hrWUNsUTBFR1VnL1FiT1h0c2g2Z3pRcmNURkNWc2dLUDk5RlZEekRlQ2x5YUJNeG5CWFlSZXRMeUI5YldZeVpsQlJaOStSVy9lZEJmOGVsT0FwRG9Bd240cGVvZkFIMCsxWDh4cEY5NjhFZTk5S1ZaQzZCU29WWXNLZ0RycFcwU0duQmhKOXZHNTYzL3dSL1JkUU96V0gvekU0Qjl0djVhZ3o0bVJnYXk3bDlRbTJVVGYwUEl2M2l5c2UzNnhJeERJYWgxSG9Cc1YrQktRTDRHd2NWUzcvcmM5WS85OFA5eWRVQjBndk0yenEvYmN1c2hWVFgzWUlFdUVuN0FRd0RjTVpTdzgzMTJzcEtBRTBzR0xoMEtrazUrV2NtajNDUmdlaWpJSk9vQnBwQ0FyQWNZUndJYTFGOVo2Z0hhcmNEakpHQ0NGVGhuUFVEMUVJUXJmMnVxQjdqU2ttMGdBVHUxQXFlUmdHNHJzSHpwaWswSEhJV05Vdk9oVHdLUTZBRSsrRFdzMzJlTGZBWEEvWjNrMTRUVmY5NTJOTFlma21ENWpTRGJWcnpZMTBzZnZGb1hBejhXWDBnWDYvd3Rid3RSK0UxSDhFY0xDYWtKZFFOcC9YVVFnRjFhZnpPR2dtaEtuYi9SbjN0YTkwL0RWSWJCaEp5QnZNeFdZOUJJL3NYT1Z6aUpDU2dxMURxSFdnUUNXWHJHN1Y3SWJnUDBLaFZjTmxmcmx4Y3FmTzdHRzNFSk5weTV3RlVERVlVek5xN2QvOEFiSDdxd29BL1hxcm8vZHMzZkdaQjdBN2dmZ0xXNUNMczhKS0RsOXgwcDU0cVJnSDBKQmNrMFY3MEpCVW10QjJnNTU3VFZBN1NSaUdLOWhoNlNzR3c5UU5kOW43TWVZSWdWZUhSN3lYcUFOaXV3cTgzYzlRQmROdWlZZW9CK0svRFlXWGRBY2RqM1huL1FON2dRSUFGSTlHbGQra1g4VWlWeXNRSjd0eE5zbWtYMTF4ZjFuNDBzU3lFclBkWmZXVnlnMWdCcVZJdmszOHJ2V28yMTNqTDRJNDZjemFEVW8vVjNRdGJmeWRiOUczYm9SLzdFWHhmNWx6Nkd0amtMSS8rd1ZHSmhOUUhvWGg0cHNBRFI2eXZJdDFIajhvV3EvdHI4d3Z5NTF6L3UzNzdMVlFTeGt1amJaOTJOaDFicjlPRkE5V0RWK2dFUTNCT0N1MEt4WnZjOVZhL3hmaDZLazRBemtRek1VQkMwdk1oM0VRckNlb0EyRXBIMUFDMGtvSnRzaTZvSDJGc3JzSVVFYkRrbXlBcmNmcjNhVllDaDlRRGw5NzczV3dmK0NSY0hKQUNKSHVMTUwrRlZnTHk3a2RDaCtzOUx0bG5hMXFWUUR5aFdLUDJXNnZ5WmxXdStiUUhCSHlzV3lOTVEvSkZxTzA0bTN6S28vL3BzL1oxWXl1OVUxUDBiZXVoSEpCblhVL0p2K2JnUUFyRDFuRkxmQnNXUEZIS1ZpSDVMcXVyLzZtclhWMzkyekpuZmFPMENNV3ljL1Z2cjk2KzIvNUxXOVFOM3FkeFBSQThSbFo4SGNIZWd2aE1nYzk2bGRiM1dlNC9tSXdGTFdZSDdSQUtXVGdiT0dBb1NxazZjVkNnSTZ3R2lURDNBTkJYZmJOVURiQ0hic3RjRDlJVnRTSnU2elVzQ2l1dVlJQ3V3WXd3cnQ3YlVqWjZJRlZqdzFkdnRlK0FqTGpsTldHZVpCQ0RSUjZoQy92TWkrVzhGbmpST3NHa1cxZCswcVA5aWdqK1dTYjdkbHQ5bDRrOFhVMzVYcS81aUZIYStiVzNXMzdCeEJCTjRQUWorc0NnUiswRCt4ZThmUXdES01NbkFTT3R2ZDNYLy9DL2czWWQrREMzeHR6ejVCeXo5OFNXQ0FGVGpja2tGTzBYeEV3QS9VdUFxVWJrQ1VsOE96UDNmVFRmdCtEYnR4UDNHZnYvdkpmZlZhcTlmckt1RkI0akt2UVY2VDBEdUJ1aWRWTEMvKzBZUS8vSzZYZ09nY2pERXMwd0NsazRHN2tzb1NKL3JBUWFTZ0t3SG1NRUtiQ2NKdytvQk9oUmVHcXIrS2w4UFVKejNlMkE5d0lsWmdTMGs0R2liUHBLMXJhWEpXSUZkODdWRUF1Nm9WUjUyMWVzUCtqcFhGQ1FBaVI3anZ5N0c3WGZWY2ltQXUvZEYvZWM5UG9QNkx6NEJPTUJxS3dLdFYxaCtSYUMxTHY2MzhWeTVnamRhQ0RPTlZmajFNZmdqWkE3ekVGL3g1RjhmZ2o5U3JiOWhoRjQyTWxCVDZ2eU4vcHhhOTI4YVF6OW1oL3picmJyV09kUlNMZFpiTlJHQW9aSyswWFB1L3YwdWlONElsV3NGQzFlamxoOWpIajhRcmErb0YrcnYzbnd6dm8wTloyN2xxcVFBUHZQU0EvYVgrZnRLcmZmY3BYSVBVYjBiSUhjRjZqc0NjckJDRGhiZ1lJWE94eStUeGIvRTNtMEJEaVhmZktRZGs0SEh2bU9tSVJTRTlRREJlb0NqWjhsQklub0lRa2M3ZWEzQUk4Y1dxd2NvVGlKc0V2VUFjMXVCYlNUZ2VOcXdud1FNdEFJRHYvKzkzN3o5SDNQUlFRS1FHQUQrNHdzNEJwV2NDMkIrVlAxWGxnaVV1SGI2cnY1YnF2ZFhMd1Y4S1BiWWZtVzMvZGRJMmlFMGVNUFJWMFB3UnlycHllQ1B1UGFIWmYyZFZOMi8wZTFUVVBldm85Q1BiaE4vUzVGL2JsTENNbzVGQW5CK1NRRm9JUURqeVQ4QXFFUDJGeWhVYjRQS2pSRGNKTUQxVXVNNnJYQWRVUDJ3Z3Y1NFlYdjlmVm03ODZxZlBmYk1XMlo2MFhMZXkvZmRmK2ZDWGJTdTdseEI3N2hReVIxcXlCMnFXdTZFU3U4QzFUdEFjU2VJSHFDcUI0cklXdGVTVnpYSFVqbUVBSFMxbTRldzZ6VUpPSWhrNEw2SGdrVFdBMHdpOThKSlFOWUR0SkdJUWZVQWkxaUJSd21qa0hxQUlWWmc5MzFzcWdlWTNRbzh1ajFmUGNBc1ZtQWpDUmhqQmZiYWVrMXp1WHNCODc4SDdYdjdoOVA2U3dLUUdCRE8rQ0plcnlKdmoxWC94ZTB6RGVxLzFiL2JrL0piTFNuL0pFRzVaZ3YrTUkwMU12akQwcmYrQm4vNCswZnJieW9aMkJmcjd6VFgvU3NYK3BFLzhUZUUvRXNuTnNQYVhVd0IzbU1COWhHQWFlU2ZBcDdqWTRrbEFLcTdJTmdzaXMyMXlHMmllcXVLM2x5aHVybFd2YkVTM0thUTJ3RGNpbHB1a25tOUNkdXJXMlRkenA5dDIzL3VKcmw1b2Q1OC9JZXU2M0tOc2U4blhuV0h0Y0M2YmRoeWg3bjVOZnZVdGU0M0x6aEFWZFl1ek1zZFVOZHJwSmI5SWJLUFltRi9FYmtkSUxjVHhRRXF1cDlDOXEyQTlRcmRCMWdSck5IT2Vwbm5YTDNIU3R4MUd2MmRpUURzRXdrNGc4bkFSVU5CSXNmUzIzcUFNU1Rnak5RRFRGRHByZTVicWhVNGhBUzAxUU1NdHdLUGtvRHg5UUNEck1BNTZ3R3FoeUJjK1ZzVENlaTJBbzkvYnRwYXNsbUJYU1JnSml2d0RxMXAvU1VCU0F3T3FwQXpMNUwvckZXZkZrTUF6cnI2cjFaQVpKRUFWQlVzTE5mNWtUMWhJT0VLdjdqZ0Q1ZjZiMWpCSDdsdHg1bklOKzJTOE92YStodGk3UzFJQnM1bzNiKytoSDdFa1g5bGJNWjUybDJlM3owMUFOMkVVWlZNL3JrNXBSUnJhUURmWldpclVtd0ZnRnAwRzdTcUFPd0YxWGtCRnZhOHI0cUtRbXRVMjJxZDM2U1FSWEc3WW0ybHVuYmx2RUYwdm9hc1hYSEdOUURteXl4WEpXSkNwSDBlazBoQVF4L0hVb0RMa29CNTBvWVpDbEtFMEN3Y0NqS1plb0FHRXBEMUFMT1FoQkpOSXE1b282Z1YySDJmeUVTc3dLUGJKMjhGZHJYWk95dnd5RU5sMVRFaWYzRGw2MjcvUjJSVFNBQVNBOFFaNTJIZmVoMityTUFEOHBCOG1kVi9MUVRncE5WL3krU2Z5aDd5Yi9udENGNHl5MFdHU21CL1dzYXFQc3N3Z3ovTTVGaEg2ajlhZnlkajljMWwvYzFkOTI4MkVuOUR4aEIzdm1VQ2NFRkdyVVRqUkdFcStkZk9KNFV1dmFRWStXZkdVbGtMMVRtb3pqdkkxNUpMU3dNUnBlblhMSjRFTkd3Ykl3QjdSQUlPS2hrNFJ5aUlsZHdwVFFKMkZRb3lpWHFBTVNUZ05OWURETGY2K3E1UmQvVUFRNnpBcnJsWTNWWVdLM0FVQ1RnWkszRHpmQ3o5dG9RVnVHRjkxbnFNaDVSdFZ3RXVIeU5mTzNEZmd4NUc2Kzl3VUhFS2lKWFljQncyVlRXZXFzQnQxbmNDNjVyYnNxOTNIODNVVHZEeDdZcUJaZkp2K2VWeUFiSlU5Mm5QSzZRYVhnWmQrNFQwUjF2blRDTG1UTHhFcWJzZDJ3dDZVL0JIRzBFUWYvM0Y4d0xZTCt0dm1SZm1zSi9WWXljTCt6bWw3bDh1OGcrZGtIL3dmVTRqUWo5TXhFVjAzekVUNUo5bGZEbHN2OFZJdUVtUmY4R3RLc3FnVkxzaFU2VWRqOHV4VGVJL3hTbnR3ZkdOMmhDSjJmQ3pPdWJiMkFjSmFCKzZlNDFtbjJ0MTlDdWdEZDkrRWpKWDRlZFYzL0ZpUEtjWXp5bkd6NGdZeDJseTNvZjBQYVRQYXVqcitIYjFiSGZmWi9icnI2Yjd3OTJXZXE2WmVqN0w2cjFldm1QYjkxWFA5NUVhejlOMEQyanJkZmIxVXIzM3BMWmU5L1pycEk3dlFMVis5eHFQMGFEUFdjTXg0M3prcnFxcVgwanliMWdnQVVpTVljTlIrSGFsZUduTU10ZE9DRW9RYVppMmoyUWpDOGNJamhYazM0SXVCWDdvcUVXMC9TWFI4dkt1UVgxdVYrRzFIeStCNTdmVjJzdEo0SVhNazNwZXlqWHcvb3A5alV2LzkrU3R2MjZ5elBVNVRDQUR2ZFpmMS9sVHlFQXJFeENpbnJPM21XS1A3VGJ4dCtrSENhQXdVZ25Na1BrS3ZUWWcrWmVOTDFOMFQ1WmxiS2NFQ1JqZFpna1NNSzI5Y0ZMSjg3UTBrMjBhUFdjaUVlMUw0TlBlVE9hRWtHWnFJTHZhcjZQbUloU3QvWFFRWGhvelY2SUorK3pacnQ2eHhZemR1TjAwOTVheE5SQXpvcEgzekNnSkNMUlRZR29uNnNWQkVJNWNlL1VSV1dMOS9EU1JZTzRWbzdaK1IvdFhoeHEwa2pUTWg2Ry9UWjhiOTRqVjhNVy91bDExWE5jMkVsQkYvL2lLMTk3aHEyUlBoZ1VTZ0VRam52bEkvRHNVNzNHUk1ibVZlTjU5dE1OekdWNkVsNU4rbDE5VWF3Z1dWQUJac2dPYnppa1IvV292a0srTzcvWVFoWjlsWHJMdHEzNENiL1NsMzBJOFRzTDYyNzZ5VGY4NTNQb2IvMjhmaVdKS3U0emFGNG56Vkc3T3JYMHZHL3JSL0xrUFlScEtoSENVU2Z6TlQvNzVyMTBlMjI4RSsxT1Evc3BKL2tuRUZwS0FhUVJiMkF1My9SdEpNL1pSalMvbFlhbzliMThsdkEwYkNaallSeWt4Rm9RUlltTkVnVVdCRmpNUEJWU0pFU1NXanlnYlAzTWhzcTV0ak9KcHkzZGZPcmFyNWZNbWF2Z21OUHlaVmNLUGJhWFBqQ1FnZkNSWDYzZjFTTXZXN3pWcDd0WG9QTGhJUUhVOFF6UmdibHVQa2ZhVzNPMTZqcEhRNjRHdjNYNzl3VzhoYXpJOGtBQWtXbkhiT3Z3bWdNL25YSkxIVzFGajl5bW4vbHRwKzkyMVZETnFPVld5S1NRaWhCd0xVOS81K2l6Qlk3ZWN2MjNmSUFKUC9Tb2x6WEN0WW9pZ2N0YmZ1SCtudmFqUG92WFhOUjZMOWRmNlhaY1crb0dJODFnLzIvNXpSUktOVVltL3BjZy8yM3o1NTR6a1gycHZTQUphTDB2WEpHREVuWnVEQkF6ZEpoRUVWQklKYU95anBCSldPZWJLYXB1T1ZEQmFpZEZNbG1HMTJtdGo1c2JaSi9VUVVuYXJiNWdWMkdEMWpTSUpJNjZoK2JQVVFoaEowL1ZzYWd2Kys5eEFQcXY0N0s0d2ZwNWdzd0szM0xGTjgyMG5BVzF2eUc0ck1EejNvK0dZeHF0bGYzc2ZVUUh1cWl2UStqdFFrQUFrV25IYTRkaTVFM2dXZ090eTEvb0wvdHJwbWZwditZdS9ocUFXY2RwMXJjU1VYK0huVHBSc0N2NklPMzg3QVdDWm43YjIwaFNEY2NSamQ0UmJ5SEsxMzZtL09pa3lNTWo2bTgvcTIwM2RQMm05dWVMci91VU4vVENmUzMyZmwxVHl6LzhkaDZockVEcG55UlJLVmhLdWI3YmY4TE9TQkV3ajJGTE9GMm1LRjAyYlU0a1lnOFFvN21MbkwwZWR3b3hqQ1NJbXcrM1Y2anVHOVFEVHJiNmQxUU5zSW1iOE5taFh1Nm4xQUYzbmkxWUo3bDRlV3EzblBoSk1BK29CK29peWdPOUhhV29wMFFwc1BNWmxCVzZyQjJpeEFxdmdUMzVBNis5Z1FRS1FjT0o1UitMSHRlQ1pBSGJsSW5kaTkwSHdQbElrS0dTWmtLeVgvcmV3Vk9ySWxhQ2JaMDRrNG5nSnJDRTQvZ0lmVHR5VkQvNVE4MnRtZ0pXMmpSeExVUCtWdEFhWHN2Nkc5U2ZzMk5hbGpBWW1CTGQ4eGxMSlFSK2hGUE1hSFVabytkV0VYWWQrdEpOL0pRSkcydnZndTFaUjdTckp2eElnQ1dpZHFNeEVYNmZLd3BLaElEa1VkNlZEUWV6bkNocExpWHFBcWZaYjFnTjBqQ21IYlRoVXBkZThQYndlSUZyYUNQbGN3ME5xNWFzSENCL0oxZm85cmVYcUFWcFZnQWlZTC9HdEo4T3R3QnBTdzNIM3VOckhYZ05mdWYwK0IvOHBXWkxoZ2dRZzRjVXBSK0I4Q0g0bnoxSmNlazRhZWtnckxFYWUxOENpOGs4RUloS1k0TnYrSXFrQmlqcm5uS3J2K05EelcwbTQvTUVmc1luRHVaVjkyck4vMjk1UysyWDl0YjFOcDlUOVM1K1AzSFgva0xudVh6dkpWU0wwb3ozeDE4NlFsTjgzcWs1aThKY0N5Yjg4dlJnd0NWamlXTkc4NThxZERCemNqOUxKd1BucUNLYUZndVJRSi9hNUhtRHFDc2gydk1iWXB2dGVEMUJjTkZBSFZ0K283WWJQTVdLdHdQWjZnRm1zd0MzRVhWUTl3S1pqRzY1SHJCVllIVzE2eDluUWJyS3QxL3NOcndDd2VVN2xPYlQrRGhza0FBa1Rudk1JdkVPQi93ejdXc2xFenVrRUFrY2MrNmdBTlNyVURvV2hXMzBuRVgwSXNBV3JUd0hwVi9qbHNPL21DdjRZUDQ5ZE9UZzZoeW5xdnl5MUJFUFAzN2IvVkZ0L1hjdlBjblVBdzViRGZhdjdWeXIwbyttSDFBVGVWT3R5bnZPQnlyL2lFSVJWcWV4NnRzTEp0YTVuc090a1lFMXF6L203cEtBSjR6WUpiejl2S0lpRnNBb2hsNnprbnBHY1M2b0hDT00xVGFnSG1PVTZURnM5d0xCcnBMSHpNWHEwdHg1Z2dOTFBXZzhRNlZiZzdQVUF4ZEpMZjlxdWo1eHNlOWRzblllSXQrc1lLM0JMMzE1MTVXL2U0VHRrUm9ZTkVvQ0ViU0V2MEhYYjhRSUFsNGVRYVJaQ0xMNDk5OG9ramV4Yi9ZS3BTNlNhUWxDclFIZS8zQWhxdGI2SStzZzJTZTVuMjB1dmJTNUNna2ZzOWRENkh2eFJ3dnFyeFZPQjdVdmc4dFpmbjRxdUw5WmZHOW5rSjZESzFmM3JiZWlINDFxMjl5UFZ1bXovemd1YXIyRGJiL2l6cDNzNlM5QTM4aS9zMjZzTHdpeFRPOUZXNEp5QkcvbmFOTjgxazBnR2pwbVhUa0pCalB1bGhJS0U5c25hTnVzQlloajFBR05XY0xGVzRJUjZnQkwrZlpScUJWYXgvakdnaVFTRDg5aG9LekRpYXdXNkNGVzFmcmE3c3dKLzVQdXZ1K00va0JVWlBrZ0FFbVpzT0E2YlVPT3BBRzRMSTZuaWx1bTV3ajhRc2Mvb3ZySWMraUhBd2lpcHBTRjlpbEhmdGRlMFVzY2dYY1JZbm1BTy83NURDUDdJOFlyWTZiOGJpN1JNMHZycnJuTm5mM3VXQ1IzYlJteDFYL2N2OUR4dDN3OWxRai82a1BnN0NmSXZ6WnBkbnNicUwvSG43eVZKd0NTeUsxT2IvVXNHdHBBNFBuS29vS0xQK1JJZE94WXJ3UlJaOTY2UnBzaVorRHVqOVFDRFY0VUIyeE9zdm1xNWZtS3VOT2YrREViWEEwVHJmSGRXRDlCc08yL3UxZWc4cEZtQmZYUHJPY1pzQlc1dTEzdDFCTmZzWEx2ekpXUkRwZ01rQUlrZ25ISVV2ZzNGUzBzVGJtbnRsVkVhS2lvb3F0MWY4dHFxTXN5cHZyTzFreG84WWxIL3RlMGJaTi90TVBnamwvVlhIY3F5R1BKcDh0WmYzL3ozd2ZwYnp1cXJwcnAvSWQ4TlE2bjdGOUQzaGs0TmkveHJIalRKdjhtQ0pHQnVnaTIxemVCUFVVZkp3Q0doSURscTcybGlQY0N3Y3dYdGx5VVVKTEllSUVMSGw3RWVJSVpRRHhEQnFiNytlb0E1NmdXcWNidmhNKysxQW8vZVV4bXN3RG5yQVhvL2c3QlpnVnZ1MktickVVc0N0dDNyR2xJUDBEQmVXOGJ6R0xHb0NubnhqMTk1OXh2SmhFd0hTQUFTd1RqMWtmaDNLTjVqSjdmc0w5bWx3aitTNnUwcEZrTS9zSmo2dTB6Q2xGRC93VXg2dVlNL1VvbkpNQkl1bjMwMy9KcUtyOHgzOE0rNXJMOXQrNWVFYlZudUp2anNiN2tKWktCMlpmWDFFMDR4eEZZZjZ2NzFKZlFqdnRwWUNQa1hNbGZOMytFZytkY0x6Q29KV0U1bGx6TGUzSDJjUkNoSUFGbVRKUlFrY1N5OUNBWEpYUTlRODljRERGSnhoc3huZWF0djUvVUFuVVNQWHdIcGFzdHNCWTc0N29oV0NlNWVSbHBWcHo0U1REMGs0UGgxakxYN3V1OTkzendiemltMlk5UlF0M0NFUlAvekg3ejJqcDhrQXpJOUlBRklSR0hiT3Z3bUJPZkZMRUhOWkk5T1VrVzRCelVFdFZaUXNTanJKSmpnQ3F1OTUrdTNCQ1FSTjcvSXg4eTVTVGtZRVB6UlJqeUdCMy8wM1JLY1YvM1h0ZlUzOXJ3eCsrWW1COE9JcmI3Vi9ldFA2RWZ5dVV6M1dMeWxHZXB2MXphT0tCYW9FRjAxVFBJdjdCUGUvYXhHdFRNRUplQUVTY1hXYisrWVVKRFEybnRKb1NDQjV3b1ppeFN3SkxmZWszNFNNTDBlb091ejBFVTlRRXRiZm1JeXlRcWNXZy9RZE8zREZZN2g5UURiMmdqNVRNTkRhdVdyQndnZnllVzRMeldtWFVzOXdDQVZvSEcreE5lNzhIcUFmaXZ3Ymx3bXQyejdIVElmMHdVU2dFUVVUanNjTzNjcWZnM0FGUmFDS0hXSmJtOHZYL2hIdmJURFl1Mi9sY3F3WnZXZnUrMDJZbEFpeHVwVy96VzNZejkvMnpsQ1NEaGI4RWZ6ZU9Qdmh3elcyd1QxWDlHVTRONWJmMUhjK3V0LzI0NVFlMFlRVGQzVy9adEE2SWVYL0xQZFQrN3JsWC9mOFBueTMwY2svM0lTUTVaUmtBUU1KNG1zRXo2VVpPQ0k5RjluUDhQYkVBazhWL1o2Z0ZhQ3FVUDc3VXpYQXd3NFI5UzFTYlg2SXNOMmpmaSthbEREbWEzQTlucUEzVm1CMjJ6aHpjZVdxZ2ZZMW1hUUZkaEFWQnF0d05zcmtXZC9mK085dHBINW1DNlFBQ1NpOGVJamNWTWxlSklDdC9pVytzR2tqc1lRUVBGTDVTWVNTbGFTZjhEdS82M2NNYlgyWHZzK0Flby9UYTk5bUlPRVM3WHZ0bzg3VC9CSGp0ZStFdi91NmpWOXRxeS92cnAvNkZuZFB3bm9RK0hRRCsvM2RqeEpHdFovKzF5RmgzNkVuQytLOVNsRVQvVk4rWmYyVFRhTEpHRFFONUZvNWo3Mk1CazQ5QWtabzU3clRTaElvbm93U3ozQTl2a2NmRDNBNkw2b2g5Z0pxYTJZb3g2ZzcvZ3dFbEdkMjIyZlUvV1FTajdqYW5ROVFKUzJBa2ZVQXhSTEx3Tyt1OFV6Viswak41MHp4UXFzSXFkZjlabzdmWjJNeC9TQkJDQ1JoRk9Qd09VQW5nbGdvWlJkTnlUOEkxZDdpd3lnN0NiLzlqUWRRN0tGcXUvY0NrV2JyZGcvTDJIVzR3VDdia0x3aC8wMXAxendSL05xSlV4ZE5xbmdqL2I1N28vMXQyc3lFSTU3MTNlZnRyL0NwOWI5czMyZjVRNzlhRS84N1RyMEk1Nk1td3o1TndsYXFxKzJYNUtBb1pjb0R3azRKY25BdlF3RlFUZWhJTDJvQjRqcHFRZG9tYzhnSzIrT2VvRWg5UUJodHowSGJ1KzBIcUNFZjNkMGF3VU9Vd21xNlhQWWZLMDF0RjNuZkNnY1ZXYWlyY0RhYWdXV1QvL3dOKzcwSGpJZDB3a1NnRVF5WG5Ba1BnWEY3L2pKcXhDaUsyNzVudGJlQ2d1Y0xGcUFGN1FhZjdrUFV2L0ZwUHNHMklKMW5LUnhFV05sQXpueUg5TkdQT1lJL3NobC9TMmFFaHhGL3ZtV2hhV3N2eDVDVDhWTExObmVwRk5JeCtZeHBOVGpzNVFEeUhHZUVuWC8yc20vT0lKME1vbS80ZVFmek9kTFpIcXkwVkY5ci9rM0ZCS3dnL0dXSUFHajVuMkl5Y0FodHR2Q2lqNUVob0tFN2llSktjSGVlVElldzNxQTZLd2VJRUszNTdINlpxc0g2UDJ1U2FrSENNZDhwMWlCQStvQlNwZ051cFFWV0wyZlFjTXhwdUNTeHZQY0lKaDdQa1Q2L0NBbUVrQUNrTWlDRnp3U2IxUGduMjB2ZDU2djFnTDIzeUFDVGhaZkhtdklTRmtzQ2JMUnVzOFZwLzVyM2lmY2VteFIvN1h0RzJUZnpSRDg0WDhsaVF2K3lQSHExMDlMc0JqbXpMYXZyMTF6SGNDczFsL1grWHpXWDhuK21tMjN6MDZ5N2w5WTZFZGJtOTBrL3BZaS94SVptK2o5VTZtdG9RUitESUVFN09oZEp0b09iQ0VzUXNhVXJpeWNmREl3RXNrdEZ6RmpyUWNZUU9SSUJJRVhhbXNPNmhQckFZYnRzMmU3bXUvaFFHTFBiQVh1VTczQVpsSnA5SGoxM0NmcFZtQkg2bkhXZW9EdFZ5allDaXpHcDVKRlZiaDZTZDB5c25BSnpJZ0tVRlgxeFQ5NDdSMnVKYnN4dlNBQlNPUzdtYmJqcFJCY0ZFNXM1ZGpYdHBSV3cvWjZ4Zi9VK2FMc1M5NzFxKy9zNmo5eHFQOUNyY2Z3bmlPY2hDdXBBclNQc1l2Z0QrUStmOXYrV1lJL0pLZ09ZS2phRCthZlhXUlNkOWJmR0Z1cmw5aktWUGN2VDkyOEVxRWZYU2YrSnRBUUdrbzJodEpESlAvYzNab2xFbEFMVEdXSHljRFJZeXVWREl5ZWhJSTBmRk4yRVFyQ2VvQklyd2VZb3kvR2VvQ0JWdDh3SzNCSVBVRGY5cFo2Z0FGejBIaTB4UW9jOGQzbVM4RXRXdzhRenUrV2FDc3c0bXNGdXVaU3JmZC91Qlg0WFQ5NjNkMCtTbFpqeWprYlRnR1JDeTg0RHR0a0RrK0Y0a2U1bDgvbDZ3c3VFVUZMdjZnaGl5K1NEYlgvWWttMjBaZjUyRENPOU9BUlNaNHZFM0dwQ2NyQndLQ0JIR3E2ZEFXZmVPZGtNdjJLZWZXY1R1dXY3N1BnMjIvc2M1eXg3cC96UEtaK2gxem5rTkFQUk04UmdzK1ZZRFAya0g4SjFFdTJ6L093eVQ4Wi8xSFNSMmtiOVFCSndJQms0SW1SZ0wxS0JuYTluR2RVenpVT0tHTlFSeXRCVTZCUFUxOFBzSUYrTVZ1QlErNjFsTzBoOVFEZDJ6V1VSQXhlL2NWYWdWMGtJTnozYWJRVnVLdDZnSTFidzc1YnBMbFhvL013RUN2d1YvYTc1V2R2SUtNeC9TQUJTR1RGQzM0RlAxSEJreFhZSEpYK084bDlLMEJFVUtOYVlXRnQvMGJOUmJMNWJjRU41R05HOVYvYk9UU0FIR2tML2tCQW4xTERWVktEUDJKcjk2VVFoQmIxWDJyLzJvZ2tXMktzZjU2ZFM3bGkxbDhKK2ptdDdsL0wvVGgxZGYvODMyT2h4SmxtSUFwTis2cC8zelJORThtL3NFMGtBZjJYc1dzU01LMjk0U1FEVzBOQndzNlZGZ3BTcGsvQkpORGc2Z0hHcURoejFRUGNzejI5SG1EZ2RiSnVMMkwxRFp5L3JGYmdydW9Cd3ZnWmhzMEszUGdiWDRCSEdBbllkZzlrdGdMZkRKMTd4bVViRDkxQk5tUDZRUUtReUk0WEg0bi9WY0dwTFh5Vjk3c29YQm1ZYnY5ZFZ2OHRRRkhMS0lIVmhmcFBBdHRwSXpYaWlNbXVBejhzOWNKY1NrZi9Fckc3NEEvWCtaem5iMm12Ryt0dmlQb1BDU25BQVVyQmx1dWRXZ2N3OWxYZlRLSTU1cTFVM2I5WThrOTdFZnFCaFA2SHpIMzdQUloyYjVEOGk5dUZKS0IvK3Jva0FmdVNER3lZeSt6SndHR3JoN2I5SmhNS0VrSXd4UkJON3YxbXJ4NWc4NzV4OVFBTmMyT3VCK2c3UHF4ZW9EcTMyOGFnSHJJcVdPa1hYQS9RUVg3bHRBSTdTVUNNM2JleGRsL1huTnNqV0Z4cTZiYVdsbjZuOHFJZnZ2Wk9WNUxGbUEyUUFDU0s0Q1ZINEw4QStlTXdjbXBTK3k1YmZRV0tDcXJXMm44NTFYL3Ridzh1OVY5ek8yM0VaQWo1bUJEZW9RbktRUU1SWVNPODBsL3graG53VWNMNlc4Z0tyQ2wyWHRmOWFTY0hYZmVlNng0dFYvZlB2aHpVQU9MUjF1KzJIL29hK3RGMHZyYlFEd1NNb1dSQVNDckZORUR5ejdrclNVRC9OSlpOOHMzZDN1UkRRVExXM3Vza0ZDU3dUMDdTeWtWa3NCNWdXbDhjMjFzdG5yRlc0SkI2Z1BBckhvUHM0Nk1ra0Y4QjZXclhYQTlRRUhIZnRmV3BaWjVLV1lHZDlRRFZjWjJhcjdWZEJkaCsxZHpYMzNGTUN3bW9xdSs2K3JWMy9TK3lGN01ERW9CRU1iem9pSG9qVlA0ajE5Szc1TDZ5OU9CWmZzbVVUbXYvNVZQL3BaQ1BYYXNBNDQreHErOVNnajlpenVkcUw1ZjZyNnoxMTAzRW1jbkFRdGJmbUdzVFk4bDFFbHVCNzkzUjU0bnVkL3QzaHYrYXV0cU1VQmtHbkN0djRpL0p2M1JJcGtNVUtTVGI5SkNBbWV2dE9TL1JyQ1lEVzhsQ05aSXJvY1NLaGFEUmZIMFBJWmtDU0oydys4dDZuZERUZW9ER09abDB2VURUL1JkdTlRMnZCK2lucFB5Zlp3T3AxVHJLQWxiZ0Z1SXVxaDVnMDdFTjh4QnZCVzc1UklUVUF4ejdyWHhscjdtdHJQczNZeUFCU0pSN2ZSRG9iVksvQU1CWFRNdG1uWXd5VUpmNGlscGxKUGxYR210OVdjZ3BpN0xOVDR6RnFQL2F4bWgvSVc1VC81bUlTMDFRRG1ZSy9vZ2xpclhsZFN6VWVodENVUFhiK2l0SjF0OTJNcWFiT29DeHIvWGh4OGdFNi83NUtZU3g4NmpsK3NZU2wrRnpGRDFQQ2VRZmJiODUrcU1aU2FtWTNnd3hIVGczQ1ZnZ0dUZzNxUmgwVElaazRBNUNRZExxQVpib1V3UmgxSGs5d0VETGNtZjFBQVBVa2Q1NmdQbHEvR2ttcTYvNStrUlpnVjNYWWMvUGNmVUFZZnBzaFZ1QlhTblBHZW9CaXFXWEFkK1g0cG1yOXBFNzd2TlZ2NzFaZE5jenJuajFMMnduYXpGYklBRklGTVhyanNUV3F0WW5BN2ltaklKUEVwV0JTMm8vQlJaRW9DS092MUtsSk8rMjdTUDJkalMzK2kvTWd0dld2NjVVZ0czRVU5bmdqN0JsZFo4c3dmNDN1N0xXMzV5cHY2RmtvSSswNnNyNkcweHFJWC9kdnk1RFAzS25DNnZqb1BRYWc3WnJWWjVLbWdMbFh4WVNLYWJKV1ZJQ3ByVm4zOWJEWk9EUXAxMldlb0E1UWtGaW50U3NCNWhlRDlBeW54T29CNWhrQlE2cEIramIzbElQMEhsdE0xbUJJNzRuVTYzQVdlc0JqdnpzcXdmb3V0WWEycTV2THFPc3dQcmlINzcySHF6N040TWdBVWdVeDR1T3dqV0FuZ3hnZStnU3U0czZnS3BBRFVHOUpQMWJWbUpaa2o1dHRtQ0o2SE9iTFRpY2pOTUFZdERlYnNQeVh4T1VnMW1DUC94a1UwcndCM29hL05GKy80VVJmSzU1N0wvMTEwSTY1YmIrV3V2eGhYemY5YTN1WDJyb1IzemliK3U1Tk41bTNBWDVOZlBrbjdjcGtvRGQxZHNMSVhyQzIrc3NHVGdxRk1TNmVvaW9vMWU4SHFCVmxhWnA0eGhNUGNEbXRzcjFKV1orVStzQk5tL1hVQkl4Y296WnJNQVc5VjRCSzNCbjlRQjdZZ1Z1bzFtRHJNQ0M5MXo5bXAvN01GbUsyUVFKUUtJVHZQUklmRkZGbndlZzlwTmZlWmJtOXVXRW9JWkFSdFYvQ2k4cEZUS1dWUFdmZTUvUW1vUXA2ci8yNEkrWVkrM1hNSlFnUzd0bkpxSHl5M2ZPV2JiK3hwRkF6cVd0Umh6aitSekFNNjcyT1l1bys2ZTIrY2tmK29FRTVXTEQ3elZnWHllRlVvWjRJL2xuYlpJa29IVnV5cE9BYWUxMW53d2NVQ3V2czFDUWduMksyVy9xNmdHNmFKVFVlb0FSYzlKSzNHU3FCNGlFN2FsVzM2anR2dStiRkN1d2d3d3RVUS9RKzdsSFhpdXd0OTRsSFBkTXVCVlk5N3pZZm1VdjJmWjZzaE96Q3hLQVJHZDQyUkg0RDRIK2J0czNWamhSRS9JaTdLNnhWeStwdzFhcC80TGE2MTc5NTI5bi9NVStSZjFYNmxoTHpjRVFSVmhYd1IrNWF2T3B4cDNmUm5TRTd6dDA2MitNM2RSc29YWE1TNXIxdDNEZFAyZS9yZGVodWMxT0UzK041US9jOTNrSWdWaUtNcG9COGkrUTZFcHZzcThrWU5vbjIvZU4zVTVjWk9qSFlKS0JRMGdTQzhIUlpTaUl0VThaeHpqVjlRQXQ4NmtKKyt6WkhtY0ZEbGU4YWlhcnIyKzdtcTVmV1N0d3QvVUE0YmduTzdJQ0k3NVdvTXNLN0RueTVrcHIxdjJiY1pBQUpEckZTNC9FV3dUeTNsekw3blFWb1dDaGFXRWFwUDZ6cTJmODZqK1pxUHJQWW85c1UvOUZIUnRJbWt4R2NWY3dKYmlUNEE4WGdXSWo0dHJJbHo1YWYyUElJU2U1RlZqM0wwSWIwL3U2Zis3dnJKUyt1ei92b3h2cy9XL3JaeC9Jdno1QjBBa1pLWmFYL2ZBbXkxOEpMZHVHZEVrQzlpUVpPS2dQc2FFZ01CSTVlUWczMWdOTUlDR3RTYWZtZW9BNXJjZ2g5UUI5NDhwWkR4Qit4V013YWF3dHBGSktQVUMwWEsrbVBuWlREOUMxcllnVldOcnVrOVhYS3JjVjJEbTNLcXo3UjVBQUpMckhnVmZYcndGd2xuVTVXTVQycTFpcytRZUZvbHBoWVkxUi83WHRJNW5hOGIvdWhLai9KcVVDakQ4bWdGQnJKQVRhMVgrKzlvZG1DUjQvUHEvYXowYVk5TS82RzIzSjFmanJaYVV0dXFyN3A4bDEvMkR1WnhxdFVTcnh0LzJQTHQxU1JIMVIvMGtIWTdXY2tpUmczTGx6WjV4MzFGNG5vU0JxSkN4Q1NaTDIvVVJ5OVdsSzZnRks2UDJUUms0RzF3TzBFR1NTWTN2T2VvRXhjeFZ1OWMxV0Q5Qkx4cFdwQjlncks3QnBCSVdzd0kzM3A3eUxkZjhJZ0FRZ01RRnMySUNGTGRBTkVGdzBxZnAvc3FSSXFDR29SeDgzQ2VvLzF5UFRSUXkyMXNkVFZ6dnRMK3RxVUxxRUJIQzBIcXYyWTJOVWgrbUVXbmZCSHluVzMxekJJeHFrNkhPUk50TmwvYzFKM21RbkdRUGJNMXRuZXhqNjBUL3lyMnRxYUpqa255SWpyVGF6SkNCTXBJcnIzT1dTZC9PME45MmhJTlo2Z0NYNmxMQmY3K29CbGt3UGhtSE1WcldnYjA3MmJFK3FCeGl3NHRWTVZsL3o5WkdZZnJ1dXc4cXh1Sy8vWUt6QVRoTFFQdysyRVVSYWdUSDJCK0V2M081bnQ1NU9Gb0lBU0FBU0U4THJqc1RXblR2MVNRQ3VtRVQ5UDEzeUpOVVF5TzZYK2pEMVgwaGR1NUMrTlkwMXRwMnU2L2toNHpGdEJGS1lQVGIrTmEra3NxK1p3TWh0L1ExUi83bm52SFdlQm16OTlaSmJnZGJmWUdJcnN1NWZ6SG5TUWxIeWhYNjQrOTdjV0hyQVNOb3pKQ1BMMDVPbmJ6ajVGM04zaG5lQlNzQzRUMk5hZS9hWCthR0VnbGdKbHh5aElJSHROZTNIZW9ERzd3US9vYWt4OHlTeFJHR2JGVGhReFJwbzVZMnZCK2picmg3NktNVUtIRmNQMEhXKzNsaUJrV0lGSHI4V2FWWmdwN0x3Mm5tdFQ3NXM0NkU3eUVBUUFBbEFZb0o0OVRHNFhxRlBBSEI5ekJJNzFpS3NTODhSaGFKV2FiVE11UUlwMmdpR05GdXdXLzNYUE9iUW1vVGkzVmNEQ0lNUTlWL2JQRmpVak8xekt4N0NKMXo5NTJzL2IvQkgydXRqaURVemxBeFV4NXo2emprVTY2L3pNNkZoSkZhK3FsdTU2LzdGMjNGOTN4bDUrOTd3ZTgwVk1HSWxTa3ZTUWROQy9wWHVTdDlKd0J6SVRRSk9Zekp3U2lpSTFVSnJKWWpDbnNJUzJxZVloT05wclFjWWRGK205aVYyTHJxdyt1YXNCeGcveG14V1lBbjVMQnRJcmRhZUY3QUN0NmozMnVzQmFseGd5SXA1aUNVQjI5cFV3WGFSNmlrL2VPMDlyeVh6UUN5REJDQXhVYnppU0Z3QjFhY0QySmE2YkE4NXBsNnkvK3B1K2I1RTFPVnIyOGR1VFl0WC84V1FqNlAvdGF1WExDRW0vdk9GWGtNZm9SWjM3ZU5VZmhsVGdoT0NQOXF2VTJ3S2NFRFF4d3hZZnpYNW1CUVNyVVRkUC85M2grdHpiNStmTW9tL2RxcW5UTGhISHVwazJzZy9LZHlsUHBPQVdyNmR6cEozSTc4SmMvY3ZxRytUQ2dVSnF6M1lmU2pJbE5RRFRGSUxOdEFrWml1dzVUN3o5eW5KQ2h4Yzd5OWdlNnJWTjJxN2IwNzdid1hPWGc5UUxMM1U2Ty9KVmxXazZpdXZmdlhQZlptTUE3RVNKQUNKaWVQbFIrSHpJbm9xZ0xya3kvM290M1VOV1h3UmwrWURTeEZ3cnBkbnUvcXY3VngyOVY5YnV5YWl6cXlVakZNZGFvN2FlNUhCSDIwa1NaL0NQdHprVFpyYUR4YWlhVXF0djVpWTlkZXFXR3k3ZDByVS9iUFA5MlFUZjFQckZwYWtnS2FkL010UUhaQWtZTURseXAwTUhOdS9qSDlDeVJvS1l0eXYwMUFRYTU4eWo3R1ZnSmpXZW9BeE5tNE51NmVqNndIR3JCeExXWUhENmdWcVRGK2JqdTZwRlZqRldnKzBiVzdhajQydUJ4aWtBblRQcGFyODlUVy9jYzhQa0drZ1JrRUNrT2dGWG40a3pvVG9HNndrVmV6eVZZSGROZjkydnd5cW1PclBkYWIrMDl6a28yUlYvNmttSEJ0WUQ2eU00aStzbGw0WHdSL1c4L2xmKzhMMnpXbjlkWk0wdzdYK3h0aGFMY25kY2EvT2ZhdjdKd0hmd2FWQ1A2ejk3NXI2bVNYYkwwbkF2TzJrNVdqN0NaMjRjNFdPcVh4b2lZL2N5RWk0c1I2Z3Q5OWw2d0cyRVRNeDlRQmJ4aVd4cTAvMUVEOXhWdCs4Vm1DTnVGOWlyY0F1RXREMTJVNnhBcmZmUjUzVkE1UXdCV1FIVnVDTDFzdU8xNUJoSUpwQUFwRG9EVjV4Sk40SnlMc3R5L3RZQWtpd0tGNnFkZVRyVjV1UG1ZVDZMeVRNbytrRmZkSkJIK2toSVhhN3EwWDlGMEpTRkZYNUpWaC83Y0VmcnMrSkJIMm1RcTIvTnF0MDg3WmVXSDgxVDF2dVkvSmFmM1BXL2V0MzZFZU94TjgwUW83a1g5bWpaNWNFYkJ0QTVoQ1A2TEgwSVJrNGhEZ29vK2d6RVN5ajM1cXNCeGh4UGJ2b1N3STVLc2l3UFdlOXdKaDVDN2Y2cW1lNy9UT2Mwd3JjY1QxQTcrY1NrN0VDTjg2RlhsZnRtdnUxSzE3OUM5dkpMaEJOSUFGSTlBbzNIRm0vVmdYL1ZXSUp2bkpKV29zc2ZXdE9WdjJuclozTTFhOTJGWjVGSmRXbS9vczZOdEIrR0VlNjVRLythQ05DNHRTRWFhOW1ZY0VmemRmRFR4STUranpOMWwvSFBXdzloNHRzMHV4SnhjMC94RnBuVGVjeHpvK05BZ2dKL1NENUY4RWdUWURPSWdtWXRRM0pySGVkNmxBUUpJYUNXQW0zc0NmMDdOUURiS005UXF5b3Z2MG1VUS9RZDUrR1dJR05KR0hBL2FDWnJMNXAyMjM5YnJjQzY5ai9ON1V6eVhxQTdkOHZQYkFDanplOVUydmRjUFhyZnU3SFpCV0lOcEFBSkhxRmpZSjZKL1M1QW53eDl6SmNsNTVkdFNwMDZlVzE2VHU0bFByUFRneUtxYjNZZmxuNzJiVUtzSTBJQ2xQSWhkMHJZZjlPSUFzbkh2emhJbTVDck1EKzhjK0M5UmZPVjl1VXVuOGg5L0JRNnY3QlAwZnF1bWRMQkl5VW9uaVk5a3NTTUhNYm5TcnRoaHdLRW1EL0RTRnpRdHViMlhxQVdyQWVvR2VjUWZVQURYTW1zVFVEMjZ6QUduSDlZNjNBSWZVQXJmZE9HMEVYSHBaaXJnY280ZDgvcWZVQVhkdUdaQVd1UlY1ejdXc091WUNNQXVFQ0NVQ2lkM2pka2RpNlpvYytXWUh2NUZ5S2kyQjM3VDlkb3Y5cUEza1NvLzZ6L0cxZUhaM3ZnL3B2N0R6YUhONWhPaGIrWS8zTE54L2haRlAvQmJWblcvWkd2ZFpvMHIvVGdqOWNjOUM2UktMMU4vWVZPZUNZbFBxQzNkWDlTNnRRRnRLbTFSNGRjcTVTMUE3SnYyeXRUaVVKcVBIYk8xUGFSWDdEOVNrVUpMU08zdGpFNWFnSDJFWUNzaDdnZUh1aFlSOHQvVGZYQTB5ZEN5T1psOTNxcTg3dEdrb2ltdTZsTmdJdnBCNGdtdHZ3ZnJaVDZnRzJ6YWY3WHVxdEZkaXJjbDF4VHRWLytjbXI3dmsrTWdtRUR5UUFpVjdpdE9Od2c4N3BTUUN1ei92Q1g2R0c3Q1l6Y3FqL05DQmgxL1VTbTF2OVYxckJsNk1OZFl6RFNzQ0ZuQ05IOElldHIzbURQelFnaEtPVEZHQmFmeEdrTUF3WVIxQ2ZPNi83NTdiemRwMzRpK0JyV3dvay83SzNUaVhneUFBeUsrMXlKd01ianNsalZUYWNMemdVSkdLL0xLRWcwMUlQc0kyTUtWQ0RyNnUraU9GZUZUOTVtV1FGRHE3M0Y3RGRTY0FhVkpwUlZtQTRQajk3Zm82ckJ3alQ1MnFRVm1BWWF3V0tYTEp1ZjNrSkdRVENBaEtBUkcveEc0L0FkNnRLSHcvZ1Z1Y0xaTUJ5VlFXb0lRM3FNUGZ5T1M3d1k3THF2L0Y5RXhSOEVlby9CSnczaEJpeUJIOW9BTEZVUGdRa1BmakRSY3lFQktpTWJnc04vZ2gvdGFiMUY0RjlOaE41UmV2KzlUWDB3MG9yNUsyOU9ReElEOGRIRWpCOG4zU2wzVVNTZ1R1ektsdElob2hRRUlrTkJiRVRMOU5iRDdCZC9aUmVEeEFaMVlKdHBFc29vUnBRSTFGaXJjRGhhdGQ0SzNCWVBjQk9yY0FSMzJXRHN3SkxjNjlHcjRYSENueTlMTlJQKy80TDdyV043QUZoQVFsQW90ZDQ1Ukg0YWcxOVBCU2JVNWJyeXc4YlhVNy9GWXdreGRwVWR1UDc5bHY5TjV3a1lBbGVDdG1Yekc0Q0xrU05GeHI4b1pyU2I4dlNKRGI0STBEdEZ4bjg0WC85cHZVM2hLN29xdTdmNUVNL2NpVCtka2tKOVVIOTEwZnlMOVBaQmtjQzVwaVRqcEo4YzdjM3lGQVFDMmxoZlZvYlZpTXpYdy9RUWpJbHFCWE5WbURqdlM5NWJNRWFPL2RKOVFBUm1GeHQzNTdOQ214UjcwMjdGZGcwQXVkbmFpY2dHNjc1alh2L2tLd0JZUVVKUUtMM2VPMGo4U1VSZlJxQUhiRkxXbDBpWStvbGNtR1ptQm0yK3M5dWgydFQ0Vm5VUEczcVA4MTIzZ3pKdTE1Q0pHd0oxNzRFS2hmOEVkcStqVEJxSjIvYUNUMy9PZUtzd0NIanRyeTJ6NDcxdDh1NmY1TVAvV0RpTHdyMllUTEt4bGtpQWJYc25BdzZHZGoydElxZnZ3d0VtUVRhZGJQVkE4d1FydEY2OFV2V0E0UzMzMm9PK3loai95MXVTelpaZVgzYmM5WUxESmhEbWNSMjMyZDV5cXpBVGhJUWptdG9Jd2hWNU9VL2VkVzl6aWRiUUlTQUJDQXhDTHo2a2ZpMGlMNEEySjNiRWJRY2tNVXZTZFNReGU5WmFXNGpEd0ZYVHYybkFmdUVxK1lhUWtQVWJuKzAxVWEwQlgvWSsyNEwvZ2lwdmVlMjU2YjBOWHlwYlEvK2tJUVVZTC8xTnlTVXhVZkt6SUwxVjBzU2xtcTc5OHJYL2JOK1Y0YUZmakR4dDF3ZkptdHJIZ0lKMkpPeCt0b1liREx3SkVOQkFsS0NzNGVDQkxhWFl4eWQxUU8wblVkekVIcEphc0VHQ3Nac0JRNzlESVZZZ1RYaW5sTVBTWlRINnV2YnJrbDluU0VyTU1wWmdRVjR5M1d2UE9RRFpBbUlVSkFBSkFhRDN6Z1MvNmJBSzJPVzNNdVdQMTFSLzg5Q21PUlYvMG1RK3M5TkRQcHRjbTM3cXZNRjNEYkdIRGJoTmhJcHJENWUyR3VVKzkvaFFTQ2h3Uit4YWtJYkVkVitIbnNLOE1wR1U5UitJU25BN2pHWHQvN21WK1hscEFXMDlZYzQ2Ni92ZThMVzczS2hIN2E1Wk9MdnNNaS9sYjNRekVQT1NRSXlHVGpiR0NXMGI4amNOeXZCWVNWZFFrbWl2dGNEYkRpbWNEMUE1M2lzOHhGZER6QW03Q053dkJKaUJRNGs5cEtzd0NIMUFLMzNXNndWMkVVQ3VyNWJlbXdGdHFqM0NsaUJGZmpJdFRjZThydGtCNGdZa0FBa0JvWFhQckwrS3doK1AzZ0p1UFRTV1RkOHAzYW4vbXZiUndJSlJ2OCs0U3E4T1BVZjJvNE5yRUVXWWhxeUJIK0VFSG9sUTBBbUUvelJmRzNRY3EvNUNEN3IzRFhOZTNnS3NKMFV5bWY5VGEzVlp6a21ybjVlalBXM3k3cC9vZWNwRmZvUlJvYVZxUnZZTFlaSS9tWHFFVWxBRCtFUS9lbk1xOXpETk5jRHpHTWpuV3c5d0ZoTHMyV09MRlpnT0FpZU5JVmZlRDNBRXFuRUU3RDYrdW9CeHZiYjgvbFJ5K2RMWXI0TEIySUZianUyOWY1MmZCcWthVVNOZS80dnRtMCtCUnVsSmpOQXhJQUVJREU0dlBiSStvK2hlR2ZJVjdLSW9KYkYyMTExc3VvL2RYeW41MWIvdGZXenE2QVA5MXpHMlc5RGxoQTVhdS9GQlgrRWt3Umxnai9zODczNjNnd0oraWlUQWp4dDFsLzMvV1U0cjRiMjJmYks3ZnBkckIyM3NjMWlvUjhrLzFJcHFNbUFKS0I5bnc2VGdhUDYyUGRRa0VnQ1QzS0hhVXhoUGNEQTR6VmpXNm45Q3JZbGkrRytFejk1bVdRRmx0aHJWTTRLN041dSsyeDJid1ZXc3hWWUhkOEQ2bFFVcWpjd1JGcy9zNDQrS2E2dEtqejV1dGMvZURNWkFTSVdKQUNKUWVJMWo2eFBoK0R2TEk5NTJVM015RzVpbzQyWTZrTDlOMG9pNUZIL3hkWGdROXV4YWlkYXlxai9mSXF6ZHZXZjd5VTV0OG9QQ2NFZkZrSnR0TllmalBOcVVmdlpYb0h6VzM4dFpOSjBXSCt0YWtYUFdJWmU5NjlvNkVjU2E5VGg4VGt3TGVSZmhoNUs2UkVQaUFTTU9tWUdRMEZDeVRNejRRTEh5M3VYOVFCYmppbFpEMURDMVlKcUlqaHpxZ1hWZUFQRzJud0Q1MFFTck1DK01Vczd4VlRjQ2d6L3VGM3QrcXpBMnRqSHR2TzNITnZ5eGROWlBjQkFSV0hEM2xzaDlWT3ZlY1Y5ZmtRbWdFZ0JDVUJpa0JDQjN2M3EralFCenJRdURSY1V4aGY1SWFyLzdQM01vZUJMVVJBMkV5TVNUY2ExMWZMTFVYdFBBL3VLNEw3Ni9oMVc2OCsxdWcwTi9nZ2hJSEtvL2Z6bkdhTDFOOHplM2poLzAxRDNEM210MGI1eldhOS9JdHZVOVZNdk8rWFVEL1NEQkpSZXpHSWtDZGlMWk9DK2hvSllpS05RMHNOSEVvVzFsNjhlb0lQRW1PcDZnSjY1TVZ1QnJkYzNqeTFZZytmZXFEVDFXWUVsdksvalkyOGo4RUxxQWFLNURTOFpaNndIT0RZUHJ2bDAzKy9tZW9DVy9sdnFBVGJtdnFsQzlFWFh2ZksrRjVNRklGSkJBcEFZTERac3dNSXR0NnVmQytqWnJtVkZ2ZUk5V2gxZnpiblZmeUdxUGRlTGRvcjZMMHJCcDgyaElUQzhxTGNGamxpSWhmWjIzZXEvRUxWU09NblliZkFISmhUODBXNzlEYkVDKzY5aGMxdVcxOUxac2Y0T3UrNWZXK2hIeXZ5MGYrOFJjVFRJVlBWNDVrakF0czUzbVF5Y3MrK2wrK1lpRDNLUVo5TllEekNFS0FycGo3VWVJUElyL0J4dEZiRWxwMXA1VGR0enFnY0RQaCtwMjRQdnV6MC9xK2RhVEx3ZW9ETXh1YjBQYXB1SDM3L3VGZmY5RUZjNFJBNlFBQ1FHalkySFlzZSs2L1JwVVBtQzYvdHpZZVJyTjdmNlR4MXBsZUhxdjdaejJvbEJmMys3YmFOcDN2T0ViSVNGYWNUV0hZeDlCYlNrRGx2ckZKWU0vbkN0d09Pc3dPNDVqM2tOajNudDdMLzExMXIzcjhTcmRVcmRQekYzSURiMEE4SFhJZC85bFBmNEhKRGt6MEwvTVFza29KWnRZNkkxOTN3djlkTWNDZ0lEUVJOYkQ5QnhUTEY2Z0xsckE0WVNid1ZxQTRxdkpjdDEwN0N2NUdncnNIcU9EN2U3eDF1Qncrb0I1clVDZStvQlN2aDN4VkN0d0JDY2VkMHJmdUhOZk9zbmNvRUVJREY0bkhZNHRsUTdGMDRDOExXbUwzV0ZRTFZhREFOcCtacE5WZis1MjJzbVRGTFZmNk12N0RIcXY3RitSNmovMEhMZTVuRm1zTjlxcmlWaGFFcHd1UHJQUDJmV1pjYmtnajlzYzlNOHIrb2RSM3J3eDdDdHY0NWpuRFV1MCtZbHZlNmYrN292LzdKRTZBY1RmOHZTUzVNRmxZQzJjdzAwR1RnM0NSaDAvZ3gxK1NaU0QxQVRpSnFHYlZIMUFGT3R3TzAzWDNnOXdCZ3lOekRoT0tjVldFS3N3QnB4UDVheUFzZXJDL05aZ1gyZmE2TVZHS1B6ME5KdVQ2M0FBbnhsYm43ZjUwTmsrSTk0b2pjZ0FVaE1CVjU3SEc2dXBQNVZDSzVhOVJXNkZKQmVRNkFpS3l6QVZQOU5xbzJRSmZIWWZMYVFJbkdFWHE0UWtLYTJjd1ovaEx5NmRSdjhNZDZPUGVpRDF0OXlDa1B2dkpoZm0xUHEvdlV2OUlQazN4QkFKYUJ0bjc0bkE0ZjJEZUY5WXozQXVGVk1kaldqcFcycmV0RnlqY0lWZnVIMUFGUG4zRWlnQmRmN3k3emRkTzkydVgzMFM4QmdCWmFtYXhueU9XdzZ0bjNmanEzQVA5QmRhMDY2NXJTN2J1R2JQcEVUSkFDSnFjSHJqc1NQSzlTUGcrSW5vM2Y0c2hWUUd0eDFmVmYvV1dwMWhkVGdhM3ZoYmxQL1dRaVRidFIvWWE4ajZpUTlJdW9PdHZWVmMvU3Z2YStqS2NEbGd6L0txUDFvL1kyeC9sb0p5OVRYOGhKMS94QTBaNzc1WWVoSFZocW01eUFKYU51bno4bkFmVkFWR2w3Nlo2WWVZSm0rSnZXbjBYWlp3UDRiMEpaRzFVbjAzS2ZpSnkvVnM5M2VKL2QyeldUMTlXM1hwTDRHV29FanZuY0dZUVZXdmFtYXEwNzg2V3NPdVk1ditFUnVrQUFrcGdxdk94SlgxS2dmQmVEYWxTK2l1aWlqUnEzK1pYM2YxSDlJVVArMTl6dThMVi9naUo4b0NGbWV1YTIvNGVxL1BNdkVzWE1iZ2o5MGNNRWZzZk5LNjIrV3RveDEvM0phZjJNVWVlcm9XSnBsMlg5L2xhVnRTUDcxQTMwbUFic2NZOWZKd0lob0wrYzF6TmszMWdQTVZnOHdpSlRNVEx4WmxacTVnMFBNOVFBTjkxOTBQVUREL0NaWmdVUHFBVnF2ZFdZcnNFVzlOMzFXNEcwcTh1U2Z2T3dYdnNrM2U2SUVTQUFTVTRjM0hJVnZpOVNQaHVBbmdDemFmN1g1a1RYcjZyL2RmVE9yLyt4ejRGUC9XY0kzUWw0dllnazREVlQvSWJsL1F3cithTDZYUWxLQUxTUlVqQ21zOVY0ZXN2VlhiZTNscy83RzEvMXJQTDRYb1I4cE5BVEp2MzZocnlTZ2R0eW5McE9CWnkwVVpJcnFBWWEyUFpGNmdHcjh1a3V0QnhnNmxqWXJNREtPTjZRZW9IWHU0N1pyemdSaHg3VlJ6L2IyNDMyZjQ2bTJBdGVvOWJuWHYrSitGL0tObmlnRkVvREVWT0szanNTMzZybjY4UUJ1cXBmSUxYRTh6ZnVnL3N0REROclBZMUVkanI2RTUxVC8rYzV0VWYvNVZtaXh5c1Ayc1lTcC8venR1YTViMzRJL21nbVpjQ3V3NVR4dXdpak0rdXMrWjYrc3Y4N3JHMStQTCt6MVBQSThhdjhzcHM5UGNhcG1RaUQ1bDNXa1V2TEtkRTBDUnM3UllFTkJZcDZhSWVlM3Fzd3lXbVZMMXdPVW5MWmVHNUdVc3g2ZytxNXRib1dmbzYwaUNjVXk0ZTJ1ejRKTWVMdmozN05uQlpiWC9mUlZEL2d3MytTSmtpQUJTRXd0M3Zod2ZHMm5McHdBbGUyQW9CNFIyZlJOL1dkdlQxcjdtVS85RjBZMmRxWCthMHZ5alNmZ0pHbVo3KzZmWDFuWTFwZXdWNkRJNEE5dDdvL05DdXk2SDhQcUF1WU0vckNUYVhsZkpXTitQN1pOeS9RcmJGNFM2djZoblVobTZFZmU4ODllRkdCT0VsQXpYaUV0ZmFrRHpqVnRvU0NsNndHR2toUU4yNmFoSG1Dd3ZUUFhpaWtuOGFaeC94WmZEeTJrcDRiZGZ5V3R3TDR4Uzh2NFdyWm50UUpESXo5TE0yY0ZmdXYxcjdqL3UvZ0dUNVFHQ1VCaXF2RzdSK0VybFM0OFF3VzFVUDAzL2w4TkoxSGFTRWZmSzRTUC9Hd2w5THkyeU5obG9MODJuenY0UTd3RWhuMjU1Q1lEaXdSL2VNYmV2bHh4RWJiMkZPQzBWOHgrV1grVHo1Rm8vZTE3M2IrUWU4SjNEY3BRTXlULytvOStrSURaK2hYVnAvSWtvR25iQkVKQlpya2VZTmgxaXFrSEdHTUZqbWxiVForSDlIcUFTRkFMeG9SOUJGcUJwVXNyY0VnOVFPdDhsTElDeDN3SFRvOFZXRVEvZFAzTDcvL2JmSE1udWdBSlFHTHE4YnZITEh4MER2b2NWZFZaVXYrRnBJZm1Dd2xwbnR2Mm1uY2g3WWNwNnZ5RVh2Z3kyejZ1c0pDU2VOdndjSUkvYk8zR0JVVjBZZjB0VnZmUGV6Mm5xZTZmbU5xY3JjUmZrbitZeUF4MG5ReHNxVmMyK1dUZzRZU0N6RTQ5d0dBcmNISTl3QmdpTTZadEszR0psdjNTRkg3QjlRQ3pKaFJiKyswakxVTXMwSnI0V1lpMSttckF0V3ZmUHQxV1lEMXYvNTFyWGdBUlB1YUpUa0FDa0pnSmJIemtqbjlmaStxNUdOR1RUYlA2Yi9SbGVwTHFQeDhCWkZQL3BTeTViR1NVaWRETDFxZm0rOG1YOU92YTFwZmdEMHNkd0tGWmYwTmZhYzJXWFBYM04vZjVKMWYzei9wYTMxWG94NlJCOHErenExczhHVmc3SEYrWHljQUREUVVKT3Y4MDFBTk1KQ1ZqeGhkVUQ5QjRua2JDSlNmeGxwQlFiTFlDVzc1RVlxM0FHbkY5SjJVRmJsSzcrY2Z0YW1zYXJjQXErbjg3dCs5NDJoV3Yvb1h0Zkw0VFhZRUVJREV6K1AyanR2N2JuTWhwcTkrenUxWC8yWlNIZG9MRnJ2NnpqeU5IRGNBMlVpRmtHZFlXL0JHaS9zdXpIQXdML29oVHZsbGViNFlUL0lHbzRJKzRWOTVoV24vSGY3RDhJUUN0ODU0ZUxoSXpMNjUrOXovMG93K0p2MFFjaGt3Q2FxWStEVGtaT0tadkNPdmJ6TmNEakxFQ28waS93KzRIWXoxQTYvWEpIUndTVlE4d2h4VTRVTEUzVVN1d3B4NmdoTlFEdEg3L0RkUUtMTGhhZCs0NjhlYlhQdVJtUHRlSkxrRUNrSmdwL05FanQvM3RXdEZmbHhYaXNpN1ZmMjN0dWw3NjAyMjVhZW8vdE15QkszREVSektFRTNvaHkwdzdBV2NKRW9rUEFXbCtyUXBSLzdsV29WSEJIeGhtOEVlRVFTM3lGVGROY1ZqaUhEbXR2elpTemo2Uk9XM1I0WDFnNHU5c2d5Umc5UHhNTkgwM3RtK2xBMGI2V0EvUVNQYTQ5a3NpTWcxOXlHNEZocDI0dEY0ZmlSMUxDMEVtYWF2QU1DdHdTTDIvek50ZGZmWFc4MHZjN3VqTEZGbUJiOUpxNGJFM3ZmckJWL041VG5RTkVvREV6T0VQanR6K04ydFVYejVhYXlHcitrL0xxZjlHWC9JbnJmNkRZM3h4UkpxWTFIOGhyMkgyZmppSVNvUDZMNngrbjV1MENWSC9tWU0vMU4vWHZNRWZzU1JOQU5FVm9QN3JOdlhYTXdZTjdhOVZyWmc2UnB2MU43M3VIMHpqc1g4ZnBsTTMzWUhrWHg3MGxRVHNxcUVwRFFVeHREVWI5UUJqck1BWlZrSWxpY3pBZW9CYUxPd0R3WE9tVVJacHp6MG4vbjRYc3dLUGJZMjFBb2ZWQzh4ckJXNjdWbTFqNkkwVmVKc29ubnpqYVEvNkZwL2p4Q1JBQXBDWVNXdzhhdnRmcjlQNmRlcm04RWIrRzZEK015d3Q4cXYvbWwvYzI5Ui9JY3FpYnRWL3Njc3p2L3JQY3U3NGZvU3BHclVUSy9Da2d6OHNiN2tTOVpyWWYrdXZZeHdhZDc4aDRuc2crN3hNdk80ZlF6K0lETE5VbEFSa0tFalN0V005UU9lL3k5UURMS0ErREw0Mm1ZaTNxSDdaZ2tQQzZ3RWFWamJSOVFDdDE3NlVGVGcrYUNUTkNxeU9xKytxQitpekFqdm1JYXNWV0JaVTlOblh2K0xRQy9uOEppWUZFb0RFekdMalVkdi9Zazd4SEFEYmgxTDdiNVNZeUJjU2tqTUJlRExxdi9BbG9pOGwySy8raTExMnVzbEFLV1FGSG0rejIrQVBXbjlEMm91Wmt6VHI3MURxL3FWUUhDVC9waE1rQWFPMkR6WVVCR0Y5aTFJb3VnbUVKRUluY0tVeW1YcUFNVmJnbUxadHdTSGg5UURMV0lIdG45V0lGR1JQMzl6S3RDNnR3Qm10dmxGVzRORnJZS2dIMk5CT1ZEM0FkQ3V3MXFvdnUvSFhmK2tqZkc0VGt3UUpRR0ttOGVhanQzNUlVVDhWd0xhbXIrdmgxUDZiblBvdnpBSWJwLzZ6MU5NTFAzZjQ2NTRwSmRqVUYvdTJMRmJnWGdSLzVDTk5adG42NjV5VHdHc3lXM1gvU1A1Tk55WlBBc2ExMCtVK1RlT2ZwTm91dG0vbENNWFdOckxWQTFRakNkTzNlb0F4VnVDWXRxM0VKUXhqS3hQMm9kRXJTRisvQ200UHVIODBrOVhYdDcyY0ZiaGhMd24vL2tpcEI5aG1CUmJnOVRlOS9CYy93T2MxTVdtUUFDUm1IbTg3YXZzblJhdW5LbVNiOWJIZFovVmZIMm9BaGlqd1ZwRnE2aUkwSk9IYy9tQVFpL292eHh6a0MvNlFnUEdWRHY3dzJadFQxSDhOL1ZUTFcveXNXWCt0eDBUV0Y0eXMrMmY1cm94bGFvWkRsSkg4NndaYSt2SkVOTk9YWk9DT1FrRnkxd09VdUQrNXhMWVZ1b3FaK25xQVVYWHZ3aFYrNGZVQUM5aC9BOXJOWndWdXV6LzdaQVVPcVFkb25kTkpXb0VkTFl6Tmc2SGR0dDdKV0FqSTc5L3c2Ny8wWjN4T0UzMEFDVUNDQVBEV296ZC9TdXY2OFlEZU5uVDFYMXZmWXRSL280UklxUHJQclpJTFdiNkZoMi9rV09wWmdqOUNVb2ZEWHFraWEvMk5CWC9rc2dMYnhtUUwvb2kvRjBOZnM5VndYeUd4SDBPMC9pSkxuME0rejNuci9nMG45SVBrM3lBZ2VhN0c5Q1VEbDFiYnBZeXRML1VBUTRnUEgxRmtiUy9HQ296d2VvQ0IvUW1iazNBU0w5d0s3UHFRaHFvRlo4c0tyQWsxL3Rydm81emJSNi9CSkt6QTduMzNrSUQ2N3B0Ky9VRi96QWN0MFJlUUFDU0lKYnpqbUcyZnEwUWVBK0FtMStPQzZqLzNjanVFRExDci8xS1drK0kvTit6bkR1dUhSS3YvZkdTZ3lWYXB6WFVMSngvOEVmY3FtR2I5bGNSemg3MkNqdjF1NHRaZksySFpQTWkrMWYxTHBXVDZkbTZTZjdtZ0dTOVgxOG5BbXFHaHZvZUNUR005UUljcXFMTjZnREZXWUN0NUUxTVBNS2NWR1BZK0I1RjdobnMrdXhVNHBGK1RzZ3JudGZyNnRxdjEvSTUvOTlVS3ZJUi92UEZsRDNvTm44MUVuMEFDa0NCVzRLMlAzUEkvcVBGWUJXNXdyeEtHcmY0TFVmbllBa2Z5cWY4YWxyZWVWNUE0OVo5dlBpM3F2N0JhZjI3aWhzRWYwYSthcHMrRWE4enQvYmQvVHB5dmtvV3N2NW5OZHMxalk5Mi80aUQ1MTZNWm5UZ0ptS00vUXc0RnlkblcwT29Ccm14L0VyWmV4MzdKOVFCVDU4Y1Z3QkI2ZlFvb0VzMVc0TkI3UGJNVjJEakhZK05yMlQ3elZtQy82dlMvYnJ6OXQxNE1FVDdtaVY2QkJDQkJqT0FkeDJ6NWFqVlhIUVBnbWhBeVRsc0pqL1lsODZUVWYvQzBNVW4xSDVMVWZ6WTdicnRDTCs2MXdFSlVhdGRXNEI0RWY4VG9OcHozdjBuOTV6NjNSdlFqbEt6c3l2cUwwdGJmUWRmOUcwN29CMUVDT3ZHMitwME1iQ0VmNHA1WWFYTTZ5L1VBWTZ5M1M3c0hrVjRJcjA4WTBuYnlNZjdqTlVlN0hRYUhCS3NlcFVzcmNFZzlRT3VjaDF0OTFiTzkvWGpYTlJocDM5Rk9sQlc0dFRjS1FENTkwNDU5bm8wTkd4YjRQQ2I2QmhLQUJOR0F0eCt4NlhJczFFY0J1TXIxZ3UxUy85bElOYXIvM0V1R1VQVmZRcjIvWlBXZjYzeHVNckF2NmovWFBSRVQvR0h0aC8rVk1NejZHL083ZkVUaVNQc2RXMzlqTExuVFdmZHZrcUQxdHgrWWZESndOaEl3K3o1OXFBZVlVU0U0amZVQW82ekFBVzBIVzRFRCt4M1NId2tQRGdtdkI2Z1JuL1ZBSzdBZzhUcHJRSCtzL1EwaE5TZG5CWTZlaXhYL05sdUJJNzRMZzZ6QWlpK3UyVWVmaGxmL3duWStoNGsrZ2dRZ1FiVGduY2R1dTJvZTlhTVVlb1Z0S1RadDZqOHhqNlc5RDgwRVV0ZnFQMXVRQ0FMT0xlWnord2tlY1JBNDdxVGYxbVdNUWYwM3JPQ1BuSytDdWEyL2ptczlBZXR2TmlwRVE5U2p1ZXYrcGQ0RHJQdEhKTTZ5bEx4aTB4RUtrcTYyaStoYlovVUFEZjNMWmdWdUdYc1dLN0JudjFBaVV3S1ZleEp3bndaYWdkT3ZUMFFmY3lrU2kxcUJRK3I5MmVaNGNGYmdnQ0NQbGhaYXJyUHJQdC85ODZYMVh2cXIxNTM2NE0xOC9oSjlCUWxBZ25EZ2JVZHQvZUhjVGprYXdQK05raTdUci82ejlNdGVmOCsvclBJVGRxNzVDMWtDdXhSNWJlcS91R1doWCszbklvTHRhcitWZnhaM0JYL1lWcUdUQy81SXNmNUt4bGYwNmJMKytzTm1jbHQvODZ2M2htSDlKZm5YVDB5V0JDeWJESnc2OW83VWRvT3JCNmkyM3dWYmIzUFdBNHl4QXR0WEx0bU9DUmxEb0NxeFNCQkgyNytEL240MUNTdHdvS0l1MVFwc0lxZ25aQVZ1V2JtTy9UYS9GZmdiTzNkdFAvN21GenprWmo1M2lUNkRCQ0JCZVBDTzR6Yi9SS3U1Undud1B5N2lZcHJVZnpvUjlWL0lNczFXNjYvOTNDR3ZSWktrL3JQT1lYU3R2eUNDTDVjVjJIMHQ0b00vR3ZxbGx0ZnAzTUVmR1F4L1BiTCtoczVKakgzYi8xbWE5cnAvSlAvNmphRXFBWDM5R1ZBb1NIRC9wclFlb0hHVlk3dm1xVlpnRkt4UG1Fb2lscklDeDN6T0MxbUJKWWNWT0tUZVgrQjJKR3lmaUZWNG9sYmc3ODN0MUJOdWUrWERiK1R6bHVnN1NBQVNoQUYvZnVTdE45VTcxenhPZ1MrdCt1cWZVdldmYlN6bDFYKytQdHFXVGdFMUN0WCsybUJidm5aVDY4OW4vWFhOYVorRFAwSzFNKzdmNTdIK21sNTdCMkQ5VmNjQjltTlNWSkcyKzRLSnY4VEVaei9UclNXNStqelVVQkRXQXd5Y2g5UjZnREZXWUdOL1FzY2dzZk16NVZaZzArZmQzKytwdEFKRGsrNlRqcTNBUDZ5cjZyRTN2T3FoMS9BNVN3d0JKQUFKd29pL09PN21tK2MzcjMrc0NNNGRmYm1sK3M5SERIU24vbXNMSFltcjl5ZlJ5c093VjZSY1Z1RHg4K1VOL2tEclhMZjNwNXZnRHp1NWlzQTVtMDdyYitQdk5DOHBHbll0cGovMGcrUmZINUNMQkp4Z1BjRG8vdlE5RktSTVc2d0htSEpNREFHVFlReFdWV0pUQU1PRXJjQnFHcStHZmI3RVQ1ek5waFU0NW5zdnV4WDRoL1hDd25HM3ZPVEJWL0g1U2d3RkpBQUpJZ0R2UE9HNnpadlhiWG9TRkdkVC9kZE9RbmdOUnpwQzlEajdHYWIrUTFBL2M2ci9KRnI5bDhVS3JQbHIvYm10MWVuQkh4Rm1MZFBud1RWR1YvK3p2TllQMWZyYnc3cC9hZmRCdjg1TjhxOVBtQ3dKT05sazROekhsN2JjbG1pclVEMUE3K29reG5wckpWcGk2Z0VtOWdkaC9RazdKcHpFeTJzRkRsVUxhc1IzUm9UcXNXMzhNMmNGdHZXbEF5dndJdm4zOG9kZHllY3FNU1NRQUNTSVFMei9jR3c1OEtCTlR3THdYMVQvdWNkaUMvTUlXUjZXVlArNVU0STFLT25YVGQ2VXNnSzdTWnZjdGY1eWtUQXB3Ui91dWRlZ3ZxWllmMlhzaE9YdHVobjZXNXdXNkxlZ01uSUNBQUJRQlVsRVFWVDFWd2VkTmt5a1FRZllUbzVrWU5ZRGRIK2tFK29CaHRwb1kwaXlvdlVBWTZ6QWdTdTVrUDVJNXVDUUlITFBNQzVyUGNEa3o0SFJ5anNUVnVCd2kzUkJLL0NQNm9XYTVCOHhTSkFBSklnSWJEd1VPNjY1ZHRNR0tQNXA5SkZnVWZCTmcvcXZuU2p6TEdzaTFYL2hTK2hROVYvd1V0engydE94RmRpZy92T1JnYmI2Ym0zakt4LzhFYU4wYS91ZDdSVXZ6WmFMNlBrb1Z3dlJkWVBIS0F4bnUrNGZReitHRDgxMDJjUEp1MEVtQTdNZW9IOTdVajNBamtKRnpHUlBWMVpnMTgwVVZnOVFjeW44Z3VhdmVWN3lXWUZobjJ1WlZpdHdTRDFBNitjM3lRcjhJNFdTL0NNR0MvNzVtaURTM2gva1ZSZnU5MDRBcnh0VjBUV1RhTTNrWEpzU3o3ZGZDQUhvUDhmNGkzMWJQOXI2TUg0ZWQrMi9KZ0l3TkgxWGpkdmIybHRwL2MxeDd2SDl4VUdvdEk5M2RGdlRxOHhLQXRDMnIyc2NydHAvUG9MVFFnQUdXSE9qYXYrbFdIOHoxUDVMdFA2RzlqY2JNVmZFK3R0VjNiOTQxV2tOUUNDT00wcVc4OWJUc2xSVExNcUpWS0NZNis4eVZ1T09qeUhOeDFINVQ2WFZxcnRPbzY2M0dQb2ppZmVWWTV1Szl4aHplSlNoTFdSdVM3UDNTOGIvclk1dGpmZXRaYi9SbEhuN01kcXovZ1ROanpyNjJiS2Z1TnBWdy9oTis0bDM3Tkk2anBqeE5wMnZmYnNrSG0vWkx0NjVUZDArTWhiWE5mSE1tM2l2MWVnNVJvN2RNLzRmS1hEY0xhY2QvajIrQkJOREJSV0FCSkgyN3FIdk9mcTIzNnlCTjhJckpIT3IvOElYNmtOVC8wbWcrcSs1WFlzQ0w5ek9pNEJ6KzRnbk1iL0VSTlg2YXlEL1lKb0grM3lYVWYvNTc1TzA0SS80ejFFTTBUVTkxdC93NEphWXNSUW5mbnJZUnlyL2hvQ2N5Y0M1bElBUmZlNVpLTWh3NmdIbWFDdURpczhhZW1HNjNxbFc0UEw5eVdNRmJ2OE1oTmNEVk9ObkhDMWp5V2tGRHBtN0F0c0Q3dTNzVnVBVzlXbHZyTUFrLzRncEFRbEFnc2lBdnp6NnRyZXA0QVdBN0Z6NVNBbXAvV2RURVBhajlwOXRMT0VrZ2tzTlorMWJVRDhONmorZlNpbFh1RWRVclQ4TnIvWG5WL3Y1NzFIM2ZkSG40SSt3MThQWnNQNWEyNW9PNjI5WGRmOUkvZzBKV3ZKV0tQUkpHRm9vU002VTRaemtaSzUrSmRwb093amFFQWs4SnJnZVlPQVlRdm9UYUFXMmYrajZhQVcyOUg5S3JjQytlb0NUdFFKZlRmS1BtQmFRQUNTSVRQakxvMjc3SjRVK0hjQVdId2xBOWQ4azFYLzJwWUY2eVkyT2szNlJYdXNQWG1MSGxmUXI1bnNwL0pVM1ovQkhtUFUzZEV6YThzTTBwZjY2NzVINHVVdWhQRkpaRjVKL1JQYXJsa2w1bDRVRTdFMDl3QW1IZ2t5MFh5dTJtOU5MamFUTzZEWUphRHRyV2kveUhSTXloa0JDVW5PUWVOR3B3REhqelpnSzNEQUR0djUya0Jyc205UFU3WTYrSktRQ1g2MVZSZktQbUJxUUFDU0lqSGpmMGJkOUhNQ2pBZHdRcnBnYmt2clBGOVpoVS8rMUVYbys5Vi9zc2s0TjZyK1ExektYcmJoVTBtOUk4RWZ6c1JGMW1scnVrLzRHZjlqZjNITlpmMlA2TVF6cnI0VGRsK0dNeWRTRmZoQkR4V1JKd0N6N0ZPdEwwN2d6RW1jVGFFdXk5OHRsSTQxSnREV3NiaVNnYmF5MEF1ZnNUNElWT0dCbEdFTVVsck1DVzBqQUZqSlNZdTZuYWJVQ2g1Q0VFN01DWDYxVmRkeXRMejdzQ2o0amlXa0JDVUNDeUl5L1BQcldpMUhYeHdENDRVcmlKQWVaTjBxTVRFNzloeXpxUDJ1ZjdLU0l6ODRic3R5eUp4U0h2Vm9Vc0FJamx4WFlkWjFpQ0pGOHFqdkxuSVNwLzJJL2cySEt2T0ZiZjYzWG85OEVXWnI2ajRtL3N3UHRzSjFjeWNDKzI1WDFBTHRyYXdLS3ZLTDFBS2ZaQ2x4QTRlZm91NFlTbXpOaEJRNzU3RXpFQ3Z5VEJWbDRITWsvWXRwQUFwQWdDdUI5eDI2NmZIN1gvQ01CWE9aYm9WdVRmMU5lUWFqK2kxSC9oU3lSTzdZQ2F4ZFdZQmQ1TWgzQkgvN3hPNjVkY1BESGRGcC9aNlB1WDdmVUVURnA1Q0Rkck8xTVFTaUk0WmpCMXdNTW1wZkVlb0NTMjZLcjNSOVQwczVzVlNYdUZ1b1hDT0pvKy9ja3JNQXlKQ3V3ZWo0WHZiSUMvMEJsN3VoTkx6bmljajRUaVdrRENVQ0NLSVQzSEhmVDFldDJWVWNCK3ZsMDFkODRJVWoxM3pEVmY4NjVNcjZtTkczcnlncHN2NC96MjNYOTh4d2IvTkZ0aXU3RXJMOGEwbC9XL1FzNU44bS9hVU9YSkdDT1Q4b0VRMEZtb1I2Z0pLN2VzdFVEakxFQ04reGV1ai9ScThiQ1FSeE5iWW14M1U2dHdIbHFBSTZmcDZ4VldETlpmWDNiTzdBQ1h3V0F0bDlpYWtFQ2tDQUs0aStPdS9ubU5iZmQrbGdCemx6NTFHOVQ0bEg5NXo1WFFLV2JWaElnUlAxblc0S1ZVZisxa29HYTF3cmNUdmEwM1NleGhGZWZnejlpM3gwSFp2M3RxSzNwQWNrL29zZ3Q0NzJEcGlzVXhMN0NDR2tMdldsTEErZXhIL1gzd3F6QWlMQUNCNjRDSmVDNmlDYjJlYVRkSWxiZ1RPRWtrN1lDbStiWVp3WE9kSzRWdnl0bUJWYjk1cTVxNTFHM3ZPVGhWL0dCUmt3clNBQVNSR0c4NTBSc3YvSGFXNTVWSy80NmpXL3dxLzlDaVlWVmJUVStDdnVpL2dzbkh1MnZNZUlrOUJEVTczenFQOXVyb0pqbXlKMzBDOC9jMmw1VmN3Vi8yTzdkZmdSLzBQbzd6ZW8va244RVEwSEN4ajNjR241bDZoUkcxcVV6alRXUHVrNGs4SmpTZHVZZ0szQllQY0R1cmNEVzc0cFp0Z0tqYjFiZ1MxVG5qOTN5b3FPdTRmT1BtR1l3MW80Z09zUnBuei9nRFRYa3JTc2ZOeGIxWDZqOTE2OHd0TmNnYlA1MzAza2F0amNRZ00zRW0zZ3R1QmFMYmxNL0xPcS9wclpEK3puK3MydGZjYWdCcGQzZXE4MkVYOXNjTlA5czI5Wk1vTVFxM2xMVWZ4SkZSR2wwV0llbnJRTHFQNWU5T0V0Ym1yZS83Zk5yVzJiMGdmeFRBQUpwNlkwZ0Z3R1loeURzd1ZKTlpiRWJLbERNOVhjWnE3SDNTNDc1ZC9WbHoveUo4M3dXalZ4RVFKUEdqRW5DdDJtTTBsemM5MTFRM3pyb2w0Yk1TOFBQMnJSTkhQZVJjYjlWZjZTeUg2TkYraU5qengvek1TSDkwZkEraTZ0ZHpkeEh4OWpGTkk3QTY2cis3Wko0dkh2dUhQTThObWQ1dGt0cnYrejN5VklibjUvZkd5ZmQ5TnhIM01xM1ZXTGFRUVVnUVhTSXZ6bjZscmNwOEVJQXU4SmVUS1piL2VjeHFuZ1c2OTJwL3pTQWNHaS9MbTd5ei9jaWxEUHBOMFRONkRvK2wvb3ZWN0JJVGlWaGMvQkhPSmtXODd2aFczOForakVkbVBXL0ZmY3RHVGovZWJLZG82LzFBQ2RtVVhZRnRPUzBBby91SDFBd3BVaC80cTNKQ0xFbUoxdUJMUXJIQklXZm82M1pzZ0pycjYzQUNweTNic2ZXRTBuK0ViTUNFb0FFMFRFK2NQVE4vNkNLWHdPdzFhVzZpMTBPbDZuOTE3NS9qdHAvSWFSQmlGS2pUZjJIRFAxVXN6b2loNzIzK2JpeXRmNmlWcDhKdjh2WFZwSGdqOFQzNVZ4S1JmL24xbTc5dGRtL1U2eS9Rd1N0dnpIek1mM29Vekp3cm5xQXFmclZhYWtIcUlYYm1rQm9SbUQ5UFFtcHYrZTBNNGZZVXgzSGhOVGFTN0lDeDl4VCthekFhckkrRDljS3JDR2ZoOGxaZ1Q5KzI5eTJFNjkveFhHYitKd2paZ1VrQUFsaUF2akFNVGQvRkZJOUd0RHJYRXVOMXY5MnJ2NFRxditjYmRvSnY2aWtYeTJiOUdzSi9zaWx6aHRXOEVlc2pkZzM5NkdVUXJ6MU4yZmR2N0M1Wk4yLzRZUGtYL0tWNzFNeXNIUTBaaWZodzNxQW5kVFNDMW9aNVR3RytZNlIyTDc1ejVrM0ZUZzBPQ1JHNFRlMFZPQzhxYisrN2JHcHdDcjQwRzBMYTU2T0Z4eTNqYzgzWXBaQUFwQWdKb1FQSEhYVFJWTHJFUXA4MC9waTdsc2ErUDVyV1hYTW92cFBBL3VwamxveklVbS9jYThnM1ZxQlhmT2VRa0NIdnpWUEl2aGovSWVoV1gvVHJtbnMrVW4rRFI4ay83TGRBY1dJdHh4OVNUMVBtcHFxY3l0d1ovMHluTXVzV0dvbk1KekhETjBLSExKYXN4S2tuVnVCL1NSZ3VoVllBKzZWUGR2TFdvSFJQcjYrV0lFRjc5LzBveU9laTlNTzM4bm5HakZySUFGSUVCUEVCNDY5NVNySTNDTkU4UW16aFZkVHJKSGliTHVaMEpoKzlSK1MxSC9XTjcxeTZyK3lWdUJ3TWk0OStNUHlPbVlQcG9qVGZPUWhJWjFLU0ZqbW9sdnJMd0xuUEMvNlRmN05EamdmNWFjMFZ6M0FDSnR1VkY4aXZ1VnkxZ09VR0JKeWtoWmxqYmhXb2VSS2Z0Sk5RdXJ2VGJzVk9JZ1ExYVRQVTVvVkdBSDcwQXE4dEY1NDcyMHZQT0psMkNnMUgwN0VMSUlFSUVGTUdIOS8xQTIzL2R6Q3o1NnN3RitHdklocDRIOFRscmlOKy9kTi9kZWFFaHlzL3ZPbHp1WlIvNFdRZ2FQbjY4b0s3TnAvVXNFZllhVEZaSU0vSWt4bGthL0x6YW0vb2ZPUnArNWZpdnF2MzVnTjlSL0p2Kzd1aENHRmdwU3RCOWlmdGtwYmxCT3R3TDIyL3hheU00Y29HUU1KU2MxQjRrM0tDaXkwQWtkWmdTdThiZE9MajN3VlJHWkgwRThRWE9rUlJIL3h2TThmOUpzQ3ZGMlh5UGt4eFo2T3Y2eTNCWWxvNEg0cjl3blp2bXBmdGU3cmIydVVrRkJIV3hZQzBMU3ZwNS91dW9IdWRGOWY4bS9qdnRwTVJycUl5bWJDVDd6akhSOVBVNytienVzKzM2cTJvd2pBRlBXZlpBditjTlhTSzlOWC8xeTNua05Uem1GWFZscVdGSDIxL2lvQU1RZjV4Rk0rZWQ0d3VscXFpVy9DQUJVbzV2cTdqTlV1cjVNRVhDZForbURLOHI4Q3I2L3ZmcFFNY3lXSjk2SS94ZDUxakdac3EvTitxU1RjSjdMcUQwM04rNG5qZklaL3E3VnRXYkZ1Q2poR0VkZ2YxNXcwL0Z0OTh5amhjN05LTkdiWkw3U1BMZjExN0NlbXRpeno2SnVQMWR1bGJYdHJQNHo5MUpieHRXeHY3bmY0ZG1uZVhvdFVyNzMxaFk5OE45ODJpVmtIRllBRTBTUDgwOUUzL1ZrdGVoS0FXM09vLzJKZktId0tzOWxWLzFsZnlBb0VnUlJYLzFuSW0xajFuMlJSLzAweStBTlJmYlgrdmsvVzN5eDhTdUN4azdMK2xpU0hoZ2IrUGJpVE82UFhvU0NzQnhqZHJ5QXhrY3VXM1kvNmU4T3pBb2NxNHpSQzFFNHJzSDk3MDMzYUN5dndEbFY5RHNrL2dsZ0VDVUNDNkJrK2VOVFBQcW1xUnl2d1EvOFN3bWJwQzZuOTEwWVk5TG4ybjI5KzdMWC9YTXQwT3hub0oxNE1yM0dhSXdna1JPMFhRd2d3K0NPOC8yRmpDaUpEZTJiOUxVKy9zTzRmTVduTVlpaElSQjg2cXdlWXMxKzUyb29KTnJDdGxucDFUT2xrWXdub1crZFdZSjF4SzNCa2VFYzNWdUJOSXZxa1RTOCs1dC81dkNLSVJaQUFKSWdlNG9QSC9PenI4eUpIQUxoazl3Tk4zU1FlMVg5TjZyK1F2ZzFGL2RjOGZ5bEp2L0hXWC85MWlnLythUHI5a0lJL3lscC9FVFYvT2ViRDlxYlNoZnF2cC9UT0FFRXl0UE83cEZnb1NJNitEcmtlWUprYWZwTDhVU3BRRDdBa2dRWTFwQUpiVjI2NWp3azkza1lVcWtrdDZFdlhOZlkzWnlxdzVWNHJuZ3BzdWE5YnhsYzJGZmk2U25Ec3JTODg1bXcrcHdoaUQwZ0FFa1JQOGZkSDNYQ05icGsvRm9LUDJsZWEvVmYvdVIvamsxWC90Uys3eXBDQnJlZFg4YzVmM3FUZlhLUkJUdFZndDIzbEQvNnd2SmJHOVovVzMyN1VmeVQvaUh6SWxjWWI4aFF6OWtYS2ZzcmJpWWptOWlSalcrbDlEclVvYTZhUFk0elNMVVpWNWo0bXpBcU1DQ3V3OVI2akZkZzlqMzFOQlViajlpNnN3Q3E0U2dSSDMvTENZNzdLNXc5QmNPVkhFRU43YjVEblhuRHdIMER3Qjc2Z2o1andEMytvaG1IZkJnTFExOWJvUzN4VTZFamJ2dW9lVTBqb3lEalpVRGdJUk1QRFBSajhBZWMxc0wzS0RTUDRvNVg0MVh3cHhkMmsvazZXL0ZOUEQzTFZGdXgzQ0lpRURZUWhJQjVVaHJOVXEwTkFOT2E2Mk91MXBzMWRvVkFRamZuRFZZN3dqZGkySXNwL0JBV1ZXRUluR3ZaclBGZVpZOVFhY09FY2crTVlOWWFmaElaa1dBTksxQkZVRVRPdURNRWhFaE9hNHB0SHczWkpQTjQ2ZCtLZDIvanRBcmxFNStkUDNIVHFJMy9LbDBpQ0NGK3RFQVF4K2ZjYi9aZGpiOWdJNENVQWRyb1drVEhKdjFUL3RmV25lVXo1cmNEK2NBOS9yVC9yUzVUL3BjNm1hekFxM3JJRmY4UzhTS1VTSVRtRFAxS1VlWVl4NlJDdHY3RkVEZXYrNVhxd0VQbnZ6dUI5b2tKQnRNd25zUmYxQUcxUDE5QzIwdnBWeGxiY3V2b29iUVYyL252YWp0SGdlNy8vVnVDRSs3eTRGZGl1RGkxb0JmN3NtclhySGszeWp5RGFRUUtRSUFhQ2Z6bm1oZytvNklrSzNMenljWmZMcXRkRjdiOVlFczVIbnVTby9XZGJ1WlVJQWxuWllPbWtYeCtaVXRxS2kyeHQ1Vlc3amYrUXEvMlljUWNwOHpRa0JUbW45WmQxLzRZTGtuK1R2WHU2c3VCcUQ5cm9HOW1XM2xhNXRPSW1Nc1JxQlE0a3dLelcwdVhkTzA4cDlod3ZBWE9jMVFxc3RBSkhXWUdidDJlM0Fncyt2RW4wVjI5NjdpTnU1Yk9JSUxnS0pJaXB3WE11T09pQmlybVBLWER2bGFSQWpQb3Z6WUs3SjVqRXNtK3NCVGZVb3FzYXNLOTMrK2hTUDdjVmVLU3Y2cDZUSmhJbzFncHMrVG1KVk5QQzF1S0d0a0t0eFdOdGFaLzZhcHRyV24vamxqdHRGbUROME05VWVxRHNVazNpQjBJTGNFQmZwSFVTcGUxZXptREJIWlFWdVBFNTRmcStjclRWaVJVNFo3OUNyTUN1ZXl2eEdLdTFsRmJndUhIUkN0d3lkNDU1anJRQ0svUnRtNS8vNkRkQlpEYks5eEpFQXFnQUpJaUI0VitQdWVtYnNuYmhvWUI4TE5lTGFaejZMMFJOUlBXZjlVVW9SZjFuZjFrSnMydUh2L2oxVXpYb2ZOL3VNUGdqM3ZyYnBQNExJelEwZUI1dCswMkQ5WmZLUDZJN0RDa1VKRlVwMkVINFJpZFc0SmlQWEE0cmNOcEtydXd4dEFLSGZhWmIrajV6Vm1DSENqRDQrMGNYQUx4aTh3c2U4MGFTZndSaEF3bEFnaGdnL3ZVUk45MjY2eWMvZlpvcTNnYUlXdFYvN3Flc1JDOHoxQkpTMExvc21LWGFmeWhXK3kvRkN1emFQNXowc2daLytOcHB1MTRTOUJvY0h2d1JTNlNrRTVyZFduOWpqV3hEcy82Uy9KdmMzTTh5dE1OOThuMUM0MS9DSThmUlNUMUFXb0dIYXdYMkhEUFZWdUFHa214S3JjRDJlUnFaZDhFbVVYM0twaGM4K24xODVoQUVWNFFFTVRONDF1ZnVzS0VXK1hzQTYvTWwvelpiWVgzSnYwM25Zdkx2NnEvYjRTYi9CcVRkZWduQVdEdHFUcnRyVHV1dnAvMkUvcmZPaFdhMmJNK0k5WGRsbjhYOXF0c1pEZFROVWszU0IwSUxjTVFjeTlna2l1ZnpYc1lLYkduSE1wZVNjSjkxWUFVMnRtWDZmVitzd0NQUEtPZCt5Ly91M0FwczdVOG1DMnZqL05BS0hEeVB2YmNDTzQrL3RsWTVhY3NMSC9OVnZna1NSQmlvQUNTSWdlTkR4MTUvUmdVY0NlREtsUy9MZG91cW03encvNDJhNnI5bWdzZDF2aUdxLy93dnkvSHFQeXU1YU9uUE1JTS9FRElYYWxWQzVpYUhhUDBkSnZpMzNzbGhNaFpjeWRIWDdPRWtWdVdhL1NtUnAyOTlTeGllaG9SZUZEcW1LeXV3eFlKTEszQjVLM0RiOGZLTmhUbDlCTWsvZ29nRENVQ0NtQUo4NkppZmZyMmVYL3N3QlQ3ZDl2aFZEN0dobnBmSE52V2ZiOGsrUzdYLzFQanFzbXFiVG80TXRML2x4ZGY1eTBvdVJ2WWgzM2hzN2R2VmY1YlgwanpXMy9UWGFGcC9od21TZjVOSFZ4WmMxZ01jSnpVU3IxRXdNZW02cHJFVzVUYWl5WG91TmQ1dkFhdXhRVmlCTGZaWURiajNRNjROcmNCWnRqZlAwemxydHRkSGJUMzFzVC9rczRVZzRrQUNrQ0NtQkdjZWVmVk4rTWxQVDF5c0M5aStrdklSUXQycC8zeGt4ZkRVZjdielNjQTQvS3ZSc0NBUXl5dGhUdlZmTEVFaEVkZTg2Ujd5OUg4UXdSK3hyN0JXcFdKcGdtaFMxbCtDNU4rUXdIcUFrd3ZmU0c5THNzNVBTeHM5STkwa2hIUnoxdFlMSmE5YWpwZUF1WmV3UG1kUjMxbXZuM1VjRWpPUEVZbzlLYng5MVcvYzk0d0svbjdUOWdOUC9ObHBqNzJGend5QzRPcVFJSWdWZVBybjcvUXNVWHhBZ1gzYWxITkRxLzIzc2g5OXJQM1h2czF4UGtQdHY3UzZnTDY2ZEdHMS81eXZPNXFyWGwrS29pNmdicUg2MnplM1ZicXZLMzRaMm43TUdQTFNDTEZteExMVzM5MGw3UW92anlaWEF6RHo4bzQxQURQTnVZVGRkeG5xOE0xc1BVQ05PWDlhRGIvaTlRQ3oxZEpyT2NaWmQyMThtMXByNEhuNzA5Wi80MzR4dFJLdGRRYXoxUU1NbkdOTFBVQ05HZXZLYmI3NVdMMWQycmEzOWlOdXU0eHZWd0YrNTdibm4vQVd2dUVSUkRxb0FDU0lLY1NIajc3dVF3bzlBcENyM0d2NDRhai9naXpLQWVURmRLbi9KSUJRQ2JmbjJsNVNjaDgzdWJaeTJaUnpxU3lSM2ZvN20rVGY5SU56TUZ6a3I4TTN1SHFBaG1QNmFBVzJmendUNmdGSzROeEtZUDI4N0ZaZzExY1RyY0N4OTlDTVdZRzNxZXB6U2Y0UlJENlFBQ1NJS2NXSGovbnAxK3NkY3c5VGtjKzRpSWN5dGY5OHJ5QVNWUHV2alJ4ZzdUOXg5Q0hIYTUvUjhob1YvT0VibTNzY1NVbTNQUS8rYVB5ZDVndEJTZXQveWpqUmkzTk9kOTAva24vOXhxelZBNHlZQzRuSkZlOEhjVmN1cUdURjlpS2ttL1U2MHdxY2ZIMmpyY0RXNndYRFBFN0FDZ3o3OWozekxEK3VSWTdlL0lMSC94dWZIUVNSRHlRQUNXS0s4WkhqZjN6ajNMWFhQa0VVYjh1ci9odGJBcmEySGFMK1cvbHp5REpyZHRSL0llRWU3V096MTZTejdOUEg0N3B2cXovQkh6a3BpS0dsL2hMRUVLRGgyek9RYjVPcEJ4aTVmV0tLdTlodnVaTHF4RWtuNTA3cW1DN09tUkRFMGRSV0wxS0JOZjYrS3BrS0xNSGJMOUo2MStGYlRuM2NWL2pNSUlpODRFcWJJR1lFVDczZ3JzOEU5TzhXNndLT2t4UGVlbjdtMm4vTmRRUkh5UTAxYmU5NzdiOXh3ckc3Mm4vdEZteGY3VDgxa0s0MlZaMFkxWDhsYS8rbHFQOXl6VU5UL3pQVzVkUFNmYlV0RWFiQitxc2pSMHhYRGNDQ1N6cldBTXcyLzJLKzExa1BjS2oxQURYaitKcC9aNms1Ti9LenRlWmRhSDI1NVdkUlNQMjlzYlZEU2gyN2xuK3JaejVpYWhQdTV1VTg4NmNoNDArckdaaFdEOUMzVDN0L3hOVGYyTzNWZjJ6ZSs5WVhZTU9Hclh4N0k0amlLeWVDSUtZWlQvL2NYUit5SVBwZkFPN1pSbVMxa21VTnhFa0lzZGE4UFNHZ1JHMXRyZXluaGFRYy96bEQyTWZvTmcwai9GekJIMjFqYlNkVk1oTjBYZ0l3UDRHV1JDUUdKZjhPTS9qRGJVR1BKNU0wOGpnN0NaTlQzZWtuZWFhTEFDeThuQ01CbU8wYUNCSnFjR3I2dlpGRi9hMjU3OUcraFc5NCtqc1JZaktTYUdvOVgzN1NUVU5JdDRtSG1rUVNrbDRTTUlDY3pVQUNTdWo4V09aRS9kc2w5bmozK1d0QWZtZnpxVTk0SzkvWUNLSWNhQUVtaUJuQ2g0Kzk1bi9YYk4vMnl3TDhaMGdOUHZVbXBqYTNwWjRGYkpqTnQxbjk1KytEWlNFZDgySWhuZFgrczc5aytGL0U0bXZlTlZ5UHFOcC9WbEl0VnorYmZzZ1h6TkhINEk5MGttUDZyTDl4eXFlaGdIL0xIU2E2cXNNM2pmVUFhUVcycnNMU2pobUtGVGgxYkROa0JaYlF6MG8zVm1DRmJxcFZmbzNrSDBGdzFVZ1FSS0czN1NkZGNKZFhpOGpiQVZsTDlWOGJFVUgxWDBuMW45TmFERVQwUGRiNjYrNjdkeDZRTmcrdDdXdmg5bzFMZzJtei91NDVVaHB6RFhNdWo4b3J5enBheGxFQm1PMWVGSVRtOUlxaHcrRnRoQ3NCYVFWTzYxTmFXODIvNjVNVmVIUzlTQ3N3cmNCbUsvRFZXdXRUdGp6L3BFdjRna1lRNVVFRklFSE1JZ1Q2c1dPdmZaY0NqMWJnYXVlT1ZQODFMbURLcXY5c2ZSeTYrcy8rMGp6Wk1KQjA2Njl2UHB0ZnJrUGJ6MEZPb0xBTnR5ajVFelR2L1BzbjBSZWtCbWxNcUEzSlBkYStLZTVpMjByUGlnKzZKc0dwd0ttS01mY3hrMDBGdHFUcFdoOHAvbmthZENvd2VwSUtMTGhBTUg4WXlUK0M2QTRrQUFsaWh2R3hZNjc1d3R3Ty9MSUNuMmhXcFBrSkM5OVMxN1k4Y3F2L2ZFdnM3cE4vcmVlTFRmNGRuK2VXcFhick5nMGlQbDM3cEIwWFJIcWhuV1JPc2hZcnZIT1laQzEyM3JmZGtaY2FmTytHM011bHFBOWFmK05CRW5OMmtKOThreUw5U0NVYSswSGM1YnhlM1ZxQis1cTIyMVUvVThjV1RoVFNDdXc2ajlzS0xLamZ2M25MblkvZmRPb0pQK1YzUEVGdzlVZ1FSTGZ2RnZLa0MrNythaFc4QThDYTNiWlpUL0x2eWtkNmRKcHZ3L2JWb1NSOVMvNk50QUpydDNiZi9pWC94bHBxRS9vNXRsUFhDY1dSODlDVDRJOXB0ZjVpaFdscHVCYmdqcGR2dEFCbnV5Y0ZLY1IwSDBKQnlsaVNUZHRwQlc3NUhhM0EvYlFDeTlnYUpQNzZUWlVWZUx0SzlmSXR6ejNwNy9rQ1JoRGRnd3BBZ2lDV0xNRlh2MHRVamxmZ0d1dUxrbm9XakgxUS83WDNQVmI5Sjg3enphTDZMeTd3SWxiOUY2aDRLNkwrS3hqOG9TSFhvbXp3UjluanloTXQwNnYrNDk5dXB4T2E0VmJRRHZyUmxTVTVycyswQXBlMEF0dVBtYXdWdU9INGlWaUJBL280TTFaZ3ZicXU1QmlTZndReE9aQUFKQWhpTno1MjdJOHVXTUN1WHdad3RwdndDS25uMTY3TXlsbjd6OStmSExYL01NVzEvL3hMMW1iMVgwbkNvcnM2ZjJuSHBiUWxBZlB2dXg5aWd6K0daUDBsK1VkTU03b24zOHBZZ1ZQSG1rYmNwWkdBWlJLR3A4TUtqTXpuN0t0bG1WYmc5dnN5eVFyOGVjemg4SzNQZWVLWCtWMVBFSk1EQ1VDQ0lGYmhrOGY4NVBxempyNzZDYXJ5UmdBTC9pV1VYMjFtcjU4blFZcWwyTkFSVVAxbjJLZGhIcUtzdis2eHRmZmJQZjloNmovSlM0SUM1dnQyR01FZnNaaUU5YmZidmhKRS85QkZQVUROMEEvTk84NUdNaUx4ZkJMM3paM25XeWpIK0t3cXVwWmpKSkEwczZyUGxyL3BnMVdKanJFMTl0OHpINDM5VDUyYm1EbUhYZUVYTWwrbWMxcm1NWThpVUIzM2pRRHYzN3psSjQvWi9Pd25YOGZ2Y0lLWUxMZ2lKZ2lpRlNlZGQvZEgxVlgxYndEdU1rcGFwTmJnODlmb1c3R3YrdmJkUXlyNDJob25JT3piMnR2c1IrMC9iWHpGNkxMMlg2d3FyVkJ0UG0yYmc3aSs1NTNQaHZhMWNQdkdaVUNNeGlic3RiNGY2ci9oMVFDYzRKS05OUUN6M1o5aU9sOFg5UUF0bjMzSk1QOHA5UUFkMjRyWEE0em9WNjQrT2RYMjR2ODVxUDRlN0RYdlZnM0Nmb3lHMU45cjdiK3JQNlhxR1JwckU2NDR2MlNyODJmZHIza2ZDYTd6WnptZmY3dU1QN2UyUWZIeXphYzg1Ui80VmtVUS9RQVZnQVJCdE9LczQ2NCtmMEhrTUJVOXYzbU5INS9BNnlPQlFreE1YYW4vVEhiZkNhci9NSEgxbi92YXFmbWwwMzF0VFB1cmZYejJsK01DQ2NVcmZwbFhCWm5GMkpjZHRQNmk2UGlKYVVFWDlRQUwxUExyeWdvY05TVURzZ0tEVnVCK25MTnJLN0JHZkk1U3JNQWF1Q3dLdGdKL1gzWGhrU1QvQ0tKZklBRklFSVFUWngvemcydjMvY21Qamdmd2g0RFU5aVZJT3hrVlJQUzFxUC9zeTZBOFpLQjFPYjlxVzRlMS8zem1qUEZ6dHUzZmRmMjhzT05NcEZlUjRJL212dWV5RnBldlA0Z0p0RDg2OXJJa0Zzay9ZcnJRUlpCR0YvVUFhUVYyZjZKcEJYWlBFSzNBOGVPQTRYcmx0d0l2NGYvTnJkMTUySlpUbnY1VmZwY1RCRmVWQkVFTUZJKy80SjRuaU9vL0tYQ24wUmY2Sml0cW0wcXZ5ZjdhdW04REFhZ0dDNncya2c0NXJNQnVxL0dxYmVxMlE3Zk5SZE40WEdOdEpsY3M1SlJSVGFZZFdYYk43YlM5UW8zYlo4cjFzNm45bk5iZmpPMGJILyt6WXYxZHVhWC9GbURweDFLTkZ1QnM5NmtnZHpwM3FoVzQ3WHNrcEEweFRPcFFyY0N1ODVlMkFpUEFva3dyTUszQTQvdE13QXE4UzFSK2IvTnpudm8yaUpRMkZSQUVFUUVxQUFtQ01PTlR4M3ovYk1pYVh3TGtZMkdLUGpkSjE3cnVwZnJQOUVLV1EvM1hQdTV5NnI4aWx0b2k2cisrQm4va1V3M1Mra3NRZlVRWFZtRExKNmQ3TldKNit5VVRlSDBUbU1zS1hHTCthQVVPUDRaVzRQYjdlOVhjL0ZTQUoyeCs3dFBlU3ZLUElQb0xybzRKZ29qQ0NaKzcxNm1BdmcvQSttR28vOXFQTFJJRU10UHFQNXNxTFd0QXlkaE9KZnZaZkYvWVh2Rm1ML2dqemZwcklaTGpqdXUvQXJBSDRSOHJCMElGWUpiUGh5QVBKUmMrRDJGdGFOVDQ4cXNSVGRzbW9yaEw3NU81WDBGOUNsV2JqZnhjVEVXMzlOd01VaVVhbFhldC9UY2NvN25uUmxid2R4a1VmdGxWZ0RIejZEdWZRQ0NmMHhyUDJuTEswNi9sR3hKQjlCdFVBQklFRVlXemo3M3FnMXJqY0FCZkRYc1JuNVQ2VDlJVzRNdUxWd3VKTXZQcVA4c0xkMDcxMy9nUHVXcnpUVWI5bHlsWXhIaTkrdnRuK2xuK0d5WC9Qa3VFZmFPbTN6NGhrVjZ4L1NqMGJkT0o0aTd3VzMraU5RcFhiQSt1dnhlb2dqUFgzMXZhWGV5ck9IZHRQVXNkTzhQMURLbG5HTmdYVFZZMHRwMVRnOGFoSmVwd3JsaUdDdlRkbXpmZDhGaVNmd1RCRlNaQkVET0F3NzV5MkpyYmIvN1o3d0Q2ZXdwVWJzWGVucThkbjJLdmpRQzB0YnQ2My9IOVl4UitybTFVLzgyTytpK2pPazhsd2FZc25uN2FIL3Y5VlArVnQvNzJWd0VvUmZxU1BCQXFBTFBjczVMdHZvaVpEOG53L2RDOUd0RzBUV1Arb0paRGNlZnBiL0VhaFNFcXdJWnRUZjlXb3lJdVJrVm5VZ0ZhKzVPbk5tRlFyY1FrRmFEcjJxUW9GZHYyV2YyemhLbzIvV085RVZxZHV1VTV2L1lKdmcwUnhIQkFBcEFnaUN4NDdBV0hQQWFLZndKd054OEpaeUxwTklUUTgyMHZiUGRkdVUyN0kveWFTS1U0d3FxRitHcDRlUXdocHNMSUtwbHc4RWRzUDV2dmg5WitydmpsdEFkLzlOWDZ1NXFJSVFGb0hnZ0p3Q3lmRTBrNlgvZGhISnFqSDdRQ0I4N3pORnVCVndhQ0JCd3pyVlpnYTlCSjBVQVE2enl1K3ZmRk9vOE5XemRzK0NIZmdBaGlXS0FGbUNDSUxQak1NVmVlcXp0d0tBUWZhbHJRK28wcW8rby8yOHVhQnI0d3g5bDlYZTM0WDFMODdjVGFmV09JQWt2b0JRemtuM1V1eXRtSWN4d1haaENUUE5aaUIvblg1VHpRK3N1eEUwTkQ5MkVjV2I1ZHNsdUI0MjIzdEFKUDJncTh0T3JKWmdWdU9YNG9WbUF4WHNQc1Z1RG9lMTlGOGU0dDh6aUc1QjlCY0tWSkVBUUJBRGorYy9jK0ZkQy9WTWkrZTVZTkllcS8wZTI1MUg5bHJNQXJsa1dOcnhwV0szRGIyQ3pibXNZNmVmVmZSNEVheWVxLzJINjJYMWRuK3d6K1NENWZqdFRmL2lrQXBXaGZrZ2RDQldDV2UxZVFLeHdtWlY3QzI2QVZPUEd6U2lzd3dxM0E0aGg3S1N0d3NqS3VjYzZueEFwOFBTbzhiOHN6bi9sSnZ1a1F4SEJCQlNCQkVObHh6ckhmKytDdXV2NGxCYjVnZWJscXEvM25lMUVMVi8rSitjVkNUZHVzWVIrdWJYMVQvMGxHOVYrK2wyYkxjVFp0aEFUdTc1b0RpL3B2eU1FZi9md2JvUTZvcitVL0I4VHNvUzloSEpyWWg5UnpoQ3J1a0xHdGpLcSsxaW5LMGFlY0tqckR0UWhSMFdHbEN0Q29OaFFZOWxQalBXZFJ6OFhNVGZPY2E3TGFOT0RmWXJ3WEErWkhGZWRpWWVlRFNmNFJ4UEJCQXBBZ2lDSTQvN2p2ZjcrdWYrNVJBdmxEUUJaR1Z4MzJWd2NKeWlac3IrL25YZ1ZwMUxhVko0c2xBNXZITnJuazMzU3lJa3hWRjZ0NkcvMGhwLzI0NUhHbDIrb0RQZEUxR1V3UXM0YnVDYnpwdGdMbm5EOWFnYTByTktCckszQitFak9rTCtXc3dHSGpDRXduM2dYQkgyNzk3cmNldCtXVVU1anlTeEJUQUs2MkNZSW9qc2VjZjkralZSWStxSkI3TG4vMU5DYjdlcE4vUjdmSEp2KzY3TC9kSlArTzl5OXVXM09mMi92Z2VnV3lxLys2VE5TMVdIOExwUW9IellHLzd3eitTRDluVHZWZmZ5ekFVdVJhWkFVdHdOaytNNEtjOVRlN0QrUFFIUGV2NXZ3TTBBcnNQemV0d1AyMEFqZWNRKzF0cFFhYkdLekFWMnF0ejlyNm5PZDhtVzh5QkRFOW9BS1FJSWppT1BkUjMvbjgrdlZiRHhYZ2JZRFVBUWFSSUEyQ1hmM25xdjBINDdieHhXaUkraS9ON210cnE2VDZMOGoyaWhUMVg3NFg3N0xIOVVFMTJCWFJVUUxka245REdqZEJ4Q08vQWkvOFR3cWwxWXEwQXZ2UFRTdXdkZVhZM0g5WDUxT3N3SkgzcUhXK3JOZWhlV255NFRXMUhrN3lqeUNtRDF4NUVnVFJLWTY3NEw2UFVlRHZvSHFQeGVYSUVxSGtVZit0MnJkeHV6Z0lRT3MyWTlqSDZMWW85WjlyRzlWL3cxTC94UVovTk45ei9uNWFIOThNL3ZDZGRiSUtRTWs2UDBWQkJXQzI2NVJYQVdnNWIzNEZua2FOWGJMMndieTl1T0xPMWJmQ2ZXcDhicmNkRTZrMmErMTNxSExRZjR5R0tPOU0vWGYxSjZOeVVNUG5UenBRK0ZuMmExQUJiZ0x3bWkzUGVzN2Y4WTJGSUtZVFZBQVNCTkVwemp2bU8rZnV0OCttQndMeU5vWFUxcGN5OVN4bVhmdHEwSXZNbnYzYVZYdmpDNzl3OVo4WUZ2MytseDZxL3daUTUwOUR5TVZDZlVDZnJiK3hmZWZmTUFsaUVnbzh5WEVPbWNRNHZFOTA1RlVVSXJDdHdENEZ6WWxHN0pkNnpCRFBxZUhIU0l4eTBYR09JRVZrcG5xRmkyckJMeS9JM0dFay93aGl1c0hWTTBFUUU4T3g1OS8zYUFqK1hoWDNvZnB2dkgrenFQNHp0VDBWNnIvWWZsb2YzZE9qL2l0Ri9rMVdBU2haNTZnNHFBRE1kcDN5S3dBanZ4TXlLUENTNndGbXFFbG8yaGFzdUV0cksyYzczZFVEbkxDS2JwVUtNT0FZTmZTNVdEM0RpTnFLUlZTQTF2MWFWWUM3VlBUUHR0Njg1ZmR3Mm1rNytYWkNFTk1ORW9BRVFVd1VoMzNscnZ1czM3VGZXd0M4Q2l2K2pxb0dVa3dieVljOFpPQW9DZU1LLytpSzhGTXZhUlVSVEFFckFaalFObXh0ajg1NWF6dmExazd6dFJ0L21iS1JsTjBHZjhUM1BlNUZQZCtTWUdqVzM5VkV6Q1FJUUNreVQwVkJBakRiZFNwREFGck9UeXV3Yi8vQldvR0QrcFJxQlU0TkVmRWZvNEVoSWtWSlRJMGRwMjMreWx1QnZlTzRDaUtuYkgzR2M3L0FOeEtDbUEyUUFDUUlvaGM0OXZ3SFBMWkcvUUVBUDkrOStpK1NES1Q2cjdXLzluWUMyNTVwOVY5Y3pUZzcyVEE3NnI4OVJFelhCS0FVbWFmaUlBR1k3VHFWSXdBdGZXQXFzTytZMlU0Rm5yU0tidW5aMjdQYWhKTkpCUTRnSUtPSnd1cWZ0MVpyWDQ0Tkd6YnhMWVFnWmdja0FBbUM2QTBlZnRGOTlsKzNyWHFIb25xSnJzb3ZjeE50YlVSZS85Vi9ybTFVL3pXMmsxbjlsNE80YkcySHdSL0o1OU5NL1d3bllrZ0FtZ2RDQWpETGRab3NBV2laTTFxQmM3V1ZzeDFhZ1QzL3BoWFl2cC9JVDZXV2wyeDUxaWtmNDVzSFFjd2VTQUFTQk5FN0hQbTUreit1VXZ3dGdKOXZVc1hsSmZ4R2Y1Njgrczg5cnFiK3QvZWg3WGU3ZjY5cGJUZU54ZDVPWU52SjZyK1NKR1hUUzIwc2tkalVma24xMzJ4WmYxY1RNVjBTZ0dYbnF5aElBR2E3VG1VSlFHcy84cEtBdEFKYiswWXJjSHNmdXJBQ3h4T1NKYTNBa210Y2FwclRUMVk3cXhkdE9lV1VhL20yUVJDekNSS0FCRUgwRWcrLzZENzd6MitiK3pPZ2VoRjIxd1lzcmY0Yi9abnF2MmxRLzVVa0xsdmJvZm92Nlh4ZHBQNTJTd0JLWWs4bkRCS0EyYTVUZVFMUTBoZkx2SlVtQVdrRkRtMXJPRmJnbHVPTFdvSExFNUlJSVNSeldvR3QxOFU5WDdlbzRyWGJudm44ZitBYkJrSE1Oa2dBRWdUUmF4ejV1ZnMvVGxUK1ZoMjFBWnZJQ0NzWm1LNytHOTJYNmorcS81Q2cvclAyMC84NHAvWFhRc1NRQURRUGhBUmdsdXZVRFFGbzZVOFA2d0gyMWdxY1J0eVY2Vk5hVzgyL0MxVUJvaU1yY0FCUjF4c1MwOWlYSWxiZ3NjL2wyVkxyUzdZKzY0VS80bHNGUVJBa0FBbUM2RDBPKzh3aEIrdzF2OWZiVlBCUzNmMjlGYWYrY3dXSWhLai85dnhNOVY5ajI3QzE3U0pKcVA2TFYvOHgrTU5LeEhSQkFFcUduazRZSkFDelhhZitFSUNXK2FNVk9MNGRWOS82YWdXT3NMc21LKy9jL2RHZTFTYnNMaERFTmMvbVB0NmlJcis1N2VUbi9UMUV1dm5hSVFpaTl5QUJTQkRFWVBDSXp4NzZTS24wL1FBZXFHYlNMSWJ3YzJ6THJ2NGIvVG1mK3ErTmdCaXUrcSswcXE2cytpL1AvTm9lNWJUK1dvbVkwZ1NnWk9ycGhFRUNNTnQxNm80QXRQU0pWbURmTWQxYWdjVnhjOUFLM0FkQzB0Ly9tTGxKc1FJMzEzSVVrVThyNWw2eWRjT3BQK1RiQTBFUVBWdFZFZ1JCMkhIWVZ3NWJzMjd6dHRmVmlqOEVzRzc4SmR1ZTlwdFgvVGY2Y3pyaDF3ZjFYOVA0dkcwanJlMnhkandFWUo1QWpVd0VuY1plSjJQN1VTL2crWllBMDJEOVhVM0VsQ1FBcFZOaXFTaElBR2E3VHQwU2dKWiswUXJzMnIvL1Z1QmNmZXJhQ3B3YUNPSTVwb2h5Y01YUEdqTk8yL3lsa0lBQ3VSWEE2N2VjL0lLL3BlcVBJSWllcmlvSmdpRENjY1I1aDk0SGdyOVJ5S1B6RW43ajIzYXY5YWorYzdZOTgrby9MVXd1R2gvalZQL1plMFFDMEh6aFNRQm11azc5SXdBdDgwZ3JjSTUyK3QyblVzbTNyclp6V29HN3JVM1luUlhZbnRZc2tNOG9kcjU0NjRiVHFQb2pDS0xQcTBxQ0lJam9sOUxxVjg3L3haZUs0SzBBRHNpbC9sdTl1SmFPMUgvdDI1cUpsMWhWR2RWL05xSm0wdW8vNitNNVJ2MDN1OEVmNDBSTUtRSlFBcTdIQUpacUpBQ3pYYWZ1Q1VCTDMyZ0Y5aDNUcVJWNFluM3FxWXB1bFFvdzRKaUpXb0VqQ01sSUZhQUF0d0lWVlg4RVFaaFFjUW9JZ2hnc0JQV1hqL3ZHWDgvUDczd2dJUCtwVWNUSU9QbWpqb1daSnIzczI5TDgxTG53akgvcDA1WVhLdlcrRk1mYXI4VHd3dTI0VGdiMVh4bmlSQXhrZ1RYNEk5YjZpNExqNngrbTY0MkZmMXNsaHZZSjB3eTNzSStPMGc2K0JUUjhXMDYrUkRTd1gzM3MwNHJ0MHJTdkdzOWxPRVpjZlJyL3Qwakk5VmZqZmF5Ry9ydSs2Z1BIYkh4MHFLdmQxZGZsWXpxbmgyN1o4TUwzay93akNJS3JWSUlnWmdxLzhya0hQUnFxN3dOd3Y5aTZnS3VYV3ZIcXY5SHpwS2ovNHRKNXg3L2lxZjZqK28vVzM5Vm5LS01BbEt5VUJoV0FBWE5EQldCaS8yZ0Z0bitlWjhRSzNDY1ZYU2RXNExEYWhKT3hBZ3NBWEtmQTZkdE9mc2tIdWZvbkNDSUVWQUFTQkRFMStQS3hYLy9zM05wOUh3S1ZQd1N3M2I5QWRta1VyUHFGWnZXZkJwRUM3bTF4TDR0ZHF2L0NYbmFHb1A1eno4dHNxZjlLVzM4bk9iYkprQ3dFTVFsb0IyMmtxZ0F0SDZrdWxJVEJUNndWL2RVTytsV3lULzFXMFlsWGxXaFZzNnFoLzRaakpPRGFpdUg4Sy83ZG9nSlVpUDd6L056YVEwbitFUVRCbFNwQkVNUVNIbnJlb2ZlcHBQcExRZlc0cUxUZlpQV2ZhMXVLK3EvcGQxVC9CYlh0bVZ2LzY5V2sxWDhNL3NpMUFNcXJBTXhDZC9SenFVWUZZTGJyTkRrRm9MV2YrUlY0czVjS0xJNkxQSVJVWUh2d1JPdS9rNVNEL21NME1FUWtMTkFrWUp3ajY1V3djUWFxQUFYZlU1R1hiWHY2UzgvaEtwOGdpQUd2S2dtQ0lNcmhZZWMvNklrS2VSK0F1OXVUZ0VmSUc1Vk9DTC9tMU40WVlxbmhCYXhZOG05WUgvdVQvR3ZwbzZGdExaZ3FiSHgwbDFRTlRsdnd4emdSUXdMUWZLRklBR2E1VHYwbkFDM3pPblFyY0JwSjFta2d5TVQ2WkNIUUd2WnJQTmVrcmNEbENjbWdWT053RW5BWGdQZHQzYnIzYitQVVV6ZHpaVThReE1CWGxRUkJFR1h4eStmOTh1M1dDUDVVZ2ROMGQrbURHUFhmNkw1VS8xSDlsNUdrcGZvUHd5VUFKV0NNQTF5cWtRRE1kcDBtVHdCYSt0ckRWT0FNZlRCdE01SmsvVWdGTHQybkxsS0I0NVYzR2xKL0x5dUptU0hWV00zemQzR3Q4cElkRzA3N1A2N21DWUtZa2xVbFFSQkVOM2pvWng5Nm1GUUw3d1hrRVNIcXZ6MC94eEIrcm0xdW9pb3JzVFR5MTIrcS8yWkovVWZ5cjUySXlVRUFTdUE0QjdoVUl3R1k3VHIxZ3dDMDlKZFdZTmYrYVdTYnExOTk2bE9pM2JWd2lJajJqSkRNR1FpaWtKdWgrSjN0bC8za3I3RnhZODBWUEVFUVhUMzlDWUlncGdzS09meUNoNXl5b0hpN0FIZmF2WkJjdWFnY1dhQ1ZVUCtOL214Vi96WDFwKzEzdTl2Tm92NXJhUnRwYlkrMU15ajFYeGhKbVp2OHN4TVhYUktBL2JmK3JpWmlTQUNhTHhnSndDelhhVGdFb0dWK2FRWDJ0a1Vyc0grZmxUOUhxUUFEanVsVHFuRmIyMUtkT1RjLzk2ck5UMzdKZFZ5MEV3UXhpYWMvUVJERTFPSFE4dzdkZHgzVy9SWUViMUpnN2FvRjVjaml6QnIrUWZVZjFYOVUvdzFEL2JlSGlFa2xBQ1ZpckFOY3FwRUF6SGFkK2tNQVd2cWNYNEUzVFZaZ3pkaFd2L3VVRUtneGRxNHVBa0U4eC9SRk9UamU3bmUwcWw2NS9Xa3Yrd3hYNlFSQlRPckpUeEFFTWRVNC9MT0gzMjlocm40WEZDZXNJb0t5cS85R2Z4NkcrcStwNzgxOWptMmI2cisrcWYrbU9maGpuSWhKSVFCanljNEJMdFZJQUdhN1R2MGlBQzM5bmdZcmNPVDJpYWtBKzlhblVzbTNyclp6V29HN0pTUWpyTUJib0hqSHR2VUxiOEdKcjk3T2xUbEJFSk44NmhNRVFjd0VIbnIrUTUrb2tQY29jSStWQzc0YzZyL0ZuNGVpL2d0bzI5aE9uOVIvV2RyV1FnUm93T09hNnI4OEN5QVNnT2FiZ2dSZ3B1czBlQUt3Y2NLbTFBcHNySmZYajBDUTBuM3FRa1UzdWlib3dnbzgyVlJqMGVvc2xmcVYyNTcreWg5d0pVNFFSQitlK2dSQkVET0RCNTM5b1BYVjJ2azNRYXJYUWJHM24vQnIzcmI0OHhEVWYrNjJtL3JlM09lbXRtZFAvWmZMV20xNVZBOVIvZGNuOG04UEVSTkxBTWFxSFFlNlZDTUJtTzA2OVk4QWpMamZlMmtGN25rZ2lMR3QvdmFwNGVkTzYrLzVqOUZBNVdDWWlqRmduQ05ybXBiOXZxZUtWMi8vdFZkK2dxdHZnaUQ2OU1RbkNJS1lPVHprM0lmY0E5WGMyMnBnQXlDeWVqR2RTdmkxYjJ2Nk9aLzZiM0UvemRWMllqdk42ci9NNDNlT1BiSnRqZTFqMHh6TXV2cHZza3VRZUFKUUF1WnpTcFpxSkFDelhhZGhFb0NXdVU1VkFZYTNRU3R3MTMzcXA0cHU5ek8rWjRSa1MvKzNRT1Z0MitvZDc4Q0cxMjNsaXBzZ2lENCs4UW1DSUdZU0R6NzM4Ri9CblB3NUZFZkdCbnlVVlA4MXRiLzdkMXFxYmFyL3FQNExQMWZmMUg5N2lCZ1NnT2FCa0FETWNwMzZTUUJhK3Q4SEszRCtQcGkyRGNvSzdKcmpvVmlCNDVWM2VRSkJYUDJKdHpLTDZsazZWNzlxMjFOZiszMnVzQW1DNk92VG5pQUlZcmFoa0YvKzNLLzhXcTE0QjVicUE1WWdBNWUva3NNVmVrMExmcXIvM0dPUGJMdHo5VjkzNUorOVQzSG42cHY2Ync4UkUwb0FTdUNjVHNsU2pRUmd0dXZVWHdMUU1nWmFnVjM3cDVGdEVkODdFK25UcEszQXFZRWcxcmJ6V1lFVjhyOVM0emUybmZ6cXozTlJUUkRFcEZGeENnaUNJSnhyWDczMFVWOCtjODJtaFFjcThFWUFtOGJmUFNTWTlOQnNMNkZONnIrR1FXUjVlYldNVXlMSEUzWitiWDJSTDVsZ2E3M09vNytYRE5lNXI5YmZYUDBleHBjQlFjdzIxUE9SME9udGcyVDZwaGNkZUo4MFlqL3Q3SGlSd0dNazhKd1MxT2NidGNKcnRpL2MrV0VrL3dpQzRHcVdJQWhpZ0RqME00ZjlmRFUzLzFZSW5ybG4yVnhDL2RmME82ci9ZdnBJOVovbFZhdU0rcStQMXQrVnZRaFRBTWJZcXFka3FhWkxiOVlLS2dBVHIxTy9GWUNXY1ZqbXZHTXJjSVkrbUxZRksrN1MydXAzbnhJQ05jYk8xVVVnaU9lWXZNckJuUXA1ei9aZGUvMFJOcHgyQzFmT0JFRU02U2xQRUFSQk5PQVh6L3VWd3dGNU95REhyVjVrKzhsQXk4L1JCRmloMm4vNUNNb1Z2OU80UHM1aTdUOEdmNVJaQU5rSndOaTVuWktsR2duQWJOZXAvd1NnWlN6NXd6aTBCMzB3YldjZ1NNUHZ6TW0zTGVkS0RRUVozNmFUSWlRRjU5UUwrcG9kdi9hNnk3aFNKZ2hpaUU5NGdpQUl3b0ZmUE8rSWt5RDZObFU4RUIyRmYrUlEvN25ienFYK2M3VGRrZnF2clIycS8wTDZFM2V1UHF2L2xudENBakJnSUNRQXMxeW42U0FBTFhOZldnV1l2dyttYllNS0JDbmRweUVFZ2dRY2t4WUk4ZzBWbkw3OXFhLzlKRmZHQkVIMEdhd0JTQkFFa1lCdkhQZWxzNzV4L2tXL0JKWG5BYmkyZWRFdGdTK2ZZbmdwdGIwY2hWWUlDamxYeWJadEx6RHd6bkYzdFEvOTQrOWo3Yi8ra1Fyc04wRk1IdDNYOHBNZTlNRzByZU1hZnYzdjA0cnRuZGZmY3g4akVuTDkyL3J2UGY0R0ZieG0yNEczUElUa0gwRVFYTlVTQkVITUVBNzcrR0g3Yk50MzNhdFU5TGVoc3YrZUplSzBxZi9DMjE3VkR0Vi9RWTlscXYvS0xZRDhDc0MwUGxNQjJQRXlsZ3JBamw4VFNxc0F1KytEZVR1dHdBMi9TMWJSK1k4eHF3Q1gxaW5sRW9xM1FQR2ViWHV0K1ZPYytPcGJ1UUltQ0dKYW51d0VRUkJFSUE0OTcyRjNWc3ovQVNBdlZtQStwQlpnRWdFMnNuRE5WWjh1amx4ajdUL0wzTWE5RU9kNWxKY0svbWp1ZC8rV0d5UUFBd2RDQWpETGRacHFBckJ4TWpzT0JNblFCOU0ySTBuV0R5dHc2VDUxSFFoaWJidElJTWdDSVA5WVZidCtmOHVUMzNBTlY3d0VRUXdOSkFBSmdpQUs0ZjduUGVLZWxWUnZVcFVYQVpqVGhnVmxEaUlwaC9yUDJUWnl0TjJsK3ErOWoxVC9oZlFuN2x4RFVQOHQ5OGhOQUtiM21RUmd4OHRZRW9BVGVGVklWZUMxUFlzbTJ3ZlR0dUtLTzFlLyt0U254RUNRTU9YZEpBTkJ6cGxEL2ZyTlR6MzlVcTV3Q1lJWUtrZ0FFZ1JCRk1ZRFAzZkVRMVNyUDFHVkUwZS9nc05KcXFhWEpUc0IySTIxbHVvL2I5dFJMOEg1SHVPenJ2NWI3bFU3QVppblJESUp3STZYc1NRQUovU3FNS09CSUV2UENkOHhuYW9BSjlhbkxnSkJSdGNTM1FTQ2lPTHJ0ZWpydHovMTlFOXpSVXNReE5CQkFwQWdDS0lqM1AvOEk0K0FWbjhLNEZHTDY5ZDBCWncyTHRJektnc2Iya2xTdjJsYjIxVC94WkVTVlArbExJQklBQVlNaEFSZ2x1czBQQUxRTWpiTGRlallDcHloRDZadHVjZzJZMXY5N1ZQRHo4V3R3QUcyWGpSWmdUM0hLMzRBNEUrMzdiem4zMkhEaGdXdVlnbUNtQWFRQUNRSWd1Z1lEemp2cU9OVjVHMnFlT2pvVnpMVmY0WjJuUDJtK3M5UGRwUlIvdzJKL0Z2dVdUTUJLTm42VFFLdzQyVXNDY0FKdmpMa1YrQnBEL3BnMnM1QWtJYmZEVGdRUkhDOUtQNXM2OXE5L3dJbnZubzdWNjBFUVV3VFNBQVNCRUZNNW9WYTd2ZTVvMzROa0QrQjRyNnpwUDdMYW4wMjlwSHF2NUQreEoxcktOYmZsYjBqQVJnd0VCS0FXYTdUekJDQWpSTTdhNEVnYmMrSm1MWmtJSDNxd2dwY0xCRGtKb0c4ZmV1T05lL0dodGR0NVVLVklJaHBCQWxBZ2lDSUNlSlI1ejFxL2xyVXp3UHd1d0R1R1Z6L0xqSDhJNGY2cjYyZGVQVmZZTnNJYVp2cXZ4SkxoYUdwLzVaN04wNEFTdGEra3dEc2VCbExBbkRDcncwTUJISHRQM3VCSUVzL2x3d0VHZXRmVkNESUppaitZdHRPdkJNYjNuZ0xWNllFUVV3elNBQVNCRUgwQUlkOTViQTF0OTI2L2xrUS9YMUE3bTBtNlVZV3lubElLZ3NCTmh6MVgxczdWUC9sV3lvTVRmMjMzTVBWQktCazd6OEp3STZYc1NRQWUvRGF3RUFRMXpFTUJJSC9PN2U3UUpBZEVQemozUHpjSDJ6KzFkTi93cFVvUVJDekFCS0FCRUVRUGNLaFp4eTZkc2NkN3ZCQ2dmNDJnSitiTHZWZmdiWmJ4OTdVTnRWL0paWUpRMVQvTGZlUUJHREFRRWdBWnJsT3d5WUFMZU5rSUlocmY4M1lWcGsrelVRZ3lFNVYvQ01XNmpkdmUvcnYvb0FyVDRJZ1pna2tBQW1DSUhxSVE4ODRkTzNPZ3c5K3ZncCtENUM3ajcrdzlsMzl0K0ozbXJ2dEx0Vi9PZnZvZndSVC9kZnRBbWdQQVNoRnhrQUNzT05sTEFuQW5ydytNQkRFdGY5c0I0STBiR3Y2ZDVsQWtKMVEvZmRhNXY1bys1UGZkQVZYbWdSQnpDSklBQklFUWZRWWkwVGdIWit2b3I4UDRHNjcxN21KNFIrZGtXdVoxWDl0N1ZEOTV5TTRxUDVyNmlVSndJQ0JrQURNY3AxbWtnQnNuT1FwdFFJekVLVGxkeE1OQk5rSkJZay9naUFJa0FBa0NJSVlCTzcreFNQMjNudjd1cGNDK0MyRjNOMXEvODFCcnJXMWswUDkxOVlPMVgvNUh0dFUvN1dQYnBFQWxDenpiSnVmZ1M3VlNBQm11MDdUUVFCYXhzdEFFTmYrTnR1dE9HNFdCb0kwL25zMWFiaFRnSCt1NStiZXZPMmtOMTNKbFNSQkVBUUpRSUlnaUVIaDBETk9YcnZ0NEJ1ZUtjRHZBTGp2OGxkNURwVmFkZ0pzVU9xL0F1Um4wb3R0dmtjMjFYL3RJOVRDeXlNU2dCMHZZMGtBOXV3VmdvRWdybU1ZQ09MWXIvRmM1a0NRR3NDSDZ3cS9zLzJKdi9kZHJod0pnaUNHdUZJbkNJSWdkdU5SNXoxcS91cTZlaGFBTjBId0FLci9iTzFRL1pkdmVUQms5ZDl5YjBrQUJneUVCR0NXNnpROUJLQmx6QXdFY2UwL0c0RWdvNzhyR0FnaTJDa3EvN0t3Z0RkdmYrcnZmWThyUllJZ2lGNnVLZ21DSUlob2JOeFkzZWZvQzM1Vksvd2VGQTliK2RVK1VmWGZpcDJvL2d0OW9jMzN1S2I2enoxS0VvQUJBeUVCbU9VNlRSY0JhQmwzYVJWZzkzMHdiMmNnU01QdmlnU0NiQWR3UnEzNlI5dWZ2SkUxL2dpQ0lQcTlxaVFJZ2lCeTRKRHpqajllb0g4RXhSR3JGL0ZVLzdXT24rcS80UE5NQS9tMzNHTVNnQUVESVFHWTVUck5QQUhZT09FZHF3QXo5TUcwallFZ0xiL0xGZ2l5Q2NEZmkrSnRXNTY4OFJxdUFnbUNJQWF4cWlRSWdpQnk0dDduUHZyUldza2JvWGlzVGFWbVNiK05VLzlOTnB6RTBEYlZmOEhuR3JyMWQyV3ZTUUFHRElRRVlKYnJOSDBFb0dYc0RBUng3WjgvZktPUGZjb2FDSEtEaXJ4cnIxMTQ3ODFQM1hnelYzMEVRUkNEV2xVU0JFRVFKWEN2Y3g3em9LcVMzMUxnbVFEVzVDRFg5dncrdi9yUDFEWXl0azMxWC9CNXBrWDl0OXhyRW9BQkF5RUJtT1U2elNZQmFMbFdEQVR4dGpYemdTRFZkVUQ5NTF2WGJYa3ZUbmpuWnE3eUNJSWdCcm1xSkFpQ0lFcmludWM5L3A2aUM2OEY5RVdBckI5LytjMU1ybmtJd0R6a21sRDk1eVEwcVA2empKWUVZTUJBU0FCbXVVN1RTUUJheGs4Vm9Hdi9NdUViZmV0VHRBcnd1d0o5KzVhdGN4L0VobzA3dUtvakNJSVk5S3FTSUFpQzZBTDMrY1FUOXQrMTk2NFhpT0owQUhkZFhPQm5UdGJWbGU5V21aV0ZyZjFyYXB2cXY5ekxnZWxRLzhtcXU0RUVZTUJBU0FCbXVVNnpTd0JhcmhjRFFYSzAwKzgrQlFXQ1hLTEF1N2R0L2RhL1lzT1pDMXpGRVFSQlRNV3FraUFJZ3VnUzkvbkVFOVl0N0xYekdZQzhTU0gzYjNvc2xBci9HS3I2cjYwZHF2K0d1T3doQVJnMUVCS0FXYTdUOUJLQWxqbXdYSzlaQ3dSeGpXZFNnU0NsKytTMEF0Y0FQb0ZhM3JyMXlYLzhCYTdZQ0lJZ3VuMVNFd1JCRU5PS2pSdXJleHp6cGFlSzZHOHVKd2Nua1hTWjFYOXQ3ZVNvS3dndFNWRDZIN1ZVLzAxeXlVTUNNR29nSkFDelhLZnBKZ0F0ODVCZmdjZEFFRXUvK2hvSXNudjlzQVdDZjZ3WDF2ejU5aWR2dklJTE5JSWdpTWs4cFFtQ0lJZ1p3RDNPUGVHaEVMeEdnR2Nxc0diME1aRkQvZGZXVGc3MW43dHRxdjlTenpVOTZyL1ZWNDRFWU1CQVNBQm11VTRrQVBNcjhBWVRDR0lreWJvTkJCSEhEZG1KRmZoNjBlcDljNWgvNzIxUDNIZ0RWMk1FUVJDVGZVb1RCRUVRTTRTN24zdlMzU3JaOFFxQnZCU1EyNDh2L2gwa25UYjhic1V4MDZmK2kzdEpwUHB2MHNzZEVvQlJBeUVCbU9VNlRUOEJHUEc5eUVBUXpGb2dpRUMrQ2NpN3RxeGY4MEVjdDNFYlYxOEVRUkQ5ZUVJVEJFRVFNNGo3Zk9JSjYzYnNoV2NJOEhwQWY5R3JnSnQ2OVoraDdhaVgxSHlQWnFyL3JPTWtBUmcxRUJLQVdhNFRDVURydFp0U0ZTQXd3VUNRaWZlcEZ1Q3owT3JkVzA1NjgxbU55d1dDSUFoaTRrOW9naUFJWW9ieDgrYzkvaWdBcjRiSzA0QTliLzlONnI4c0FSMG9xZjRyMkhiVVMycWVSelBWZnlIakpBRVlOUkFTZ0ZtdTAyd1FnSmI1R0lJS01LSU55N1pnc2kydHJaenRSSktBdDBEeFR6cVBQOS8yaExkK242c3FnaUNJL2o2ZENZSWdDQUlBY0svUFB2NStOYXBYSy9RVUJmWkRvZkNQWm5JdEEwbW5lWlNGemVPTWVUbk45MWltK2k5a2pDUUFvd1pDQWpETGRTSUJHSEw5VWxXQTRXM2tWUUU2dGs5TUJkaGhueFQvcTRMM2J0dXkvVVBZOE9kYnVZb2lDSUlZeHRPWklBaUNJSGJqZmhjK2FiK3RPM1krU3lFdkIvQmduLzAzRDdtV1FWa1lhUCtsK204YWxnMGtBTE1OaEFSZ2x1czBPd1NnWlU3eUsvQ1NWWUNOamN4SUlFaWVQaTBBOGtsVnZHdmJTVzg5aHlzbWdpQ0lZVDJaQ1lJZ0NLSVZQLy9aWHoyc3J1dVhpc2lwQ3RtcjZSRkQ5WitWWktENnI1c2xEZ25BcUlHUUFNeHluVWdBaGw3REhFRkxVeDRJb2pHMUNMUDM2YWNRL1Fjc3lQdTJQdkZ0UCtUcWlDQUlZcmhQWm9JZ0NJSnc0bDduUE9sT08yWGgrUXE4VElCN3JuekVsQXIvb1BxUDZyKzRjWklBakJvSUNjQXMxMm0yQ0VETHZQUkJCV2pwQndOQld2cDBpV2oxL2kxYnR2OHpiYjRFUVJERGZ5b1RCRUVRaEIxbm5EejNjd2R0ZTJJdDljc0Zjcnl1ZXM1TUx2eERsZXEva0hOTnIvcHY5UjFDQWpCZ0lDUUFzMXluMlNNQUxYTkRGYUJyZjdXZW83dEFrRnRxNEVOVnJYKzc1WW52K0NvWFBnUkJFTlB6UkNZSWdpQ0lLTnp0bkJQdkt5SXZVY2lwZ054eC9HVW1YdjNYMWs0TzlWOWJPOU9oL3ZPZmE3clZmNnV2SkFuQWdJR1FBTXh5blVnQUdyZG5Ed1NoQ2pCb1czTmJYeERnQTV2cjlXZmdpUnUzY0pWREVBUXhmVTlrZ2lBSWdrakRHU2ZQM2ZXZ0hjZUoxQzhGOEZRRjVydFUvMEZMaHBQNEg2dFUvL1Z0YVVNQ01Hb2dKQUN6WEtmWkpBQXQ4NU5mZ1RkTktzRHg3blFXQ0hJekJHZUk2Rjl1ZnNJN3Y4NEZEVUVReEhRL2pRbUNJQWdpRys1KzdrbDNxeUhQQmVSbDJGMHIwQnIrUWZYZm5uYXAvb3VmVHhLQVVRTWhBWmpsT3BFQUROZytkU3BBeC9aK0JZTFVBTDZFdXZyZ2xpMDdXZHVQSUFoaWhwN0dCRUVRQkpFZkd6ZFdkejNxZng4TjBaY0NlSXBDMWpROW9rcUZmMlJSRmhvZXFjTVAvNWcyOG0vMTFTUUJHREFRRW9CWnJ0UHNFb0FSMzZHOVZBSEdQUXU4MjR6RVhXRVY0TFVLZkxDRy9PMzJFOS94UFM1VUNJSWdadTlKVEJBRVFSQkZjWWZ6VHJ6ei9NTDhNeUR5WWdDL3VQeDRTaWJwdEdCZHdhZ1h6enlQWWFyL1V1ZVRCR0RVUUVnQVpybE9KQUJUcjJtcUNqQzhqU2xYQWRaUWZGYXI2djFiNzNETGYrUHc5Ky9rcW9RZ0NHSzJuOFFFUVJBRTBRWEpJSGM1OThsSFFYQ3FRRTZ1Z1FOR0gxYzUxSDl0N1ZEOU4vUWxncGhuY0hsdkVvQUJBeUVCbU9VNnpUWUJHUEZkMmdjVllGUS9lcThDL0xwQS8xbm41Lzl0eStQZWZnMFhJQVJCRUh3S0V3UkJFTVJFY0o5UFBHSGRiZXZXUGs0Z3B3QjRDcFlzd2wyci94Wi9UL1hmZEMxcFNBQkdEWVFFWUpiclJBSndWbFNBdm4wS3F3Q2IyL3F4S0Q2c0toL2NjdEtmWGNLVkJrRVFCSi9DQkVFUUJORXJISHpCMCs0eXQ2UGVJQ0tuS3ZEUTVwZWhTYXIvckMrYzZZOWdxdjl5ekNVSndLaUJrQURNY3AxSUFGcm1hb1pWZ0VCdUsvQldBYzVTNkQ5djJmdUFUK0s0amJ1NHFpQUlndUFUbUNBSWdpQjZqenQvOXVtSHF1SVVRSjhINE01N1hvUms3TVduNllXdkMvV2ZqVkRvai9vdjd1VjR5TXNaRW9CUkF5RUJtT1U2a1FDMHpsWCtPbno1QTBINm9nSWNhMnNCd0htaThzK2I1Nm9QNDRSM2J1YnFnU0FJZ2hqaUNwOGdDSUlnZ1BNZU5YK25oUU1mWDRzOFJ5QlBCTEIrNVp0UmlQcHZ6KytwL2h2bTBrQ0NaM0w1S0JLQUFRTWhBWmpsT3BFQXRNNVgvalRldU8rNmtvRWcyVldBWDFiVmY1bkR3cjl2T3ZFOTEvTWVJd2lDSUlhK3lpY0lnaUNJVmJqVDJhZXN4L3lXSnlua21ZQ2VBTVc2SmdJd1BGVzRQK28vZTMvQ3owVUNzTnp5aUFSZ3g5ZWVCT0NVZlc2cEF2VHRyOENWVVB6cmdsYi9zdjFYLzcvdjhMNGlDSUlnZXI2cUpBaUNJSWc4dU4xNVQ3bmQybDN6VDFMQnlRQk9BTEJtK1hFWFl2K2RYZlhmMEpZR01YMGxBUmcxRUJLQVdhNFRDY0NRT1pzRkZhQmplenNKK0FOQVBscWhQdk8yeDcvckM0MS8zeUlJZ2lDSWdhL3lDWUlnQ01LTXU1M3oxTnZ2MUxsZnJVVk9FZUF4dXVxWmx5UDhJMGI5Ri9mb3Bmb3Y1ektHQkdEVVFFZ0FacmxPSkFCRDUyd0lLc0M0Zm5pM3JTWUF2dy9nWXhWQTBvOGdDSUlZOHFxU0lBaUNJTXJpZHVjKzdSNXpXajFESU04RTVDSGo3M0hwOWwrcS80YXloQ0VCR0RVUUVvQlpyaE1Kd05CNW0ya1Y0SGNFT0ZNWHF2L2MvS3QvY1NudkZZSWdDR0lLVnBVRVFSQUUwUjF1ZCs3VDdyRkc1NTZpSWllcjRzaEZabVAwdlk3aEg5TzdoQ0VCR0RVUUVvQlpyaE1Kd0poNXkxK0hyOGNxd0tzZzh2R3F4cG0zUGVGZEYvTCtJQWlDSVBxd2VpWUlnaUNJd2VQT256ajVEanZYVkUvQWlwcUJ3MWYvK2M4MXUrcS9QYU1uQVJnNEVCS0FXYTRUQ2NDWXVadHVGYUNvWHFtVm5GWFZGVWsvZ2lBSW9yY3JhSUlnQ0lLWUd0ejVFeWZmWWNjYWVRcEVuZzdJY1FEV3hyOU01bm5rVXYxWFl2bENBakJxSUNRQXMxd25Fb0N4Y3pkVktzQUZWVndrZ28vTDNOekhOajMyTHk3blBVQVFCRUgwZlFWTkVBUkJFRk9KMjUzMy9OdFY5ZGJIYWkxUEZNRlRBZXpyZW5UNlgraXAvdXZQMG9VRVlOUkFTQUJtdVU0a0FHUG5iL0Fxd0MwQVBxdUNqMFBuUDc3bDhYOXhMYTg1UVJBRU1iUlZORUVRQkVGTU5lNyt4WlAzM3JwRkhxbW9uZ2pnNllEY0xadzhvUHF2UDBzWEVvQlJBeUVCbU9VNmtRQk1tYjhlcWdDZC9kRHZpOHFuNjByTzJyS0FUK1BFOTJ6bmRTWUlnaUNHdklvbUNJSWdpSm5DUVo5OTFxR3FjcEtnZmlKVWpsVFRzN1FmQkNEVmYzdG1nUVJnNEVCSUFHYTVUaVFBVSthdzl5ckFHcEQvRmNWWmRWVjlmTXZqM3YxVkNDODNRUkFFTVYwcmFZSWdDSUtZU2V4NzlpbDNuSzhXSGkraUp3RjRBbFpaaGVNZnRWVC9sVnkya0FDTUdnZ0p3Q3pYaVFSZzZoejJUZ1c0YU8yRmZCeTY0K05iSHY5K1duc0pnaUNJcVY1SkV3UkJFTVRNNDA1bm43SisrOXl1eHdKNkVpQW5DWENuMkVjdENjQ1NTeFlTZ0ZFRElRR1k1VHFSQUV5ZHh5NVVnTTQyYWdCZkJlUXpvdnFaVGJmZThRdllzSEVIcnh0QkVBUXhTNnRwZ2lBSWdpQlc0SUJ6bm4ySUFFOEVjSklBUndOWVp6bXVPL0p2YU1zQUVvQVRBd25BYk5lSkJHQ09lZXhjQmZnVFFENnZxTStCTGxEbFJ4QUVRVXoxVTVZZ0NJSWdpQVRjOWVNdjNXZjczcHVPcklIakJUaGVnY1BhOXFYNnIvUnloUVJnMUVCSUFHYTVUaVFBYzh4bGNSWGdaZ0JmZ3VJY0ZaeXo1WVMvdW9UWGhDQUlncGlGSnl4QkVBUkJFSmx4OEtlZWU1ZGRjL1ZqUlhBU2dPTUJITGo0RWhyN1dHYjRoeDBrQUtNR1FnSXd5M1VpQVpockxyT3FBQmNFdUxRV25JTWE1MnkrOVlZTHNPRk0ybm9KZ2lDSW1YekNFZ1JCRUFSUkN1YzlhdjdBWFhkNWhGUnl3b0xLWXdSNEdJRDVuSTl5cXYvR1o0TUVZT0JBU0FCbXVVNGtBSFBOWjVJS1VDRzRIQ3FmUXkzbnpPKzE5ck0zSC9jWE4zUE9DWUlnaUZsL3VoSUVRUkFFMFNIdWRQWXA2N2ZOTFJ3aFdoMEYwVWNDT0JiQW10aEhPZFYvelROQ0FqQndJQ1FBczF3bkVvQTU1OU9zQWx5QTROdFF2VkFWWDZqcmhjOXVQZkVEVjNPT0NZSWdDRDVkQ1lJZ0NJTG9EZTV3M3NuNzdsaFk4NGdLMWZFcWVoUVVEOGR1aFNEVmYrRWdBUmcxRUJLQVdhNFRDY0NjYzlwNi9YY0o4RFdGZkFFaUYxYjFqbk52ZmZ6ZjNjVDVKQWlDSVBoa0pRaUNJQWhpTURqNHdoZnV0M1BidG9kWHFJNVh5UEdBUGdSQTFiWS9DY0RtR1NFQkdEZ1FFb0JacmhNSndOeHpLZ0N3VTRDdjE4QTVsZUlMODVWZThMUEh2djhXemg5QkVBUkJEUGN0Z0NBSWdpQ0lFZXgzM3JNT250dTE1cEdDK2lnVkhJbkZoT0YxQU1tL1pwQUFqQm9JQ2NBczE0a0VZSlo1dlZHZ0YwTnhJV1R1Z3R0dXZ2Ri9HTnBCRUFSQkVJTllWUklFUVJBRWtRM25QV3IrQUwzcmc2V3VqbEpndVliZ0hZZjMyQ2NCMkp0clJnSXcyM1VpQVJnOHI3c0FmQWVDQ3hYeUJWbW9MOWwwd3Q5K0U4SnBKQWlDSUlnQnJpb0pnaUFJZ2lpSmd6Lzl6THZ1bkZ2elNGRXNrNEpPMi9CMEwwOUlBRVlOaEFSZ2x1dEVBdENMYTFWd1NhVzRFQ0pmdUczOStrdHc1Sjl2NWJRUUJFRVF4RlNzS2dtQ0lBaUM2Qkw3ZitwRkIrbjh6aVBuUkIrdWlzTUJQQXpBN1dkamVVSUNNR29nSkFDelhDY1NnS3Z3TTFHOVdFVytYRU12bmx0VGZmbTI0OTUvQTZlRklBaUNJSWEzd2lZSWdpQUlZaUE0NEp4bkh3TE1Qd3lLdzFIcHc2QjRLSUQ5cG05NVFnSXdhaUFrQUxOY3A5a2xBUFZHQUpjS2NHa05YRnBWOHVYYkh2TzMzNldWbHlBSWdpQ21ZNFZORUFSQkVNU0FjY0E1eno1RXREb0tJb2RCOURCVmVTaUF2WWU5TkNFQkdEVVFFb0JacnRPTUVJRFhxdUFTcWVVU0NDNURyZDlrM1Q2Q0lBaUM2TjNLaVNBSWdpQUlvZ1ZmZWVtYUEyN1o4a3RRT1Z5QUI5WEFnd1R5SUVBUEdNN1NoQVJnMUVCSUFHYTVUbE5HQUc0VjRCdXF1QlRBcFNMMTE5WnQxYS9mOE9TL3Y0MWZsZ1JCRUFUUlA1QUFKQWlDSUFnaUNRZWNmY3E5cEpJSDFZSUhDZW9IQWRXREFiMDNnb05HdWxpV2tBQ01HZ2dKd0N6WGFhQUVZQTNJOXdYNnJScjRCcUNYU2pYM3RVMDMzZlJ0YkRoemdkK0FCRUVRQkRFTWtBQWtDSUlnQ0NJL3pqaDU3VUVINy9NTDljTENZUkE1VElFSFF2QmdLTzR3MldVSkNjQ29nWkFBekhLZGVrNEE3Z1RrUnlyNlRTZ3VxMVN2UkZWOWM2LzUrVXV2UCs1OW0vaWxSaEFFUVJEREJnbEFnaUFJZ2lBNnc0R2ZPZlhuNjBydXIxcmZYeFFQZ09CK0FCNEl5SjI2NlFFSndLaUJrQURNY3AxNlFnQnVFdWkzQUxrY2lzc2grQllxWEhiYjNOMnV4SEViZC9GYmlpQUlnaUNtRXlRQUNZSWdDSUtZT0E3NC9MTVByTGZQMzcrQ1BoQ1Erd253QUZYY0g0SjdBVGxaSnhLQVVRTWhBWmpsT25WSUFHNERjSlVDVjRyaVNoVjhENURMRitZV3ZyM3RNWC8zQTM3akVBUkJFTVRzZ1FRZ1FSQUVRUkQ5eFNkZXRlN0F0YmZjcnhhOUg0RDdRdVVRUUE4QjVONEE3b2JnT29Na0FLTUdRZ0l3eTNYS1RBRCtGTUNWVUwwU2d1OEo1RXJWNnNxRmhZVXJ0ejdoQXo5bTZpNUJFQVJCRUQxYlZSSUVRUkFFUVVUZ0U2OWF0OTllUDd1bmFIVUlnSHNEZWdoVURoRmc2V2ZzTTM0UUNjQ29nWkFBekhLZEFnbkFMUkQ1a2RUMVZWckpsYXB5WlFXOXNxNzBlL3ZNcmIyU2Rma0lnaUFJZ2hqWXFwSWdDSUlnQ0NJLzFwLzMvRHRYOWE1RFJLdERJUFc5SzYxK1hpczhFSXFmUTYwSFFiQjN5ZVVSQ2NDT2w3SERJZ0J2QVhDMXFQNm9ydVFhcWVWSElyaDZBZlUxbGVvUDUzYXUvZkV0Si8zVnovZ3BKZ2lDSUFpaTBNcUpJQWlDSUFoaU5uRGdaMTU2d0M3WjlrQ3BjZStxcXUrbGtIc285SzZpMVowaGVrZFJPVkNsU1VWb0F3bkFqcGV4L1NBQUZ3QnNnc3F0V3VuMWxlSW5xUFdhdXBJcmRFSC9yMXF6OFAzMUM3dCtjTjBKLzd5Wm4wQ0NJQWlDSUNhNGNpSUlnaUFJZ2lDV2NkQkZ6OWwvMSthNSs4OWoxejEyN1pxN2k4emhiZ3JjRVpDREJUZ1kwSU1nc3I4bzlsTmcvY3BqU1FCMnZJd3RRd0F1QUxJSndHMUFmVE1nTjBIa0psRzlRVkZkQzlUWGllcVBaWDdOTmZYMk5WZHRPdkU5MS9OVFF4QUVRUkJFSDBFQ2tDQUlnaUFJSWdmT09IbnQvcmRiZjQrcTJuSDNCY3ovZkFXNXF3cnVLTFhjVVVVUHFoVDdxZWgrQ3RsWFJQZUJZaDhWN0EzRm1sNHYxUVpPQUNxd0lOQnRnR3dGWkRPZ20ycm9Kb0ZzRXBIYmF0VmJCTGdGV3YwTVVsOFB3YlZWcFZjdnFQeGc4L0VmdUk0M05rRVFCRUVRMHdBU2dBUkJFQVJCRUpQRUdTZnZmYnZiNzM5SFhidnJZTjJpZDhUYzNPMEJ2WDFWNjBHMXlJR1ZZSCtGcmxmSTNoWHF2WUZxalVMV0F6b0g2TDRBS29Yc0E4VjhKYnBXZ1RWQU5SL1dDUlVvQkFJWld4OHFBSUdxVmdxRnFraWl1SEY4K2FsUUZXQWJJRFVXeWJwZEVHeUQ2dUovYTJ6WFNyWmpRYmRKVmUwUTZLWUZrVjF6b3JjcVpKdlVlc3VDeXMxekl0ZnZxbmY5Ykkyc3VSNjY1c1piRm41MkkwNzgxMXQ1a3hFRVFSQUVNZXNnQVVnUUJFRVFCREdGT09Dc1p4KzRVSzJiWHplMzdmWll1L2k3SFR2WDNoNHl0MnI5SjFMdlcyRnVyNnJTdFF1N2NGQmRZUitCN3F1Qy9RQUFOUUNSQlVCdndTNjVBV3V3RXlvcU9yZFRWY2VTYU92NWVuTzFNTGQ5OVBjcU8yK1NCYTEzN3pjMy96UFpzWGROMnl4QkVBUkJFRVI1L1A4RDNkMlNFYUhRelFBQUFDVjBSVmgwWkdGMFpUcGpjbVZoZEdVQU1qQXlOaTB3TmkweE1sUXdNam8xTkRveU1pc3dNRG93TUM3dGRtWUFBQUFsZEVWWWRHUmhkR1U2Ylc5a2FXWjVBREl3TWpZdE1EWXRNVEpVTURJNk5UUTZNaklyTURBNk1EQmZzTTdhQUFBQUFFbEZUa1N1UW1DQyIvPgogICAgPC9kZWZzPgo8L3N2Zz4K]]></data>
	</file>
	<file>
	  <filename>/assets/jquery.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohCiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNy4xCiAqIGh0dHBzOi8vanF1ZXJ5LmNvbS8KICoKICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMKICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCiAqCiAqIERhdGU6IDIwMjMtMDgtMjhUMTM6MzdaCiAqLwooIGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3RvcnkgKSB7CgoJInVzZSBzdHJpY3QiOwoKCWlmICggdHlwZW9mIG1vZHVsZSA9PT0gIm9iamVjdCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSAib2JqZWN0IiApIHsKCgkJLy8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YAoJCS8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuCgkJLy8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGAKCQkvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy4KCQkvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLgoJCS8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoImpxdWVyeSIpKHdpbmRvdyk7CgkJLy8gU2VlIHRpY2tldCB0cmFjLTE0NTQ5IGZvciBtb3JlIGluZm8uCgkJbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgPwoJCQlmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6CgkJCWZ1bmN0aW9uKCB3ICkgewoJCQkJaWYgKCAhdy5kb2N1bWVudCApIHsKCQkJCQl0aHJvdyBuZXcgRXJyb3IoICJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50IiApOwoJCQkJfQoJCQkJcmV0dXJuIGZhY3RvcnkoIHcgKTsKCQkJfTsKCX0gZWxzZSB7CgkJZmFjdG9yeSggZ2xvYmFsICk7Cgl9CgovLyBQYXNzIHRoaXMgaWYgd2luZG93IGlzIG5vdCBkZWZpbmVkIHlldAp9ICkoIHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24oIHdpbmRvdywgbm9HbG9iYWwgKSB7CgovLyBFZGdlIDw9IDEyIC0gMTMrLCBGaXJlZm94IDw9MTggLSA0NSssIElFIDEwIC0gMTEsIFNhZmFyaSA1LjEgLSA5KywgaU9TIDYgLSA5LjEKLy8gdGhyb3cgZXhjZXB0aW9ucyB3aGVuIG5vbi1zdHJpY3QgY29kZSAoZS5nLiwgQVNQLk5FVCA0LjUpIGFjY2Vzc2VzIHN0cmljdCBtb2RlCi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uCi8vIGVub3VnaCB0aGF0IGFsbCBzdWNoIGF0dGVtcHRzIGFyZSBndWFyZGVkIGluIGEgdHJ5IGJsb2NrLgoidXNlIHN0cmljdCI7Cgp2YXIgYXJyID0gW107Cgp2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7Cgp2YXIgc2xpY2UgPSBhcnIuc2xpY2U7Cgp2YXIgZmxhdCA9IGFyci5mbGF0ID8gZnVuY3Rpb24oIGFycmF5ICkgewoJcmV0dXJuIGFyci5mbGF0LmNhbGwoIGFycmF5ICk7Cn0gOiBmdW5jdGlvbiggYXJyYXkgKSB7CglyZXR1cm4gYXJyLmNvbmNhdC5hcHBseSggW10sIGFycmF5ICk7Cn07CgoKdmFyIHB1c2ggPSBhcnIucHVzaDsKCnZhciBpbmRleE9mID0gYXJyLmluZGV4T2Y7Cgp2YXIgY2xhc3MydHlwZSA9IHt9OwoKdmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZzsKCnZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5OwoKdmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9TdHJpbmc7Cgp2YXIgT2JqZWN0RnVuY3Rpb25TdHJpbmcgPSBmblRvU3RyaW5nLmNhbGwoIE9iamVjdCApOwoKdmFyIHN1cHBvcnQgPSB7fTsKCnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbiggb2JqICkgewoKCQkvLyBTdXBwb3J0OiBDaHJvbWUgPD01NywgRmlyZWZveCA8PTUyCgkJLy8gSW4gc29tZSBicm93c2VycywgdHlwZW9mIHJldHVybnMgImZ1bmN0aW9uIiBmb3IgSFRNTCA8b2JqZWN0PiBlbGVtZW50cwoJCS8vIChpLmUuLCBgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJvYmplY3QiICkgPT09ICJmdW5jdGlvbiJgKS4KCQkvLyBXZSBkb24ndCB3YW50IHRvIGNsYXNzaWZ5ICphbnkqIERPTSBub2RlIGFzIGEgZnVuY3Rpb24uCgkJLy8gU3VwcG9ydDogUXRXZWIgPD0zLjguNSwgV2ViS2l0IDw9NTM0LjM0LCB3a2h0bWx0b3BkZiB0b29sIDw9MC4xMi41CgkJLy8gUGx1cyBmb3Igb2xkIFdlYktpdCwgdHlwZW9mIHJldHVybnMgImZ1bmN0aW9uIiBmb3IgSFRNTCBjb2xsZWN0aW9ucwoJCS8vIChlLmcuLCBgdHlwZW9mIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJkaXYiKSA9PT0gImZ1bmN0aW9uImApLiAoZ2gtNDc1NikKCQlyZXR1cm4gdHlwZW9mIG9iaiA9PT0gImZ1bmN0aW9uIiAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9PSAibnVtYmVyIiAmJgoJCQl0eXBlb2Ygb2JqLml0ZW0gIT09ICJmdW5jdGlvbiI7Cgl9OwoKCnZhciBpc1dpbmRvdyA9IGZ1bmN0aW9uIGlzV2luZG93KCBvYmogKSB7CgkJcmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PT0gb2JqLndpbmRvdzsKCX07CgoKdmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50OwoKCgoJdmFyIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgPSB7CgkJdHlwZTogdHJ1ZSwKCQlzcmM6IHRydWUsCgkJbm9uY2U6IHRydWUsCgkJbm9Nb2R1bGU6IHRydWUKCX07CgoJZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgbm9kZSwgZG9jICkgewoJCWRvYyA9IGRvYyB8fCBkb2N1bWVudDsKCgkJdmFyIGksIHZhbCwKCQkJc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoICJzY3JpcHQiICk7CgoJCXNjcmlwdC50ZXh0ID0gY29kZTsKCQlpZiAoIG5vZGUgKSB7CgkJCWZvciAoIGkgaW4gcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyApIHsKCgkJCQkvLyBTdXBwb3J0OiBGaXJlZm94IDY0KywgRWRnZSAxOCsKCQkJCS8vIFNvbWUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgIm5vbmNlIiBwcm9wZXJ0eSBvbiBzY3JpcHRzLgoJCQkJLy8gT24gdGhlIG90aGVyIGhhbmQsIGp1c3QgdXNpbmcgYGdldEF0dHJpYnV0ZWAgaXMgbm90IGVub3VnaCBhcwoJCQkJLy8gdGhlIGBub25jZWAgYXR0cmlidXRlIGlzIHJlc2V0IHRvIGFuIGVtcHR5IHN0cmluZyB3aGVuZXZlciBpdAoJCQkJLy8gYmVjb21lcyBicm93c2luZy1jb250ZXh0IGNvbm5lY3RlZC4KCQkJCS8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzIzNjkKCQkJCS8vIFNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNub25jZS1hdHRyaWJ1dGVzCgkJCQkvLyBUaGUgYG5vZGUuZ2V0QXR0cmlidXRlYCBjaGVjayB3YXMgYWRkZWQgZm9yIHRoZSBzYWtlIG9mCgkJCQkvLyBgalF1ZXJ5Lmdsb2JhbEV2YWxgIHNvIHRoYXQgaXQgY2FuIGZha2UgYSBub25jZS1jb250YWluaW5nIG5vZGUKCQkJCS8vIHZpYSBhbiBvYmplY3QuCgkJCQl2YWwgPSBub2RlWyBpIF0gfHwgbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoIGkgKTsKCQkJCWlmICggdmFsICkgewoJCQkJCXNjcmlwdC5zZXRBdHRyaWJ1dGUoIGksIHZhbCApOwoJCQkJfQoJCQl9CgkJfQoJCWRvYy5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTsKCX0KCgpmdW5jdGlvbiB0b1R5cGUoIG9iaiApIHsKCWlmICggb2JqID09IG51bGwgKSB7CgkJcmV0dXJuIG9iaiArICIiOwoJfQoKCS8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seSAoZnVuY3Rpb25pc2ggUmVnRXhwKQoJcmV0dXJuIHR5cGVvZiBvYmogPT09ICJvYmplY3QiIHx8IHR5cGVvZiBvYmogPT09ICJmdW5jdGlvbiIgPwoJCWNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9iaiApIF0gfHwgIm9iamVjdCIgOgoJCXR5cGVvZiBvYmo7Cn0KLyogZ2xvYmFsIFN5bWJvbCAqLwovLyBEZWZpbmluZyB0aGlzIGdsb2JhbCBpbiAuZXNsaW50cmMuanNvbiB3b3VsZCBjcmVhdGUgYSBkYW5nZXIgb2YgdXNpbmcgdGhlIGdsb2JhbAovLyB1bmd1YXJkZWQgaW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8gZGVmaW5lIGdsb2JhbCBvbmx5IGZvciB0aGlzIG1vZHVsZQoKCgp2YXIgdmVyc2lvbiA9ICIzLjcuMSIsCgoJcmh0bWxTdWZmaXggPSAvSFRNTCQvaSwKCgkvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeQoJalF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkgewoKCQkvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCcKCQkvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKQoJCXJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7Cgl9OwoKalF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHsKCgkvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkCglqcXVlcnk6IHZlcnNpb24sCgoJY29uc3RydWN0b3I6IGpRdWVyeSwKCgkvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDAKCWxlbmd0aDogMCwKCgl0b0FycmF5OiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApOwoJfSwKCgkvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SCgkvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheQoJZ2V0OiBmdW5jdGlvbiggbnVtICkgewoKCQkvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5CgkJaWYgKCBudW0gPT0gbnVsbCApIHsKCQkJcmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTsKCQl9CgoJCS8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXQKCQlyZXR1cm4gbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXTsKCX0sCgoJLy8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFjawoJLy8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpCglwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHsKCgkJLy8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXQKCQl2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7CgoJCS8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpCgkJcmV0LnByZXZPYmplY3QgPSB0aGlzOwoKCQkvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldAoJCXJldHVybiByZXQ7Cgl9LAoKCS8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuCgllYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7CgkJcmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApOwoJfSwKCgltYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHsKCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgewoJCQlyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApOwoJCX0gKSApOwoJfSwKCglzbGljZTogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgKTsKCX0sCgoJZmlyc3Q6IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlzLmVxKCAwICk7Cgl9LAoKCWxhc3Q6IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlzLmVxKCAtMSApOwoJfSwKCglldmVuOiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5ncmVwKCB0aGlzLCBmdW5jdGlvbiggX2VsZW0sIGkgKSB7CgkJCXJldHVybiAoIGkgKyAxICkgJSAyOwoJCX0gKSApOwoJfSwKCglvZGQ6IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHsKCQkJcmV0dXJuIGkgJSAyOwoJCX0gKSApOwoJfSwKCgllcTogZnVuY3Rpb24oIGkgKSB7CgkJdmFyIGxlbiA9IHRoaXMubGVuZ3RoLAoJCQlqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApOwoJCXJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTsKCX0sCgoJZW5kOiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IoKTsKCX0sCgoJLy8gRm9yIGludGVybmFsIHVzZSBvbmx5LgoJLy8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuCglwdXNoOiBwdXNoLAoJc29ydDogYXJyLnNvcnQsCglzcGxpY2U6IGFyci5zcGxpY2UKfTsKCmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7Cgl2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsCgkJdGFyZ2V0ID0gYXJndW1lbnRzWyAwIF0gfHwge30sCgkJaSA9IDEsCgkJbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwKCQlkZWVwID0gZmFsc2U7CgoJLy8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvbgoJaWYgKCB0eXBlb2YgdGFyZ2V0ID09PSAiYm9vbGVhbiIgKSB7CgkJZGVlcCA9IHRhcmdldDsKCgkJLy8gU2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldAoJCXRhcmdldCA9IGFyZ3VtZW50c1sgaSBdIHx8IHt9OwoJCWkrKzsKCX0KCgkvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSkKCWlmICggdHlwZW9mIHRhcmdldCAhPT0gIm9iamVjdCIgJiYgIWlzRnVuY3Rpb24oIHRhcmdldCApICkgewoJCXRhcmdldCA9IHt9OwoJfQoKCS8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZAoJaWYgKCBpID09PSBsZW5ndGggKSB7CgkJdGFyZ2V0ID0gdGhpczsKCQlpLS07Cgl9CgoJZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CgoJCS8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXMKCQlpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHsKCgkJCS8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3QKCQkJZm9yICggbmFtZSBpbiBvcHRpb25zICkgewoJCQkJY29weSA9IG9wdGlvbnNbIG5hbWUgXTsKCgkJCQkvLyBQcmV2ZW50IE9iamVjdC5wcm90b3R5cGUgcG9sbHV0aW9uCgkJCQkvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wCgkJCQlpZiAoIG5hbWUgPT09ICJfX3Byb3RvX18iIHx8IHRhcmdldCA9PT0gY29weSApIHsKCQkJCQljb250aW51ZTsKCQkJCX0KCgkJCQkvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXMKCQkJCWlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fAoJCQkJCSggY29weUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KCBjb3B5ICkgKSApICkgewoJCQkJCXNyYyA9IHRhcmdldFsgbmFtZSBdOwoKCQkJCQkvLyBFbnN1cmUgcHJvcGVyIHR5cGUgZm9yIHRoZSBzb3VyY2UgdmFsdWUKCQkJCQlpZiAoIGNvcHlJc0FycmF5ICYmICFBcnJheS5pc0FycmF5KCBzcmMgKSApIHsKCQkJCQkJY2xvbmUgPSBbXTsKCQkJCQl9IGVsc2UgaWYgKCAhY29weUlzQXJyYXkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSApIHsKCQkJCQkJY2xvbmUgPSB7fTsKCQkJCQl9IGVsc2UgewoJCQkJCQljbG9uZSA9IHNyYzsKCQkJCQl9CgkJCQkJY29weUlzQXJyYXkgPSBmYWxzZTsKCgkJCQkJLy8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtCgkJCQkJdGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApOwoKCQkJCS8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXMKCQkJCX0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHsKCQkJCQl0YXJnZXRbIG5hbWUgXSA9IGNvcHk7CgkJCQl9CgkJCX0KCQl9Cgl9CgoJLy8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3QKCXJldHVybiB0YXJnZXQ7Cn07CgpqUXVlcnkuZXh0ZW5kKCB7CgoJLy8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlCglleHBhbmRvOiAialF1ZXJ5IiArICggdmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXEQvZywgIiIgKSwKCgkvLyBBc3N1bWUgalF1ZXJ5IGlzIHJlYWR5IHdpdGhvdXQgdGhlIHJlYWR5IG1vZHVsZQoJaXNSZWFkeTogdHJ1ZSwKCgllcnJvcjogZnVuY3Rpb24oIG1zZyApIHsKCQl0aHJvdyBuZXcgRXJyb3IoIG1zZyApOwoJfSwKCglub29wOiBmdW5jdGlvbigpIHt9LAoKCWlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7CgkJdmFyIHByb3RvLCBDdG9yOwoKCQkvLyBEZXRlY3Qgb2J2aW91cyBuZWdhdGl2ZXMKCQkvLyBVc2UgdG9TdHJpbmcgaW5zdGVhZCBvZiBqUXVlcnkudHlwZSB0byBjYXRjaCBob3N0IG9iamVjdHMKCQlpZiAoICFvYmogfHwgdG9TdHJpbmcuY2FsbCggb2JqICkgIT09ICJbb2JqZWN0IE9iamVjdF0iICkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQlwcm90byA9IGdldFByb3RvKCBvYmogKTsKCgkJLy8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpbgoJCWlmICggIXByb3RvICkgewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgoJCS8vIE9iamVjdHMgd2l0aCBwcm90b3R5cGUgYXJlIHBsYWluIGlmZiB0aGV5IHdlcmUgY29uc3RydWN0ZWQgYnkgYSBnbG9iYWwgT2JqZWN0IGZ1bmN0aW9uCgkJQ3RvciA9IGhhc093bi5jYWxsKCBwcm90bywgImNvbnN0cnVjdG9yIiApICYmIHByb3RvLmNvbnN0cnVjdG9yOwoJCXJldHVybiB0eXBlb2YgQ3RvciA9PT0gImZ1bmN0aW9uIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7Cgl9LAoKCWlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7CgkJdmFyIG5hbWU7CgoJCWZvciAoIG5hbWUgaW4gb2JqICkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCXJldHVybiB0cnVlOwoJfSwKCgkvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBwcm92aWRlZCBjb250ZXh0OyBmYWxscyBiYWNrIHRvIHRoZSBnbG9iYWwgb25lCgkvLyBpZiBub3Qgc3BlY2lmaWVkLgoJZ2xvYmFsRXZhbDogZnVuY3Rpb24oIGNvZGUsIG9wdGlvbnMsIGRvYyApIHsKCQlET01FdmFsKCBjb2RlLCB7IG5vbmNlOiBvcHRpb25zICYmIG9wdGlvbnMubm9uY2UgfSwgZG9jICk7Cgl9LAoKCWVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkgewoJCXZhciBsZW5ndGgsIGkgPSAwOwoKCQlpZiAoIGlzQXJyYXlMaWtlKCBvYmogKSApIHsKCQkJbGVuZ3RoID0gb2JqLmxlbmd0aDsKCQkJZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CgkJCQlpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0gZWxzZSB7CgkJCWZvciAoIGkgaW4gb2JqICkgewoJCQkJaWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiBvYmo7Cgl9LAoKCgkvLyBSZXRyaWV2ZSB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXMKCXRleHQ6IGZ1bmN0aW9uKCBlbGVtICkgewoJCXZhciBub2RlLAoJCQlyZXQgPSAiIiwKCQkJaSA9IDAsCgkJCW5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTsKCgkJaWYgKCAhbm9kZVR5cGUgKSB7CgoJCQkvLyBJZiBubyBub2RlVHlwZSwgdGhpcyBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheQoJCQl3aGlsZSAoICggbm9kZSA9IGVsZW1bIGkrKyBdICkgKSB7CgoJCQkJLy8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXMKCQkJCXJldCArPSBqUXVlcnkudGV4dCggbm9kZSApOwoJCQl9CgkJfQoJCWlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDExICkgewoJCQlyZXR1cm4gZWxlbS50ZXh0Q29udGVudDsKCQl9CgkJaWYgKCBub2RlVHlwZSA9PT0gOSApIHsKCQkJcmV0dXJuIGVsZW0uZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50OwoJCX0KCQlpZiAoIG5vZGVUeXBlID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkgewoJCQlyZXR1cm4gZWxlbS5ub2RlVmFsdWU7CgkJfQoKCQkvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbm9kZXMKCgkJcmV0dXJuIHJldDsKCX0sCgoJLy8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQoJbWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkgewoJCXZhciByZXQgPSByZXN1bHRzIHx8IFtdOwoKCQlpZiAoIGFyciAhPSBudWxsICkgewoJCQlpZiAoIGlzQXJyYXlMaWtlKCBPYmplY3QoIGFyciApICkgKSB7CgkJCQlqUXVlcnkubWVyZ2UoIHJldCwKCQkJCQl0eXBlb2YgYXJyID09PSAic3RyaW5nIiA/CgkJCQkJCVsgYXJyIF0gOiBhcnIKCQkJCSk7CgkJCX0gZWxzZSB7CgkJCQlwdXNoLmNhbGwoIHJldCwgYXJyICk7CgkJCX0KCQl9CgoJCXJldHVybiByZXQ7Cgl9LAoKCWluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7CgkJcmV0dXJuIGFyciA9PSBudWxsID8gLTEgOiBpbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApOwoJfSwKCglpc1hNTERvYzogZnVuY3Rpb24oIGVsZW0gKSB7CgkJdmFyIG5hbWVzcGFjZSA9IGVsZW0gJiYgZWxlbS5uYW1lc3BhY2VVUkksCgkJCWRvY0VsZW0gPSBlbGVtICYmICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKS5kb2N1bWVudEVsZW1lbnQ7CgoJCS8vIEFzc3VtZSBIVE1MIHdoZW4gZG9jdW1lbnRFbGVtZW50IGRvZXNuJ3QgeWV0IGV4aXN0LCBzdWNoIGFzIGluc2lkZQoJCS8vIGRvY3VtZW50IGZyYWdtZW50cy4KCQlyZXR1cm4gIXJodG1sU3VmZml4LnRlc3QoIG5hbWVzcGFjZSB8fCBkb2NFbGVtICYmIGRvY0VsZW0ubm9kZU5hbWUgfHwgIkhUTUwiICk7Cgl9LAoKCS8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seQoJLy8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdAoJbWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkgewoJCXZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCwKCQkJaiA9IDAsCgkJCWkgPSBmaXJzdC5sZW5ndGg7CgoJCWZvciAoIDsgaiA8IGxlbjsgaisrICkgewoJCQlmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTsKCQl9CgoJCWZpcnN0Lmxlbmd0aCA9IGk7CgoJCXJldHVybiBmaXJzdDsKCX0sCgoJZ3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ZXJ0ICkgewoJCXZhciBjYWxsYmFja0ludmVyc2UsCgkJCW1hdGNoZXMgPSBbXSwKCQkJaSA9IDAsCgkJCWxlbmd0aCA9IGVsZW1zLmxlbmd0aCwKCQkJY2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0OwoKCQkvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1zCgkJLy8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb24KCQlmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKCQkJY2FsbGJhY2tJbnZlcnNlID0gIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7CgkJCWlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHsKCQkJCW1hdGNoZXMucHVzaCggZWxlbXNbIGkgXSApOwoJCQl9CgkJfQoKCQlyZXR1cm4gbWF0Y2hlczsKCX0sCgoJLy8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5CgltYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHsKCQl2YXIgbGVuZ3RoLCB2YWx1ZSwKCQkJaSA9IDAsCgkJCXJldCA9IFtdOwoKCQkvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlcwoJCWlmICggaXNBcnJheUxpa2UoIGVsZW1zICkgKSB7CgkJCWxlbmd0aCA9IGVsZW1zLmxlbmd0aDsKCQkJZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CgkJCQl2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTsKCgkJCQlpZiAoIHZhbHVlICE9IG51bGwgKSB7CgkJCQkJcmV0LnB1c2goIHZhbHVlICk7CgkJCQl9CgkJCX0KCgkJLy8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCwKCQl9IGVsc2UgewoJCQlmb3IgKCBpIGluIGVsZW1zICkgewoJCQkJdmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7CgoJCQkJaWYgKCB2YWx1ZSAhPSBudWxsICkgewoJCQkJCXJldC5wdXNoKCB2YWx1ZSApOwoJCQkJfQoJCQl9CgkJfQoKCQkvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzCgkJcmV0dXJuIGZsYXQoIHJldCApOwoJfSwKCgkvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHMKCWd1aWQ6IDEsCgoJLy8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyCgkvLyBwcm9wZXJ0aWVzIHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4aXN0LgoJc3VwcG9ydDogc3VwcG9ydAp9ICk7CgppZiAoIHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgKSB7CglqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTsKfQoKLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwCmpRdWVyeS5lYWNoKCAiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2wiLnNwbGl0KCAiICIgKSwKCWZ1bmN0aW9uKCBfaSwgbmFtZSApIHsKCQljbGFzczJ0eXBlWyAiW29iamVjdCAiICsgbmFtZSArICJdIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpOwoJfSApOwoKZnVuY3Rpb24gaXNBcnJheUxpa2UoIG9iaiApIHsKCgkvLyBTdXBwb3J0OiByZWFsIGlPUyA4LjIgb25seSAobm90IHJlcHJvZHVjaWJsZSBpbiBzaW11bGF0b3IpCgkvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpCgkvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXMKCS8vIHJlZ2FyZGluZyBOb2RlbGlzdCBsZW5ndGggaW4gSUUKCXZhciBsZW5ndGggPSAhIW9iaiAmJiAibGVuZ3RoIiBpbiBvYmogJiYgb2JqLmxlbmd0aCwKCQl0eXBlID0gdG9UeXBlKCBvYmogKTsKCglpZiAoIGlzRnVuY3Rpb24oIG9iaiApIHx8IGlzV2luZG93KCBvYmogKSApIHsKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJcmV0dXJuIHR5cGUgPT09ICJhcnJheSIgfHwgbGVuZ3RoID09PSAwIHx8CgkJdHlwZW9mIGxlbmd0aCA9PT0gIm51bWJlciIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7Cn0KCgpmdW5jdGlvbiBub2RlTmFtZSggZWxlbSwgbmFtZSApIHsKCglyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKTsKCn0KdmFyIHBvcCA9IGFyci5wb3A7CgoKdmFyIHNvcnQgPSBhcnIuc29ydDsKCgp2YXIgc3BsaWNlID0gYXJyLnNwbGljZTsKCgp2YXIgd2hpdGVzcGFjZSA9ICJbXFx4MjBcXHRcXHJcXG5cXGZdIjsKCgp2YXIgcnRyaW1DU1MgPSBuZXcgUmVnRXhwKAoJIl4iICsgd2hpdGVzcGFjZSArICIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiICsgd2hpdGVzcGFjZSArICIrJCIsCgkiZyIKKTsKCgoKCi8vIE5vdGU6IGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGYKalF1ZXJ5LmNvbnRhaW5zID0gZnVuY3Rpb24oIGEsIGIgKSB7Cgl2YXIgYnVwID0gYiAmJiBiLnBhcmVudE5vZGU7CgoJcmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoCgoJCS8vIFN1cHBvcnQ6IElFIDkgLSAxMSsKCQkvLyBJRSBkb2Vzbid0IGhhdmUgYGNvbnRhaW5zYCBvbiBTVkcuCgkJYS5jb250YWlucyA/CgkJCWEuY29udGFpbnMoIGJ1cCApIDoKCQkJYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2CgkpICk7Cn07CgoKCgovLyBDU1Mgc3RyaW5nL2lkZW50aWZpZXIgc2VyaWFsaXphdGlvbgovLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXMKdmFyIHJjc3Nlc2NhcGUgPSAvKFtcMC1ceDFmXHg3Zl18Xi0/XGQpfF4tJHxbXlx4ODAtXHVGRkZGXHctXS9nOwoKZnVuY3Rpb24gZmNzc2VzY2FwZSggY2gsIGFzQ29kZVBvaW50ICkgewoJaWYgKCBhc0NvZGVQb2ludCApIHsKCgkJLy8gVSswMDAwIE5VTEwgYmVjb21lcyBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSCgkJaWYgKCBjaCA9PT0gIlwwIiApIHsKCQkJcmV0dXJuICJcdUZGRkQiOwoJCX0KCgkJLy8gQ29udHJvbCBjaGFyYWN0ZXJzIGFuZCAoZGVwZW5kZW50IHVwb24gcG9zaXRpb24pIG51bWJlcnMgZ2V0IGVzY2FwZWQgYXMgY29kZSBwb2ludHMKCQlyZXR1cm4gY2guc2xpY2UoIDAsIC0xICkgKyAiXFwiICsgY2guY2hhckNvZGVBdCggY2gubGVuZ3RoIC0gMSApLnRvU3RyaW5nKCAxNiApICsgIiAiOwoJfQoKCS8vIE90aGVyIHBvdGVudGlhbGx5LXNwZWNpYWwgQVNDSUkgY2hhcmFjdGVycyBnZXQgYmFja3NsYXNoLWVzY2FwZWQKCXJldHVybiAiXFwiICsgY2g7Cn0KCmpRdWVyeS5lc2NhcGVTZWxlY3RvciA9IGZ1bmN0aW9uKCBzZWwgKSB7CglyZXR1cm4gKCBzZWwgKyAiIiApLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTsKfTsKCgoKCnZhciBwcmVmZXJyZWREb2MgPSBkb2N1bWVudCwKCXB1c2hOYXRpdmUgPSBwdXNoOwoKKCBmdW5jdGlvbigpIHsKCnZhciBpLAoJRXhwciwKCW91dGVybW9zdENvbnRleHQsCglzb3J0SW5wdXQsCgloYXNEdXBsaWNhdGUsCglwdXNoID0gcHVzaE5hdGl2ZSwKCgkvLyBMb2NhbCBkb2N1bWVudCB2YXJzCglkb2N1bWVudCwKCWRvY3VtZW50RWxlbWVudCwKCWRvY3VtZW50SXNIVE1MLAoJcmJ1Z2d5UVNBLAoJbWF0Y2hlcywKCgkvLyBJbnN0YW5jZS1zcGVjaWZpYyBkYXRhCglleHBhbmRvID0galF1ZXJ5LmV4cGFuZG8sCglkaXJydW5zID0gMCwKCWRvbmUgPSAwLAoJY2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksCgl0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSwKCWNvbXBpbGVyQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLAoJbm9ubmF0aXZlU2VsZWN0b3JDYWNoZSA9IGNyZWF0ZUNhY2hlKCksCglzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHsKCQlpZiAoIGEgPT09IGIgKSB7CgkJCWhhc0R1cGxpY2F0ZSA9IHRydWU7CgkJfQoJCXJldHVybiAwOwoJfSwKCglib29sZWFucyA9ICJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8IiArCgkJImxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLAoKCS8vIFJlZ3VsYXIgZXhwcmVzc2lvbnMKCgkvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXN5bnRheC0zLyNpZGVudC10b2tlbi1kaWFncmFtCglpZGVudGlmaWVyID0gIig/OlxcXFxbXFxkYS1mQS1GXXsxLDZ9IiArIHdoaXRlc3BhY2UgKwoJCSI/fFxcXFxbXlxcclxcblxcZl18W1xcdy1dfFteXDAtXFx4N2ZdKSsiLAoKCS8vIEF0dHJpYnV0ZSBzZWxlY3RvcnM6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnMKCWF0dHJpYnV0ZXMgPSAiXFxbIiArIHdoaXRlc3BhY2UgKyAiKigiICsgaWRlbnRpZmllciArICIpKD86IiArIHdoaXRlc3BhY2UgKwoKCQkvLyBPcGVyYXRvciAoY2FwdHVyZSAyKQoJCSIqKFsqXiR8IX5dPz0pIiArIHdoaXRlc3BhY2UgKwoKCQkvLyAiQXR0cmlidXRlIHZhbHVlcyBtdXN0IGJlIENTUyBpZGVudGlmaWVycyBbY2FwdHVyZSA1XSBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XSIKCQkiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgiICsgaWRlbnRpZmllciArICIpKXwpIiArCgkJd2hpdGVzcGFjZSArICIqXFxdIiwKCglwc2V1ZG9zID0gIjooIiArIGlkZW50aWZpZXIgKyAiKSg/OlxcKCgiICsKCgkJLy8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czoKCQkvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSkKCQkiKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwiICsKCgkJLy8gMi4gc2ltcGxlIChjYXB0dXJlIDYpCgkJIigoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIgKyBhdHRyaWJ1dGVzICsgIikqKXwiICsKCgkJLy8gMy4gYW55dGhpbmcgZWxzZSAoY2FwdHVyZSAyKQoJCSIuKiIgKwoJCSIpXFwpfCkiLAoKCS8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXIKCXJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArICIrIiwgImciICksCgoJcmNvbW1hID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIqLCIgKyB3aGl0ZXNwYWNlICsgIioiICksCglybGVhZGluZ0NvbWJpbmF0b3IgPSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIiooWz4rfl18IiArIHdoaXRlc3BhY2UgKyAiKSIgKwoJCXdoaXRlc3BhY2UgKyAiKiIgKSwKCXJkZXNjZW5kID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArICJ8PiIgKSwKCglycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLAoJcmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCAiXiIgKyBpZGVudGlmaWVyICsgIiQiICksCgoJbWF0Y2hFeHByID0gewoJCUlEOiBuZXcgUmVnRXhwKCAiXiMoIiArIGlkZW50aWZpZXIgKyAiKSIgKSwKCQlDTEFTUzogbmV3IFJlZ0V4cCggIl5cXC4oIiArIGlkZW50aWZpZXIgKyAiKSIgKSwKCQlUQUc6IG5ldyBSZWdFeHAoICJeKCIgKyBpZGVudGlmaWVyICsgInxbKl0pIiApLAoJCUFUVFI6IG5ldyBSZWdFeHAoICJeIiArIGF0dHJpYnV0ZXMgKSwKCQlQU0VVRE86IG5ldyBSZWdFeHAoICJeIiArIHBzZXVkb3MgKSwKCQlDSElMRDogbmV3IFJlZ0V4cCgKCQkJIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIgKwoJCQkJd2hpdGVzcGFjZSArICIqKGV2ZW58b2RkfCgoWystXXwpKFxcZCopbnwpIiArIHdoaXRlc3BhY2UgKyAiKig/OihbKy1dfCkiICsKCQkJCXdoaXRlc3BhY2UgKyAiKihcXGQrKXwpKSIgKyB3aGl0ZXNwYWNlICsgIipcXCl8KSIsICJpIiApLAoJCWJvb2w6IG5ldyBSZWdFeHAoICJeKD86IiArIGJvb2xlYW5zICsgIikkIiwgImkiICksCgoJCS8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKQoJCS8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGAKCQluZWVkc0NvbnRleHQ6IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKwoJCQkiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIiArIHdoaXRlc3BhY2UgKwoJCQkiKigoPzotXFxkKT9cXGQqKSIgKyB3aGl0ZXNwYWNlICsgIipcXCl8KSg/PVteLV18JCkiLCAiaSIgKQoJfSwKCglyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSwKCXJoZWFkZXIgPSAvXmhcZCQvaSwKCgkvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnMKCXJxdWlja0V4cHIgPSAvXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLAoKCXJzaWJsaW5nID0gL1srfl0vLAoKCS8vIENTUyBlc2NhcGVzCgkvLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVycwoJcnVuZXNjYXBlID0gbmV3IFJlZ0V4cCggIlxcXFxbXFxkYS1mQS1GXXsxLDZ9IiArIHdoaXRlc3BhY2UgKwoJCSI/fFxcXFwoW15cXHJcXG5cXGZdKSIsICJnIiApLAoJZnVuZXNjYXBlID0gZnVuY3Rpb24oIGVzY2FwZSwgbm9uSGV4ICkgewoJCXZhciBoaWdoID0gIjB4IiArIGVzY2FwZS5zbGljZSggMSApIC0gMHgxMDAwMDsKCgkJaWYgKCBub25IZXggKSB7CgoJCQkvLyBTdHJpcCB0aGUgYmFja3NsYXNoIHByZWZpeCBmcm9tIGEgbm9uLWhleCBlc2NhcGUgc2VxdWVuY2UKCQkJcmV0dXJuIG5vbkhleDsKCQl9CgoJCS8vIFJlcGxhY2UgYSBoZXhhZGVjaW1hbCBlc2NhcGUgc2VxdWVuY2Ugd2l0aCB0aGUgZW5jb2RlZCBVbmljb2RlIGNvZGUgcG9pbnQKCQkvLyBTdXBwb3J0OiBJRSA8PTExKwoJCS8vIEZvciB2YWx1ZXMgb3V0c2lkZSB0aGUgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIChCTVApLCBtYW51YWxseSBjb25zdHJ1Y3QgYQoJCS8vIHN1cnJvZ2F0ZSBwYWlyCgkJcmV0dXJuIGhpZ2ggPCAwID8KCQkJU3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6CgkJCVN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApOwoJfSwKCgkvLyBVc2VkIGZvciBpZnJhbWVzOyBzZWUgYHNldERvY3VtZW50YC4KCS8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCsKCS8vIFJlbW92aW5nIHRoZSBmdW5jdGlvbiB3cmFwcGVyIGNhdXNlcyBhICJQZXJtaXNzaW9uIERlbmllZCIKCS8vIGVycm9yIGluIElFL0VkZ2UuCgl1bmxvYWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7CgkJc2V0RG9jdW1lbnQoKTsKCX0sCgoJaW5EaXNhYmxlZEZpZWxkc2V0ID0gYWRkQ29tYmluYXRvcigKCQlmdW5jdGlvbiggZWxlbSApIHsKCQkJcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWUgJiYgbm9kZU5hbWUoIGVsZW0sICJmaWVsZHNldCIgKTsKCQl9LAoJCXsgZGlyOiAicGFyZW50Tm9kZSIsIG5leHQ6ICJsZWdlbmQiIH0KCSk7CgovLyBTdXBwb3J0OiBJRSA8PTkgb25seQovLyBBY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBjYW4gdGhyb3cgdW5leHBlY3RlZGx5Ci8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM5MwpmdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHsKCXRyeSB7CgkJcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7Cgl9IGNhdGNoICggZXJyICkgeyB9Cn0KCi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApCnRyeSB7CglwdXNoLmFwcGx5KAoJCSggYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSApLAoJCXByZWZlcnJlZERvYy5jaGlsZE5vZGVzCgkpOwoKCS8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAKCS8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHkKCS8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnMKCWFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7Cn0gY2F0Y2ggKCBlICkgewoJcHVzaCA9IHsKCQlhcHBseTogZnVuY3Rpb24oIHRhcmdldCwgZWxzICkgewoJCQlwdXNoTmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoIGVscyApICk7CgkJfSwKCQljYWxsOiBmdW5jdGlvbiggdGFyZ2V0ICkgewoJCQlwdXNoTmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMSApICk7CgkJfQoJfTsKfQoKZnVuY3Rpb24gZmluZCggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7Cgl2YXIgbSwgaSwgZWxlbSwgbmlkLCBtYXRjaCwgZ3JvdXBzLCBuZXdTZWxlY3RvciwKCQluZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsCgoJCS8vIG5vZGVUeXBlIGRlZmF1bHRzIHRvIDksIHNpbmNlIGNvbnRleHQgZGVmYXVsdHMgdG8gZG9jdW1lbnQKCQlub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTsKCglyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTsKCgkvLyBSZXR1cm4gZWFybHkgZnJvbSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4dAoJaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciIHx8ICFzZWxlY3RvciB8fAoJCW5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHsKCgkJcmV0dXJuIHJlc3VsdHM7Cgl9CgoJLy8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50cwoJaWYgKCAhc2VlZCApIHsKCQlzZXREb2N1bWVudCggY29udGV4dCApOwoJCWNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OwoKCQlpZiAoIGRvY3VtZW50SXNIVE1MICkgewoKCQkJLy8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhICJnZXQqQnkqIiBET00gbWV0aG9kCgkJCS8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdCkKCQkJaWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKCBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSApICkgewoKCQkJCS8vIElEIHNlbGVjdG9yCgkJCQlpZiAoICggbSA9IG1hdGNoWyAxIF0gKSApIHsKCgkJCQkJLy8gRG9jdW1lbnQgY29udGV4dAoJCQkJCWlmICggbm9kZVR5cGUgPT09IDkgKSB7CgkJCQkJCWlmICggKCBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApICkgKSB7CgoJCQkJCQkJLy8gU3VwcG9ydDogSUUgOSBvbmx5CgkJCQkJCQkvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElECgkJCQkJCQlpZiAoIGVsZW0uaWQgPT09IG0gKSB7CgkJCQkJCQkJcHVzaC5jYWxsKCByZXN1bHRzLCBlbGVtICk7CgkJCQkJCQkJcmV0dXJuIHJlc3VsdHM7CgkJCQkJCQl9CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQlyZXR1cm4gcmVzdWx0czsKCQkJCQkJfQoKCQkJCQkvLyBFbGVtZW50IGNvbnRleHQKCQkJCQl9IGVsc2UgewoKCQkJCQkJLy8gU3VwcG9ydDogSUUgOSBvbmx5CgkJCQkJCS8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSUQKCQkJCQkJaWYgKCBuZXdDb250ZXh0ICYmICggZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICYmCgkJCQkJCQlmaW5kLmNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiYKCQkJCQkJCWVsZW0uaWQgPT09IG0gKSB7CgoJCQkJCQkJcHVzaC5jYWxsKCByZXN1bHRzLCBlbGVtICk7CgkJCQkJCQlyZXR1cm4gcmVzdWx0czsKCQkJCQkJfQoJCQkJCX0KCgkJCQkvLyBUeXBlIHNlbGVjdG9yCgkJCQl9IGVsc2UgaWYgKCBtYXRjaFsgMiBdICkgewoJCQkJCXB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICkgKTsKCQkJCQlyZXR1cm4gcmVzdWx0czsKCgkJCQkvLyBDbGFzcyBzZWxlY3RvcgoJCQkJfSBlbHNlIGlmICggKCBtID0gbWF0Y2hbIDMgXSApICYmIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHsKCQkJCQlwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSApOwoJCQkJCXJldHVybiByZXN1bHRzOwoJCQkJfQoJCQl9CgoJCQkvLyBUYWtlIGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsCgkJCWlmICggIW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIHNlbGVjdG9yICsgIiAiIF0gJiYKCQkJCSggIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkgKSApIHsKCgkJCQluZXdTZWxlY3RvciA9IHNlbGVjdG9yOwoJCQkJbmV3Q29udGV4dCA9IGNvbnRleHQ7CgoJCQkJLy8gcVNBIGNvbnNpZGVycyBlbGVtZW50cyBvdXRzaWRlIGEgc2NvcGluZyByb290IHdoZW4gZXZhbHVhdGluZyBjaGlsZCBvcgoJCQkJLy8gZGVzY2VuZGFudCBjb21iaW5hdG9ycywgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudC4KCQkJCS8vIEluIHN1Y2ggY2FzZXMsIHdlIHdvcmsgYXJvdW5kIHRoZSBiZWhhdmlvciBieSBwcmVmaXhpbmcgZXZlcnkgc2VsZWN0b3IgaW4gdGhlCgkJCQkvLyBsaXN0IHdpdGggYW4gSUQgc2VsZWN0b3IgcmVmZXJlbmNpbmcgdGhlIHNjb3BlIGNvbnRleHQuCgkJCQkvLyBUaGUgdGVjaG5pcXVlIGhhcyB0byBiZSB1c2VkIGFzIHdlbGwgd2hlbiBhIGxlYWRpbmcgY29tYmluYXRvciBpcyB1c2VkCgkJCQkvLyBhcyBzdWNoIHNlbGVjdG9ycyBhcmUgbm90IHJlY29nbml6ZWQgYnkgcXVlcnlTZWxlY3RvckFsbC4KCQkJCS8vIFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGlzIHRlY2huaXF1ZS4KCQkJCWlmICggbm9kZVR5cGUgPT09IDEgJiYKCQkJCQkoIHJkZXNjZW5kLnRlc3QoIHNlbGVjdG9yICkgfHwgcmxlYWRpbmdDb21iaW5hdG9yLnRlc3QoIHNlbGVjdG9yICkgKSApIHsKCgkJCQkJLy8gRXhwYW5kIGNvbnRleHQgZm9yIHNpYmxpbmcgc2VsZWN0b3JzCgkJCQkJbmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8CgkJCQkJCWNvbnRleHQ7CgoJCQkJCS8vIFdlIGNhbiB1c2UgOnNjb3BlIGluc3RlYWQgb2YgdGhlIElEIGhhY2sgaWYgdGhlIGJyb3dzZXIKCQkJCQkvLyBzdXBwb3J0cyBpdCAmIGlmIHdlJ3JlIG5vdCBjaGFuZ2luZyB0aGUgY29udGV4dC4KCQkJCQkvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCsKCQkJCQkvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhICJQZXJtaXNzaW9uIGRlbmllZCIgZXJyb3Igd2hlbgoJCQkJCS8vIHN0cmljdC1jb21wYXJpbmcgdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLgoJCQkJCS8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXEKCQkJCQlpZiAoIG5ld0NvbnRleHQgIT0gY29udGV4dCB8fCAhc3VwcG9ydC5zY29wZSApIHsKCgkJCQkJCS8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNldHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5CgkJCQkJCWlmICggKCBuaWQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggImlkIiApICkgKSB7CgkJCQkJCQluaWQgPSBqUXVlcnkuZXNjYXBlU2VsZWN0b3IoIG5pZCApOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJY29udGV4dC5zZXRBdHRyaWJ1dGUoICJpZCIsICggbmlkID0gZXhwYW5kbyApICk7CgkJCQkJCX0KCQkJCQl9CgoJCQkJCS8vIFByZWZpeCBldmVyeSBzZWxlY3RvciBpbiB0aGUgbGlzdAoJCQkJCWdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApOwoJCQkJCWkgPSBncm91cHMubGVuZ3RoOwoJCQkJCXdoaWxlICggaS0tICkgewoJCQkJCQlncm91cHNbIGkgXSA9ICggbmlkID8gIiMiICsgbmlkIDogIjpzY29wZSIgKSArICIgIiArCgkJCQkJCQl0b1NlbGVjdG9yKCBncm91cHNbIGkgXSApOwoJCQkJCX0KCQkJCQluZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCAiLCIgKTsKCQkJCX0KCgkJCQl0cnkgewoJCQkJCXB1c2guYXBwbHkoIHJlc3VsdHMsCgkJCQkJCW5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKQoJCQkJCSk7CgkJCQkJcmV0dXJuIHJlc3VsdHM7CgkJCQl9IGNhdGNoICggcXNhRXJyb3IgKSB7CgkJCQkJbm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggc2VsZWN0b3IsIHRydWUgKTsKCQkJCX0gZmluYWxseSB7CgkJCQkJaWYgKCBuaWQgPT09IGV4cGFuZG8gKSB7CgkJCQkJCWNvbnRleHQucmVtb3ZlQXR0cmlidXRlKCAiaWQiICk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQoKCS8vIEFsbCBvdGhlcnMKCXJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltQ1NTLCAiJDEiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTsKfQoKLyoqCiAqIENyZWF0ZSBrZXktdmFsdWUgY2FjaGVzIG9mIGxpbWl0ZWQgc2l6ZQogKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoCiAqCXByb3BlcnR5IG5hbWUgdGhlIChzcGFjZS1zdWZmaXhlZCkgc3RyaW5nIGFuZCAoaWYgdGhlIGNhY2hlIGlzIGxhcmdlciB0aGFuIEV4cHIuY2FjaGVMZW5ndGgpCiAqCWRlbGV0aW5nIHRoZSBvbGRlc3QgZW50cnkKICovCmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkgewoJdmFyIGtleXMgPSBbXTsKCglmdW5jdGlvbiBjYWNoZSgga2V5LCB2YWx1ZSApIHsKCgkJLy8gVXNlIChrZXkgKyAiICIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcwoJCS8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvaXNzdWVzLzE1NykKCQlpZiAoIGtleXMucHVzaCgga2V5ICsgIiAiICkgPiBFeHByLmNhY2hlTGVuZ3RoICkgewoKCQkJLy8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzCgkJCWRlbGV0ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07CgkJfQoJCXJldHVybiAoIGNhY2hlWyBrZXkgKyAiICIgXSA9IHZhbHVlICk7Cgl9CglyZXR1cm4gY2FjaGU7Cn0KCi8qKgogKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IGpRdWVyeSBzZWxlY3RvciBtb2R1bGUKICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmsKICovCmZ1bmN0aW9uIG1hcmtGdW5jdGlvbiggZm4gKSB7CglmblsgZXhwYW5kbyBdID0gdHJ1ZTsKCXJldHVybiBmbjsKfQoKLyoqCiAqIFN1cHBvcnQgdGVzdGluZyB1c2luZyBhbiBlbGVtZW50CiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBlbGVtZW50IGFuZCByZXR1cm5zIGEgYm9vbGVhbiByZXN1bHQKICovCmZ1bmN0aW9uIGFzc2VydCggZm4gKSB7Cgl2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZmllbGRzZXQiICk7CgoJdHJ5IHsKCQlyZXR1cm4gISFmbiggZWwgKTsKCX0gY2F0Y2ggKCBlICkgewoJCXJldHVybiBmYWxzZTsKCX0gZmluYWxseSB7CgoJCS8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdAoJCWlmICggZWwucGFyZW50Tm9kZSApIHsKCQkJZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWwgKTsKCQl9CgoJCS8vIHJlbGVhc2UgbWVtb3J5IGluIElFCgkJZWwgPSBudWxsOwoJfQp9CgovKioKICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlcwogKiBAcGFyYW0ge1N0cmluZ30gdHlwZQogKi8KZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7CglyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CgkJcmV0dXJuIG5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgJiYgZWxlbS50eXBlID09PSB0eXBlOwoJfTsKfQoKLyoqCiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9ucwogKiBAcGFyYW0ge1N0cmluZ30gdHlwZQogKi8KZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkgewoJcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewoJCXJldHVybiAoIG5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgfHwgbm9kZU5hbWUoIGVsZW0sICJidXR0b24iICkgKSAmJgoJCQllbGVtLnR5cGUgPT09IHR5cGU7Cgl9Owp9CgovKioKICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciA6ZW5hYmxlZC86ZGlzYWJsZWQKICogQHBhcmFtIHtCb29sZWFufSBkaXNhYmxlZCB0cnVlIGZvciA6ZGlzYWJsZWQ7IGZhbHNlIGZvciA6ZW5hYmxlZAogKi8KZnVuY3Rpb24gY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGRpc2FibGVkICkgewoKCS8vIEtub3duIDpkaXNhYmxlZCBmYWxzZSBwb3NpdGl2ZXM6IGZpZWxkc2V0W2Rpc2FibGVkXSA+IGxlZ2VuZDpudGgtb2YtdHlwZShuKzIpIDpjYW4tZGlzYWJsZQoJcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewoKCQkvLyBPbmx5IGNlcnRhaW4gZWxlbWVudHMgY2FuIG1hdGNoIDplbmFibGVkIG9yIDpkaXNhYmxlZAoJCS8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWVuYWJsZWQKCQkvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1kaXNhYmxlZAoJCWlmICggImZvcm0iIGluIGVsZW0gKSB7CgoJCQkvLyBDaGVjayBmb3IgaW5oZXJpdGVkIGRpc2FibGVkbmVzcyBvbiByZWxldmFudCBub24tZGlzYWJsZWQgZWxlbWVudHM6CgkJCS8vICogbGlzdGVkIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBhIGRpc2FibGVkIGZpZWxkc2V0CgkJCS8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjYXRlZ29yeS1saXN0ZWQKCQkJLy8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtZmUtZGlzYWJsZWQKCQkJLy8gKiBvcHRpb24gZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBvcHRncm91cAoJCQkvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1vcHRpb24tZGlzYWJsZWQKCQkJLy8gQWxsIHN1Y2ggZWxlbWVudHMgaGF2ZSBhICJmb3JtIiBwcm9wZXJ0eS4KCQkJaWYgKCBlbGVtLnBhcmVudE5vZGUgJiYgZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2UgKSB7CgoJCQkJLy8gT3B0aW9uIGVsZW1lbnRzIGRlZmVyIHRvIGEgcGFyZW50IG9wdGdyb3VwIGlmIHByZXNlbnQKCQkJCWlmICggImxhYmVsIiBpbiBlbGVtICkgewoJCQkJCWlmICggImxhYmVsIiBpbiBlbGVtLnBhcmVudE5vZGUgKSB7CgkJCQkJCXJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRpc2FibGVkOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDsKCQkJCQl9CgkJCQl9CgoJCQkJLy8gU3VwcG9ydDogSUUgNiAtIDExKwoJCQkJLy8gVXNlIHRoZSBpc0Rpc2FibGVkIHNob3J0Y3V0IHByb3BlcnR5IHRvIGNoZWNrIGZvciBkaXNhYmxlZCBmaWVsZHNldCBhbmNlc3RvcnMKCQkJCXJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8CgoJCQkJCS8vIFdoZXJlIHRoZXJlIGlzIG5vIGlzRGlzYWJsZWQsIGNoZWNrIG1hbnVhbGx5CgkJCQkJZWxlbS5pc0Rpc2FibGVkICE9PSAhZGlzYWJsZWQgJiYKCQkJCQkJaW5EaXNhYmxlZEZpZWxkc2V0KCBlbGVtICkgPT09IGRpc2FibGVkOwoJCQl9CgoJCQlyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7CgoJCS8vIFRyeSB0byB3aW5ub3cgb3V0IGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgZGlzYWJsZWQgYmVmb3JlIHRydXN0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eS4KCQkvLyBTb21lIHZpY3RpbXMgZ2V0IGNhdWdodCBpbiBvdXIgbmV0IChsYWJlbCwgbGVnZW5kLCBtZW51LCB0cmFjayksIGJ1dCBpdCBzaG91bGRuJ3QKCQkvLyBldmVuIGV4aXN0IG9uIHRoZW0sIGxldCBhbG9uZSBoYXZlIGEgYm9vbGVhbiB2YWx1ZS4KCQl9IGVsc2UgaWYgKCAibGFiZWwiIGluIGVsZW0gKSB7CgkJCXJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDsKCQl9CgoJCS8vIFJlbWFpbmluZyBlbGVtZW50cyBhcmUgbmVpdGhlciA6ZW5hYmxlZCBub3IgOmRpc2FibGVkCgkJcmV0dXJuIGZhbHNlOwoJfTsKfQoKLyoqCiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHMKICogQHBhcmFtIHtGdW5jdGlvbn0gZm4KICovCmZ1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkgewoJcmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGFyZ3VtZW50ICkgewoJCWFyZ3VtZW50ID0gK2FyZ3VtZW50OwoJCXJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkgewoJCQl2YXIgaiwKCQkJCW1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksCgkJCQlpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDsKCgkJCS8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlcwoJCQl3aGlsZSAoIGktLSApIHsKCQkJCWlmICggc2VlZFsgKCBqID0gbWF0Y2hJbmRleGVzWyBpIF0gKSBdICkgewoJCQkJCXNlZWRbIGogXSA9ICEoIG1hdGNoZXNbIGogXSA9IHNlZWRbIGogXSApOwoJCQkJfQoJCQl9CgkJfSApOwoJfSApOwp9CgovKioKICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBqUXVlcnkgc2VsZWN0b3IgY29udGV4dAogKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0PX0gY29udGV4dAogKiBAcmV0dXJucyB7RWxlbWVudHxPYmplY3R8Qm9vbGVhbn0gVGhlIGlucHV0IG5vZGUgaWYgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGEgZmFsc3kgdmFsdWUKICovCmZ1bmN0aW9uIHRlc3RDb250ZXh0KCBjb250ZXh0ICkgewoJcmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmluZWQiICYmIGNvbnRleHQ7Cn0KCi8qKgogKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnQKICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gW25vZGVdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVzZSB0byBzZXQgdGhlIGRvY3VtZW50CiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnQKICovCmZ1bmN0aW9uIHNldERvY3VtZW50KCBub2RlICkgewoJdmFyIHN1YldpbmRvdywKCQlkb2MgPSBub2RlID8gbm9kZS5vd25lckRvY3VtZW50IHx8IG5vZGUgOiBwcmVmZXJyZWREb2M7CgoJLy8gUmV0dXJuIGVhcmx5IGlmIGRvYyBpcyBpbnZhbGlkIG9yIGFscmVhZHkgc2VsZWN0ZWQKCS8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4KwoJLy8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSAiUGVybWlzc2lvbiBkZW5pZWQiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZwoJLy8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLgoJLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcQoJaWYgKCBkb2MgPT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkgewoJCXJldHVybiBkb2N1bWVudDsKCX0KCgkvLyBVcGRhdGUgZ2xvYmFsIHZhcmlhYmxlcwoJZG9jdW1lbnQgPSBkb2M7Cglkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7Cglkb2N1bWVudElzSFRNTCA9ICFqUXVlcnkuaXNYTUxEb2MoIGRvY3VtZW50ICk7CgoJLy8gU3VwcG9ydDogaU9TIDcgb25seSwgSUUgOSAtIDExKwoJLy8gT2xkZXIgYnJvd3NlcnMgZGlkbid0IHN1cHBvcnQgdW5wcmVmaXhlZCBgbWF0Y2hlc2AuCgltYXRjaGVzID0gZG9jdW1lbnRFbGVtZW50Lm1hdGNoZXMgfHwKCQlkb2N1bWVudEVsZW1lbnQud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8CgkJZG9jdW1lbnRFbGVtZW50Lm1zTWF0Y2hlc1NlbGVjdG9yOwoKCS8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCsKCS8vIEFjY2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRzIGFmdGVyIHVubG9hZCB0aHJvd3MgInBlcm1pc3Npb24gZGVuaWVkIiBlcnJvcnMKCS8vIChzZWUgdHJhYy0xMzkzNikuCgkvLyBMaW1pdCB0aGUgZml4IHRvIElFICYgRWRnZSBMZWdhY3k7IGRlc3BpdGUgRWRnZSAxNSsgaW1wbGVtZW50aW5nIGBtYXRjaGVzYCwKCS8vIGFsbCBJRSA5KyBhbmQgRWRnZSBMZWdhY3kgdmVyc2lvbnMgaW1wbGVtZW50IGBtc01hdGNoZXNTZWxlY3RvcmAgYXMgd2VsbC4KCWlmICggZG9jdW1lbnRFbGVtZW50Lm1zTWF0Y2hlc1NlbGVjdG9yICYmCgoJCS8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4KwoJCS8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgIlBlcm1pc3Npb24gZGVuaWVkIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmcKCQkvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuCgkJLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcQoJCXByZWZlcnJlZERvYyAhPSBkb2N1bWVudCAmJgoJCSggc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcgKSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cgKSB7CgoJCS8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCsKCQlzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggInVubG9hZCIsIHVubG9hZEhhbmRsZXIgKTsKCX0KCgkvLyBTdXBwb3J0OiBJRSA8MTAKCS8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZQoJLy8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsCgkvLyBzbyB1c2UgYSByb3VuZGFib3V0IGdldEVsZW1lbnRzQnlOYW1lIHRlc3QKCXN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkgewoJCWRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggZWwgKS5pZCA9IGpRdWVyeS5leHBhbmRvOwoJCXJldHVybiAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgfHwKCQkJIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBqUXVlcnkuZXhwYW5kbyApLmxlbmd0aDsKCX0gKTsKCgkvLyBTdXBwb3J0OiBJRSA5IG9ubHkKCS8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvcgoJLy8gb24gYSBkaXNjb25uZWN0ZWQgbm9kZS4KCXN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHsKCQlyZXR1cm4gbWF0Y2hlcy5jYWxsKCBlbCwgIioiICk7Cgl9ICk7CgoJLy8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4KwoJLy8gSUUvRWRnZSBkb24ndCBzdXBwb3J0IHRoZSA6c2NvcGUgcHNldWRvLWNsYXNzLgoJc3VwcG9ydC5zY29wZSA9IGFzc2VydCggZnVuY3Rpb24oKSB7CgkJcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoICI6c2NvcGUiICk7Cgl9ICk7CgoJLy8gU3VwcG9ydDogQ2hyb21lIDEwNSAtIDExMSBvbmx5LCBTYWZhcmkgMTUuNCAtIDE2LjMgb25seQoJLy8gTWFrZSBzdXJlIHRoZSBgOmhhcygpYCBhcmd1bWVudCBpcyBwYXJzZWQgdW5mb3JnaXZpbmdseS4KCS8vIFdlIGluY2x1ZGUgYCpgIGluIHRoZSB0ZXN0IHRvIGRldGVjdCBidWdneSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmUKCS8vIF9zZWxlY3RpdmVseV8gZm9yZ2l2aW5nIChzcGVjaWZpY2FsbHkgd2hlbiB0aGUgbGlzdCBpbmNsdWRlcyBhdCBsZWFzdAoJLy8gb25lIHZhbGlkIHNlbGVjdG9yKS4KCS8vIE5vdGUgdGhhdCB3ZSB0cmVhdCBjb21wbGV0ZSBsYWNrIG9mIHN1cHBvcnQgZm9yIGA6aGFzKClgIGFzIGlmIGl0IHdlcmUKCS8vIHNwZWMtY29tcGxpYW50IHN1cHBvcnQsIHdoaWNoIGlzIGZpbmUgYmVjYXVzZSB1c2Ugb2YgYDpoYXMoKWAgaW4gc3VjaAoJLy8gZW52aXJvbm1lbnRzIHdpbGwgZmFpbCBpbiB0aGUgcVNBIHBhdGggYW5kIGZhbGwgYmFjayB0byBqUXVlcnkgdHJhdmVyc2FsCgkvLyBhbnl3YXkuCglzdXBwb3J0LmNzc0hhcyA9IGFzc2VydCggZnVuY3Rpb24oKSB7CgkJdHJ5IHsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvciggIjpoYXMoKiw6anFmYWtlKSIgKTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0gY2F0Y2ggKCBlICkgewoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9ICk7CgoJLy8gSUQgZmlsdGVyIGFuZCBmaW5kCglpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHsKCQlFeHByLmZpbHRlci5JRCA9IGZ1bmN0aW9uKCBpZCApIHsKCQkJdmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7CgkJCXJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKCQkJCXJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggImlkIiApID09PSBhdHRySWQ7CgkJCX07CgkJfTsKCQlFeHByLmZpbmQuSUQgPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7CgkJCWlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09ICJ1bmRlZmluZWQiICYmIGRvY3VtZW50SXNIVE1MICkgewoJCQkJdmFyIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApOwoJCQkJcmV0dXJuIGVsZW0gPyBbIGVsZW0gXSA6IFtdOwoJCQl9CgkJfTsKCX0gZWxzZSB7CgkJRXhwci5maWx0ZXIuSUQgPSAgZnVuY3Rpb24oIGlkICkgewoJCQl2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKCQkJcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewoJCQkJdmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSAidW5kZWZpbmVkIiAmJgoJCQkJCWVsZW0uZ2V0QXR0cmlidXRlTm9kZSggImlkIiApOwoJCQkJcmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkOwoJCQl9OwoJCX07CgoJCS8vIFN1cHBvcnQ6IElFIDYgLSA3IG9ubHkKCQkvLyBnZXRFbGVtZW50QnlJZCBpcyBub3QgcmVsaWFibGUgYXMgYSBmaW5kIHNob3J0Y3V0CgkJRXhwci5maW5kLklEID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkgewoJCQlpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSAidW5kZWZpbmVkIiAmJiBkb2N1bWVudElzSFRNTCApIHsKCQkJCXZhciBub2RlLCBpLCBlbGVtcywKCQkJCQllbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTsKCgkJCQlpZiAoIGVsZW0gKSB7CgoJCQkJCS8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlCgkJCQkJbm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggImlkIiApOwoJCQkJCWlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHsKCQkJCQkJcmV0dXJuIFsgZWxlbSBdOwoJCQkJCX0KCgkJCQkJLy8gRmFsbCBiYWNrIG9uIGdldEVsZW1lbnRzQnlOYW1lCgkJCQkJZWxlbXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBpZCApOwoJCQkJCWkgPSAwOwoJCQkJCXdoaWxlICggKCBlbGVtID0gZWxlbXNbIGkrKyBdICkgKSB7CgkJCQkJCW5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoICJpZCIgKTsKCQkJCQkJaWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkgewoJCQkJCQkJcmV0dXJuIFsgZWxlbSBdOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoKCQkJCXJldHVybiBbXTsKCQkJfQoJCX07Cgl9CgoJLy8gVGFnCglFeHByLmZpbmQuVEFHID0gZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKCQlpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZpbmVkIiApIHsKCQkJcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApOwoKCQkvLyBEb2N1bWVudEZyYWdtZW50IG5vZGVzIGRvbid0IGhhdmUgZ0VCVE4KCQl9IGVsc2UgewoJCQlyZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTsKCQl9Cgl9OwoKCS8vIENsYXNzCglFeHByLmZpbmQuQ0xBU1MgPSBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkgewoJCWlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gInVuZGVmaW5lZCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7CgkJCXJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApOwoJCX0KCX07CgoJLyogUVNBL21hdGNoZXNTZWxlY3RvcgoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKCS8vIFFTQSBhbmQgbWF0Y2hlc1NlbGVjdG9yIHN1cHBvcnQKCglyYnVnZ3lRU0EgPSBbXTsKCgkvLyBCdWlsZCBRU0EgcmVnZXgKCS8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmkKCWFzc2VydCggZnVuY3Rpb24oIGVsICkgewoKCQl2YXIgaW5wdXQ7CgoJCWRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggZWwgKS5pbm5lckhUTUwgPQoJCQkiPGEgaWQ9JyIgKyBleHBhbmRvICsgIicgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT4iICsKCQkJIjxzZWxlY3QgaWQ9JyIgKyBleHBhbmRvICsgIi1cclxcJyBkaXNhYmxlZD0nZGlzYWJsZWQnPiIgKwoJCQkiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iOwoKCQkvLyBTdXBwb3J0OiBpT1MgPD03IC0gOCBvbmx5CgkJLy8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCAidmFsdWUiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHkgaW4gc29tZSBYTUwgZG9jdW1lbnRzCgkJaWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggIltzZWxlY3RlZF0iICkubGVuZ3RoICkgewoJCQlyYnVnZ3lRU0EucHVzaCggIlxcWyIgKyB3aGl0ZXNwYWNlICsgIiooPzp2YWx1ZXwiICsgYm9vbGVhbnMgKyAiKSIgKTsKCQl9CgoJCS8vIFN1cHBvcnQ6IGlPUyA8PTcgLSA4IG9ubHkKCQlpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCAiW2lkfj0iICsgZXhwYW5kbyArICItXSIgKS5sZW5ndGggKSB7CgkJCXJidWdneVFTQS5wdXNoKCAifj0iICk7CgkJfQoKCQkvLyBTdXBwb3J0OiBpT1MgOCBvbmx5CgkJLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjg1MQoJCS8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmxpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHMKCQlpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCAiYSMiICsgZXhwYW5kbyArICIrKiIgKS5sZW5ndGggKSB7CgkJCXJidWdneVFTQS5wdXNoKCAiLiMuK1srfl0iICk7CgkJfQoKCQkvLyBTdXBwb3J0OiBDaHJvbWUgPD0xMDUrLCBGaXJlZm94IDw9MTA0KywgU2FmYXJpIDw9MTUuNCsKCQkvLyBJbiBzb21lIG9mIHRoZSBkb2N1bWVudCBraW5kcywgdGhlc2Ugc2VsZWN0b3JzIHdvdWxkbid0IHdvcmsgbmF0aXZlbHkuCgkJLy8gVGhpcyBpcyBwcm9iYWJseSBPSyBidXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdlIHdhbnQgdG8gbWFpbnRhaW4KCQkvLyBoYW5kbGluZyB0aGVtIHRocm91Z2ggalF1ZXJ5IHRyYXZlcnNhbCBpbiBqUXVlcnkgMy54LgoJCWlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoICI6Y2hlY2tlZCIgKS5sZW5ndGggKSB7CgkJCXJidWdneVFTQS5wdXNoKCAiOmNoZWNrZWQiICk7CgkJfQoKCQkvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHMKCQkvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnQKCQlpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJpbnB1dCIgKTsKCQlpbnB1dC5zZXRBdHRyaWJ1dGUoICJ0eXBlIiwgImhpZGRlbiIgKTsKCQllbC5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoICJuYW1lIiwgIkQiICk7CgoJCS8vIFN1cHBvcnQ6IElFIDkgLSAxMSsKCQkvLyBJRSdzIDpkaXNhYmxlZCBzZWxlY3RvciBkb2VzIG5vdCBwaWNrIHVwIHRoZSBjaGlsZHJlbiBvZiBkaXNhYmxlZCBmaWVsZHNldHMKCQkvLyBTdXBwb3J0OiBDaHJvbWUgPD0xMDUrLCBGaXJlZm94IDw9MTA0KywgU2FmYXJpIDw9MTUuNCsKCQkvLyBJbiBzb21lIG9mIHRoZSBkb2N1bWVudCBraW5kcywgdGhlc2Ugc2VsZWN0b3JzIHdvdWxkbid0IHdvcmsgbmF0aXZlbHkuCgkJLy8gVGhpcyBpcyBwcm9iYWJseSBPSyBidXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdlIHdhbnQgdG8gbWFpbnRhaW4KCQkvLyBoYW5kbGluZyB0aGVtIHRocm91Z2ggalF1ZXJ5IHRyYXZlcnNhbCBpbiBqUXVlcnkgMy54LgoJCWRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggZWwgKS5kaXNhYmxlZCA9IHRydWU7CgkJaWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCAiOmRpc2FibGVkIiApLmxlbmd0aCAhPT0gMiApIHsKCQkJcmJ1Z2d5UVNBLnB1c2goICI6ZW5hYmxlZCIsICI6ZGlzYWJsZWQiICk7CgkJfQoKCQkvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTUgLSAxOCsKCQkvLyBJRSAxMS9FZGdlIGRvbid0IGZpbmQgZWxlbWVudHMgb24gYSBgW25hbWU9JyddYCBxdWVyeSBpbiBzb21lIGNhc2VzLgoJCS8vIEFkZGluZyBhIHRlbXBvcmFyeSBhdHRyaWJ1dGUgdG8gdGhlIGRvY3VtZW50IGJlZm9yZSB0aGUgc2VsZWN0aW9uIHdvcmtzCgkJLy8gYXJvdW5kIHRoZSBpc3N1ZS4KCQkvLyBJbnRlcmVzdGluZ2x5LCBJRSAxMCAmIG9sZGVyIGRvbid0IHNlZW0gdG8gaGF2ZSB0aGUgaXNzdWUuCgkJaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiaW5wdXQiICk7CgkJaW5wdXQuc2V0QXR0cmlidXRlKCAibmFtZSIsICIiICk7CgkJZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICk7CgkJaWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggIltuYW1lPScnXSIgKS5sZW5ndGggKSB7CgkJCXJidWdneVFTQS5wdXNoKCAiXFxbIiArIHdoaXRlc3BhY2UgKyAiKm5hbWUiICsgd2hpdGVzcGFjZSArICIqPSIgKwoJCQkJd2hpdGVzcGFjZSArICIqKD86Jyd8XCJcIikiICk7CgkJfQoJfSApOwoKCWlmICggIXN1cHBvcnQuY3NzSGFzICkgewoKCQkvLyBTdXBwb3J0OiBDaHJvbWUgMTA1IC0gMTEwKywgU2FmYXJpIDE1LjQgLSAxNi4zKwoJCS8vIE91ciByZWd1bGFyIGB0cnktY2F0Y2hgIG1lY2hhbmlzbSBmYWlscyB0byBkZXRlY3QgbmF0aXZlbHktdW5zdXBwb3J0ZWQKCQkvLyBwc2V1ZG8tY2xhc3NlcyBpbnNpZGUgYDpoYXMoKWAgKHN1Y2ggYXMgYDpoYXMoOmNvbnRhaW5zKCJGb28iKSlgKQoJCS8vIGluIGJyb3dzZXJzIHRoYXQgcGFyc2UgdGhlIGA6aGFzKClgIGFyZ3VtZW50IGFzIGEgZm9yZ2l2aW5nIHNlbGVjdG9yIGxpc3QuCgkJLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3NlbGVjdG9ycy8jcmVsYXRpb25hbCBub3cgcmVxdWlyZXMgdGhlIGFyZ3VtZW50CgkJLy8gdG8gYmUgcGFyc2VkIHVuZm9yZ2l2aW5nbHksIGJ1dCBicm93c2VycyBoYXZlIG5vdCB5ZXQgZnVsbHkgYWRqdXN0ZWQuCgkJcmJ1Z2d5UVNBLnB1c2goICI6aGFzIiApOwoJfQoKCXJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oICJ8IiApICk7CgoJLyogU29ydGluZwoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKCS8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmcKCXNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkgewoKCQkvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbAoJCWlmICggYSA9PT0gYiApIHsKCQkJaGFzRHVwbGljYXRlID0gdHJ1ZTsKCQkJcmV0dXJuIDA7CgkJfQoKCQkvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uCgkJdmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uOwoJCWlmICggY29tcGFyZSApIHsKCQkJcmV0dXJuIGNvbXBhcmU7CgkJfQoKCQkvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50CgkJLy8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrCgkJLy8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSAiUGVybWlzc2lvbiBkZW5pZWQiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZwoJCS8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay4KCQkvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxCgkJY29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9PSAoIGIub3duZXJEb2N1bWVudCB8fCBiICkgPwoJCQlhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOgoKCQkJLy8gT3RoZXJ3aXNlIHdlIGtub3cgdGhleSBhcmUgZGlzY29ubmVjdGVkCgkJCTE7CgoJCS8vIERpc2Nvbm5lY3RlZCBub2RlcwoJCWlmICggY29tcGFyZSAmIDEgfHwKCQkJKCAhc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlICkgKSB7CgoJCQkvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnQKCQkJLy8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrCgkJCS8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgIlBlcm1pc3Npb24gZGVuaWVkIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmcKCQkJLy8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLgoJCQkvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxCgkJCWlmICggYSA9PT0gZG9jdW1lbnQgfHwgYS5vd25lckRvY3VtZW50ID09IHByZWZlcnJlZERvYyAmJgoJCQkJZmluZC5jb250YWlucyggcHJlZmVycmVkRG9jLCBhICkgKSB7CgkJCQlyZXR1cm4gLTE7CgkJCX0KCgkJCS8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4KwoJCQkvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhICJQZXJtaXNzaW9uIGRlbmllZCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nCgkJCS8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay4KCQkJLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcQoJCQlpZiAoIGIgPT09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiYKCQkJCWZpbmQuY29udGFpbnMoIHByZWZlcnJlZERvYywgYiApICkgewoJCQkJcmV0dXJuIDE7CgkJCX0KCgkJCS8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyCgkJCXJldHVybiBzb3J0SW5wdXQgPwoJCQkJKCBpbmRleE9mLmNhbGwoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZi5jYWxsKCBzb3J0SW5wdXQsIGIgKSApIDoKCQkJCTA7CgkJfQoKCQlyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7Cgl9OwoKCXJldHVybiBkb2N1bWVudDsKfQoKZmluZC5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkgewoJcmV0dXJuIGZpbmQoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1lbnRzICk7Cn07CgpmaW5kLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkgewoJc2V0RG9jdW1lbnQoIGVsZW0gKTsKCglpZiAoIGRvY3VtZW50SXNIVE1MICYmCgkJIW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIGV4cHIgKyAiICIgXSAmJgoJCSggIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApICkgewoKCQl0cnkgewoJCQl2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7CgoJCQkvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzCgkJCWlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHwKCgkJCQkJLy8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnQKCQkJCQkvLyBmcmFnbWVudCBpbiBJRSA5CgkJCQkJZWxlbS5kb2N1bWVudCAmJiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHsKCQkJCXJldHVybiByZXQ7CgkJCX0KCQl9IGNhdGNoICggZSApIHsKCQkJbm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggZXhwciwgdHJ1ZSApOwoJCX0KCX0KCglyZXR1cm4gZmluZCggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDsKfTsKCmZpbmQuY29udGFpbnMgPSBmdW5jdGlvbiggY29udGV4dCwgZWxlbSApIHsKCgkvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWQKCS8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4KwoJLy8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSAiUGVybWlzc2lvbiBkZW5pZWQiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZwoJLy8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLgoJLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcQoJaWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT0gZG9jdW1lbnQgKSB7CgkJc2V0RG9jdW1lbnQoIGNvbnRleHQgKTsKCX0KCXJldHVybiBqUXVlcnkuY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTsKfTsKCgpmaW5kLmF0dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKCgkvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWQKCS8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4KwoJLy8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSAiUGVybWlzc2lvbiBkZW5pZWQiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZwoJLy8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLgoJLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcQoJaWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT0gZG9jdW1lbnQgKSB7CgkJc2V0RG9jdW1lbnQoIGVsZW0gKTsKCX0KCgl2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLAoKCQkvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIHRyYWMtMTM4MDcpCgkJdmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgPwoJCQlmbiggZWxlbSwgbmFtZSwgIWRvY3VtZW50SXNIVE1MICkgOgoJCQl1bmRlZmluZWQ7CgoJaWYgKCB2YWwgIT09IHVuZGVmaW5lZCApIHsKCQlyZXR1cm4gdmFsOwoJfQoKCXJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApOwp9OwoKZmluZC5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7Cgl0aHJvdyBuZXcgRXJyb3IoICJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiICsgbXNnICk7Cn07CgovKioKICogRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlcwogKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0cwogKi8KalF1ZXJ5LnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHsKCXZhciBlbGVtLAoJCWR1cGxpY2F0ZXMgPSBbXSwKCQlqID0gMCwKCQlpID0gMDsKCgkvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlCgkvLwoJLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCsKCS8vIFRlc3RpbmcgZm9yIGRldGVjdGluZyBkdXBsaWNhdGVzIGlzIHVucHJlZGljdGFibGUgc28gaW5zdGVhZCBhc3N1bWUgd2UgY2FuJ3QKCS8vIGRlcGVuZCBvbiBkdXBsaWNhdGUgZGV0ZWN0aW9uIGluIGFsbCBicm93c2VycyB3aXRob3V0IGEgc3RhYmxlIHNvcnQuCgloYXNEdXBsaWNhdGUgPSAhc3VwcG9ydC5zb3J0U3RhYmxlOwoJc29ydElucHV0ID0gIXN1cHBvcnQuc29ydFN0YWJsZSAmJiBzbGljZS5jYWxsKCByZXN1bHRzLCAwICk7Cglzb3J0LmNhbGwoIHJlc3VsdHMsIHNvcnRPcmRlciApOwoKCWlmICggaGFzRHVwbGljYXRlICkgewoJCXdoaWxlICggKCBlbGVtID0gcmVzdWx0c1sgaSsrIF0gKSApIHsKCQkJaWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7CgkJCQlqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7CgkJCX0KCQl9CgkJd2hpbGUgKCBqLS0gKSB7CgkJCXNwbGljZS5jYWxsKCByZXN1bHRzLCBkdXBsaWNhdGVzWyBqIF0sIDEgKTsKCQl9Cgl9CgoJLy8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHMKCS8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNQoJc29ydElucHV0ID0gbnVsbDsKCglyZXR1cm4gcmVzdWx0czsKfTsKCmpRdWVyeS5mbi51bmlxdWVTb3J0ID0gZnVuY3Rpb24oKSB7CglyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS51bmlxdWVTb3J0KCBzbGljZS5hcHBseSggdGhpcyApICkgKTsKfTsKCkV4cHIgPSBqUXVlcnkuZXhwciA9IHsKCgkvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXIKCWNhY2hlTGVuZ3RoOiA1MCwKCgljcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbiwKCgltYXRjaDogbWF0Y2hFeHByLAoKCWF0dHJIYW5kbGU6IHt9LAoKCWZpbmQ6IHt9LAoKCXJlbGF0aXZlOiB7CgkJIj4iOiB7IGRpcjogInBhcmVudE5vZGUiLCBmaXJzdDogdHJ1ZSB9LAoJCSIgIjogeyBkaXI6ICJwYXJlbnROb2RlIiB9LAoJCSIrIjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciLCBmaXJzdDogdHJ1ZSB9LAoJCSJ+IjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciIH0KCX0sCgoJcHJlRmlsdGVyOiB7CgkJQVRUUjogZnVuY3Rpb24oIG1hdGNoICkgewoJCQltYXRjaFsgMSBdID0gbWF0Y2hbIDEgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApOwoKCQkJLy8gTW92ZSB0aGUgZ2l2ZW4gdmFsdWUgdG8gbWF0Y2hbM10gd2hldGhlciBxdW90ZWQgb3IgdW5xdW90ZWQKCQkJbWF0Y2hbIDMgXSA9ICggbWF0Y2hbIDMgXSB8fCBtYXRjaFsgNCBdIHx8IG1hdGNoWyA1IF0gfHwgIiIgKQoJCQkJLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7CgoJCQlpZiAoIG1hdGNoWyAyIF0gPT09ICJ+PSIgKSB7CgkJCQltYXRjaFsgMyBdID0gIiAiICsgbWF0Y2hbIDMgXSArICIgIjsKCQkJfQoKCQkJcmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7CgkJfSwKCgkJQ0hJTEQ6IGZ1bmN0aW9uKCBtYXRjaCApIHsKCgkJCS8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbIkNISUxEIl0KCQkJCTEgdHlwZSAob25seXxudGh8Li4uKQoJCQkJMiB3aGF0IChjaGlsZHxvZi10eXBlKQoJCQkJMyBhcmd1bWVudCAoZXZlbnxvZGR8XGQqfFxkKm4oWystXVxkKyk/fC4uLikKCQkJCTQgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1lbnQgKFsrLV0/XGQqbnwpCgkJCQk1IHNpZ24gb2YgeG4tY29tcG9uZW50CgkJCQk2IHggb2YgeG4tY29tcG9uZW50CgkJCQk3IHNpZ24gb2YgeS1jb21wb25lbnQKCQkJCTggeSBvZiB5LWNvbXBvbmVudAoJCQkqLwoJCQltYXRjaFsgMSBdID0gbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpOwoKCQkJaWYgKCBtYXRjaFsgMSBdLnNsaWNlKCAwLCAzICkgPT09ICJudGgiICkgewoKCQkJCS8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50CgkJCQlpZiAoICFtYXRjaFsgMyBdICkgewoJCQkJCWZpbmQuZXJyb3IoIG1hdGNoWyAwIF0gKTsKCQkJCX0KCgkJCQkvLyBudW1lcmljIHggYW5kIHkgcGFyYW1ldGVycyBmb3IgRXhwci5maWx0ZXIuQ0hJTEQKCQkJCS8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzEKCQkJCW1hdGNoWyA0IF0gPSArKCBtYXRjaFsgNCBdID8KCQkJCQltYXRjaFsgNSBdICsgKCBtYXRjaFsgNiBdIHx8IDEgKSA6CgkJCQkJMiAqICggbWF0Y2hbIDMgXSA9PT0gImV2ZW4iIHx8IG1hdGNoWyAzIF0gPT09ICJvZGQiICkKCQkJCSk7CgkJCQltYXRjaFsgNSBdID0gKyggKCBtYXRjaFsgNyBdICsgbWF0Y2hbIDggXSApIHx8IG1hdGNoWyAzIF0gPT09ICJvZGQiICk7CgoJCQkvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHMKCQkJfSBlbHNlIGlmICggbWF0Y2hbIDMgXSApIHsKCQkJCWZpbmQuZXJyb3IoIG1hdGNoWyAwIF0gKTsKCQkJfQoKCQkJcmV0dXJuIG1hdGNoOwoJCX0sCgoJCVBTRVVETzogZnVuY3Rpb24oIG1hdGNoICkgewoJCQl2YXIgZXhjZXNzLAoJCQkJdW5xdW90ZWQgPSAhbWF0Y2hbIDYgXSAmJiBtYXRjaFsgMiBdOwoKCQkJaWYgKCBtYXRjaEV4cHIuQ0hJTEQudGVzdCggbWF0Y2hbIDAgXSApICkgewoJCQkJcmV0dXJuIG51bGw7CgkJCX0KCgkJCS8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzCgkJCWlmICggbWF0Y2hbIDMgXSApIHsKCQkJCW1hdGNoWyAyIF0gPSBtYXRjaFsgNCBdIHx8IG1hdGNoWyA1IF0gfHwgIiI7CgoJCQkvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50cwoJCQl9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiYKCgkJCQkvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUgKHJlY3Vyc2l2ZWx5KQoJCQkJKCBleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSApICYmCgoJCQkJLy8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzCgkJCQkoIGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoICIpIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGggKSApIHsKCgkJCQkvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleAoJCQkJbWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAsIGV4Y2VzcyApOwoJCQkJbWF0Y2hbIDIgXSA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTsKCQkJfQoKCQkJLy8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpCgkJCXJldHVybiBtYXRjaC5zbGljZSggMCwgMyApOwoJCX0KCX0sCgoJZmlsdGVyOiB7CgoJCVRBRzogZnVuY3Rpb24oIG5vZGVOYW1lU2VsZWN0b3IgKSB7CgkJCXZhciBleHBlY3RlZE5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7CgkJCXJldHVybiBub2RlTmFtZVNlbGVjdG9yID09PSAiKiIgPwoJCQkJZnVuY3Rpb24oKSB7CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9IDoKCQkJCWZ1bmN0aW9uKCBlbGVtICkgewoJCQkJCXJldHVybiBub2RlTmFtZSggZWxlbSwgZXhwZWN0ZWROb2RlTmFtZSApOwoJCQkJfTsKCQl9LAoKCQlDTEFTUzogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHsKCQkJdmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFzc05hbWUgKyAiICIgXTsKCgkJCXJldHVybiBwYXR0ZXJuIHx8CgkJCQkoIHBhdHRlcm4gPSBuZXcgUmVnRXhwKCAiKF58IiArIHdoaXRlc3BhY2UgKyAiKSIgKyBjbGFzc05hbWUgKwoJCQkJCSIoIiArIHdoaXRlc3BhY2UgKyAifCQpIiApICkgJiYKCQkJCWNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7CgkJCQkJcmV0dXJuIHBhdHRlcm4udGVzdCgKCQkJCQkJdHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSAic3RyaW5nIiAmJiBlbGVtLmNsYXNzTmFtZSB8fAoJCQkJCQkJdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSAidW5kZWZpbmVkIiAmJgoJCQkJCQkJCWVsZW0uZ2V0QXR0cmlidXRlKCAiY2xhc3MiICkgfHwKCQkJCQkJCSIiCgkJCQkJKTsKCQkJCX0gKTsKCQl9LAoKCQlBVFRSOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkgewoJCQlyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CgkJCQl2YXIgcmVzdWx0ID0gZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7CgoJCQkJaWYgKCByZXN1bHQgPT0gbnVsbCApIHsKCQkJCQlyZXR1cm4gb3BlcmF0b3IgPT09ICIhPSI7CgkJCQl9CgkJCQlpZiAoICFvcGVyYXRvciApIHsKCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCX0KCgkJCQlyZXN1bHQgKz0gIiI7CgoJCQkJaWYgKCBvcGVyYXRvciA9PT0gIj0iICkgewoJCQkJCXJldHVybiByZXN1bHQgPT09IGNoZWNrOwoJCQkJfQoJCQkJaWYgKCBvcGVyYXRvciA9PT0gIiE9IiApIHsKCQkJCQlyZXR1cm4gcmVzdWx0ICE9PSBjaGVjazsKCQkJCX0KCQkJCWlmICggb3BlcmF0b3IgPT09ICJePSIgKSB7CgkJCQkJcmV0dXJuIGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwOwoJCQkJfQoJCQkJaWYgKCBvcGVyYXRvciA9PT0gIio9IiApIHsKCQkJCQlyZXR1cm4gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPiAtMTsKCQkJCX0KCQkJCWlmICggb3BlcmF0b3IgPT09ICIkPSIgKSB7CgkJCQkJcmV0dXJuIGNoZWNrICYmIHJlc3VsdC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjazsKCQkJCX0KCQkJCWlmICggb3BlcmF0b3IgPT09ICJ+PSIgKSB7CgkJCQkJcmV0dXJuICggIiAiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCAiICIgKSArICIgIiApCgkJCQkJCS5pbmRleE9mKCBjaGVjayApID4gLTE7CgkJCQl9CgkJCQlpZiAoIG9wZXJhdG9yID09PSAifD0iICkgewoJCQkJCXJldHVybiByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArICItIjsKCQkJCX0KCgkJCQlyZXR1cm4gZmFsc2U7CgkJCX07CgkJfSwKCgkJQ0hJTEQ6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBfYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkgewoJCQl2YXIgc2ltcGxlID0gdHlwZS5zbGljZSggMCwgMyApICE9PSAibnRoIiwKCQkJCWZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSAibGFzdCIsCgkJCQlvZlR5cGUgPSB3aGF0ID09PSAib2YtdHlwZSI7CgoJCQlyZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/CgoJCQkJLy8gU2hvcnRjdXQgZm9yIDpudGgtKihuKQoJCQkJZnVuY3Rpb24oIGVsZW0gKSB7CgkJCQkJcmV0dXJuICEhZWxlbS5wYXJlbnROb2RlOwoJCQkJfSA6CgoJCQkJZnVuY3Rpb24oIGVsZW0sIF9jb250ZXh0LCB4bWwgKSB7CgkJCQkJdmFyIGNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LAoJCQkJCQlkaXIgPSBzaW1wbGUgIT09IGZvcndhcmQgPyAibmV4dFNpYmxpbmciIDogInByZXZpb3VzU2libGluZyIsCgkJCQkJCXBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSwKCQkJCQkJbmFtZSA9IG9mVHlwZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksCgkJCQkJCXVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlLAoJCQkJCQlkaWZmID0gZmFsc2U7CgoJCQkJCWlmICggcGFyZW50ICkgewoKCQkJCQkJLy8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKQoJCQkJCQlpZiAoIHNpbXBsZSApIHsKCQkJCQkJCXdoaWxlICggZGlyICkgewoJCQkJCQkJCW5vZGUgPSBlbGVtOwoJCQkJCQkJCXdoaWxlICggKCBub2RlID0gbm9kZVsgZGlyIF0gKSApIHsKCQkJCQkJCQkJaWYgKCBvZlR5cGUgPwoJCQkJCQkJCQkJbm9kZU5hbWUoIG5vZGUsIG5hbWUgKSA6CgkJCQkJCQkJCQlub2RlLm5vZGVUeXBlID09PSAxICkgewoKCQkJCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJCQkJfQoJCQkJCQkJCX0KCgkJCQkJCQkJLy8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pCgkJCQkJCQkJc3RhcnQgPSBkaXIgPSB0eXBlID09PSAib25seSIgJiYgIXN0YXJ0ICYmICJuZXh0U2libGluZyI7CgkJCQkJCQl9CgkJCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCQkJfQoKCQkJCQkJc3RhcnQgPSBbIGZvcndhcmQgPyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTsKCgkJCQkJCS8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgCgkJCQkJCWlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHsKCgkJCQkJCQkvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlvdXNseS1jYWNoZWQgaW5kZXgKCQkJCQkJCW91dGVyQ2FjaGUgPSBwYXJlbnRbIGV4cGFuZG8gXSB8fCAoIHBhcmVudFsgZXhwYW5kbyBdID0ge30gKTsKCQkJCQkJCWNhY2hlID0gb3V0ZXJDYWNoZVsgdHlwZSBdIHx8IFtdOwoJCQkJCQkJbm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdOwoJCQkJCQkJZGlmZiA9IG5vZGVJbmRleCAmJiBjYWNoZVsgMiBdOwoJCQkJCQkJbm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07CgoJCQkJCQkJd2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8CgoJCQkJCQkJCS8vIEZhbGxiYWNrIHRvIHNlZWtpbmcgYGVsZW1gIGZyb20gdGhlIHN0YXJ0CgkJCQkJCQkJKCBkaWZmID0gbm9kZUluZGV4ID0gMCApIHx8IHN0YXJ0LnBvcCgpICkgKSB7CgoJCQkJCQkJCS8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrCgkJCQkJCQkJaWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkgewoJCQkJCQkJCQlvdXRlckNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIG5vZGVJbmRleCwgZGlmZiBdOwoJCQkJCQkJCQlicmVhazsKCQkJCQkJCQl9CgkJCQkJCQl9CgoJCQkJCQl9IGVsc2UgewoKCQkJCQkJCS8vIFVzZSBwcmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZQoJCQkJCQkJaWYgKCB1c2VDYWNoZSApIHsKCQkJCQkJCQlvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8ICggZWxlbVsgZXhwYW5kbyBdID0ge30gKTsKCQkJCQkJCQljYWNoZSA9IG91dGVyQ2FjaGVbIHR5cGUgXSB8fCBbXTsKCQkJCQkJCQlub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07CgkJCQkJCQkJZGlmZiA9IG5vZGVJbmRleDsKCQkJCQkJCX0KCgkJCQkJCQkvLyB4bWwgOm50aC1jaGlsZCguLi4pCgkJCQkJCQkvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pCgkJCQkJCQlpZiAoIGRpZmYgPT09IGZhbHNlICkgewoKCQkJCQkJCQkvLyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVtYCBmcm9tIHRoZSBzdGFydAoJCQkJCQkJCXdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fAoJCQkJCQkJCQkoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHsKCgkJCQkJCQkJCWlmICggKCBvZlR5cGUgPwoJCQkJCQkJCQkJbm9kZU5hbWUoIG5vZGUsIG5hbWUgKSA6CgkJCQkJCQkJCQlub2RlLm5vZGVUeXBlID09PSAxICkgJiYKCQkJCQkJCQkJCSsrZGlmZiApIHsKCgkJCQkJCQkJCQkvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50CgkJCQkJCQkJCQlpZiAoIHVzZUNhY2hlICkgewoJCQkJCQkJCQkJCW91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwKCQkJCQkJCQkJCQkJKCBub2RlWyBleHBhbmRvIF0gPSB7fSApOwoJCQkJCQkJCQkJCW91dGVyQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdOwoJCQkJCQkJCQkJfQoKCQkJCQkJCQkJCWlmICggbm9kZSA9PT0gZWxlbSApIHsKCQkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfQoKCQkJCQkJLy8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemUKCQkJCQkJZGlmZiAtPSBsYXN0OwoJCQkJCQlyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTsKCQkJCQl9CgkJCQl9OwoJCX0sCgoJCVBTRVVETzogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7CgoJCQkvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUKCQkJLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXMKCQkJLy8gUHJpb3JpdGl6ZSBieSBjYXNlIHNlbnNpdGl2aXR5IGluIGNhc2UgY3VzdG9tIHBzZXVkb3MgYXJlIGFkZGVkIHdpdGggdXBwZXJjYXNlIGxldHRlcnMKCQkJLy8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvcwoJCQl2YXIgYXJncywKCQkJCWZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHwKCQkJCQlmaW5kLmVycm9yKCAidW5zdXBwb3J0ZWQgcHNldWRvOiAiICsgcHNldWRvICk7CgoJCQkvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0CgkJCS8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uCgkJCS8vIGp1c3QgYXMgalF1ZXJ5IGRvZXMKCQkJaWYgKCBmblsgZXhwYW5kbyBdICkgewoJCQkJcmV0dXJuIGZuKCBhcmd1bWVudCApOwoJCQl9CgoJCQkvLyBCdXQgbWFpbnRhaW4gc3VwcG9ydCBmb3Igb2xkIHNpZ25hdHVyZXMKCQkJaWYgKCBmbi5sZW5ndGggPiAxICkgewoJCQkJYXJncyA9IFsgcHNldWRvLCBwc2V1ZG8sICIiLCBhcmd1bWVudCBdOwoJCQkJcmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/CgkJCQkJbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHsKCQkJCQkJdmFyIGlkeCwKCQkJCQkJCW1hdGNoZWQgPSBmbiggc2VlZCwgYXJndW1lbnQgKSwKCQkJCQkJCWkgPSBtYXRjaGVkLmxlbmd0aDsKCQkJCQkJd2hpbGUgKCBpLS0gKSB7CgkJCQkJCQlpZHggPSBpbmRleE9mLmNhbGwoIHNlZWQsIG1hdGNoZWRbIGkgXSApOwoJCQkJCQkJc2VlZFsgaWR4IF0gPSAhKCBtYXRjaGVzWyBpZHggXSA9IG1hdGNoZWRbIGkgXSApOwoJCQkJCQl9CgkJCQkJfSApIDoKCQkJCQlmdW5jdGlvbiggZWxlbSApIHsKCQkJCQkJcmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7CgkJCQkJfTsKCQkJfQoKCQkJcmV0dXJuIGZuOwoJCX0KCX0sCgoJcHNldWRvczogewoKCQkvLyBQb3RlbnRpYWxseSBjb21wbGV4IHBzZXVkb3MKCQlub3Q6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlbGVjdG9yICkgewoKCQkJLy8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGUKCQkJLy8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmcKCQkJLy8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzCgkJCXZhciBpbnB1dCA9IFtdLAoJCQkJcmVzdWx0cyA9IFtdLAoJCQkJbWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltQ1NTLCAiJDEiICkgKTsKCgkJCXJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gPwoJCQkJbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcywgX2NvbnRleHQsIHhtbCApIHsKCQkJCQl2YXIgZWxlbSwKCQkJCQkJdW5tYXRjaGVkID0gbWF0Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBbXSApLAoJCQkJCQlpID0gc2VlZC5sZW5ndGg7CgoJCQkJCS8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmAKCQkJCQl3aGlsZSAoIGktLSApIHsKCQkJCQkJaWYgKCAoIGVsZW0gPSB1bm1hdGNoZWRbIGkgXSApICkgewoJCQkJCQkJc2VlZFsgaSBdID0gISggbWF0Y2hlc1sgaSBdID0gZWxlbSApOwoJCQkJCQl9CgkJCQkJfQoJCQkJfSApIDoKCQkJCWZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkgewoJCQkJCWlucHV0WyAwIF0gPSBlbGVtOwoJCQkJCW1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTsKCgkJCQkJLy8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudAoJCQkJCS8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvaXNzdWVzLzI5OSkKCQkJCQlpbnB1dFsgMCBdID0gbnVsbDsKCQkJCQlyZXR1cm4gIXJlc3VsdHMucG9wKCk7CgkJCQl9OwoJCX0gKSwKCgkJaGFzOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKCQkJcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewoJCQkJcmV0dXJuIGZpbmQoIHNlbGVjdG9yLCBlbGVtICkubGVuZ3RoID4gMDsKCQkJfTsKCQl9ICksCgoJCWNvbnRhaW5zOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCB0ZXh0ICkgewoJCQl0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApOwoJCQlyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CgkJCQlyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGpRdWVyeS50ZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTsKCQkJfTsKCQl9ICksCgoJCS8vICJXaGV0aGVyIGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yCgkJLy8gaXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUKCQkvLyBiZWluZyBlcXVhbCB0byB0aGUgaWRlbnRpZmllciBDLAoJCS8vIG9yIGJlZ2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgIi0iLgoJCS8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LgoJCS8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuIgoJCS8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvCgkJbGFuZzogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggbGFuZyApIHsKCgkJCS8vIGxhbmcgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXIKCQkJaWYgKCAhcmlkZW50aWZpZXIudGVzdCggbGFuZyB8fCAiIiApICkgewoJCQkJZmluZC5lcnJvciggInVuc3VwcG9ydGVkIGxhbmc6ICIgKyBsYW5nICk7CgkJCX0KCQkJbGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpOwoJCQlyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CgkJCQl2YXIgZWxlbUxhbmc7CgkJCQlkbyB7CgkJCQkJaWYgKCAoIGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUwgPwoJCQkJCQllbGVtLmxhbmcgOgoJCQkJCQllbGVtLmdldEF0dHJpYnV0ZSggInhtbDpsYW5nIiApIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCAibGFuZyIgKSApICkgewoKCQkJCQkJZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpOwoJCQkJCQlyZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArICItIiApID09PSAwOwoJCQkJCX0KCQkJCX0gd2hpbGUgKCAoIGVsZW0gPSBlbGVtLnBhcmVudE5vZGUgKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX07CgkJfSApLAoKCQkvLyBNaXNjZWxsYW5lb3VzCgkJdGFyZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKCQkJdmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhhc2g7CgkJCXJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDsKCQl9LAoKCQlyb290OiBmdW5jdGlvbiggZWxlbSApIHsKCQkJcmV0dXJuIGVsZW0gPT09IGRvY3VtZW50RWxlbWVudDsKCQl9LAoKCQlmb2N1czogZnVuY3Rpb24oIGVsZW0gKSB7CgkJCXJldHVybiBlbGVtID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmCgkJCQlkb2N1bWVudC5oYXNGb2N1cygpICYmCgkJCQkhISggZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCApOwoJCX0sCgoJCS8vIEJvb2xlYW4gcHJvcGVydGllcwoJCWVuYWJsZWQ6IGNyZWF0ZURpc2FibGVkUHNldWRvKCBmYWxzZSApLAoJCWRpc2FibGVkOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggdHJ1ZSApLAoKCQljaGVja2VkOiBmdW5jdGlvbiggZWxlbSApIHsKCgkJCS8vIEluIENTUzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50cwoJCQkvLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWQKCQkJcmV0dXJuICggbm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSAmJiAhIWVsZW0uY2hlY2tlZCApIHx8CgkJCQkoIG5vZGVOYW1lKCBlbGVtLCAib3B0aW9uIiApICYmICEhZWxlbS5zZWxlY3RlZCApOwoJCX0sCgoJCXNlbGVjdGVkOiBmdW5jdGlvbiggZWxlbSApIHsKCgkJCS8vIFN1cHBvcnQ6IElFIDw9MTErCgkJCS8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eQoJCQkvLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gdHJlYXQgdGhlIGRlZmF1bHQgb3B0aW9uIGFzCgkJCS8vIHNlbGVjdGVkIHdoZW4gaW4gYW4gb3B0Z3JvdXAuCgkJCWlmICggZWxlbS5wYXJlbnROb2RlICkgewoJCQkJLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9ucwoJCQkJZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7CgkJCX0KCgkJCXJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlOwoJCX0sCgoJCS8vIENvbnRlbnRzCgkJZW1wdHk6IGZ1bmN0aW9uKCBlbGVtICkgewoKCQkJLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvCgkJCS8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSwKCQkJLy8gICBidXQgbm90IGJ5IG90aGVycyAoY29tbWVudDogODsgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbjogNzsgZXRjLikKCQkJLy8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlbgoJCQlmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHsKCQkJCWlmICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7CgkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJfQoJCQl9CgkJCXJldHVybiB0cnVlOwoJCX0sCgoJCXBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7CgkJCXJldHVybiAhRXhwci5wc2V1ZG9zLmVtcHR5KCBlbGVtICk7CgkJfSwKCgkJLy8gRWxlbWVudC9pbnB1dCB0eXBlcwoJCWhlYWRlcjogZnVuY3Rpb24oIGVsZW0gKSB7CgkJCXJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTsKCQl9LAoKCQlpbnB1dDogZnVuY3Rpb24oIGVsZW0gKSB7CgkJCXJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTsKCQl9LAoKCQlidXR0b246IGZ1bmN0aW9uKCBlbGVtICkgewoJCQlyZXR1cm4gbm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSAmJiBlbGVtLnR5cGUgPT09ICJidXR0b24iIHx8CgkJCQlub2RlTmFtZSggZWxlbSwgImJ1dHRvbiIgKTsKCQl9LAoKCQl0ZXh0OiBmdW5jdGlvbiggZWxlbSApIHsKCQkJdmFyIGF0dHI7CgkJCXJldHVybiBub2RlTmFtZSggZWxlbSwgImlucHV0IiApICYmIGVsZW0udHlwZSA9PT0gInRleHQiICYmCgoJCQkJLy8gU3VwcG9ydDogSUUgPDEwIG9ubHkKCQkJCS8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCAic2VhcmNoIikgYXBwZWFyCgkJCQkvLyB3aXRoIGVsZW0udHlwZSA9PT0gInRleHQiCgkJCQkoICggYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCAidHlwZSIgKSApID09IG51bGwgfHwKCQkJCQlhdHRyLnRvTG93ZXJDYXNlKCkgPT09ICJ0ZXh0IiApOwoJCX0sCgoJCS8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb24KCQlmaXJzdDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oKSB7CgkJCXJldHVybiBbIDAgXTsKCQl9ICksCgoJCWxhc3Q6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7CgkJCXJldHVybiBbIGxlbmd0aCAtIDEgXTsKCQl9ICksCgoJCWVxOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggX21hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHsKCQkJcmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdOwoJCX0gKSwKCgkJZXZlbjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgewoJCQl2YXIgaSA9IDA7CgkJCWZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkgewoJCQkJbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKCQkJfQoJCQlyZXR1cm4gbWF0Y2hJbmRleGVzOwoJCX0gKSwKCgkJb2RkOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7CgkJCXZhciBpID0gMTsKCQkJZm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7CgkJCQltYXRjaEluZGV4ZXMucHVzaCggaSApOwoJCQl9CgkJCXJldHVybiBtYXRjaEluZGV4ZXM7CgkJfSApLAoKCQlsdDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHsKCQkJdmFyIGk7CgoJCQlpZiAoIGFyZ3VtZW50IDwgMCApIHsKCQkJCWkgPSBhcmd1bWVudCArIGxlbmd0aDsKCQkJfSBlbHNlIGlmICggYXJndW1lbnQgPiBsZW5ndGggKSB7CgkJCQlpID0gbGVuZ3RoOwoJCQl9IGVsc2UgewoJCQkJaSA9IGFyZ3VtZW50OwoJCQl9CgoJCQlmb3IgKCA7IC0taSA+PSAwOyApIHsKCQkJCW1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CgkJCX0KCQkJcmV0dXJuIG1hdGNoSW5kZXhlczsKCQl9ICksCgoJCWd0OiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgewoJCQl2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7CgkJCWZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHsKCQkJCW1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CgkJCX0KCQkJcmV0dXJuIG1hdGNoSW5kZXhlczsKCQl9ICkKCX0KfTsKCkV4cHIucHNldWRvcy5udGggPSBFeHByLnBzZXVkb3MuZXE7CgovLyBBZGQgYnV0dG9uL2lucHV0IHR5cGUgcHNldWRvcwpmb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHsKCUV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTsKfQpmb3IgKCBpIGluIHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkgewoJRXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTsKfQoKLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzCmZ1bmN0aW9uIHNldEZpbHRlcnMoKSB7fQpzZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvczsKRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTsKCmZ1bmN0aW9uIHRva2VuaXplKCBzZWxlY3RvciwgcGFyc2VPbmx5ICkgewoJdmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsCgkJc29GYXIsIGdyb3VwcywgcHJlRmlsdGVycywKCQljYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArICIgIiBdOwoKCWlmICggY2FjaGVkICkgewoJCXJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7Cgl9CgoJc29GYXIgPSBzZWxlY3RvcjsKCWdyb3VwcyA9IFtdOwoJcHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyOwoKCXdoaWxlICggc29GYXIgKSB7CgoJCS8vIENvbW1hIGFuZCBmaXJzdCBydW4KCQlpZiAoICFtYXRjaGVkIHx8ICggbWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSApICkgewoJCQlpZiAoIG1hdGNoICkgewoKCQkJCS8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkCgkJCQlzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFsgMCBdLmxlbmd0aCApIHx8IHNvRmFyOwoJCQl9CgkJCWdyb3Vwcy5wdXNoKCAoIHRva2VucyA9IFtdICkgKTsKCQl9CgoJCW1hdGNoZWQgPSBmYWxzZTsKCgkJLy8gQ29tYmluYXRvcnMKCQlpZiAoICggbWF0Y2ggPSBybGVhZGluZ0NvbWJpbmF0b3IuZXhlYyggc29GYXIgKSApICkgewoJCQltYXRjaGVkID0gbWF0Y2guc2hpZnQoKTsKCQkJdG9rZW5zLnB1c2goIHsKCQkJCXZhbHVlOiBtYXRjaGVkLAoKCQkJCS8vIENhc3QgZGVzY2VuZGFudCBjb21iaW5hdG9ycyB0byBzcGFjZQoJCQkJdHlwZTogbWF0Y2hbIDAgXS5yZXBsYWNlKCBydHJpbUNTUywgIiAiICkKCQkJfSApOwoJCQlzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApOwoJCX0KCgkJLy8gRmlsdGVycwoJCWZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7CgkJCWlmICggKCBtYXRjaCA9IG1hdGNoRXhwclsgdHlwZSBdLmV4ZWMoIHNvRmFyICkgKSAmJiAoICFwcmVGaWx0ZXJzWyB0eXBlIF0gfHwKCQkJCSggbWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkgKSApICkgewoJCQkJbWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7CgkJCQl0b2tlbnMucHVzaCggewoJCQkJCXZhbHVlOiBtYXRjaGVkLAoJCQkJCXR5cGU6IHR5cGUsCgkJCQkJbWF0Y2hlczogbWF0Y2gKCQkJCX0gKTsKCQkJCXNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7CgkJCX0KCQl9CgoJCWlmICggIW1hdGNoZWQgKSB7CgkJCWJyZWFrOwoJCX0KCX0KCgkvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3MKCS8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZwoJLy8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zCglpZiAoIHBhcnNlT25seSApIHsKCQlyZXR1cm4gc29GYXIubGVuZ3RoOwoJfQoKCXJldHVybiBzb0ZhciA/CgkJZmluZC5lcnJvciggc2VsZWN0b3IgKSA6CgoJCS8vIENhY2hlIHRoZSB0b2tlbnMKCQl0b2tlbkNhY2hlKCBzZWxlY3RvciwgZ3JvdXBzICkuc2xpY2UoIDAgKTsKfQoKZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkgewoJdmFyIGkgPSAwLAoJCWxlbiA9IHRva2Vucy5sZW5ndGgsCgkJc2VsZWN0b3IgPSAiIjsKCWZvciAoIDsgaSA8IGxlbjsgaSsrICkgewoJCXNlbGVjdG9yICs9IHRva2Vuc1sgaSBdLnZhbHVlOwoJfQoJcmV0dXJuIHNlbGVjdG9yOwp9CgpmdW5jdGlvbiBhZGRDb21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlICkgewoJdmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLAoJCXNraXAgPSBjb21iaW5hdG9yLm5leHQsCgkJa2V5ID0gc2tpcCB8fCBkaXIsCgkJY2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYga2V5ID09PSAicGFyZW50Tm9kZSIsCgkJZG9uZU5hbWUgPSBkb25lKys7CgoJcmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgPwoKCQkvLyBDaGVjayBhZ2FpbnN0IGNsb3Nlc3QgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnQKCQlmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgewoJCQl3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7CgkJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHsKCQkJCQlyZXR1cm4gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICk7CgkJCQl9CgkJCX0KCQkJcmV0dXJuIGZhbHNlOwoJCX0gOgoKCQkvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHMKCQlmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgewoJCQl2YXIgb2xkQ2FjaGUsIG91dGVyQ2FjaGUsCgkJCQluZXdDYWNoZSA9IFsgZGlycnVucywgZG9uZU5hbWUgXTsKCgkJCS8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZwoJCQlpZiAoIHhtbCApIHsKCQkJCXdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHsKCQkJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHsKCQkJCQkJaWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKCQkJCQkJCXJldHVybiB0cnVlOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9IGVsc2UgewoJCQkJd2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkgewoJCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkgewoJCQkJCQlvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8ICggZWxlbVsgZXhwYW5kbyBdID0ge30gKTsKCgkJCQkJCWlmICggc2tpcCAmJiBub2RlTmFtZSggZWxlbSwgc2tpcCApICkgewoJCQkJCQkJZWxlbSA9IGVsZW1bIGRpciBdIHx8IGVsZW07CgkJCQkJCX0gZWxzZSBpZiAoICggb2xkQ2FjaGUgPSBvdXRlckNhY2hlWyBrZXkgXSApICYmCgkJCQkJCQlvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkgewoKCQkJCQkJCS8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzCgkJCQkJCQlyZXR1cm4gKCBuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSApOwoJCQkJCQl9IGVsc2UgewoKCQkJCQkJCS8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHMKCQkJCQkJCW91dGVyQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7CgoJCQkJCQkJLy8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nCgkJCQkJCQlpZiAoICggbmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgKSB7CgkJCQkJCQkJcmV0dXJuIHRydWU7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQkJcmV0dXJuIGZhbHNlOwoJCX07Cn0KCmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHsKCXJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID8KCQlmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgewoJCQl2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDsKCQkJd2hpbGUgKCBpLS0gKSB7CgkJCQlpZiAoICFtYXRjaGVyc1sgaSBdKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCX0KCQkJcmV0dXJuIHRydWU7CgkJfSA6CgkJbWF0Y2hlcnNbIDAgXTsKfQoKZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkgewoJdmFyIGkgPSAwLAoJCWxlbiA9IGNvbnRleHRzLmxlbmd0aDsKCWZvciAoIDsgaSA8IGxlbjsgaSsrICkgewoJCWZpbmQoIHNlbGVjdG9yLCBjb250ZXh0c1sgaSBdLCByZXN1bHRzICk7Cgl9CglyZXR1cm4gcmVzdWx0czsKfQoKZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHsKCXZhciBlbGVtLAoJCW5ld1VubWF0Y2hlZCA9IFtdLAoJCWkgPSAwLAoJCWxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsCgkJbWFwcGVkID0gbWFwICE9IG51bGw7CgoJZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CgkJaWYgKCAoIGVsZW0gPSB1bm1hdGNoZWRbIGkgXSApICkgewoJCQlpZiAoICFmaWx0ZXIgfHwgZmlsdGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKCQkJCW5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7CgkJCQlpZiAoIG1hcHBlZCApIHsKCQkJCQltYXAucHVzaCggaSApOwoJCQkJfQoJCQl9CgkJfQoJfQoKCXJldHVybiBuZXdVbm1hdGNoZWQ7Cn0KCmZ1bmN0aW9uIHNldE1hdGNoZXIoIHByZUZpbHRlciwgc2VsZWN0b3IsIG1hdGNoZXIsIHBvc3RGaWx0ZXIsIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApIHsKCWlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkgewoJCXBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7Cgl9CglpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHsKCQlwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7Cgl9CglyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkgewoJCXZhciB0ZW1wLCBpLCBlbGVtLCBtYXRjaGVyT3V0LAoJCQlwcmVNYXAgPSBbXSwKCQkJcG9zdE1hcCA9IFtdLAoJCQlwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLAoKCQkJLy8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHQKCQkJZWxlbXMgPSBzZWVkIHx8CgkJCQltdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCAiKiIsCgkJCQkJY29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSwKCgkJCS8vIFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1dCwgcHJlc2VydmluZyBhIG1hcCBmb3Igc2VlZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvbgoJCQltYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID8KCQkJCWNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDoKCQkJCWVsZW1zOwoKCQlpZiAoIG1hdGNoZXIgKSB7CgoJCQkvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlcgoJCQkvLyBvciBwcmVleGlzdGluZyByZXN1bHRzLAoJCQltYXRjaGVyT3V0ID0gcG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgPwoKCQkJCS8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeQoJCQkJW10gOgoKCQkJCS8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseQoJCQkJcmVzdWx0czsKCgkJCS8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzCgkJCW1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7CgkJfSBlbHNlIHsKCQkJbWF0Y2hlck91dCA9IG1hdGNoZXJJbjsKCQl9CgoJCS8vIEFwcGx5IHBvc3RGaWx0ZXIKCQlpZiAoIHBvc3RGaWx0ZXIgKSB7CgkJCXRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApOwoJCQlwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1sICk7CgoJCQkvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluCgkJCWkgPSB0ZW1wLmxlbmd0aDsKCQkJd2hpbGUgKCBpLS0gKSB7CgkJCQlpZiAoICggZWxlbSA9IHRlbXBbIGkgXSApICkgewoJCQkJCW1hdGNoZXJPdXRbIHBvc3RNYXBbIGkgXSBdID0gISggbWF0Y2hlckluWyBwb3N0TWFwWyBpIF0gXSA9IGVsZW0gKTsKCQkJCX0KCQkJfQoJCX0KCgkJaWYgKCBzZWVkICkgewoJCQlpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkgewoJCQkJaWYgKCBwb3N0RmluZGVyICkgewoKCQkJCQkvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHMKCQkJCQl0ZW1wID0gW107CgkJCQkJaSA9IG1hdGNoZXJPdXQubGVuZ3RoOwoJCQkJCXdoaWxlICggaS0tICkgewoJCQkJCQlpZiAoICggZWxlbSA9IG1hdGNoZXJPdXRbIGkgXSApICkgewoKCQkJCQkJCS8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoCgkJCQkJCQl0ZW1wLnB1c2goICggbWF0Y2hlckluWyBpIF0gPSBlbGVtICkgKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQlwb3N0RmluZGVyKCBudWxsLCAoIG1hdGNoZXJPdXQgPSBbXSApLCB0ZW1wLCB4bWwgKTsKCQkJCX0KCgkJCQkvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZAoJCQkJaSA9IG1hdGNoZXJPdXQubGVuZ3RoOwoJCQkJd2hpbGUgKCBpLS0gKSB7CgkJCQkJaWYgKCAoIGVsZW0gPSBtYXRjaGVyT3V0WyBpIF0gKSAmJgoJCQkJCQkoIHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZi5jYWxsKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbIGkgXSApID4gLTEgKSB7CgoJCQkJCQlzZWVkWyB0ZW1wIF0gPSAhKCByZXN1bHRzWyB0ZW1wIF0gPSBlbGVtICk7CgkJCQkJfQoJCQkJfQoJCQl9CgoJCS8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZAoJCX0gZWxzZSB7CgkJCW1hdGNoZXJPdXQgPSBjb25kZW5zZSgKCQkJCW1hdGNoZXJPdXQgPT09IHJlc3VsdHMgPwoJCQkJCW1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6CgkJCQkJbWF0Y2hlck91dAoJCQkpOwoJCQlpZiAoIHBvc3RGaW5kZXIgKSB7CgkJCQlwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTsKCQkJfSBlbHNlIHsKCQkJCXB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTsKCQkJfQoJCX0KCX0gKTsKfQoKZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2VucyApIHsKCXZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosCgkJbGVuID0gdG9rZW5zLmxlbmd0aCwKCQlsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDAgXS50eXBlIF0sCgkJaW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyAiICIgXSwKCQlpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsCgoJCS8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpCgkJbWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7CgkJCXJldHVybiBlbGVtID09PSBjaGVja0NvbnRleHQ7CgkJfSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLAoJCW1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkgewoJCQlyZXR1cm4gaW5kZXhPZi5jYWxsKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xOwoJCX0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSwKCQltYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKCgkJCS8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4KwoJCQkvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhICJQZXJtaXNzaW9uIGRlbmllZCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nCgkJCS8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay4KCQkJLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcQoJCQl2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKAoJCQkJKCBjaGVja0NvbnRleHQgPSBjb250ZXh0ICkubm9kZVR5cGUgPwoJCQkJCW1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOgoJCQkJCW1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTsKCgkJCS8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50CgkJCS8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvaXNzdWVzLzI5OSkKCQkJY2hlY2tDb250ZXh0ID0gbnVsbDsKCQkJcmV0dXJuIHJldDsKCQl9IF07CgoJZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CgkJaWYgKCAoIG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIGkgXS50eXBlIF0gKSApIHsKCQkJbWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyICkgXTsKCQl9IGVsc2UgewoJCQltYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1sgaSBdLnR5cGUgXS5hcHBseSggbnVsbCwgdG9rZW5zWyBpIF0ubWF0Y2hlcyApOwoKCQkJLy8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXIKCQkJaWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7CgoJCQkJLy8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nCgkJCQlqID0gKytpOwoJCQkJZm9yICggOyBqIDwgbGVuOyBqKysgKSB7CgkJCQkJaWYgKCBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIGogXS50eXBlIF0gKSB7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJCXJldHVybiBzZXRNYXRjaGVyKAoJCQkJCWkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLAoJCQkJCWkgPiAxICYmIHRvU2VsZWN0b3IoCgoJCQkJCQkvLyBJZiB0aGUgcHJlY2VkaW5nIHRva2VuIHdhcyBhIGRlc2NlbmRhbnQgY29tYmluYXRvciwgaW5zZXJ0IGFuIGltcGxpY2l0IGFueS1lbGVtZW50IGAqYAoJCQkJCQl0b2tlbnMuc2xpY2UoIDAsIGkgLSAxICkKCQkJCQkJCS5jb25jYXQoIHsgdmFsdWU6IHRva2Vuc1sgaSAtIDIgXS50eXBlID09PSAiICIgPyAiKiIgOiAiIiB9ICkKCQkJCQkpLnJlcGxhY2UoIHJ0cmltQ1NTLCAiJDEiICksCgkJCQkJbWF0Y2hlciwKCQkJCQlpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSwKCQkJCQlqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAoIHRva2VucyA9IHRva2Vucy5zbGljZSggaiApICkgKSwKCQkJCQlqIDwgbGVuICYmIHRvU2VsZWN0b3IoIHRva2VucyApCgkJCQkpOwoJCQl9CgkJCW1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTsKCQl9Cgl9CgoJcmV0dXJuIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApOwp9CgpmdW5jdGlvbiBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSB7Cgl2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLAoJCWJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLAoJCXN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHsKCQkJdmFyIGVsZW0sIGosIG1hdGNoZXIsCgkJCQltYXRjaGVkQ291bnQgPSAwLAoJCQkJaSA9ICIwIiwKCQkJCXVubWF0Y2hlZCA9IHNlZWQgJiYgW10sCgkJCQlzZXRNYXRjaGVkID0gW10sCgkJCQljb250ZXh0QmFja3VwID0gb3V0ZXJtb3N0Q29udGV4dCwKCgkJCQkvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1lbnRzIG9yIG91dGVybW9zdCBjb250ZXh0CgkJCQllbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZC5UQUcoICIqIiwgb3V0ZXJtb3N0ICksCgoJCQkJLy8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXIKCQkJCWRpcnJ1bnNVbmlxdWUgPSAoIGRpcnJ1bnMgKz0gY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgMC4xICksCgkJCQlsZW4gPSBlbGVtcy5sZW5ndGg7CgoJCQlpZiAoIG91dGVybW9zdCApIHsKCgkJCQkvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCsKCQkJCS8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgIlBlcm1pc3Npb24gZGVuaWVkIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmcKCQkJCS8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay4KCQkJCS8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXEKCQkJCW91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09IGRvY3VtZW50IHx8IGNvbnRleHQgfHwgb3V0ZXJtb3N0OwoJCQl9CgoJCQkvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVzdWx0cwoJCQkvLyBTdXBwb3J0OiBpT1MgPD03IC0gOSBvbmx5CgkJCS8vIFRvbGVyYXRlIE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiAibGVuZ3RoIjsgU2FmYXJpOiA8bnVtYmVyPikgbWF0Y2hpbmcKCQkJLy8gZWxlbWVudHMgYnkgaWQuIChzZWUgdHJhYy0xNDE0MikKCQkJZm9yICggOyBpICE9PSBsZW4gJiYgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9IG51bGw7IGkrKyApIHsKCQkJCWlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7CgkJCQkJaiA9IDA7CgoJCQkJCS8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4KwoJCQkJCS8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgIlBlcm1pc3Npb24gZGVuaWVkIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmcKCQkJCQkvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuCgkJCQkJLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcQoJCQkJCWlmICggIWNvbnRleHQgJiYgZWxlbS5vd25lckRvY3VtZW50ICE9IGRvY3VtZW50ICkgewoJCQkJCQlzZXREb2N1bWVudCggZWxlbSApOwoJCQkJCQl4bWwgPSAhZG9jdW1lbnRJc0hUTUw7CgkJCQkJfQoJCQkJCXdoaWxlICggKCBtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzWyBqKysgXSApICkgewoJCQkJCQlpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9jdW1lbnQsIHhtbCApICkgewoJCQkJCQkJcHVzaC5jYWxsKCByZXN1bHRzLCBlbGVtICk7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCQlpZiAoIG91dGVybW9zdCApIHsKCQkJCQkJZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7CgkJCQkJfQoJCQkJfQoKCQkJCS8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnMKCQkJCWlmICggYnlTZXQgKSB7CgoJCQkJCS8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnMKCQkJCQlpZiAoICggZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0gKSApIHsKCQkJCQkJbWF0Y2hlZENvdW50LS07CgkJCQkJfQoKCQkJCQkvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90CgkJCQkJaWYgKCBzZWVkICkgewoJCQkJCQl1bm1hdGNoZWQucHVzaCggZWxlbSApOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJLy8gYGlgIGlzIG5vdyB0aGUgY291bnQgb2YgZWxlbWVudHMgdmlzaXRlZCBhYm92ZSwgYW5kIGFkZGluZyBpdCB0byBgbWF0Y2hlZENvdW50YAoJCQkvLyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLgoJCQltYXRjaGVkQ291bnQgKz0gaTsKCgkJCS8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50cwoJCQkvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgCgkJCS8vIGVxdWFscyBgaWApLCB1bmxlc3Mgd2UgZGlkbid0IHZpc2l0IF9hbnlfIGVsZW1lbnRzIGluIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ugd2UgaGF2ZQoJCQkvLyBubyBlbGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLgoJCQkvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyAiMCIgYGlgIGFsbG93cyBgaWAgdG8gcmVtYWluIGEgc3RyaW5nIG9ubHkgaW4gdGhhdAoJCQkvLyBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhICIwMCIgYG1hdGNoZWRDb3VudGAgdGhhdCBkaWZmZXJzIGZyb20gYGlgIGJ1dCBpcyBhbHNvCgkJCS8vIG51bWVyaWNhbGx5IHplcm8uCgkJCWlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkgewoJCQkJaiA9IDA7CgkJCQl3aGlsZSAoICggbWF0Y2hlciA9IHNldE1hdGNoZXJzWyBqKysgXSApICkgewoJCQkJCW1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7CgkJCQl9CgoJCQkJaWYgKCBzZWVkICkgewoKCQkJCQkvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nCgkJCQkJaWYgKCBtYXRjaGVkQ291bnQgPiAwICkgewoJCQkJCQl3aGlsZSAoIGktLSApIHsKCQkJCQkJCWlmICggISggdW5tYXRjaGVkWyBpIF0gfHwgc2V0TWF0Y2hlZFsgaSBdICkgKSB7CgkJCQkJCQkJc2V0TWF0Y2hlZFsgaSBdID0gcG9wLmNhbGwoIHJlc3VsdHMgKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCgkJCQkJLy8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFsIG1hdGNoZXMKCQkJCQlzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNoZWQgKTsKCQkJCX0KCgkJCQkvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzCgkJCQlwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7CgoJCQkJLy8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nCgkJCQlpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiYKCQkJCQkoIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJzLmxlbmd0aCApID4gMSApIHsKCgkJCQkJalF1ZXJ5LnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTsKCQkJCX0KCQkJfQoKCQkJLy8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1hdGNoZXJzCgkJCWlmICggb3V0ZXJtb3N0ICkgewoJCQkJZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7CgkJCQlvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDsKCQkJfQoKCQkJcmV0dXJuIHVubWF0Y2hlZDsKCQl9OwoKCXJldHVybiBieVNldCA/CgkJbWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6CgkJc3VwZXJNYXRjaGVyOwp9CgpmdW5jdGlvbiBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7Cgl2YXIgaSwKCQlzZXRNYXRjaGVycyA9IFtdLAoJCWVsZW1lbnRNYXRjaGVycyA9IFtdLAoJCWNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgIiAiIF07CgoJaWYgKCAhY2FjaGVkICkgewoKCQkvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnQKCQlpZiAoICFtYXRjaCApIHsKCQkJbWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3IgKTsKCQl9CgkJaSA9IG1hdGNoLmxlbmd0aDsKCQl3aGlsZSAoIGktLSApIHsKCQkJY2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoWyBpIF0gKTsKCQkJaWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHsKCQkJCXNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApOwoJCQl9IGVsc2UgewoJCQkJZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApOwoJCQl9CgkJfQoKCQkvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24KCQljYWNoZWQgPSBjb21waWxlckNhY2hlKCBzZWxlY3RvciwKCQkJbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTsKCgkJLy8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uCgkJY2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7Cgl9CglyZXR1cm4gY2FjaGVkOwp9CgovKioKICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBqUXVlcnkncyBjb21waWxlZAogKiAgc2VsZWN0b3IgZnVuY3Rpb25zCiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVjdG9yIG9yIGEgcHJlLWNvbXBpbGVkCiAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIGpRdWVyeSBzZWxlY3RvciBjb21waWxlCiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGV4dAogKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0c10KICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3QKICovCmZ1bmN0aW9uIHNlbGVjdCggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7Cgl2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCwKCQljb21waWxlZCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gImZ1bmN0aW9uIiAmJiBzZWxlY3RvciwKCQltYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoIHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IgKSApOwoKCXJlc3VsdHMgPSByZXN1bHRzIHx8IFtdOwoKCS8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkCgkvLyAodGhlIGxhdHRlciBvZiB3aGljaCBndWFyYW50ZWVzIHVzIGNvbnRleHQpCglpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHsKCgkJLy8gUmVkdWNlIGNvbnRleHQgaWYgdGhlIGxlYWRpbmcgY29tcG91bmQgc2VsZWN0b3IgaXMgYW4gSUQKCQl0b2tlbnMgPSBtYXRjaFsgMCBdID0gbWF0Y2hbIDAgXS5zbGljZSggMCApOwoJCWlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKCB0b2tlbiA9IHRva2Vuc1sgMCBdICkudHlwZSA9PT0gIklEIiAmJgoJCQkJY29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDEgXS50eXBlIF0gKSB7CgoJCQljb250ZXh0ID0gKCBFeHByLmZpbmQuSUQoCgkJCQl0b2tlbi5tYXRjaGVzWyAwIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSwKCQkJCWNvbnRleHQKCQkJKSB8fCBbXSApWyAwIF07CgkJCWlmICggIWNvbnRleHQgKSB7CgkJCQlyZXR1cm4gcmVzdWx0czsKCgkJCS8vIFByZWNvbXBpbGVkIG1hdGNoZXJzIHdpbGwgc3RpbGwgdmVyaWZ5IGFuY2VzdHJ5LCBzbyBzdGVwIHVwIGEgbGV2ZWwKCQkJfSBlbHNlIGlmICggY29tcGlsZWQgKSB7CgkJCQljb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlOwoJCQl9CgoJCQlzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTsKCQl9CgoJCS8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmcKCQlpID0gbWF0Y2hFeHByLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7CgkJd2hpbGUgKCBpLS0gKSB7CgkJCXRva2VuID0gdG9rZW5zWyBpIF07CgoJCQkvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yCgkJCWlmICggRXhwci5yZWxhdGl2ZVsgKCB0eXBlID0gdG9rZW4udHlwZSApIF0gKSB7CgkJCQlicmVhazsKCQkJfQoJCQlpZiAoICggZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdICkgKSB7CgoJCQkJLy8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzCgkJCQlpZiAoICggc2VlZCA9IGZpbmQoCgkJCQkJdG9rZW4ubWF0Y2hlc1sgMCBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksCgkJCQkJcnNpYmxpbmcudGVzdCggdG9rZW5zWyAwIF0udHlwZSApICYmCgkJCQkJCXRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0CgkJCQkpICkgKSB7CgoJCQkJCS8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseQoJCQkJCXRva2Vucy5zcGxpY2UoIGksIDEgKTsKCQkJCQlzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApOwoJCQkJCWlmICggIXNlbGVjdG9yICkgewoJCQkJCQlwdXNoLmFwcGx5KCByZXN1bHRzLCBzZWVkICk7CgkJCQkJCXJldHVybiByZXN1bHRzOwoJCQkJCX0KCgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQl9Cgl9CgoJLy8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkCgkvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlCgkoIGNvbXBpbGVkIHx8IGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApICkoCgkJc2VlZCwKCQljb250ZXh0LAoJCSFkb2N1bWVudElzSFRNTCwKCQlyZXN1bHRzLAoJCSFjb250ZXh0IHx8IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHQKCSk7CglyZXR1cm4gcmVzdWx0czsKfQoKLy8gT25lLXRpbWUgYXNzaWdubWVudHMKCi8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgLSA0LjErCi8vIFNvcnQgc3RhYmlsaXR5CnN1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoICIiICkuc29ydCggc29ydE9yZGVyICkuam9pbiggIiIgKSA9PT0gZXhwYW5kbzsKCi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudApzZXREb2N1bWVudCgpOwoKLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCAtIDQuMSsKLy8gRGV0YWNoZWQgbm9kZXMgY29uZm91bmRpbmdseSBmb2xsb3cgKmVhY2ggb3RoZXIqCnN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7CgoJLy8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpCglyZXR1cm4gZWwuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJmaWVsZHNldCIgKSApICYgMTsKfSApOwoKalF1ZXJ5LmZpbmQgPSBmaW5kOwoKLy8gRGVwcmVjYXRlZApqUXVlcnkuZXhwclsgIjoiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zOwpqUXVlcnkudW5pcXVlID0galF1ZXJ5LnVuaXF1ZVNvcnQ7CgovLyBUaGVzZSBoYXZlIGFsd2F5cyBiZWVuIHByaXZhdGUsIGJ1dCB0aGV5IHVzZWQgdG8gYmUgZG9jdW1lbnRlZCBhcyBwYXJ0IG9mCi8vIFNpenpsZSBzbyBsZXQncyBtYWludGFpbiB0aGVtIGZvciBub3cgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHB1cnBvc2VzLgpmaW5kLmNvbXBpbGUgPSBjb21waWxlOwpmaW5kLnNlbGVjdCA9IHNlbGVjdDsKZmluZC5zZXREb2N1bWVudCA9IHNldERvY3VtZW50OwpmaW5kLnRva2VuaXplID0gdG9rZW5pemU7CgpmaW5kLmVzY2FwZSA9IGpRdWVyeS5lc2NhcGVTZWxlY3RvcjsKZmluZC5nZXRUZXh0ID0galF1ZXJ5LnRleHQ7CmZpbmQuaXNYTUwgPSBqUXVlcnkuaXNYTUxEb2M7CmZpbmQuc2VsZWN0b3JzID0galF1ZXJ5LmV4cHI7CmZpbmQuc3VwcG9ydCA9IGpRdWVyeS5zdXBwb3J0OwpmaW5kLnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlU29ydDsKCgkvKiBlc2xpbnQtZW5hYmxlICovCgp9ICkoKTsKCgp2YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7Cgl2YXIgbWF0Y2hlZCA9IFtdLAoJCXRydW5jYXRlID0gdW50aWwgIT09IHVuZGVmaW5lZDsKCgl3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHsKCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CgkJCWlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7CgkJCQlicmVhazsKCQkJfQoJCQltYXRjaGVkLnB1c2goIGVsZW0gKTsKCQl9Cgl9CglyZXR1cm4gbWF0Y2hlZDsKfTsKCgp2YXIgc2libGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHsKCXZhciBtYXRjaGVkID0gW107CgoJZm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHsKCQlpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHsKCQkJbWF0Y2hlZC5wdXNoKCBuICk7CgkJfQoJfQoKCXJldHVybiBtYXRjaGVkOwp9OwoKCnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0OwoKdmFyIHJzaW5nbGVUYWcgPSAoIC9ePChbYS16XVteXC9cMD46XHgyMFx0XHJcblxmXSopW1x4MjBcdFxyXG5cZl0qXC8/Pig/OjxcL1wxPnwpJC9pICk7CgoKCi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90CmZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwgbm90ICkgewoJaWYgKCBpc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHsKCQlyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKCQkJcmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90OwoJCX0gKTsKCX0KCgkvLyBTaW5nbGUgZWxlbWVudAoJaWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7CgkJcmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7CgkJCXJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7CgkJfSApOwoJfQoKCS8vIEFycmF5bGlrZSBvZiBlbGVtZW50cyAoalF1ZXJ5LCBhcmd1bWVudHMsIEFycmF5KQoJaWYgKCB0eXBlb2YgcXVhbGlmaWVyICE9PSAic3RyaW5nIiApIHsKCQlyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKCQkJcmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdDsKCQl9ICk7Cgl9CgoJLy8gRmlsdGVyZWQgZGlyZWN0bHkgZm9yIGJvdGggc2ltcGxlIGFuZCBjb21wbGV4IHNlbGVjdG9ycwoJcmV0dXJuIGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMsIG5vdCApOwp9CgpqUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7Cgl2YXIgZWxlbSA9IGVsZW1zWyAwIF07CgoJaWYgKCBub3QgKSB7CgkJZXhwciA9ICI6bm90KCIgKyBleHByICsgIikiOwoJfQoKCWlmICggZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CgkJcmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxlbSwgZXhwciApID8gWyBlbGVtIF0gOiBbXTsKCX0KCglyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHsKCQlyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTsKCX0gKSApOwp9OwoKalF1ZXJ5LmZuLmV4dGVuZCggewoJZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkgewoJCXZhciBpLCByZXQsCgkJCWxlbiA9IHRoaXMubGVuZ3RoLAoJCQlzZWxmID0gdGhpczsKCgkJaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgewoJCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoIGZ1bmN0aW9uKCkgewoJCQkJZm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHsKCQkJCQlpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7CgkJCQkJCXJldHVybiB0cnVlOwoJCQkJCX0KCQkJCX0KCQkJfSApICk7CgkJfQoKCQlyZXQgPSB0aGlzLnB1c2hTdGFjayggW10gKTsKCgkJZm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHsKCQkJalF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApOwoJCX0KCgkJcmV0dXJuIGxlbiA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggcmV0ICkgOiByZXQ7Cgl9LAoJZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CgkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7Cgl9LAoJbm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CgkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlICkgKTsKCX0sCglpczogZnVuY3Rpb24oIHNlbGVjdG9yICkgewoJCXJldHVybiAhIXdpbm5vdygKCQkJdGhpcywKCgkJCS8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXQKCQkJLy8gc28gJCgicDpmaXJzdCIpLmlzKCJwOmxhc3QiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gInAiLgoJCQl0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICYmIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/CgkJCQlqUXVlcnkoIHNlbGVjdG9yICkgOgoJCQkJc2VsZWN0b3IgfHwgW10sCgkJCWZhbHNlCgkJKS5sZW5ndGg7Cgl9Cn0gKTsKCgovLyBJbml0aWFsaXplIGEgalF1ZXJ5IG9iamVjdAoKCi8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50KQp2YXIgcm9vdGpRdWVyeSwKCgkvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5ncwoJLy8gUHJpb3JpdGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKHRyYWMtOTUyMSkKCS8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICh0cmFjLTExMjkwOiBtdXN0IHN0YXJ0IHdpdGggPCkKCS8vIFNob3J0Y3V0IHNpbXBsZSAjaWQgY2FzZSBmb3Igc3BlZWQKCXJxdWlja0V4cHIgPSAvXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSspKSQvLAoKCWluaXQgPSBqUXVlcnkuZm4uaW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdCApIHsKCQl2YXIgbWF0Y2gsIGVsZW07CgoJCS8vIEhBTkRMRTogJCgiIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSkKCQlpZiAoICFzZWxlY3RvciApIHsKCQkJcmV0dXJuIHRoaXM7CgkJfQoKCQkvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnkKCQkvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpCgkJcm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTsKCgkJLy8gSGFuZGxlIEhUTUwgc3RyaW5ncwoJCWlmICggdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKCQkJaWYgKCBzZWxlY3RvclsgMCBdID09PSAiPCIgJiYKCQkJCXNlbGVjdG9yWyBzZWxlY3Rvci5sZW5ndGggLSAxIF0gPT09ICI+IiAmJgoJCQkJc2VsZWN0b3IubGVuZ3RoID49IDMgKSB7CgoJCQkJLy8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2sKCQkJCW1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdOwoKCQkJfSBlbHNlIHsKCQkJCW1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApOwoJCQl9CgoJCQkvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkCgkJCWlmICggbWF0Y2ggJiYgKCBtYXRjaFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7CgoJCQkJLy8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpCgkJCQlpZiAoIG1hdGNoWyAxIF0gKSB7CgkJCQkJY29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0OwoKCQkJCQkvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXQKCQkJCQkvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudAoJCQkJCWpRdWVyeS5tZXJnZSggdGhpcywgalF1ZXJ5LnBhcnNlSFRNTCgKCQkJCQkJbWF0Y2hbIDEgXSwKCQkJCQkJY29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCwKCQkJCQkJdHJ1ZQoJCQkJCSkgKTsKCgkJCQkJLy8gSEFORExFOiAkKGh0bWwsIHByb3BzKQoJCQkJCWlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsgMSBdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHsKCQkJCQkJZm9yICggbWF0Y2ggaW4gY29udGV4dCApIHsKCgkJCQkJCQkvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlCgkJCQkJCQlpZiAoIGlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHsKCQkJCQkJCQl0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7CgoJCQkJCQkJLy8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRlcwoJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQl0aGlzLmF0dHIoIG1hdGNoLCBjb250ZXh0WyBtYXRjaCBdICk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgoJCQkJCXJldHVybiB0aGlzOwoKCQkJCS8vIEhBTkRMRTogJCgjaWQpCgkJCQl9IGVsc2UgewoJCQkJCWVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbIDIgXSApOwoKCQkJCQlpZiAoIGVsZW0gKSB7CgoJCQkJCQkvLyBJbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdAoJCQkJCQl0aGlzWyAwIF0gPSBlbGVtOwoJCQkJCQl0aGlzLmxlbmd0aCA9IDE7CgkJCQkJfQoJCQkJCXJldHVybiB0aGlzOwoJCQkJfQoKCQkJLy8gSEFORExFOiAkKGV4cHIsICQoLi4uKSkKCQkJfSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7CgkJCQlyZXR1cm4gKCBjb250ZXh0IHx8IHJvb3QgKS5maW5kKCBzZWxlY3RvciApOwoKCQkJLy8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpCgkJCS8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChleHByKQoJCQl9IGVsc2UgewoJCQkJcmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApOwoJCQl9CgoJCS8vIEhBTkRMRTogJChET01FbGVtZW50KQoJCX0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkgewoJCQl0aGlzWyAwIF0gPSBzZWxlY3RvcjsKCQkJdGhpcy5sZW5ndGggPSAxOwoJCQlyZXR1cm4gdGhpczsKCgkJLy8gSEFORExFOiAkKGZ1bmN0aW9uKQoJCS8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCByZWFkeQoJCX0gZWxzZSBpZiAoIGlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7CgkJCXJldHVybiByb290LnJlYWR5ICE9PSB1bmRlZmluZWQgPwoJCQkJcm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6CgoJCQkJLy8gRXhlY3V0ZSBpbW1lZGlhdGVseSBpZiByZWFkeSBpcyBub3QgcHJlc2VudAoJCQkJc2VsZWN0b3IoIGpRdWVyeSApOwoJCX0KCgkJcmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7Cgl9OwoKLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvbgppbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjsKCi8vIEluaXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2UKcm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTsKCgp2YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sCgoJLy8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXQKCWd1YXJhbnRlZWRVbmlxdWUgPSB7CgkJY2hpbGRyZW46IHRydWUsCgkJY29udGVudHM6IHRydWUsCgkJbmV4dDogdHJ1ZSwKCQlwcmV2OiB0cnVlCgl9OwoKalF1ZXJ5LmZuLmV4dGVuZCggewoJaGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkgewoJCXZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSwKCQkJbCA9IHRhcmdldHMubGVuZ3RoOwoKCQlyZXR1cm4gdGhpcy5maWx0ZXIoIGZ1bmN0aW9uKCkgewoJCQl2YXIgaSA9IDA7CgkJCWZvciAoIDsgaSA8IGw7IGkrKyApIHsKCQkJCWlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0gKSApIHsKCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCX0KCQkJfQoJCX0gKTsKCX0sCgoJY2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHsKCQl2YXIgY3VyLAoJCQlpID0gMCwKCQkJbCA9IHRoaXMubGVuZ3RoLAoJCQltYXRjaGVkID0gW10sCgkJCXRhcmdldHMgPSB0eXBlb2Ygc2VsZWN0b3JzICE9PSAic3RyaW5nIiAmJiBqUXVlcnkoIHNlbGVjdG9ycyApOwoKCQkvLyBQb3NpdGlvbmFsIHNlbGVjdG9ycyBuZXZlciBtYXRjaCwgc2luY2UgdGhlcmUncyBubyBfc2VsZWN0aW9uXyBjb250ZXh0CgkJaWYgKCAhcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSApIHsKCQkJZm9yICggOyBpIDwgbDsgaSsrICkgewoJCQkJZm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHsKCgkJCQkJLy8gQWx3YXlzIHNraXAgZG9jdW1lbnQgZnJhZ21lbnRzCgkJCQkJaWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAoIHRhcmdldHMgPwoJCQkJCQl0YXJnZXRzLmluZGV4KCBjdXIgKSA+IC0xIDoKCgkJCQkJCS8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIGpRdWVyeSNmaW5kCgkJCQkJCWN1ci5ub2RlVHlwZSA9PT0gMSAmJgoJCQkJCQkJalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBjdXIsIHNlbGVjdG9ycyApICkgKSB7CgoJCQkJCQltYXRjaGVkLnB1c2goIGN1ciApOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKSA6IG1hdGNoZWQgKTsKCX0sCgoJLy8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiB0aGUgc2V0CglpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7CgoJCS8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4gcGFyZW50CgkJaWYgKCAhZWxlbSApIHsKCQkJcmV0dXJuICggdGhpc1sgMCBdICYmIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xOwoJCX0KCgkJLy8gSW5kZXggaW4gc2VsZWN0b3IKCQlpZiAoIHR5cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsKCQkJcmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApOwoJCX0KCgkJLy8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50CgkJcmV0dXJuIGluZGV4T2YuY2FsbCggdGhpcywKCgkJCS8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZAoJCQllbGVtLmpxdWVyeSA/IGVsZW1bIDAgXSA6IGVsZW0KCQkpOwoJfSwKCglhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsKCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soCgkJCWpRdWVyeS51bmlxdWVTb3J0KAoJCQkJalF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKQoJCQkpCgkJKTsKCX0sCgoJYWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkgewoJCXJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/CgkJCXRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNlbGVjdG9yICkKCQkpOwoJfQp9ICk7CgpmdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHsKCXdoaWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkgJiYgY3VyLm5vZGVUeXBlICE9PSAxICkge30KCXJldHVybiBjdXI7Cn0KCmpRdWVyeS5lYWNoKCB7CglwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkgewoJCXZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7CgkJcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDsKCX0sCglwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKCQlyZXR1cm4gZGlyKCBlbGVtLCAicGFyZW50Tm9kZSIgKTsKCX0sCglwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7CgkJcmV0dXJuIGRpciggZWxlbSwgInBhcmVudE5vZGUiLCB1bnRpbCApOwoJfSwKCW5leHQ6IGZ1bmN0aW9uKCBlbGVtICkgewoJCXJldHVybiBzaWJsaW5nKCBlbGVtLCAibmV4dFNpYmxpbmciICk7Cgl9LAoJcHJldjogZnVuY3Rpb24oIGVsZW0gKSB7CgkJcmV0dXJuIHNpYmxpbmcoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7Cgl9LAoJbmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7CgkJcmV0dXJuIGRpciggZWxlbSwgIm5leHRTaWJsaW5nIiApOwoJfSwKCXByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkgewoJCXJldHVybiBkaXIoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7Cgl9LAoJbmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkgewoJCXJldHVybiBkaXIoIGVsZW0sICJuZXh0U2libGluZyIsIHVudGlsICk7Cgl9LAoJcHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkgewoJCXJldHVybiBkaXIoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciLCB1bnRpbCApOwoJfSwKCXNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHsKCQlyZXR1cm4gc2libGluZ3MoICggZWxlbS5wYXJlbnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApOwoJfSwKCWNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHsKCQlyZXR1cm4gc2libGluZ3MoIGVsZW0uZmlyc3RDaGlsZCApOwoJfSwKCWNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKCQlpZiAoIGVsZW0uY29udGVudERvY3VtZW50ICE9IG51bGwgJiYKCgkJCS8vIFN1cHBvcnQ6IElFIDExKwoJCQkvLyA8b2JqZWN0PiBlbGVtZW50cyB3aXRoIG5vIGBkYXRhYCBhdHRyaWJ1dGUgaGFzIGFuIG9iamVjdAoJCQkvLyBgY29udGVudERvY3VtZW50YCB3aXRoIGEgYG51bGxgIHByb3RvdHlwZS4KCQkJZ2V0UHJvdG8oIGVsZW0uY29udGVudERvY3VtZW50ICkgKSB7CgoJCQlyZXR1cm4gZWxlbS5jb250ZW50RG9jdW1lbnQ7CgkJfQoKCQkvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seSwgaU9TIDcgb25seSwgQW5kcm9pZCBCcm93c2VyIDw9NC4zIG9ubHkKCQkvLyBUcmVhdCB0aGUgdGVtcGxhdGUgZWxlbWVudCBhcyBhIHJlZ3VsYXIgb25lIGluIGJyb3dzZXJzIHRoYXQKCQkvLyBkb24ndCBzdXBwb3J0IGl0LgoJCWlmICggbm9kZU5hbWUoIGVsZW0sICJ0ZW1wbGF0ZSIgKSApIHsKCQkJZWxlbSA9IGVsZW0uY29udGVudCB8fCBlbGVtOwoJCX0KCgkJcmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApOwoJfQp9LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7CglqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7CgkJdmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTsKCgkJaWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSAiVW50aWwiICkgewoJCQlzZWxlY3RvciA9IHVudGlsOwoJCX0KCgkJaWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICkgewoJCQltYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTsKCQl9CgoJCWlmICggdGhpcy5sZW5ndGggPiAxICkgewoKCQkJLy8gUmVtb3ZlIGR1cGxpY2F0ZXMKCQkJaWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkgewoJCQkJalF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKTsKCQkJfQoKCQkJLy8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXMKCQkJaWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkgewoJCQkJbWF0Y2hlZC5yZXZlcnNlKCk7CgkJCX0KCQl9CgoJCXJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZCApOwoJfTsKfSApOwp2YXIgcm5vdGh0bWx3aGl0ZSA9ICggL1teXHgyMFx0XHJcblxmXSsvZyApOwoKCgovLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lcwpmdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgewoJdmFyIG9iamVjdCA9IHt9OwoJalF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSwgZnVuY3Rpb24oIF8sIGZsYWcgKSB7CgkJb2JqZWN0WyBmbGFnIF0gPSB0cnVlOwoJfSApOwoJcmV0dXJuIG9iamVjdDsKfQoKLyoKICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CiAqCiAqCW9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3cKICoJCQl0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0CiAqCiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlCiAqICJmaXJlZCIgbXVsdGlwbGUgdGltZXMuCiAqCiAqIFBvc3NpYmxlIG9wdGlvbnM6CiAqCiAqCW9uY2U6CQkJd2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKQogKgogKgltZW1vcnk6CQkJd2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZAogKgkJCQkJYWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgIm1lbW9yaXplZCIKICoJCQkJCXZhbHVlcyAobGlrZSBhIERlZmVycmVkKQogKgogKgl1bmlxdWU6CQkJd2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpCiAqCiAqCXN0b3BPbkZhbHNlOglpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2UKICoKICovCmpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHsKCgkvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkCgkvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpCglvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09ICJzdHJpbmciID8KCQljcmVhdGVPcHRpb25zKCBvcHRpb25zICkgOgoJCWpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7CgoJdmFyIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmcKCQlmaXJpbmcsCgoJCS8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzCgkJbWVtb3J5LAoKCQkvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZAoJCWZpcmVkLAoKCQkvLyBGbGFnIHRvIHByZXZlbnQgZmlyaW5nCgkJbG9ja2VkLAoKCQkvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdAoJCWxpc3QgPSBbXSwKCgkJLy8gUXVldWUgb2YgZXhlY3V0aW9uIGRhdGEgZm9yIHJlcGVhdGFibGUgbGlzdHMKCQlxdWV1ZSA9IFtdLAoKCQkvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5lZWRlZCkKCQlmaXJpbmdJbmRleCA9IC0xLAoKCQkvLyBGaXJlIGNhbGxiYWNrcwoJCWZpcmUgPSBmdW5jdGlvbigpIHsKCgkJCS8vIEVuZm9yY2Ugc2luZ2xlLWZpcmluZwoJCQlsb2NrZWQgPSBsb2NrZWQgfHwgb3B0aW9ucy5vbmNlOwoKCQkJLy8gRXhlY3V0ZSBjYWxsYmFja3MgZm9yIGFsbCBwZW5kaW5nIGV4ZWN1dGlvbnMsCgkJCS8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXMKCQkJZmlyZWQgPSBmaXJpbmcgPSB0cnVlOwoJCQlmb3IgKCA7IHF1ZXVlLmxlbmd0aDsgZmlyaW5nSW5kZXggPSAtMSApIHsKCQkJCW1lbW9yeSA9IHF1ZXVlLnNoaWZ0KCk7CgkJCQl3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHsKCgkJCQkJLy8gUnVuIGNhbGxiYWNrIGFuZCBjaGVjayBmb3IgZWFybHkgdGVybWluYXRpb24KCQkJCQlpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJgoJCQkJCQlvcHRpb25zLnN0b3BPbkZhbHNlICkgewoKCQkJCQkJLy8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZQoJCQkJCQlmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoOwoJCQkJCQltZW1vcnkgPSBmYWxzZTsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCS8vIEZvcmdldCB0aGUgZGF0YSBpZiB3ZSdyZSBkb25lIHdpdGggaXQKCQkJaWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7CgkJCQltZW1vcnkgPSBmYWxzZTsKCQkJfQoKCQkJZmlyaW5nID0gZmFsc2U7CgoJCQkvLyBDbGVhbiB1cCBpZiB3ZSdyZSBkb25lIGZpcmluZyBmb3IgZ29vZAoJCQlpZiAoIGxvY2tlZCApIHsKCgkJCQkvLyBLZWVwIGFuIGVtcHR5IGxpc3QgaWYgd2UgaGF2ZSBkYXRhIGZvciBmdXR1cmUgYWRkIGNhbGxzCgkJCQlpZiAoIG1lbW9yeSApIHsKCQkJCQlsaXN0ID0gW107CgoJCQkJLy8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudAoJCQkJfSBlbHNlIHsKCQkJCQlsaXN0ID0gIiI7CgkJCQl9CgkJCX0KCQl9LAoKCQkvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdAoJCXNlbGYgPSB7CgoJCQkvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0CgkJCWFkZDogZnVuY3Rpb24oKSB7CgkJCQlpZiAoIGxpc3QgKSB7CgoJCQkJCS8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nCgkJCQkJaWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHsKCQkJCQkJZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aCAtIDE7CgkJCQkJCXF1ZXVlLnB1c2goIG1lbW9yeSApOwoJCQkJCX0KCgkJCQkJKCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7CgkJCQkJCWpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkgewoJCQkJCQkJaWYgKCBpc0Z1bmN0aW9uKCBhcmcgKSApIHsKCQkJCQkJCQlpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkgewoJCQkJCQkJCQlsaXN0LnB1c2goIGFyZyApOwoJCQkJCQkJCX0KCQkJCQkJCX0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHRvVHlwZSggYXJnICkgIT09ICJzdHJpbmciICkgewoKCQkJCQkJCQkvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5CgkJCQkJCQkJYWRkKCBhcmcgKTsKCQkJCQkJCX0KCQkJCQkJfSApOwoJCQkJCX0gKSggYXJndW1lbnRzICk7CgoJCQkJCWlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7CgkJCQkJCWZpcmUoKTsKCQkJCQl9CgkJCQl9CgkJCQlyZXR1cm4gdGhpczsKCQkJfSwKCgkJCS8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3QKCQkJcmVtb3ZlOiBmdW5jdGlvbigpIHsKCQkJCWpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7CgkJCQkJdmFyIGluZGV4OwoJCQkJCXdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkgewoJCQkJCQlsaXN0LnNwbGljZSggaW5kZXgsIDEgKTsKCgkJCQkJCS8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlcwoJCQkJCQlpZiAoIGluZGV4IDw9IGZpcmluZ0luZGV4ICkgewoJCQkJCQkJZmlyaW5nSW5kZXgtLTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0gKTsKCQkJCXJldHVybiB0aGlzOwoJCQl9LAoKCQkJLy8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC4KCQkJLy8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuCgkJCWhhczogZnVuY3Rpb24oIGZuICkgewoJCQkJcmV0dXJuIGZuID8KCQkJCQlqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDoKCQkJCQlsaXN0Lmxlbmd0aCA+IDA7CgkJCX0sCgoJCQkvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0CgkJCWVtcHR5OiBmdW5jdGlvbigpIHsKCQkJCWlmICggbGlzdCApIHsKCQkJCQlsaXN0ID0gW107CgkJCQl9CgkJCQlyZXR1cm4gdGhpczsKCQkJfSwKCgkJCS8vIERpc2FibGUgLmZpcmUgYW5kIC5hZGQKCQkJLy8gQWJvcnQgYW55IGN1cnJlbnQvcGVuZGluZyBleGVjdXRpb25zCgkJCS8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlcwoJCQlkaXNhYmxlOiBmdW5jdGlvbigpIHsKCQkJCWxvY2tlZCA9IHF1ZXVlID0gW107CgkJCQlsaXN0ID0gbWVtb3J5ID0gIiI7CgkJCQlyZXR1cm4gdGhpczsKCQkJfSwKCQkJZGlzYWJsZWQ6IGZ1bmN0aW9uKCkgewoJCQkJcmV0dXJuICFsaXN0OwoJCQl9LAoKCQkJLy8gRGlzYWJsZSAuZmlyZQoJCQkvLyBBbHNvIGRpc2FibGUgLmFkZCB1bmxlc3Mgd2UgaGF2ZSBtZW1vcnkgKHNpbmNlIGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0KQoJCQkvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zCgkJCWxvY2s6IGZ1bmN0aW9uKCkgewoJCQkJbG9ja2VkID0gcXVldWUgPSBbXTsKCQkJCWlmICggIW1lbW9yeSAmJiAhZmlyaW5nICkgewoJCQkJCWxpc3QgPSBtZW1vcnkgPSAiIjsKCQkJCX0KCQkJCXJldHVybiB0aGlzOwoJCQl9LAoJCQlsb2NrZWQ6IGZ1bmN0aW9uKCkgewoJCQkJcmV0dXJuICEhbG9ja2VkOwoJCQl9LAoKCQkJLy8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50cwoJCQlmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7CgkJCQlpZiAoICFsb2NrZWQgKSB7CgkJCQkJYXJncyA9IGFyZ3MgfHwgW107CgkJCQkJYXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTsKCQkJCQlxdWV1ZS5wdXNoKCBhcmdzICk7CgkJCQkJaWYgKCAhZmlyaW5nICkgewoJCQkJCQlmaXJlKCk7CgkJCQkJfQoJCQkJfQoJCQkJcmV0dXJuIHRoaXM7CgkJCX0sCgoJCQkvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cwoJCQlmaXJlOiBmdW5jdGlvbigpIHsKCQkJCXNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApOwoJCQkJcmV0dXJuIHRoaXM7CgkJCX0sCgoJCQkvLyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2UKCQkJZmlyZWQ6IGZ1bmN0aW9uKCkgewoJCQkJcmV0dXJuICEhZmlyZWQ7CgkJCX0KCQl9OwoKCXJldHVybiBzZWxmOwp9OwoKCmZ1bmN0aW9uIElkZW50aXR5KCB2ICkgewoJcmV0dXJuIHY7Cn0KZnVuY3Rpb24gVGhyb3dlciggZXggKSB7Cgl0aHJvdyBleDsKfQoKZnVuY3Rpb24gYWRvcHRWYWx1ZSggdmFsdWUsIHJlc29sdmUsIHJlamVjdCwgbm9WYWx1ZSApIHsKCXZhciBtZXRob2Q7CgoJdHJ5IHsKCgkJLy8gQ2hlY2sgZm9yIHByb21pc2UgYXNwZWN0IGZpcnN0IHRvIHByaXZpbGVnZSBzeW5jaHJvbm91cyBiZWhhdmlvcgoJCWlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS5wcm9taXNlICkgKSApIHsKCQkJbWV0aG9kLmNhbGwoIHZhbHVlICkuZG9uZSggcmVzb2x2ZSApLmZhaWwoIHJlamVjdCApOwoKCQkvLyBPdGhlciB0aGVuYWJsZXMKCQl9IGVsc2UgaWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnRoZW4gKSApICkgewoJCQltZXRob2QuY2FsbCggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApOwoKCQkvLyBPdGhlciBub24tdGhlbmFibGVzCgkJfSBlbHNlIHsKCgkJCS8vIENvbnRyb2wgYHJlc29sdmVgIGFyZ3VtZW50cyBieSBsZXR0aW5nIEFycmF5I3NsaWNlIGNhc3QgYm9vbGVhbiBgbm9WYWx1ZWAgdG8gaW50ZWdlcjoKCQkJLy8gKiBmYWxzZTogWyB2YWx1ZSBdLnNsaWNlKCAwICkgPT4gcmVzb2x2ZSggdmFsdWUgKQoJCQkvLyAqIHRydWU6IFsgdmFsdWUgXS5zbGljZSggMSApID0+IHJlc29sdmUoKQoJCQlyZXNvbHZlLmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXS5zbGljZSggbm9WYWx1ZSApICk7CgkJfQoKCS8vIEZvciBQcm9taXNlcy9BKywgY29udmVydCBleGNlcHRpb25zIGludG8gcmVqZWN0aW9ucwoJLy8gU2luY2UgalF1ZXJ5LndoZW4gZG9lc24ndCB1bndyYXAgdGhlbmFibGVzLCB3ZSBjYW4gc2tpcCB0aGUgZXh0cmEgY2hlY2tzIGFwcGVhcmluZyBpbgoJLy8gRGVmZXJyZWQjdGhlbiB0byBjb25kaXRpb25hbGx5IHN1cHByZXNzIHJlamVjdGlvbi4KCX0gY2F0Y2ggKCB2YWx1ZSApIHsKCgkJLy8gU3VwcG9ydDogQW5kcm9pZCA0LjAgb25seQoJCS8vIFN0cmljdCBtb2RlIGZ1bmN0aW9ucyBpbnZva2VkIHdpdGhvdXQgLmNhbGwvLmFwcGx5IGdldCBnbG9iYWwtb2JqZWN0IGNvbnRleHQKCQlyZWplY3QuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdICk7Cgl9Cn0KCmpRdWVyeS5leHRlbmQoIHsKCglEZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7CgkJdmFyIHR1cGxlcyA9IFsKCgkJCQkvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLAoJCQkJLy8gLi4uIC50aGVuIGhhbmRsZXJzLCBhcmd1bWVudCBpbmRleCwgW2ZpbmFsIHN0YXRlXQoJCQkJWyAibm90aWZ5IiwgInByb2dyZXNzIiwgalF1ZXJ5LkNhbGxiYWNrcyggIm1lbW9yeSIgKSwKCQkJCQlqUXVlcnkuQ2FsbGJhY2tzKCAibWVtb3J5IiApLCAyIF0sCgkJCQlbICJyZXNvbHZlIiwgImRvbmUiLCBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICksCgkJCQkJalF1ZXJ5LkNhbGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLCAwLCAicmVzb2x2ZWQiIF0sCgkJCQlbICJyZWplY3QiLCAiZmFpbCIsIGpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKSwKCQkJCQlqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICksIDEsICJyZWplY3RlZCIgXQoJCQldLAoJCQlzdGF0ZSA9ICJwZW5kaW5nIiwKCQkJcHJvbWlzZSA9IHsKCQkJCXN0YXRlOiBmdW5jdGlvbigpIHsKCQkJCQlyZXR1cm4gc3RhdGU7CgkJCQl9LAoJCQkJYWx3YXlzOiBmdW5jdGlvbigpIHsKCQkJCQlkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTsKCQkJCQlyZXR1cm4gdGhpczsKCQkJCX0sCgkJCQkiY2F0Y2giOiBmdW5jdGlvbiggZm4gKSB7CgkJCQkJcmV0dXJuIHByb21pc2UudGhlbiggbnVsbCwgZm4gKTsKCQkJCX0sCgoJCQkJLy8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdAoJCQkJcGlwZTogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkgewoJCQkJCXZhciBmbnMgPSBhcmd1bWVudHM7CgoJCQkJCXJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHsKCQkJCQkJalF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIF9pLCB0dXBsZSApIHsKCgkJCQkJCQkvLyBNYXAgdHVwbGVzIChwcm9ncmVzcywgZG9uZSwgZmFpbCkgdG8gYXJndW1lbnRzIChkb25lLCBmYWlsLCBwcm9ncmVzcykKCQkJCQkJCXZhciBmbiA9IGlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07CgoJCQkJCQkJLy8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pCgkJCQkJCQkvLyBkZWZlcnJlZC5kb25lKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlc29sdmUgfSkKCQkJCQkJCS8vIGRlZmVycmVkLmZhaWwoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVqZWN0IH0pCgkJCQkJCQlkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHsKCQkJCQkJCQl2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CgkJCQkJCQkJaWYgKCByZXR1cm5lZCAmJiBpc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7CgkJCQkJCQkJCXJldHVybmVkLnByb21pc2UoKQoJCQkJCQkJCQkJLnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKQoJCQkJCQkJCQkJLmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKQoJCQkJCQkJCQkJLmZhaWwoIG5ld0RlZmVyLnJlamVjdCApOwoJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCW5ld0RlZmVyWyB0dXBsZVsgMCBdICsgIldpdGgiIF0oCgkJCQkJCQkJCQl0aGlzLAoJCQkJCQkJCQkJZm4gPyBbIHJldHVybmVkIF0gOiBhcmd1bWVudHMKCQkJCQkJCQkJKTsKCQkJCQkJCQl9CgkJCQkJCQl9ICk7CgkJCQkJCX0gKTsKCQkJCQkJZm5zID0gbnVsbDsKCQkJCQl9ICkucHJvbWlzZSgpOwoJCQkJfSwKCQkJCXRoZW46IGZ1bmN0aW9uKCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgb25Qcm9ncmVzcyApIHsKCQkJCQl2YXIgbWF4RGVwdGggPSAwOwoJCQkJCWZ1bmN0aW9uIHJlc29sdmUoIGRlcHRoLCBkZWZlcnJlZCwgaGFuZGxlciwgc3BlY2lhbCApIHsKCQkJCQkJcmV0dXJuIGZ1bmN0aW9uKCkgewoJCQkJCQkJdmFyIHRoYXQgPSB0aGlzLAoJCQkJCQkJCWFyZ3MgPSBhcmd1bWVudHMsCgkJCQkJCQkJbWlnaHRUaHJvdyA9IGZ1bmN0aW9uKCkgewoJCQkJCQkJCQl2YXIgcmV0dXJuZWQsIHRoZW47CgoJCQkJCQkJCQkvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMwoJCQkJCQkJCQkvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OQoJCQkJCQkJCQkvLyBJZ25vcmUgZG91YmxlLXJlc29sdXRpb24gYXR0ZW1wdHMKCQkJCQkJCQkJaWYgKCBkZXB0aCA8IG1heERlcHRoICkgewoJCQkJCQkJCQkJcmV0dXJuOwoJCQkJCQkJCQl9CgoJCQkJCQkJCQlyZXR1cm5lZCA9IGhhbmRsZXIuYXBwbHkoIHRoYXQsIGFyZ3MgKTsKCgkJCQkJCQkJCS8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjEKCQkJCQkJCQkJLy8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNDgKCQkJCQkJCQkJaWYgKCByZXR1cm5lZCA9PT0gZGVmZXJyZWQucHJvbWlzZSgpICkgewoJCQkJCQkJCQkJdGhyb3cgbmV3IFR5cGVFcnJvciggIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvbiIgKTsKCQkJCQkJCQkJfQoKCQkJCQkJCQkJLy8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41CgkJCQkJCQkJCS8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU0CgkJCQkJCQkJCS8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTc1CgkJCQkJCQkJCS8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2UKCQkJCQkJCQkJdGhlbiA9IHJldHVybmVkICYmCgoJCQkJCQkJCQkJLy8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuNAoJCQkJCQkJCQkJLy8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjQKCQkJCQkJCQkJCS8vIE9ubHkgY2hlY2sgb2JqZWN0cyBhbmQgZnVuY3Rpb25zIGZvciB0aGVuYWJpbGl0eQoJCQkJCQkJCQkJKCB0eXBlb2YgcmV0dXJuZWQgPT09ICJvYmplY3QiIHx8CgkJCQkJCQkJCQkJdHlwZW9mIHJldHVybmVkID09PSAiZnVuY3Rpb24iICkgJiYKCQkJCQkJCQkJCXJldHVybmVkLnRoZW47CgoJCQkJCQkJCQkvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZQoJCQkJCQkJCQlpZiAoIGlzRnVuY3Rpb24oIHRoZW4gKSApIHsKCgkJCQkJCQkJCQkvLyBTcGVjaWFsIHByb2Nlc3NvcnMgKG5vdGlmeSkganVzdCB3YWl0IGZvciByZXNvbHV0aW9uCgkJCQkJCQkJCQlpZiAoIHNwZWNpYWwgKSB7CgkJCQkJCQkJCQkJdGhlbi5jYWxsKAoJCQkJCQkJCQkJCQlyZXR1cm5lZCwKCQkJCQkJCQkJCQkJcmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLAoJCQkJCQkJCQkJCQlyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKQoJCQkJCQkJCQkJCSk7CgoJCQkJCQkJCQkJLy8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzCgkJCQkJCQkJCQl9IGVsc2UgewoKCQkJCQkJCQkJCQkvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzCgkJCQkJCQkJCQkJbWF4RGVwdGgrKzsKCgkJCQkJCQkJCQkJdGhlbi5jYWxsKAoJCQkJCQkJCQkJCQlyZXR1cm5lZCwKCQkJCQkJCQkJCQkJcmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLAoJCQkJCQkJCQkJCQlyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKSwKCQkJCQkJCQkJCQkJcmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwKCQkJCQkJCQkJCQkJCWRlZmVycmVkLm5vdGlmeVdpdGggKQoJCQkJCQkJCQkJCSk7CgkJCQkJCQkJCQl9CgoJCQkJCQkJCQkvLyBIYW5kbGUgYWxsIG90aGVyIHJldHVybmVkIHZhbHVlcwoJCQkJCQkJCQl9IGVsc2UgewoKCQkJCQkJCQkJCS8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHQKCQkJCQkJCQkJCS8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKQoJCQkJCQkJCQkJaWYgKCBoYW5kbGVyICE9PSBJZGVudGl0eSApIHsKCQkJCQkJCQkJCQl0aGF0ID0gdW5kZWZpbmVkOwoJCQkJCQkJCQkJCWFyZ3MgPSBbIHJldHVybmVkIF07CgkJCQkJCQkJCQl9CgoJCQkJCQkJCQkJLy8gUHJvY2VzcyB0aGUgdmFsdWUocykKCQkJCQkJCQkJCS8vIERlZmF1bHQgcHJvY2VzcyBpcyByZXNvbHZlCgkJCQkJCQkJCQkoIHNwZWNpYWwgfHwgZGVmZXJyZWQucmVzb2x2ZVdpdGggKSggdGhhdCwgYXJncyApOwoJCQkJCQkJCQl9CgkJCQkJCQkJfSwKCgkJCQkJCQkJLy8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zCgkJCQkJCQkJcHJvY2VzcyA9IHNwZWNpYWwgPwoJCQkJCQkJCQltaWdodFRocm93IDoKCQkJCQkJCQkJZnVuY3Rpb24oKSB7CgkJCQkJCQkJCQl0cnkgewoJCQkJCQkJCQkJCW1pZ2h0VGhyb3coKTsKCQkJCQkJCQkJCX0gY2F0Y2ggKCBlICkgewoKCQkJCQkJCQkJCQlpZiAoIGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rICkgewoJCQkJCQkJCQkJCQlqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayggZSwKCQkJCQkJCQkJCQkJCXByb2Nlc3MuZXJyb3IgKTsKCQkJCQkJCQkJCQl9CgoJCQkJCQkJCQkJCS8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy40LjEKCQkJCQkJCQkJCQkvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02MQoJCQkJCQkJCQkJCS8vIElnbm9yZSBwb3N0LXJlc29sdXRpb24gZXhjZXB0aW9ucwoJCQkJCQkJCQkJCWlmICggZGVwdGggKyAxID49IG1heERlcHRoICkgewoKCQkJCQkJCQkJCQkJLy8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dAoJCQkJCQkJCQkJCQkvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcikKCQkJCQkJCQkJCQkJaWYgKCBoYW5kbGVyICE9PSBUaHJvd2VyICkgewoJCQkJCQkJCQkJCQkJdGhhdCA9IHVuZGVmaW5lZDsKCQkJCQkJCQkJCQkJCWFyZ3MgPSBbIGUgXTsKCQkJCQkJCQkJCQkJfQoKCQkJCQkJCQkJCQkJZGVmZXJyZWQucmVqZWN0V2l0aCggdGhhdCwgYXJncyApOwoJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCX0KCQkJCQkJCQkJfTsKCgkJCQkJCQkvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMQoJCQkJCQkJLy8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTcKCQkJCQkJCS8vIFJlLXJlc29sdmUgcHJvbWlzZXMgaW1tZWRpYXRlbHkgdG8gZG9kZ2UgZmFsc2UgcmVqZWN0aW9uIGZyb20KCQkJCQkJCS8vIHN1YnNlcXVlbnQgZXJyb3JzCgkJCQkJCQlpZiAoIGRlcHRoICkgewoJCQkJCQkJCXByb2Nlc3MoKTsKCQkJCQkJCX0gZWxzZSB7CgoJCQkJCQkJCS8vIENhbGwgYW4gb3B0aW9uYWwgaG9vayB0byByZWNvcmQgdGhlIGVycm9yLCBpbiBjYXNlIG9mIGV4Y2VwdGlvbgoJCQkJCQkJCS8vIHNpbmNlIGl0J3Mgb3RoZXJ3aXNlIGxvc3Qgd2hlbiBleGVjdXRpb24gZ29lcyBhc3luYwoJCQkJCQkJCWlmICggalF1ZXJ5LkRlZmVycmVkLmdldEVycm9ySG9vayApIHsKCQkJCQkJCQkJcHJvY2Vzcy5lcnJvciA9IGpRdWVyeS5EZWZlcnJlZC5nZXRFcnJvckhvb2soKTsKCgkJCQkJCQkJLy8gVGhlIGRlcHJlY2F0ZWQgYWxpYXMgb2YgdGhlIGFib3ZlLiBXaGlsZSB0aGUgbmFtZSBzdWdnZXN0cwoJCQkJCQkJCS8vIHJldHVybmluZyB0aGUgc3RhY2ssIG5vdCBhbiBlcnJvciBpbnN0YW5jZSwgalF1ZXJ5IGp1c3QgcGFzc2VzCgkJCQkJCQkJLy8gaXQgZGlyZWN0bHkgdG8gYGNvbnNvbGUud2FybmAgc28gYm90aCB3aWxsIHdvcms7IGFuIGluc3RhbmNlCgkJCQkJCQkJLy8ganVzdCBiZXR0ZXIgY29vcGVyYXRlcyB3aXRoIHNvdXJjZSBtYXBzLgoJCQkJCQkJCX0gZWxzZSBpZiAoIGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2sgKSB7CgkJCQkJCQkJCXByb2Nlc3MuZXJyb3IgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCk7CgkJCQkJCQkJfQoJCQkJCQkJCXdpbmRvdy5zZXRUaW1lb3V0KCBwcm9jZXNzICk7CgkJCQkJCQl9CgkJCQkJCX07CgkJCQkJfQoKCQkJCQlyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7CgoJCQkJCQkvLyBwcm9ncmVzc19oYW5kbGVycy5hZGQoIC4uLiApCgkJCQkJCXR1cGxlc1sgMCBdWyAzIF0uYWRkKAoJCQkJCQkJcmVzb2x2ZSgKCQkJCQkJCQkwLAoJCQkJCQkJCW5ld0RlZmVyLAoJCQkJCQkJCWlzRnVuY3Rpb24oIG9uUHJvZ3Jlc3MgKSA/CgkJCQkJCQkJCW9uUHJvZ3Jlc3MgOgoJCQkJCQkJCQlJZGVudGl0eSwKCQkJCQkJCQluZXdEZWZlci5ub3RpZnlXaXRoCgkJCQkJCQkpCgkJCQkJCSk7CgoJCQkJCQkvLyBmdWxmaWxsZWRfaGFuZGxlcnMuYWRkKCAuLi4gKQoJCQkJCQl0dXBsZXNbIDEgXVsgMyBdLmFkZCgKCQkJCQkJCXJlc29sdmUoCgkJCQkJCQkJMCwKCQkJCQkJCQluZXdEZWZlciwKCQkJCQkJCQlpc0Z1bmN0aW9uKCBvbkZ1bGZpbGxlZCApID8KCQkJCQkJCQkJb25GdWxmaWxsZWQgOgoJCQkJCQkJCQlJZGVudGl0eQoJCQkJCQkJKQoJCQkJCQkpOwoKCQkJCQkJLy8gcmVqZWN0ZWRfaGFuZGxlcnMuYWRkKCAuLi4gKQoJCQkJCQl0dXBsZXNbIDIgXVsgMyBdLmFkZCgKCQkJCQkJCXJlc29sdmUoCgkJCQkJCQkJMCwKCQkJCQkJCQluZXdEZWZlciwKCQkJCQkJCQlpc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgPwoJCQkJCQkJCQlvblJlamVjdGVkIDoKCQkJCQkJCQkJVGhyb3dlcgoJCQkJCQkJKQoJCQkJCQkpOwoJCQkJCX0gKS5wcm9taXNlKCk7CgkJCQl9LAoKCQkJCS8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWQKCQkJCS8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3QKCQkJCXByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7CgkJCQkJcmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlOwoJCQkJfQoJCQl9LAoJCQlkZWZlcnJlZCA9IHt9OwoKCQkvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzCgkJalF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkgewoJCQl2YXIgbGlzdCA9IHR1cGxlWyAyIF0sCgkJCQlzdGF0ZVN0cmluZyA9IHR1cGxlWyA1IF07CgoJCQkvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGQKCQkJLy8gcHJvbWlzZS5kb25lID0gbGlzdC5hZGQKCQkJLy8gcHJvbWlzZS5mYWlsID0gbGlzdC5hZGQKCQkJcHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7CgoJCQkvLyBIYW5kbGUgc3RhdGUKCQkJaWYgKCBzdGF0ZVN0cmluZyApIHsKCQkJCWxpc3QuYWRkKAoJCQkJCWZ1bmN0aW9uKCkgewoKCQkJCQkJLy8gc3RhdGUgPSAicmVzb2x2ZWQiIChpLmUuLCBmdWxmaWxsZWQpCgkJCQkJCS8vIHN0YXRlID0gInJlamVjdGVkIgoJCQkJCQlzdGF0ZSA9IHN0YXRlU3RyaW5nOwoJCQkJCX0sCgoJCQkJCS8vIHJlamVjdGVkX2NhbGxiYWNrcy5kaXNhYmxlCgkJCQkJLy8gZnVsZmlsbGVkX2NhbGxiYWNrcy5kaXNhYmxlCgkJCQkJdHVwbGVzWyAzIC0gaSBdWyAyIF0uZGlzYWJsZSwKCgkJCQkJLy8gcmVqZWN0ZWRfaGFuZGxlcnMuZGlzYWJsZQoJCQkJCS8vIGZ1bGZpbGxlZF9oYW5kbGVycy5kaXNhYmxlCgkJCQkJdHVwbGVzWyAzIC0gaSBdWyAzIF0uZGlzYWJsZSwKCgkJCQkJLy8gcHJvZ3Jlc3NfY2FsbGJhY2tzLmxvY2sKCQkJCQl0dXBsZXNbIDAgXVsgMiBdLmxvY2ssCgoJCQkJCS8vIHByb2dyZXNzX2hhbmRsZXJzLmxvY2sKCQkJCQl0dXBsZXNbIDAgXVsgMyBdLmxvY2sKCQkJCSk7CgkJCX0KCgkJCS8vIHByb2dyZXNzX2hhbmRsZXJzLmZpcmUKCQkJLy8gZnVsZmlsbGVkX2hhbmRsZXJzLmZpcmUKCQkJLy8gcmVqZWN0ZWRfaGFuZGxlcnMuZmlyZQoJCQlsaXN0LmFkZCggdHVwbGVbIDMgXS5maXJlICk7CgoJCQkvLyBkZWZlcnJlZC5ub3RpZnkgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQubm90aWZ5V2l0aCguLi4pIH0KCQkJLy8gZGVmZXJyZWQucmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZXNvbHZlV2l0aCguLi4pIH0KCQkJLy8gZGVmZXJyZWQucmVqZWN0ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlamVjdFdpdGgoLi4uKSB9CgkJCWRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHsKCQkJCWRlZmVycmVkWyB0dXBsZVsgMCBdICsgIldpdGgiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gdW5kZWZpbmVkIDogdGhpcywgYXJndW1lbnRzICk7CgkJCQlyZXR1cm4gdGhpczsKCQkJfTsKCgkJCS8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVXaXRoCgkJCS8vIGRlZmVycmVkLnJlc29sdmVXaXRoID0gbGlzdC5maXJlV2l0aAoJCQkvLyBkZWZlcnJlZC5yZWplY3RXaXRoID0gbGlzdC5maXJlV2l0aAoJCQlkZWZlcnJlZFsgdHVwbGVbIDAgXSArICJXaXRoIiBdID0gbGlzdC5maXJlV2l0aDsKCQl9ICk7CgoJCS8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZQoJCXByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTsKCgkJLy8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueQoJCWlmICggZnVuYyApIHsKCQkJZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTsKCQl9CgoJCS8vIEFsbCBkb25lIQoJCXJldHVybiBkZWZlcnJlZDsKCX0sCgoJLy8gRGVmZXJyZWQgaGVscGVyCgl3aGVuOiBmdW5jdGlvbiggc2luZ2xlVmFsdWUgKSB7CgkJdmFyCgoJCQkvLyBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXMKCQkJcmVtYWluaW5nID0gYXJndW1lbnRzLmxlbmd0aCwKCgkJCS8vIGNvdW50IG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50cwoJCQlpID0gcmVtYWluaW5nLAoKCQkJLy8gc3Vib3JkaW5hdGUgZnVsZmlsbG1lbnQgZGF0YQoJCQlyZXNvbHZlQ29udGV4dHMgPSBBcnJheSggaSApLAoJCQlyZXNvbHZlVmFsdWVzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksCgoJCQkvLyB0aGUgcHJpbWFyeSBEZWZlcnJlZAoJCQlwcmltYXJ5ID0galF1ZXJ5LkRlZmVycmVkKCksCgoJCQkvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5CgkJCXVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSApIHsKCQkJCXJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7CgkJCQkJcmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzOwoJCQkJCXJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTsKCQkJCQlpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7CgkJCQkJCXByaW1hcnkucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApOwoJCQkJCX0KCQkJCX07CgkJCX07CgoJCS8vIFNpbmdsZS0gYW5kIGVtcHR5IGFyZ3VtZW50cyBhcmUgYWRvcHRlZCBsaWtlIFByb21pc2UucmVzb2x2ZQoJCWlmICggcmVtYWluaW5nIDw9IDEgKSB7CgkJCWFkb3B0VmFsdWUoIHNpbmdsZVZhbHVlLCBwcmltYXJ5LmRvbmUoIHVwZGF0ZUZ1bmMoIGkgKSApLnJlc29sdmUsIHByaW1hcnkucmVqZWN0LAoJCQkJIXJlbWFpbmluZyApOwoKCQkJLy8gVXNlIC50aGVuKCkgdG8gdW53cmFwIHNlY29uZGFyeSB0aGVuYWJsZXMgKGNmLiBnaC0zMDAwKQoJCQlpZiAoIHByaW1hcnkuc3RhdGUoKSA9PT0gInBlbmRpbmciIHx8CgkJCQlpc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgcmVzb2x2ZVZhbHVlc1sgaSBdLnRoZW4gKSApIHsKCgkJCQlyZXR1cm4gcHJpbWFyeS50aGVuKCk7CgkJCX0KCQl9CgoJCS8vIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgYWdncmVnYXRlZCBsaWtlIFByb21pc2UuYWxsIGFycmF5IGVsZW1lbnRzCgkJd2hpbGUgKCBpLS0gKSB7CgkJCWFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBwcmltYXJ5LnJlamVjdCApOwoJCX0KCgkJcmV0dXJuIHByaW1hcnkucHJvbWlzZSgpOwoJfQp9ICk7CgoKLy8gVGhlc2UgdXN1YWxseSBpbmRpY2F0ZSBhIHByb2dyYW1tZXIgbWlzdGFrZSBkdXJpbmcgZGV2ZWxvcG1lbnQsCi8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0Lgp2YXIgcmVycm9yTmFtZXMgPSAvXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLzsKCi8vIElmIGBqUXVlcnkuRGVmZXJyZWQuZ2V0RXJyb3JIb29rYCBpcyBkZWZpbmVkLCBgYXN5bmNFcnJvcmAgaXMgYW4gZXJyb3IKLy8gY2FwdHVyZWQgYmVmb3JlIHRoZSBhc3luYyBiYXJyaWVyIHRvIGdldCB0aGUgb3JpZ2luYWwgZXJyb3IgY2F1c2UKLy8gd2hpY2ggbWF5IG90aGVyd2lzZSBiZSBoaWRkZW4uCmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBhc3luY0Vycm9yICkgewoKCS8vIFN1cHBvcnQ6IElFIDggLSA5IG9ubHkKCS8vIENvbnNvbGUgZXhpc3RzIHdoZW4gZGV2IHRvb2xzIGFyZSBvcGVuLCB3aGljaCBjYW4gaGFwcGVuIGF0IGFueSB0aW1lCglpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLndhcm4gJiYgZXJyb3IgJiYgcmVycm9yTmFtZXMudGVzdCggZXJyb3IubmFtZSApICkgewoJCXdpbmRvdy5jb25zb2xlLndhcm4oICJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiAiICsgZXJyb3IubWVzc2FnZSwKCQkJZXJyb3Iuc3RhY2ssIGFzeW5jRXJyb3IgKTsKCX0KfTsKCgoKCmpRdWVyeS5yZWFkeUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKCBlcnJvciApIHsKCXdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKCQl0aHJvdyBlcnJvcjsKCX0gKTsKfTsKCgoKCi8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeQp2YXIgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7CgpqUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7CgoJcmVhZHlMaXN0CgkJLnRoZW4oIGZuICkKCgkJLy8gV3JhcCBqUXVlcnkucmVhZHlFeGNlcHRpb24gaW4gYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBsb29rdXAKCQkvLyBoYXBwZW5zIGF0IHRoZSB0aW1lIG9mIGVycm9yIGhhbmRsaW5nIGluc3RlYWQgb2YgY2FsbGJhY2sKCQkvLyByZWdpc3RyYXRpb24uCgkJLmNhdGNoKCBmdW5jdGlvbiggZXJyb3IgKSB7CgkJCWpRdWVyeS5yZWFkeUV4Y2VwdGlvbiggZXJyb3IgKTsKCQl9ICk7CgoJcmV0dXJuIHRoaXM7Cn07CgpqUXVlcnkuZXh0ZW5kKCB7CgoJLy8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy4KCWlzUmVhZHk6IGZhbHNlLAoKCS8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmUKCS8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlIHRyYWMtNjc4MQoJcmVhZHlXYWl0OiAxLAoKCS8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHkKCXJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHsKCgkJLy8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeQoJCWlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkgewoJCQlyZXR1cm47CgkJfQoKCQkvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHkKCQlqUXVlcnkuaXNSZWFkeSA9IHRydWU7CgoJCS8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlCgkJaWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7CgkJCXJldHVybjsKCQl9CgoJCS8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGUKCQlyZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7Cgl9Cn0gKTsKCmpRdWVyeS5yZWFkeS50aGVuID0gcmVhZHlMaXN0LnRoZW47CgovLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZApmdW5jdGlvbiBjb21wbGV0ZWQoKSB7Cglkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIGNvbXBsZXRlZCApOwoJd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoICJsb2FkIiwgY29tcGxldGVkICk7CglqUXVlcnkucmVhZHkoKTsKfQoKLy8gQ2F0Y2ggY2FzZXMgd2hlcmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBjYWxsZWQKLy8gYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuCi8vIFN1cHBvcnQ6IElFIDw9OSAtIDEwIG9ubHkKLy8gT2xkZXIgSUUgc29tZXRpbWVzIHNpZ25hbHMgImludGVyYWN0aXZlIiB0b28gc29vbgppZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgfHwKCSggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gImxvYWRpbmciICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHsKCgkvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHkKCXdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTsKCn0gZWxzZSB7CgoJLy8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFjawoJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggIkRPTUNvbnRlbnRMb2FkZWQiLCBjb21wbGV0ZWQgKTsKCgkvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29yawoJd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICJsb2FkIiwgY29tcGxldGVkICk7Cn0KCgoKCi8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvbgovLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb24KdmFyIGFjY2VzcyA9IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHJhdyApIHsKCXZhciBpID0gMCwKCQlsZW4gPSBlbGVtcy5sZW5ndGgsCgkJYnVsayA9IGtleSA9PSBudWxsOwoKCS8vIFNldHMgbWFueSB2YWx1ZXMKCWlmICggdG9UeXBlKCBrZXkgKSA9PT0gIm9iamVjdCIgKSB7CgkJY2hhaW5hYmxlID0gdHJ1ZTsKCQlmb3IgKCBpIGluIGtleSApIHsKCQkJYWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVsgaSBdLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7CgkJfQoKCS8vIFNldHMgb25lIHZhbHVlCgl9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgewoJCWNoYWluYWJsZSA9IHRydWU7CgoJCWlmICggIWlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CgkJCXJhdyA9IHRydWU7CgkJfQoKCQlpZiAoIGJ1bGsgKSB7CgoJCQkvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXQKCQkJaWYgKCByYXcgKSB7CgkJCQlmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTsKCQkJCWZuID0gbnVsbDsKCgkJCS8vIC4uLmV4Y2VwdCB3aGVuIGV4ZWN1dGluZyBmdW5jdGlvbiB2YWx1ZXMKCQkJfSBlbHNlIHsKCQkJCWJ1bGsgPSBmbjsKCQkJCWZuID0gZnVuY3Rpb24oIGVsZW0sIF9rZXksIHZhbHVlICkgewoJCQkJCXJldHVybiBidWxrLmNhbGwoIGpRdWVyeSggZWxlbSApLCB2YWx1ZSApOwoJCQkJfTsKCQkJfQoJCX0KCgkJaWYgKCBmbiApIHsKCQkJZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CgkJCQlmbigKCQkJCQllbGVtc1sgaSBdLCBrZXksIHJhdyA/CgkJCQkJCXZhbHVlIDoKCQkJCQkJdmFsdWUuY2FsbCggZWxlbXNbIGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0sIGtleSApICkKCQkJCSk7CgkJCX0KCQl9Cgl9CgoJaWYgKCBjaGFpbmFibGUgKSB7CgkJcmV0dXJuIGVsZW1zOwoJfQoKCS8vIEdldHMKCWlmICggYnVsayApIHsKCQlyZXR1cm4gZm4uY2FsbCggZWxlbXMgKTsKCX0KCglyZXR1cm4gbGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7Cn07CgoKLy8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nCnZhciBybXNQcmVmaXggPSAvXi1tcy0vLAoJcmRhc2hBbHBoYSA9IC8tKFthLXpdKS9nOwoKLy8gVXNlZCBieSBjYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpCmZ1bmN0aW9uIGZjYW1lbENhc2UoIF9hbGwsIGxldHRlciApIHsKCXJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTsKfQoKLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlcwovLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1Ci8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICh0cmFjLTk1NzIpCmZ1bmN0aW9uIGNhbWVsQ2FzZSggc3RyaW5nICkgewoJcmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsICJtcy0iICkucmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApOwp9CnZhciBhY2NlcHREYXRhID0gZnVuY3Rpb24oIG93bmVyICkgewoKCS8vIEFjY2VwdHMgb25seToKCS8vICAtIE5vZGUKCS8vICAgIC0gTm9kZS5FTEVNRU5UX05PREUKCS8vICAgIC0gTm9kZS5ET0NVTUVOVF9OT0RFCgkvLyAgLSBPYmplY3QKCS8vICAgIC0gQW55CglyZXR1cm4gb3duZXIubm9kZVR5cGUgPT09IDEgfHwgb3duZXIubm9kZVR5cGUgPT09IDkgfHwgISggK293bmVyLm5vZGVUeXBlICk7Cn07CgoKCgpmdW5jdGlvbiBEYXRhKCkgewoJdGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrOwp9CgpEYXRhLnVpZCA9IDE7CgpEYXRhLnByb3RvdHlwZSA9IHsKCgljYWNoZTogZnVuY3Rpb24oIG93bmVyICkgewoKCQkvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGUKCQl2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07CgoJCS8vIElmIG5vdCwgY3JlYXRlIG9uZQoJCWlmICggIXZhbHVlICkgewoJCQl2YWx1ZSA9IHt9OwoKCQkJLy8gV2UgY2FuIGFjY2VwdCBkYXRhIGZvciBub24tZWxlbWVudCBub2RlcyBpbiBtb2Rlcm4gYnJvd3NlcnMsCgkJCS8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgdHJhYy04MzM1LgoJCQkvLyBBbHdheXMgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC4KCQkJaWYgKCBhY2NlcHREYXRhKCBvd25lciApICkgewoKCQkJCS8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXIKCQkJCS8vIHVzZSBwbGFpbiBhc3NpZ25tZW50CgkJCQlpZiAoIG93bmVyLm5vZGVUeXBlICkgewoJCQkJCW93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHZhbHVlOwoKCQkJCS8vIE90aGVyd2lzZSBzZWN1cmUgaXQgaW4gYSBub24tZW51bWVyYWJsZSBwcm9wZXJ0eQoJCQkJLy8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmUKCQkJCS8vIGRlbGV0ZWQgd2hlbiBkYXRhIGlzIHJlbW92ZWQKCQkJCX0gZWxzZSB7CgkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KCBvd25lciwgdGhpcy5leHBhbmRvLCB7CgkJCQkJCXZhbHVlOiB2YWx1ZSwKCQkJCQkJY29uZmlndXJhYmxlOiB0cnVlCgkJCQkJfSApOwoJCQkJfQoJCQl9CgkJfQoKCQlyZXR1cm4gdmFsdWU7Cgl9LAoJc2V0OiBmdW5jdGlvbiggb3duZXIsIGRhdGEsIHZhbHVlICkgewoJCXZhciBwcm9wLAoJCQljYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7CgoJCS8vIEhhbmRsZTogWyBvd25lciwga2V5LCB2YWx1ZSBdIGFyZ3MKCQkvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpCgkJaWYgKCB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgKSB7CgkJCWNhY2hlWyBjYW1lbENhc2UoIGRhdGEgKSBdID0gdmFsdWU7CgoJCS8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzCgkJfSBlbHNlIHsKCgkJCS8vIENvcHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUgb2JqZWN0CgkJCWZvciAoIHByb3AgaW4gZGF0YSApIHsKCQkJCWNhY2hlWyBjYW1lbENhc2UoIHByb3AgKSBdID0gZGF0YVsgcHJvcCBdOwoJCQl9CgkJfQoJCXJldHVybiBjYWNoZTsKCX0sCglnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkgewoJCXJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/CgkJCXRoaXMuY2FjaGUoIG93bmVyICkgOgoKCQkJLy8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KQoJCQlvd25lclsgdGhpcy5leHBhbmRvIF0gJiYgb3duZXJbIHRoaXMuZXhwYW5kbyBdWyBjYW1lbENhc2UoIGtleSApIF07Cgl9LAoJYWNjZXNzOiBmdW5jdGlvbiggb3duZXIsIGtleSwgdmFsdWUgKSB7CgoJCS8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjoKCQkvLwoJCS8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWQKCQkvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWQKCQkvLwoJCS8vIFRha2UgdGhlICJyZWFkIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmUKCQkvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3RpdmVseSBlaXRoZXI6CgkJLy8KCQkvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0CgkJLy8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleQoJCS8vCgkJaWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fAoJCQkJKCAoIGtleSAmJiB0eXBlb2Yga2V5ID09PSAic3RyaW5nIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHsKCgkJCXJldHVybiB0aGlzLmdldCggb3duZXIsIGtleSApOwoJCX0KCgkJLy8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWUKCQkvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjoKCQkvLwoJCS8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXMKCQkvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZQoJCS8vCgkJdGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7CgoJCS8vIFNpbmNlIHRoZSAic2V0IiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHMKCQkvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl0KCQlyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5OwoJfSwKCXJlbW92ZTogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7CgkJdmFyIGksCgkJCWNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdOwoKCQlpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7CgkJCXJldHVybjsKCQl9CgoJCWlmICgga2V5ICE9PSB1bmRlZmluZWQgKSB7CgoJCQkvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgb2Yga2V5cwoJCQlpZiAoIEFycmF5LmlzQXJyYXkoIGtleSApICkgewoKCQkJCS8vIElmIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzLi4uCgkJCQkvLyBXZSBhbHdheXMgc2V0IGNhbWVsQ2FzZSBrZXlzLCBzbyByZW1vdmUgdGhhdC4KCQkJCWtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApOwoJCQl9IGVsc2UgewoJCQkJa2V5ID0gY2FtZWxDYXNlKCBrZXkgKTsKCgkJCQkvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuCgkJCQkvLyBPdGhlcndpc2UsIGNyZWF0ZSBhbiBhcnJheSBieSBtYXRjaGluZyBub24td2hpdGVzcGFjZQoJCQkJa2V5ID0ga2V5IGluIGNhY2hlID8KCQkJCQlbIGtleSBdIDoKCQkJCQkoIGtleS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdICk7CgkJCX0KCgkJCWkgPSBrZXkubGVuZ3RoOwoKCQkJd2hpbGUgKCBpLS0gKSB7CgkJCQlkZWxldGUgY2FjaGVbIGtleVsgaSBdIF07CgkJCX0KCQl9CgoJCS8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiB0aGVyZSdzIG5vIG1vcmUgZGF0YQoJCWlmICgga2V5ID09PSB1bmRlZmluZWQgfHwgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICkgKSB7CgoJCQkvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1CgkJCS8vIFdlYmtpdCAmIEJsaW5rIHBlcmZvcm1hbmNlIHN1ZmZlcnMgd2hlbiBkZWxldGluZyBwcm9wZXJ0aWVzCgkJCS8vIGZyb20gRE9NIG5vZGVzLCBzbyBzZXQgdG8gdW5kZWZpbmVkIGluc3RlYWQKCQkJLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZCkKCQkJaWYgKCBvd25lci5ub2RlVHlwZSApIHsKCQkJCW93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDsKCQkJfSBlbHNlIHsKCQkJCWRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07CgkJCX0KCQl9Cgl9LAoJaGFzRGF0YTogZnVuY3Rpb24oIG93bmVyICkgewoJCXZhciBjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTsKCQlyZXR1cm4gY2FjaGUgIT09IHVuZGVmaW5lZCAmJiAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICk7Cgl9Cn07CnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7Cgp2YXIgZGF0YVVzZXIgPSBuZXcgRGF0YSgpOwoKCgovLwlJbXBsZW1lbnRhdGlvbiBTdW1tYXJ5Ci8vCi8vCTEuIEVuZm9yY2UgQVBJIHN1cmZhY2UgYW5kIHNlbWFudGljIGNvbXBhdGliaWxpdHkgd2l0aCAxLjkueCBicmFuY2gKLy8JMi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlCi8vCQlwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uCi8vCTMuIFVzZSB0aGUgc2FtZSBzaW5nbGUgbWVjaGFuaXNtIHRvIHN1cHBvcnQgInByaXZhdGUiIGFuZCAidXNlciIgZGF0YS4KLy8JNC4gX05ldmVyXyBleHBvc2UgInByaXZhdGUiIGRhdGEgdG8gdXNlciBjb2RlIChUT0RPOiBEcm9wIF9kYXRhLCBfcmVtb3ZlRGF0YSkKLy8JNS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpCi8vCTYuIFByb3ZpZGUgYSBjbGVhciBwYXRoIGZvciBpbXBsZW1lbnRhdGlvbiB1cGdyYWRlIHRvIFdlYWtNYXAgaW4gMjAxNAoKdmFyIHJicmFjZSA9IC9eKD86XHtbXHdcV10qXH18XFtbXHdcV10qXF0pJC8sCglybXVsdGlEYXNoID0gL1tBLVpdL2c7CgpmdW5jdGlvbiBnZXREYXRhKCBkYXRhICkgewoJaWYgKCBkYXRhID09PSAidHJ1ZSIgKSB7CgkJcmV0dXJuIHRydWU7Cgl9CgoJaWYgKCBkYXRhID09PSAiZmFsc2UiICkgewoJCXJldHVybiBmYWxzZTsKCX0KCglpZiAoIGRhdGEgPT09ICJudWxsIiApIHsKCQlyZXR1cm4gbnVsbDsKCX0KCgkvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZwoJaWYgKCBkYXRhID09PSArZGF0YSArICIiICkgewoJCXJldHVybiArZGF0YTsKCX0KCglpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7CgkJcmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTsKCX0KCglyZXR1cm4gZGF0YTsKfQoKZnVuY3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApIHsKCXZhciBuYW1lOwoKCS8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnkKCS8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZQoJaWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKCQluYW1lID0gImRhdGEtIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCAiLSQmIiApLnRvTG93ZXJDYXNlKCk7CgkJZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7CgoJCWlmICggdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciICkgewoJCQl0cnkgewoJCQkJZGF0YSA9IGdldERhdGEoIGRhdGEgKTsKCQkJfSBjYXRjaCAoIGUgKSB7fQoKCQkJLy8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyCgkJCWRhdGFVc2VyLnNldCggZWxlbSwga2V5LCBkYXRhICk7CgkJfSBlbHNlIHsKCQkJZGF0YSA9IHVuZGVmaW5lZDsKCQl9Cgl9CglyZXR1cm4gZGF0YTsKfQoKalF1ZXJ5LmV4dGVuZCggewoJaGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7CgkJcmV0dXJuIGRhdGFVc2VyLmhhc0RhdGEoIGVsZW0gKSB8fCBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICk7Cgl9LAoKCWRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkgewoJCXJldHVybiBkYXRhVXNlci5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTsKCX0sCgoJcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CgkJZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7Cgl9LAoKCS8vIFRPRE86IE5vdyB0aGF0IGFsbCBjYWxscyB0byBfZGF0YSBhbmQgX3JlbW92ZURhdGEgaGF2ZSBiZWVuIHJlcGxhY2VkCgkvLyB3aXRoIGRpcmVjdCBjYWxscyB0byBkYXRhUHJpdiBtZXRob2RzLCB0aGVzZSBjYW4gYmUgZGVwcmVjYXRlZC4KCV9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHsKCQlyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7Cgl9LAoKCV9yZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKCQlkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIG5hbWUgKTsKCX0KfSApOwoKalF1ZXJ5LmZuLmV4dGVuZCggewoJZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7CgkJdmFyIGksIG5hbWUsIGRhdGEsCgkJCWVsZW0gPSB0aGlzWyAwIF0sCgkJCWF0dHJzID0gZWxlbSAmJiBlbGVtLmF0dHJpYnV0ZXM7CgoJCS8vIEdldHMgYWxsIHZhbHVlcwoJCWlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7CgkJCWlmICggdGhpcy5sZW5ndGggKSB7CgkJCQlkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7CgoJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sICJoYXNEYXRhQXR0cnMiICkgKSB7CgkJCQkJaSA9IGF0dHJzLmxlbmd0aDsKCQkJCQl3aGlsZSAoIGktLSApIHsKCgkJCQkJCS8vIFN1cHBvcnQ6IElFIDExIG9ubHkKCQkJCQkJLy8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICh0cmFjLTE0ODk0KQoJCQkJCQlpZiAoIGF0dHJzWyBpIF0gKSB7CgkJCQkJCQluYW1lID0gYXR0cnNbIGkgXS5uYW1lOwoJCQkJCQkJaWYgKCBuYW1lLmluZGV4T2YoICJkYXRhLSIgKSA9PT0gMCApIHsKCQkJCQkJCQluYW1lID0gY2FtZWxDYXNlKCBuYW1lLnNsaWNlKCA1ICkgKTsKCQkJCQkJCQlkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQkJZGF0YVByaXYuc2V0KCBlbGVtLCAiaGFzRGF0YUF0dHJzIiwgdHJ1ZSApOwoJCQkJfQoJCQl9CgoJCQlyZXR1cm4gZGF0YTsKCQl9CgoJCS8vIFNldHMgbXVsdGlwbGUgdmFsdWVzCgkJaWYgKCB0eXBlb2Yga2V5ID09PSAib2JqZWN0IiApIHsKCQkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CgkJCQlkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApOwoJCQl9ICk7CgkJfQoKCQlyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7CgkJCXZhciBkYXRhOwoKCQkJLy8gVGhlIGNhbGxpbmcgalF1ZXJ5IG9iamVjdCAoZWxlbWVudCBtYXRjaGVzKSBpcyBub3QgZW1wdHkKCQkJLy8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGUKCQkJLy8gYHZhbHVlYCBwYXJhbWV0ZXIgd2FzIG5vdCB1bmRlZmluZWQuIEFuIGVtcHR5IGpRdWVyeSBvYmplY3QKCQkJLy8gd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgZm9yIGVsZW0gPSB0aGlzWyAwIF0gd2hpY2ggd2lsbAoJCQkvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLgoJCQlpZiAoIGVsZW0gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKCgkJCQkvLyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlCgkJCQkvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YQoJCQkJZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwga2V5ICk7CgkJCQlpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHsKCQkJCQlyZXR1cm4gZGF0YTsKCQkJCX0KCgkJCQkvLyBBdHRlbXB0IHRvICJkaXNjb3ZlciIgdGhlIGRhdGEgaW4KCQkJCS8vIEhUTUw1IGN1c3RvbSBkYXRhLSogYXR0cnMKCQkJCWRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7CgkJCQlpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHsKCQkJCQlyZXR1cm4gZGF0YTsKCQkJCX0KCgkJCQkvLyBXZSB0cmllZCByZWFsbHkgaGFyZCwgYnV0IHRoZSBkYXRhIGRvZXNuJ3QgZXhpc3QuCgkJCQlyZXR1cm47CgkJCX0KCgkJCS8vIFNldCB0aGUgZGF0YS4uLgoJCQl0aGlzLmVhY2goIGZ1bmN0aW9uKCkgewoKCQkJCS8vIFdlIGFsd2F5cyBzdG9yZSB0aGUgY2FtZWxDYXNlZCBrZXkKCQkJCWRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApOwoJCQl9ICk7CgkJfSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCB0cnVlICk7Cgl9LAoKCXJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7CgkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CgkJCWRhdGFVc2VyLnJlbW92ZSggdGhpcywga2V5ICk7CgkJfSApOwoJfQp9ICk7CgoKalF1ZXJ5LmV4dGVuZCggewoJcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkgewoJCXZhciBxdWV1ZTsKCgkJaWYgKCBlbGVtICkgewoJCQl0eXBlID0gKCB0eXBlIHx8ICJmeCIgKSArICJxdWV1ZSI7CgkJCXF1ZXVlID0gZGF0YVByaXYuZ2V0KCBlbGVtLCB0eXBlICk7CgoJCQkvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwCgkJCWlmICggZGF0YSApIHsKCQkJCWlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHsKCQkJCQlxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7CgkJCQl9IGVsc2UgewoJCQkJCXF1ZXVlLnB1c2goIGRhdGEgKTsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gcXVldWUgfHwgW107CgkJfQoJfSwKCglkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHsKCQl0eXBlID0gdHlwZSB8fCAiZngiOwoKCQl2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSwKCQkJc3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsCgkJCWZuID0gcXVldWUuc2hpZnQoKSwKCQkJaG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSwKCQkJbmV4dCA9IGZ1bmN0aW9uKCkgewoJCQkJalF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTsKCQkJfTsKCgkJLy8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbAoJCWlmICggZm4gPT09ICJpbnByb2dyZXNzIiApIHsKCQkJZm4gPSBxdWV1ZS5zaGlmdCgpOwoJCQlzdGFydExlbmd0aC0tOwoJCX0KCgkJaWYgKCBmbiApIHsKCgkJCS8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmcKCQkJLy8gYXV0b21hdGljYWxseSBkZXF1ZXVlZAoJCQlpZiAoIHR5cGUgPT09ICJmeCIgKSB7CgkJCQlxdWV1ZS51bnNoaWZ0KCAiaW5wcm9ncmVzcyIgKTsKCQkJfQoKCQkJLy8gQ2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvbgoJCQlkZWxldGUgaG9va3Muc3RvcDsKCQkJZm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTsKCQl9CgoJCWlmICggIXN0YXJ0TGVuZ3RoICYmIGhvb2tzICkgewoJCQlob29rcy5lbXB0eS5maXJlKCk7CgkJfQoJfSwKCgkvLyBOb3QgcHVibGljIC0gZ2VuZXJhdGUgYSBxdWV1ZUhvb2tzIG9iamVjdCwgb3IgcmV0dXJuIHRoZSBjdXJyZW50IG9uZQoJX3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgewoJCXZhciBrZXkgPSB0eXBlICsgInF1ZXVlSG9va3MiOwoJCXJldHVybiBkYXRhUHJpdi5nZXQoIGVsZW0sIGtleSApIHx8IGRhdGFQcml2LmFjY2VzcyggZWxlbSwga2V5LCB7CgkJCWVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICkuYWRkKCBmdW5jdGlvbigpIHsKCQkJCWRhdGFQcml2LnJlbW92ZSggZWxlbSwgWyB0eXBlICsgInF1ZXVlIiwga2V5IF0gKTsKCQkJfSApCgkJfSApOwoJfQp9ICk7CgpqUXVlcnkuZm4uZXh0ZW5kKCB7CglxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7CgkJdmFyIHNldHRlciA9IDI7CgoJCWlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgewoJCQlkYXRhID0gdHlwZTsKCQkJdHlwZSA9ICJmeCI7CgkJCXNldHRlci0tOwoJCX0KCgkJaWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVyICkgewoJCQlyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTsKCQl9CgoJCXJldHVybiBkYXRhID09PSB1bmRlZmluZWQgPwoJCQl0aGlzIDoKCQkJdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKCQkJCXZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApOwoKCQkJCS8vIEVuc3VyZSBhIGhvb2tzIGZvciB0aGlzIHF1ZXVlCgkJCQlqUXVlcnkuX3F1ZXVlSG9va3MoIHRoaXMsIHR5cGUgKTsKCgkJCQlpZiAoIHR5cGUgPT09ICJmeCIgJiYgcXVldWVbIDAgXSAhPT0gImlucHJvZ3Jlc3MiICkgewoJCQkJCWpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7CgkJCQl9CgkJCX0gKTsKCX0sCglkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKCQkJalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKCQl9ICk7Cgl9LAoJY2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7CgkJcmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKCX0sCgoJLy8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZQoJLy8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpCglwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2JqICkgewoJCXZhciB0bXAsCgkJCWNvdW50ID0gMSwKCQkJZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSwKCQkJZWxlbWVudHMgPSB0aGlzLAoJCQlpID0gdGhpcy5sZW5ndGgsCgkJCXJlc29sdmUgPSBmdW5jdGlvbigpIHsKCQkJCWlmICggISggLS1jb3VudCApICkgewoJCQkJCWRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7CgkJCQl9CgkJCX07CgoJCWlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgewoJCQlvYmogPSB0eXBlOwoJCQl0eXBlID0gdW5kZWZpbmVkOwoJCX0KCQl0eXBlID0gdHlwZSB8fCAiZngiOwoKCQl3aGlsZSAoIGktLSApIHsKCQkJdG1wID0gZGF0YVByaXYuZ2V0KCBlbGVtZW50c1sgaSBdLCB0eXBlICsgInF1ZXVlSG9va3MiICk7CgkJCWlmICggdG1wICYmIHRtcC5lbXB0eSApIHsKCQkJCWNvdW50Kys7CgkJCQl0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7CgkJCX0KCQl9CgkJcmVzb2x2ZSgpOwoJCXJldHVybiBkZWZlci5wcm9taXNlKCBvYmogKTsKCX0KfSApOwp2YXIgcG51bSA9ICggL1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLyApLnNvdXJjZTsKCnZhciByY3NzTnVtID0gbmV3IFJlZ0V4cCggIl4oPzooWystXSk9fCkoIiArIHBudW0gKyAiKShbYS16JV0qKSQiLCAiaSIgKTsKCgp2YXIgY3NzRXhwYW5kID0gWyAiVG9wIiwgIlJpZ2h0IiwgIkJvdHRvbSIsICJMZWZ0IiBdOwoKdmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKCgoKCXZhciBpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7CgkJCXJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApOwoJCX0sCgkJY29tcG9zZWQgPSB7IGNvbXBvc2VkOiB0cnVlIH07CgoJLy8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4KywgaU9TIDEwLjAgLSAxMC4yIG9ubHkKCS8vIENoZWNrIGF0dGFjaG1lbnQgYWNyb3NzIHNoYWRvdyBET00gYm91bmRhcmllcyB3aGVuIHBvc3NpYmxlIChnaC0zNTA0KQoJLy8gU3VwcG9ydDogaU9TIDEwLjAtMTAuMiBvbmx5CgkvLyBFYXJseSBpT1MgMTAgdmVyc2lvbnMgc3VwcG9ydCBgYXR0YWNoU2hhZG93YCBidXQgbm90IGBnZXRSb290Tm9kZWAsCgkvLyBsZWFkaW5nIHRvIGVycm9ycy4gV2UgbmVlZCB0byBjaGVjayBmb3IgYGdldFJvb3ROb2RlYC4KCWlmICggZG9jdW1lbnRFbGVtZW50LmdldFJvb3ROb2RlICkgewoJCWlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHsKCQkJcmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgfHwKCQkJCWVsZW0uZ2V0Um9vdE5vZGUoIGNvbXBvc2VkICkgPT09IGVsZW0ub3duZXJEb2N1bWVudDsKCQl9OwoJfQp2YXIgaXNIaWRkZW5XaXRoaW5UcmVlID0gZnVuY3Rpb24oIGVsZW0sIGVsICkgewoKCQkvLyBpc0hpZGRlbldpdGhpblRyZWUgbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjsKCQkvLyBpbiB0aGF0IGNhc2UsIGVsZW1lbnQgd2lsbCBiZSBzZWNvbmQgYXJndW1lbnQKCQllbGVtID0gZWwgfHwgZWxlbTsKCgkJLy8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGwKCQlyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAibm9uZSIgfHwKCQkJZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAiIiAmJgoKCQkJLy8gT3RoZXJ3aXNlLCBjaGVjayBjb21wdXRlZCBzdHlsZQoJCQkvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDMgLSA0NQoJCQkvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXMKCQkJLy8gaW4gdGhlIGRvY3VtZW50LgoJCQlpc0F0dGFjaGVkKCBlbGVtICkgJiYKCgkJCWpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApID09PSAibm9uZSI7Cgl9OwoKCgpmdW5jdGlvbiBhZGp1c3RDU1MoIGVsZW0sIHByb3AsIHZhbHVlUGFydHMsIHR3ZWVuICkgewoJdmFyIGFkanVzdGVkLCBzY2FsZSwKCQltYXhJdGVyYXRpb25zID0gMjAsCgkJY3VycmVudFZhbHVlID0gdHdlZW4gPwoJCQlmdW5jdGlvbigpIHsKCQkJCXJldHVybiB0d2Vlbi5jdXIoKTsKCQkJfSA6CgkJCWZ1bmN0aW9uKCkgewoJCQkJcmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AsICIiICk7CgkJCX0sCgkJaW5pdGlhbCA9IGN1cnJlbnRWYWx1ZSgpLAoJCXVuaXQgPSB2YWx1ZVBhcnRzICYmIHZhbHVlUGFydHNbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/ICIiIDogInB4IiApLAoKCQkvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlcwoJCWluaXRpYWxJblVuaXQgPSBlbGVtLm5vZGVUeXBlICYmCgkJCSggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09ICJweCIgJiYgK2luaXRpYWwgKSAmJgoJCQlyY3NzTnVtLmV4ZWMoIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AgKSApOwoKCWlmICggaW5pdGlhbEluVW5pdCAmJiBpbml0aWFsSW5Vbml0WyAzIF0gIT09IHVuaXQgKSB7CgoJCS8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NAoJCS8vIEhhbHZlIHRoZSBpdGVyYXRpb24gdGFyZ2V0IHZhbHVlIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlIGZyb20gQ1NTIHVwcGVyIGJvdW5kcyAoZ2gtMjE0NCkKCQlpbml0aWFsID0gaW5pdGlhbCAvIDI7CgoJCS8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3MKCQl1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07CgoJCS8vIEl0ZXJhdGl2ZWx5IGFwcHJveGltYXRlIGZyb20gYSBub256ZXJvIHN0YXJ0aW5nIHBvaW50CgkJaW5pdGlhbEluVW5pdCA9ICtpbml0aWFsIHx8IDE7CgoJCXdoaWxlICggbWF4SXRlcmF0aW9ucy0tICkgewoKCQkJLy8gRXZhbHVhdGUgYW5kIHVwZGF0ZSBvdXIgYmVzdCBndWVzcyAoZG91YmxpbmcgZ3Vlc3NlcyB0aGF0IHplcm8gb3V0KS4KCQkJLy8gRmluaXNoIGlmIHRoZSBzY2FsZSBlcXVhbHMgb3IgY3Jvc3NlcyAxIChtYWtpbmcgdGhlIG9sZCpuZXcgcHJvZHVjdCBub24tcG9zaXRpdmUpLgoJCQlqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7CgkJCWlmICggKCAxIC0gc2NhbGUgKSAqICggMSAtICggc2NhbGUgPSBjdXJyZW50VmFsdWUoKSAvIGluaXRpYWwgfHwgMC41ICkgKSA8PSAwICkgewoJCQkJbWF4SXRlcmF0aW9ucyA9IDA7CgkJCX0KCQkJaW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTsKCgkJfQoKCQlpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAqIDI7CgkJalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApOwoKCQkvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uCgkJdmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107Cgl9CgoJaWYgKCB2YWx1ZVBhcnRzICkgewoJCWluaXRpYWxJblVuaXQgPSAraW5pdGlhbEluVW5pdCB8fCAraW5pdGlhbCB8fCAwOwoKCQkvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWQKCQlhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/CgkJCWluaXRpYWxJblVuaXQgKyAoIHZhbHVlUGFydHNbIDEgXSArIDEgKSAqIHZhbHVlUGFydHNbIDIgXSA6CgkJCSt2YWx1ZVBhcnRzWyAyIF07CgkJaWYgKCB0d2VlbiApIHsKCQkJdHdlZW4udW5pdCA9IHVuaXQ7CgkJCXR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDsKCQkJdHdlZW4uZW5kID0gYWRqdXN0ZWQ7CgkJfQoJfQoJcmV0dXJuIGFkanVzdGVkOwp9CgoKdmFyIGRlZmF1bHREaXNwbGF5TWFwID0ge307CgpmdW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApIHsKCXZhciB0ZW1wLAoJCWRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCwKCQlub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUsCgkJZGlzcGxheSA9IGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdOwoKCWlmICggZGlzcGxheSApIHsKCQlyZXR1cm4gZGlzcGxheTsKCX0KCgl0ZW1wID0gZG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGRvYy5jcmVhdGVFbGVtZW50KCBub2RlTmFtZSApICk7CglkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgImRpc3BsYXkiICk7CgoJdGVtcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0ZW1wICk7CgoJaWYgKCBkaXNwbGF5ID09PSAibm9uZSIgKSB7CgkJZGlzcGxheSA9ICJibG9jayI7Cgl9CglkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7CgoJcmV0dXJuIGRpc3BsYXk7Cn0KCmZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHsKCXZhciBkaXNwbGF5LCBlbGVtLAoJCXZhbHVlcyA9IFtdLAoJCWluZGV4ID0gMCwKCQlsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7CgoJLy8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlCglmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgewoJCWVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTsKCQlpZiAoICFlbGVtLnN0eWxlICkgewoJCQljb250aW51ZTsKCQl9CgoJCWRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7CgkJaWYgKCBzaG93ICkgewoKCQkJLy8gU2luY2Ugd2UgZm9yY2UgdmlzaWJpbGl0eSB1cG9uIGNhc2NhZGUtaGlkZGVuIGVsZW1lbnRzLCBhbiBpbW1lZGlhdGUgKGFuZCBzbG93KQoJCQkvLyBjaGVjayBpcyByZXF1aXJlZCBpbiB0aGlzIGZpcnN0IGxvb3AgdW5sZXNzIHdlIGhhdmUgYSBub25lbXB0eSBkaXNwbGF5IHZhbHVlIChlaXRoZXIKCQkJLy8gaW5saW5lIG9yIGFib3V0LXRvLWJlLXJlc3RvcmVkKQoJCQlpZiAoIGRpc3BsYXkgPT09ICJub25lIiApIHsKCQkJCXZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgImRpc3BsYXkiICkgfHwgbnVsbDsKCQkJCWlmICggIXZhbHVlc1sgaW5kZXggXSApIHsKCQkJCQllbGVtLnN0eWxlLmRpc3BsYXkgPSAiIjsKCQkJCX0KCQkJfQoJCQlpZiAoIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIiIgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICkgKSB7CgkJCQl2YWx1ZXNbIGluZGV4IF0gPSBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApOwoJCQl9CgkJfSBlbHNlIHsKCQkJaWYgKCBkaXNwbGF5ICE9PSAibm9uZSIgKSB7CgkJCQl2YWx1ZXNbIGluZGV4IF0gPSAibm9uZSI7CgoJCQkJLy8gUmVtZW1iZXIgd2hhdCB3ZSdyZSBvdmVyd3JpdGluZwoJCQkJZGF0YVByaXYuc2V0KCBlbGVtLCAiZGlzcGxheSIsIGRpc3BsYXkgKTsKCQkJfQoJCX0KCX0KCgkvLyBTZXQgdGhlIGRpc3BsYXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AgdG8gYXZvaWQgY29uc3RhbnQgcmVmbG93Cglmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgewoJCWlmICggdmFsdWVzWyBpbmRleCBdICE9IG51bGwgKSB7CgkJCWVsZW1lbnRzWyBpbmRleCBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZXNbIGluZGV4IF07CgkJfQoJfQoKCXJldHVybiBlbGVtZW50czsKfQoKalF1ZXJ5LmZuLmV4dGVuZCggewoJc2hvdzogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7Cgl9LAoJaGlkZTogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHNob3dIaWRlKCB0aGlzICk7Cgl9LAoJdG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7CgkJaWYgKCB0eXBlb2Ygc3RhdGUgPT09ICJib29sZWFuIiApIHsKCQkJcmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTsKCQl9CgoJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgewoJCQlpZiAoIGlzSGlkZGVuV2l0aGluVHJlZSggdGhpcyApICkgewoJCQkJalF1ZXJ5KCB0aGlzICkuc2hvdygpOwoJCQl9IGVsc2UgewoJCQkJalF1ZXJ5KCB0aGlzICkuaGlkZSgpOwoJCQl9CgkJfSApOwoJfQp9ICk7CnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTsKCnZhciBydGFnTmFtZSA9ICggLzwoW2Etel1bXlwvXDA+XHgyMFx0XHJcblxmXSopL2kgKTsKCnZhciByc2NyaXB0VHlwZSA9ICggL14kfF5tb2R1bGUkfFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7CgoKCiggZnVuY3Rpb24oKSB7Cgl2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksCgkJZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICkgKSwKCQlpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJpbnB1dCIgKTsKCgkvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5CgkvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAodHJhYy0xMTIxNykKCS8vIFN1cHBvcnQ6IFdpbmRvd3MgV2ViIEFwcHMgKFdXQSkKCS8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAodHJhYy0xNDkwMSkKCWlucHV0LnNldEF0dHJpYnV0ZSggInR5cGUiLCAicmFkaW8iICk7CglpbnB1dC5zZXRBdHRyaWJ1dGUoICJjaGVja2VkIiwgImNoZWNrZWQiICk7CglpbnB1dC5zZXRBdHRyaWJ1dGUoICJuYW1lIiwgInQiICk7CgoJZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApOwoKCS8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgb25seQoJLy8gT2xkZXIgV2ViS2l0IGRvZXNuJ3QgY2xvbmUgY2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzCglzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7CgoJLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5CgkvLyBNYWtlIHN1cmUgdGV4dGFyZWEgKGFuZCBjaGVja2JveCkgZGVmYXVsdFZhbHVlIGlzIHByb3Blcmx5IGNsb25lZAoJZGl2LmlubmVySFRNTCA9ICI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IjsKCXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSAhIWRpdi5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlOwoKCS8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5CgkvLyBJRSA8PTkgcmVwbGFjZXMgPG9wdGlvbj4gdGFncyB3aXRoIHRoZWlyIGNvbnRlbnRzIHdoZW4gaW5zZXJ0ZWQgb3V0c2lkZSBvZgoJLy8gdGhlIHNlbGVjdCBlbGVtZW50LgoJZGl2LmlubmVySFRNTCA9ICI8b3B0aW9uPjwvb3B0aW9uPiI7CglzdXBwb3J0Lm9wdGlvbiA9ICEhZGl2Lmxhc3RDaGlsZDsKfSApKCk7CgoKLy8gV2UgaGF2ZSB0byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKHRyYWMtMTMyMDApCnZhciB3cmFwTWFwID0gewoKCS8vIFhIVE1MIHBhcnNlcnMgZG8gbm90IG1hZ2ljYWxseSBpbnNlcnQgZWxlbWVudHMgaW4gdGhlCgkvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuCgkvLyB0aGlzIGJ5IG9taXR0aW5nIDx0Ym9keT4gb3Igb3RoZXIgcmVxdWlyZWQgZWxlbWVudHMuCgl0aGVhZDogWyAxLCAiPHRhYmxlPiIsICI8L3RhYmxlPiIgXSwKCWNvbDogWyAyLCAiPHRhYmxlPjxjb2xncm91cD4iLCAiPC9jb2xncm91cD48L3RhYmxlPiIgXSwKCXRyOiBbIDIsICI8dGFibGU+PHRib2R5PiIsICI8L3Rib2R5PjwvdGFibGU+IiBdLAoJdGQ6IFsgMywgIjx0YWJsZT48dGJvZHk+PHRyPiIsICI8L3RyPjwvdGJvZHk+PC90YWJsZT4iIF0sCgoJX2RlZmF1bHQ6IFsgMCwgIiIsICIiIF0KfTsKCndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7CndyYXBNYXAudGggPSB3cmFwTWFwLnRkOwoKLy8gU3VwcG9ydDogSUUgPD05IG9ubHkKaWYgKCAhc3VwcG9ydC5vcHRpb24gKSB7Cgl3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb24gPSBbIDEsICI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwgIjwvc2VsZWN0PiIgXTsKfQoKCmZ1bmN0aW9uIGdldEFsbCggY29udGV4dCwgdGFnICkgewoKCS8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHkKCS8vIFVzZSB0eXBlb2YgdG8gYXZvaWQgemVyby1hcmd1bWVudCBtZXRob2QgaW52b2NhdGlvbiBvbiBob3N0IG9iamVjdHMgKHRyYWMtMTUxNTEpCgl2YXIgcmV0OwoKCWlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmluZWQiICkgewoJCXJldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyB8fCAiKiIgKTsKCgl9IGVsc2UgaWYgKCB0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSAidW5kZWZpbmVkIiApIHsKCQlyZXQgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyB8fCAiKiIgKTsKCgl9IGVsc2UgewoJCXJldCA9IFtdOwoJfQoKCWlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIG5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHsKCQlyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7Cgl9CgoJcmV0dXJuIHJldDsKfQoKCi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZApmdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7Cgl2YXIgaSA9IDAsCgkJbCA9IGVsZW1zLmxlbmd0aDsKCglmb3IgKCA7IGkgPCBsOyBpKysgKSB7CgkJZGF0YVByaXYuc2V0KAoJCQllbGVtc1sgaSBdLAoJCQkiZ2xvYmFsRXZhbCIsCgkJCSFyZWZFbGVtZW50cyB8fCBkYXRhUHJpdi5nZXQoIHJlZkVsZW1lbnRzWyBpIF0sICJnbG9iYWxFdmFsIiApCgkJKTsKCX0KfQoKCnZhciByaHRtbCA9IC88fCYjP1x3KzsvOwoKZnVuY3Rpb24gYnVpbGRGcmFnbWVudCggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiwgaWdub3JlZCApIHsKCXZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgYXR0YWNoZWQsIGosCgkJZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwKCQlub2RlcyA9IFtdLAoJCWkgPSAwLAoJCWwgPSBlbGVtcy5sZW5ndGg7CgoJZm9yICggOyBpIDwgbDsgaSsrICkgewoJCWVsZW0gPSBlbGVtc1sgaSBdOwoKCQlpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHsKCgkJCS8vIEFkZCBub2RlcyBkaXJlY3RseQoJCQlpZiAoIHRvVHlwZSggZWxlbSApID09PSAib2JqZWN0IiApIHsKCgkJCQkvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHkKCQkJCS8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXQKCQkJCWpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTsKCgkJCS8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZQoJCQl9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkgewoJCQkJbm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7CgoJCQkvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXMKCQkJfSBlbHNlIHsKCQkJCXRtcCA9IHRtcCB8fCBmcmFnbWVudC5hcHBlbmRDaGlsZCggY29udGV4dC5jcmVhdGVFbGVtZW50KCAiZGl2IiApICk7CgoJCQkJLy8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbgoJCQkJdGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyAiIiwgIiIgXSApWyAxIF0udG9Mb3dlckNhc2UoKTsKCQkJCXdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0OwoJCQkJdG1wLmlubmVySFRNTCA9IHdyYXBbIDEgXSArIGpRdWVyeS5odG1sUHJlZmlsdGVyKCBlbGVtICkgKyB3cmFwWyAyIF07CgoJCQkJLy8gRGVzY2VuZCB0aHJvdWdoIHdyYXBwZXJzIHRvIHRoZSByaWdodCBjb250ZW50CgkJCQlqID0gd3JhcFsgMCBdOwoJCQkJd2hpbGUgKCBqLS0gKSB7CgkJCQkJdG1wID0gdG1wLmxhc3RDaGlsZDsKCQkJCX0KCgkJCQkvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHkKCQkJCS8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXQKCQkJCWpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7CgoJCQkJLy8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXIKCQkJCXRtcCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7CgoJCQkJLy8gRW5zdXJlIHRoZSBjcmVhdGVkIG5vZGVzIGFyZSBvcnBoYW5lZCAodHJhYy0xMjM5MikKCQkJCXRtcC50ZXh0Q29udGVudCA9ICIiOwoJCQl9CgkJfQoJfQoKCS8vIFJlbW92ZSB3cmFwcGVyIGZyb20gZnJhZ21lbnQKCWZyYWdtZW50LnRleHRDb250ZW50ID0gIiI7CgoJaSA9IDA7Cgl3aGlsZSAoICggZWxlbSA9IG5vZGVzWyBpKysgXSApICkgewoKCQkvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KQoJCWlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkgewoJCQlpZiAoIGlnbm9yZWQgKSB7CgkJCQlpZ25vcmVkLnB1c2goIGVsZW0gKTsKCQkJfQoJCQljb250aW51ZTsKCQl9CgoJCWF0dGFjaGVkID0gaXNBdHRhY2hlZCggZWxlbSApOwoKCQkvLyBBcHBlbmQgdG8gZnJhZ21lbnQKCQl0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksICJzY3JpcHQiICk7CgoJCS8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3RvcnkKCQlpZiAoIGF0dGFjaGVkICkgewoJCQlzZXRHbG9iYWxFdmFsKCB0bXAgKTsKCQl9CgoJCS8vIENhcHR1cmUgZXhlY3V0YWJsZXMKCQlpZiAoIHNjcmlwdHMgKSB7CgkJCWogPSAwOwoJCQl3aGlsZSAoICggZWxlbSA9IHRtcFsgaisrIF0gKSApIHsKCQkJCWlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8ICIiICkgKSB7CgkJCQkJc2NyaXB0cy5wdXNoKCBlbGVtICk7CgkJCQl9CgkJCX0KCQl9Cgl9CgoJcmV0dXJuIGZyYWdtZW50Owp9CgoKdmFyIHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XC4oLispfCkvOwoKZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHsKCXJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiByZXR1cm5GYWxzZSgpIHsKCXJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHsKCXZhciBvcmlnRm4sIHR5cGU7CgoJLy8gVHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hhbmRsZXJzCglpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9iamVjdCIgKSB7CgoJCS8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApCgkJaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgewoKCQkJLy8gKCB0eXBlcy1PYmplY3QsIGRhdGEgKQoJCQlkYXRhID0gZGF0YSB8fCBzZWxlY3RvcjsKCQkJc2VsZWN0b3IgPSB1bmRlZmluZWQ7CgkJfQoJCWZvciAoIHR5cGUgaW4gdHlwZXMgKSB7CgkJCW9uKCBlbGVtLCB0eXBlLCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7CgkJfQoJCXJldHVybiBlbGVtOwoJfQoKCWlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7CgoJCS8vICggdHlwZXMsIGZuICkKCQlmbiA9IHNlbGVjdG9yOwoJCWRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDsKCX0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7CgkJaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICkgewoKCQkJLy8gKCB0eXBlcywgc2VsZWN0b3IsIGZuICkKCQkJZm4gPSBkYXRhOwoJCQlkYXRhID0gdW5kZWZpbmVkOwoJCX0gZWxzZSB7CgoJCQkvLyAoIHR5cGVzLCBkYXRhLCBmbiApCgkJCWZuID0gZGF0YTsKCQkJZGF0YSA9IHNlbGVjdG9yOwoJCQlzZWxlY3RvciA9IHVuZGVmaW5lZDsKCQl9Cgl9CglpZiAoIGZuID09PSBmYWxzZSApIHsKCQlmbiA9IHJldHVybkZhbHNlOwoJfSBlbHNlIGlmICggIWZuICkgewoJCXJldHVybiBlbGVtOwoJfQoKCWlmICggb25lID09PSAxICkgewoJCW9yaWdGbiA9IGZuOwoJCWZuID0gZnVuY3Rpb24oIGV2ZW50ICkgewoKCQkJLy8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvCgkJCWpRdWVyeSgpLm9mZiggZXZlbnQgKTsKCQkJcmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CgkJfTsKCgkJLy8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm4KCQlmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTsKCX0KCXJldHVybiBlbGVtLmVhY2goIGZ1bmN0aW9uKCkgewoJCWpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3IgKTsKCX0gKTsKfQoKLyoKICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgZXZlbnRzIC0tIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLgogKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLgogKi8KalF1ZXJ5LmV2ZW50ID0gewoKCWdsb2JhbDoge30sCgoJYWRkOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEsIHNlbGVjdG9yICkgewoKCQl2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsCgkJCWV2ZW50cywgdCwgaGFuZGxlT2JqLAoJCQlzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsCgkJCWVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7CgoJCS8vIE9ubHkgYXR0YWNoIGV2ZW50cyB0byBvYmplY3RzIHRoYXQgYWNjZXB0IGRhdGEKCQlpZiAoICFhY2NlcHREYXRhKCBlbGVtICkgKSB7CgkJCXJldHVybjsKCQl9CgoJCS8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlcgoJCWlmICggaGFuZGxlci5oYW5kbGVyICkgewoJCQloYW5kbGVPYmpJbiA9IGhhbmRsZXI7CgkJCWhhbmRsZXIgPSBoYW5kbGVPYmpJbi5oYW5kbGVyOwoJCQlzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yOwoJCX0KCgkJLy8gRW5zdXJlIHRoYXQgaW52YWxpZCBzZWxlY3RvcnMgdGhyb3cgZXhjZXB0aW9ucyBhdCBhdHRhY2ggdGltZQoJCS8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KQoJCWlmICggc2VsZWN0b3IgKSB7CgkJCWpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZG9jdW1lbnRFbGVtZW50LCBzZWxlY3RvciApOwoJCX0KCgkJLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyCgkJaWYgKCAhaGFuZGxlci5ndWlkICkgewoJCQloYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrOwoJCX0KCgkJLy8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZSBhbmQgbWFpbiBoYW5kbGVyLCBpZiB0aGlzIGlzIHRoZSBmaXJzdAoJCWlmICggISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7CgkJCWV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IE9iamVjdC5jcmVhdGUoIG51bGwgKTsKCQl9CgkJaWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkgewoJCQlldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKCBlICkgewoKCQkJCS8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kCgkJCQkvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkCgkJCQlyZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gInVuZGVmaW5lZCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID8KCQkJCQlqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkOwoJCQl9OwoJCX0KCgkJLy8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZQoJCXR5cGVzID0gKCB0eXBlcyB8fCAiIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyAiIiBdOwoJCXQgPSB0eXBlcy5sZW5ndGg7CgkJd2hpbGUgKCB0LS0gKSB7CgkJCXRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTsKCQkJdHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07CgkJCW5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8ICIiICkuc3BsaXQoICIuIiApLnNvcnQoKTsKCgkJCS8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVycwoJCQlpZiAoICF0eXBlICkgewoJCQkJY29udGludWU7CgkJCX0KCgkJCS8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZQoJCQlzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKCgkJCS8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZQoJCQl0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7CgoJCQkvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlCgkJCXNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OwoKCQkJLy8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnMKCQkJaGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCggewoJCQkJdHlwZTogdHlwZSwKCQkJCW9yaWdUeXBlOiBvcmlnVHlwZSwKCQkJCWRhdGE6IGRhdGEsCgkJCQloYW5kbGVyOiBoYW5kbGVyLAoJCQkJZ3VpZDogaGFuZGxlci5ndWlkLAoJCQkJc2VsZWN0b3I6IHNlbGVjdG9yLAoJCQkJbmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSwKCQkJCW5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCAiLiIgKQoJCQl9LCBoYW5kbGVPYmpJbiApOwoKCQkJLy8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3QKCQkJaWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7CgkJCQloYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107CgkJCQloYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDsKCgkJCQkvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2UKCQkJCWlmICggIXNwZWNpYWwuc2V0dXAgfHwKCQkJCQlzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkgewoKCQkJCQlpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHsKCQkJCQkJZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSApOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJaWYgKCBzcGVjaWFsLmFkZCApIHsKCQkJCXNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApOwoKCQkJCWlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7CgkJCQkJaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDsKCQkJCX0KCQkJfQoKCQkJLy8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnQKCQkJaWYgKCBzZWxlY3RvciApIHsKCQkJCWhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTsKCQkJfSBlbHNlIHsKCQkJCWhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApOwoJCQl9CgoJCQkvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uCgkJCWpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7CgkJfQoKCX0sCgoJLy8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50CglyZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkgewoKCQl2YXIgaiwgb3JpZ0NvdW50LCB0bXAsCgkJCWV2ZW50cywgdCwgaGFuZGxlT2JqLAoJCQlzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsCgkJCWVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApOwoKCQlpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJLy8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZAoJCXR5cGVzID0gKCB0eXBlcyB8fCAiIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyAiIiBdOwoJCXQgPSB0eXBlcy5sZW5ndGg7CgkJd2hpbGUgKCB0LS0gKSB7CgkJCXRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTsKCQkJdHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07CgkJCW5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8ICIiICkuc3BsaXQoICIuIiApLnNvcnQoKTsKCgkJCS8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudAoJCQlpZiAoICF0eXBlICkgewoJCQkJZm9yICggdHlwZSBpbiBldmVudHMgKSB7CgkJCQkJalF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7CgkJCQl9CgkJCQljb250aW51ZTsKCQkJfQoKCQkJc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307CgkJCXR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTsKCQkJaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTsKCQkJdG1wID0gdG1wWyAyIF0gJiYKCQkJCW5ldyBSZWdFeHAoICIoXnxcXC4pIiArIG5hbWVzcGFjZXMuam9pbiggIlxcLig/Oi4qXFwufCkiICkgKyAiKFxcLnwkKSIgKTsKCgkJCS8vIFJlbW92ZSBtYXRjaGluZyBldmVudHMKCQkJb3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDsKCQkJd2hpbGUgKCBqLS0gKSB7CgkJCQloYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBdOwoKCQkJCWlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiYKCQkJCQkoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJgoJCQkJCSggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiYKCQkJCQkoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8CgkJCQkJCXNlbGVjdG9yID09PSAiKioiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkgewoJCQkJCWhhbmRsZXJzLnNwbGljZSggaiwgMSApOwoKCQkJCQlpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHsKCQkJCQkJaGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tOwoJCQkJCX0KCQkJCQlpZiAoIHNwZWNpYWwucmVtb3ZlICkgewoJCQkJCQlzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCS8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3QKCQkJLy8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpCgkJCWlmICggb3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7CgkJCQlpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8CgkJCQkJc3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7CgoJCQkJCWpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7CgkJCQl9CgoJCQkJZGVsZXRlIGV2ZW50c1sgdHlwZSBdOwoJCQl9CgkJfQoKCQkvLyBSZW1vdmUgZGF0YSBhbmQgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZAoJCWlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkgewoJCQlkYXRhUHJpdi5yZW1vdmUoIGVsZW0sICJoYW5kbGUgZXZlbnRzIiApOwoJCX0KCX0sCgoJZGlzcGF0Y2g6IGZ1bmN0aW9uKCBuYXRpdmVFdmVudCApIHsKCgkJdmFyIGksIGosIHJldCwgbWF0Y2hlZCwgaGFuZGxlT2JqLCBoYW5kbGVyUXVldWUsCgkJCWFyZ3MgPSBuZXcgQXJyYXkoIGFyZ3VtZW50cy5sZW5ndGggKSwKCgkJCS8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVjdAoJCQlldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICksCgoJCQloYW5kbGVycyA9ICgKCQkJCWRhdGFQcml2LmdldCggdGhpcywgImV2ZW50cyIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsICkKCQkJKVsgZXZlbnQudHlwZSBdIHx8IFtdLAoJCQlzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fTsKCgkJLy8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnQKCQlhcmdzWyAwIF0gPSBldmVudDsKCgkJZm9yICggaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSB7CgkJCWFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdOwoJCX0KCgkJZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzOwoKCQkvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkCgkJaWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7CgkJCXJldHVybjsKCQl9CgoJCS8vIERldGVybWluZSBoYW5kbGVycwoJCWhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTsKCgkJLy8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGggdXMKCQlpID0gMDsKCQl3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHsKCQkJZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTsKCgkJCWogPSAwOwoJCQl3aGlsZSAoICggaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1sgaisrIF0gKSAmJgoJCQkJIWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7CgoJCQkJLy8gSWYgdGhlIGV2ZW50IGlzIG5hbWVzcGFjZWQsIHRoZW4gZWFjaCBoYW5kbGVyIGlzIG9ubHkgaW52b2tlZCBpZiBpdCBpcwoJCQkJLy8gc3BlY2lhbGx5IHVuaXZlcnNhbCBvciBpdHMgbmFtZXNwYWNlcyBhcmUgYSBzdXBlcnNldCBvZiB0aGUgZXZlbnQncy4KCQkJCWlmICggIWV2ZW50LnJuYW1lc3BhY2UgfHwgaGFuZGxlT2JqLm5hbWVzcGFjZSA9PT0gZmFsc2UgfHwKCQkJCQlldmVudC5ybmFtZXNwYWNlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHsKCgkJCQkJZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqOwoJCQkJCWV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTsKCgkJCQkJcmV0ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSApLmhhbmRsZSB8fAoJCQkJCQloYW5kbGVPYmouaGFuZGxlciApLmFwcGx5KCBtYXRjaGVkLmVsZW0sIGFyZ3MgKTsKCgkJCQkJaWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHsKCQkJCQkJaWYgKCAoIGV2ZW50LnJlc3VsdCA9IHJldCApID09PSBmYWxzZSApIHsKCQkJCQkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgkJCQkJCQlldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCgkJLy8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZQoJCWlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7CgkJCXNwZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7CgkJfQoKCQlyZXR1cm4gZXZlbnQucmVzdWx0OwoJfSwKCgloYW5kbGVyczogZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVycyApIHsKCQl2YXIgaSwgaGFuZGxlT2JqLCBzZWwsIG1hdGNoZWRIYW5kbGVycywgbWF0Y2hlZFNlbGVjdG9ycywKCQkJaGFuZGxlclF1ZXVlID0gW10sCgkJCWRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LAoJCQljdXIgPSBldmVudC50YXJnZXQ7CgoJCS8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnMKCQlpZiAoIGRlbGVnYXRlQ291bnQgJiYKCgkJCS8vIFN1cHBvcnQ6IElFIDw9OQoJCQkvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAodHJhYy0xMzE4MCkKCQkJY3VyLm5vZGVUeXBlICYmCgoJCQkvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDIKCQkJLy8gU3VwcHJlc3Mgc3BlYy12aW9sYXRpbmcgY2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVyIGJ1dHRvbiAodHJhYy0zODYxKQoJCQkvLyBodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudC10eXBlLWNsaWNrCgkJCS8vIFN1cHBvcnQ6IElFIDExIG9ubHkKCQkJLy8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgImNsaWNrcyIgb2YgcmFkaW8gaW5wdXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0MykKCQkJISggZXZlbnQudHlwZSA9PT0gImNsaWNrIiAmJiBldmVudC5idXR0b24gPj0gMSApICkgewoKCQkJZm9yICggOyBjdXIgIT09IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7CgoJCQkJLy8gRG9uJ3QgY2hlY2sgbm9uLWVsZW1lbnRzICh0cmFjLTEzMjA4KQoJCQkJLy8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKHRyYWMtNjkxMSwgdHJhYy04MTY1LCB0cmFjLTExMzgyLCB0cmFjLTExNzY0KQoJCQkJaWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgISggZXZlbnQudHlwZSA9PT0gImNsaWNrIiAmJiBjdXIuZGlzYWJsZWQgPT09IHRydWUgKSApIHsKCQkJCQltYXRjaGVkSGFuZGxlcnMgPSBbXTsKCQkJCQltYXRjaGVkU2VsZWN0b3JzID0ge307CgkJCQkJZm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7CgkJCQkJCWhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07CgoJCQkJCQkvLyBEb24ndCBjb25mbGljdCB3aXRoIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAodHJhYy0xMzIwMykKCQkJCQkJc2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgIiAiOwoKCQkJCQkJaWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkgewoJCQkJCQkJbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID8KCQkJCQkJCQlqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDoKCQkJCQkJCQlqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoOwoJCQkJCQl9CgkJCQkJCWlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gKSB7CgkJCQkJCQltYXRjaGVkSGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJaWYgKCBtYXRjaGVkSGFuZGxlcnMubGVuZ3RoICkgewoJCQkJCQloYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVkSGFuZGxlcnMgfSApOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCgkJLy8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVycwoJCWN1ciA9IHRoaXM7CgkJaWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkgewoJCQloYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBoYW5kbGVycy5zbGljZSggZGVsZWdhdGVDb3VudCApIH0gKTsKCQl9CgoJCXJldHVybiBoYW5kbGVyUXVldWU7Cgl9LAoKCWFkZFByb3A6IGZ1bmN0aW9uKCBuYW1lLCBob29rICkgewoJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSggalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSwgbmFtZSwgewoJCQllbnVtZXJhYmxlOiB0cnVlLAoJCQljb25maWd1cmFibGU6IHRydWUsCgoJCQlnZXQ6IGlzRnVuY3Rpb24oIGhvb2sgKSA/CgkJCQlmdW5jdGlvbigpIHsKCQkJCQlpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHsKCQkJCQkJcmV0dXJuIGhvb2soIHRoaXMub3JpZ2luYWxFdmVudCApOwoJCQkJCX0KCQkJCX0gOgoJCQkJZnVuY3Rpb24oKSB7CgkJCQkJaWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7CgkJCQkJCXJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbIG5hbWUgXTsKCQkJCQl9CgkJCQl9LAoKCQkJc2V0OiBmdW5jdGlvbiggdmFsdWUgKSB7CgkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsIG5hbWUsIHsKCQkJCQllbnVtZXJhYmxlOiB0cnVlLAoJCQkJCWNvbmZpZ3VyYWJsZTogdHJ1ZSwKCQkJCQl3cml0YWJsZTogdHJ1ZSwKCQkJCQl2YWx1ZTogdmFsdWUKCQkJCX0gKTsKCQkJfQoJCX0gKTsKCX0sCgoJZml4OiBmdW5jdGlvbiggb3JpZ2luYWxFdmVudCApIHsKCQlyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/CgkJCW9yaWdpbmFsRXZlbnQgOgoJCQluZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7Cgl9LAoKCXNwZWNpYWw6IHsKCQlsb2FkOiB7CgoJCQkvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkCgkJCW5vQnViYmxlOiB0cnVlCgkJfSwKCQljbGljazogewoKCQkJLy8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgdG8gZW5zdXJlIGNvcnJlY3Qgc3RhdGUgZm9yIGNoZWNrYWJsZSBpbnB1dHMKCQkJc2V0dXA6IGZ1bmN0aW9uKCBkYXRhICkgewoKCQkJCS8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLgoJCQkJLy8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi4KCQkJCXZhciBlbCA9IHRoaXMgfHwgZGF0YTsKCgkJCQkvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlcgoJCQkJaWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiYKCQkJCQllbC5jbGljayAmJiBub2RlTmFtZSggZWwsICJpbnB1dCIgKSApIHsKCgkJCQkJLy8gZGF0YVByaXYuc2V0KCBlbCwgImNsaWNrIiwgLi4uICkKCQkJCQlsZXZlcmFnZU5hdGl2ZSggZWwsICJjbGljayIsIHRydWUgKTsKCQkJCX0KCgkJCQkvLyBSZXR1cm4gZmFsc2UgdG8gYWxsb3cgbm9ybWFsIHByb2Nlc3NpbmcgaW4gdGhlIGNhbGxlcgoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9LAoJCQl0cmlnZ2VyOiBmdW5jdGlvbiggZGF0YSApIHsKCgkJCQkvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci4KCQkJCS8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uCgkJCQl2YXIgZWwgPSB0aGlzIHx8IGRhdGE7CgoJCQkJLy8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJpbmcgYSBjbGljawoJCQkJaWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiYKCQkJCQllbC5jbGljayAmJiBub2RlTmFtZSggZWwsICJpbnB1dCIgKSApIHsKCgkJCQkJbGV2ZXJhZ2VOYXRpdmUoIGVsLCAiY2xpY2siICk7CgkJCQl9CgoJCQkJLy8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvbgoJCQkJcmV0dXJuIHRydWU7CgkJCX0sCgoJCQkvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgc3VwcHJlc3MgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzCgkJCS8vIEFsc28gcHJldmVudCBpdCBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFjawoJCQlfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkgewoJCQkJdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDsKCQkJCXJldHVybiByY2hlY2thYmxlVHlwZS50ZXN0KCB0YXJnZXQudHlwZSApICYmCgkJCQkJdGFyZ2V0LmNsaWNrICYmIG5vZGVOYW1lKCB0YXJnZXQsICJpbnB1dCIgKSAmJgoJCQkJCWRhdGFQcml2LmdldCggdGFyZ2V0LCAiY2xpY2siICkgfHwKCQkJCQlub2RlTmFtZSggdGFyZ2V0LCAiYSIgKTsKCQkJfQoJCX0sCgoJCWJlZm9yZXVubG9hZDogewoJCQlwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHsKCgkJCQkvLyBTdXBwb3J0OiBGaXJlZm94IDIwKwoJCQkJLy8gRmlyZWZveCBkb2Vzbid0IGFsZXJ0IGlmIHRoZSByZXR1cm5WYWx1ZSBmaWVsZCBpcyBub3Qgc2V0LgoJCQkJaWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkgewoJCQkJCWV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7CgkJCQl9CgkJCX0KCQl9Cgl9Cn07CgovLyBFbnN1cmUgdGhlIHByZXNlbmNlIG9mIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgaGFuZGxlcyBtYW51YWxseS10cmlnZ2VyZWQKLy8gc3ludGhldGljIGV2ZW50cyBieSBpbnRlcnJ1cHRpbmcgcHJvZ3Jlc3MgdW50aWwgcmVpbnZva2VkIGluIHJlc3BvbnNlIHRvCi8vICpuYXRpdmUqIGV2ZW50cyB0aGF0IGl0IGZpcmVzIGRpcmVjdGx5LCBlbnN1cmluZyB0aGF0IHN0YXRlIGNoYW5nZXMgaGF2ZQovLyBhbHJlYWR5IG9jY3VycmVkIGJlZm9yZSBvdGhlciBsaXN0ZW5lcnMgYXJlIGludm9rZWQuCmZ1bmN0aW9uIGxldmVyYWdlTmF0aXZlKCBlbCwgdHlwZSwgaXNTZXR1cCApIHsKCgkvLyBNaXNzaW5nIGBpc1NldHVwYCBpbmRpY2F0ZXMgYSB0cmlnZ2VyIGNhbGwsIHdoaWNoIG11c3QgZm9yY2Ugc2V0dXAgdGhyb3VnaCBqUXVlcnkuZXZlbnQuYWRkCglpZiAoICFpc1NldHVwICkgewoJCWlmICggZGF0YVByaXYuZ2V0KCBlbCwgdHlwZSApID09PSB1bmRlZmluZWQgKSB7CgkJCWpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCByZXR1cm5UcnVlICk7CgkJfQoJCXJldHVybjsKCX0KCgkvLyBSZWdpc3RlciB0aGUgY29udHJvbGxlciBhcyBhIHNwZWNpYWwgdW5pdmVyc2FsIGhhbmRsZXIgZm9yIGFsbCBldmVudCBuYW1lc3BhY2VzCglkYXRhUHJpdi5zZXQoIGVsLCB0eXBlLCBmYWxzZSApOwoJalF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHsKCQluYW1lc3BhY2U6IGZhbHNlLAoJCWhhbmRsZXI6IGZ1bmN0aW9uKCBldmVudCApIHsKCQkJdmFyIHJlc3VsdCwKCQkJCXNhdmVkID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7CgoJCQlpZiAoICggZXZlbnQuaXNUcmlnZ2VyICYgMSApICYmIHRoaXNbIHR5cGUgXSApIHsKCgkJCQkvLyBJbnRlcnJ1cHQgcHJvY2Vzc2luZyBvZiB0aGUgb3V0ZXIgc3ludGhldGljIC50cmlnZ2VyKCllZCBldmVudAoJCQkJaWYgKCAhc2F2ZWQgKSB7CgoJCQkJCS8vIFN0b3JlIGFyZ3VtZW50cyBmb3IgdXNlIHdoZW4gaGFuZGxpbmcgdGhlIGlubmVyIG5hdGl2ZSBldmVudAoJCQkJCS8vIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAoYW4gZXZlbnQgb2JqZWN0KSwgc28gdGhpcyBhcnJheQoJCQkJCS8vIHdpbGwgbm90IGJlIGNvbmZ1c2VkIHdpdGggYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdC4KCQkJCQlzYXZlZCA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApOwoJCQkJCWRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgc2F2ZWQgKTsKCgkJCQkJLy8gVHJpZ2dlciB0aGUgbmF0aXZlIGV2ZW50IGFuZCBjYXB0dXJlIGl0cyByZXN1bHQKCQkJCQl0aGlzWyB0eXBlIF0oKTsKCQkJCQlyZXN1bHQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTsKCQkJCQlkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIGZhbHNlICk7CgoJCQkJCWlmICggc2F2ZWQgIT09IHJlc3VsdCApIHsKCgkJCQkJCS8vIENhbmNlbCB0aGUgb3V0ZXIgc3ludGhldGljIGV2ZW50CgkJCQkJCWV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOwoJCQkJCQlldmVudC5wcmV2ZW50RGVmYXVsdCgpOwoKCQkJCQkJcmV0dXJuIHJlc3VsdDsKCQkJCQl9CgoJCQkJLy8gSWYgdGhpcyBpcyBhbiBpbm5lciBzeW50aGV0aWMgZXZlbnQgZm9yIGFuIGV2ZW50IHdpdGggYSBidWJibGluZyBzdXJyb2dhdGUKCQkJCS8vIChmb2N1cyBvciBibHVyKSwgYXNzdW1lIHRoYXQgdGhlIHN1cnJvZ2F0ZSBhbHJlYWR5IHByb3BhZ2F0ZWQgZnJvbSB0cmlnZ2VyaW5nCgkJCQkvLyB0aGUgbmF0aXZlIGV2ZW50IGFuZCBwcmV2ZW50IHRoYXQgZnJvbSBoYXBwZW5pbmcgYWdhaW4gaGVyZS4KCQkJCS8vIFRoaXMgdGVjaG5pY2FsbHkgZ2V0cyB0aGUgb3JkZXJpbmcgd3Jvbmcgdy5yLnQuIHRvIGAudHJpZ2dlcigpYCAoaW4gd2hpY2ggdGhlCgkJCQkvLyBidWJibGluZyBzdXJyb2dhdGUgcHJvcGFnYXRlcyAqYWZ0ZXIqIHRoZSBub24tYnViYmxpbmcgYmFzZSksIGJ1dCB0aGF0IHNlZW1zCgkJCQkvLyBsZXNzIGJhZCB0aGFuIGR1cGxpY2F0aW9uLgoJCQkJfSBlbHNlIGlmICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9ICkuZGVsZWdhdGVUeXBlICkgewoJCQkJCWV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwoJCQkJfQoKCQkJLy8gSWYgdGhpcyBpcyBhIG5hdGl2ZSBldmVudCB0cmlnZ2VyZWQgYWJvdmUsIGV2ZXJ5dGhpbmcgaXMgbm93IGluIG9yZGVyCgkJCS8vIEZpcmUgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IHdpdGggdGhlIG9yaWdpbmFsIGFyZ3VtZW50cwoJCQl9IGVsc2UgaWYgKCBzYXZlZCApIHsKCgkJCQkvLyAuLi5hbmQgY2FwdHVyZSB0aGUgcmVzdWx0CgkJCQlkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIGpRdWVyeS5ldmVudC50cmlnZ2VyKAoJCQkJCXNhdmVkWyAwIF0sCgkJCQkJc2F2ZWQuc2xpY2UoIDEgKSwKCQkJCQl0aGlzCgkJCQkpICk7CgoJCQkJLy8gQWJvcnQgaGFuZGxpbmcgb2YgdGhlIG5hdGl2ZSBldmVudCBieSBhbGwgalF1ZXJ5IGhhbmRsZXJzIHdoaWxlIGFsbG93aW5nCgkJCQkvLyBuYXRpdmUgaGFuZGxlcnMgb24gdGhlIHNhbWUgZWxlbWVudCB0byBydW4uIE9uIHRhcmdldCwgdGhpcyBpcyBhY2hpZXZlZAoJCQkJLy8gYnkgc3RvcHBpbmcgaW1tZWRpYXRlIHByb3BhZ2F0aW9uIGp1c3Qgb24gdGhlIGpRdWVyeSBldmVudC4gSG93ZXZlciwKCQkJCS8vIHRoZSBuYXRpdmUgZXZlbnQgaXMgcmUtd3JhcHBlZCBieSBhIGpRdWVyeSBvbmUgb24gZWFjaCBsZXZlbCBvZiB0aGUKCQkJCS8vIHByb3BhZ2F0aW9uIHNvIHRoZSBvbmx5IHdheSB0byBzdG9wIGl0IGZvciBqUXVlcnkgaXMgdG8gc3RvcCBpdCBmb3IKCQkJCS8vIGV2ZXJ5b25lIHZpYSBuYXRpdmUgYHN0b3BQcm9wYWdhdGlvbigpYC4gVGhpcyBpcyBub3QgYSBwcm9ibGVtIGZvcgoJCQkJLy8gZm9jdXMvYmx1ciB3aGljaCBkb24ndCBidWJibGUsIGJ1dCBpdCBkb2VzIGFsc28gc3RvcCBjbGljayBvbiBjaGVja2JveGVzCgkJCQkvLyBhbmQgcmFkaW9zLiBXZSBhY2NlcHQgdGhpcyBsaW1pdGF0aW9uLgoJCQkJZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CgkJCQlldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7CgkJCX0KCQl9Cgl9ICk7Cn0KCmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7CgoJLy8gVGhpcyAiaWYiIGlzIG5lZWRlZCBmb3IgcGxhaW4gb2JqZWN0cwoJaWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7CgkJZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUgKTsKCX0KfTsKCmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkgewoKCS8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZAoJaWYgKCAhKCB0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50ICkgKSB7CgkJcmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTsKCX0KCgkvLyBFdmVudCBvYmplY3QKCWlmICggc3JjICYmIHNyYy50eXBlICkgewoJCXRoaXMub3JpZ2luYWxFdmVudCA9IHNyYzsKCQl0aGlzLnR5cGUgPSBzcmMudHlwZTsKCgkJLy8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWQKCQkvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS4KCQl0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8CgkJCQlzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmCgoJCQkJLy8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5CgkJCQlzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlID8KCQkJcmV0dXJuVHJ1ZSA6CgkJCXJldHVybkZhbHNlOwoKCQkvLyBDcmVhdGUgdGFyZ2V0IHByb3BlcnRpZXMKCQkvLyBTdXBwb3J0OiBTYWZhcmkgPD02IC0gNyBvbmx5CgkJLy8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKHRyYWMtNTA0LCB0cmFjLTEzMTQzKQoJCXRoaXMudGFyZ2V0ID0gKCBzcmMudGFyZ2V0ICYmIHNyYy50YXJnZXQubm9kZVR5cGUgPT09IDMgKSA/CgkJCXNyYy50YXJnZXQucGFyZW50Tm9kZSA6CgkJCXNyYy50YXJnZXQ7CgoJCXRoaXMuY3VycmVudFRhcmdldCA9IHNyYy5jdXJyZW50VGFyZ2V0OwoJCXRoaXMucmVsYXRlZFRhcmdldCA9IHNyYy5yZWxhdGVkVGFyZ2V0OwoKCS8vIEV2ZW50IHR5cGUKCX0gZWxzZSB7CgkJdGhpcy50eXBlID0gc3JjOwoJfQoKCS8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0CglpZiAoIHByb3BzICkgewoJCWpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7Cgl9CgoJLy8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmUKCXRoaXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTsKCgkvLyBNYXJrIGl0IGFzIGZpeGVkCgl0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTsKfTsKCi8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZwovLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7Cgljb25zdHJ1Y3RvcjogalF1ZXJ5LkV2ZW50LAoJaXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSwKCWlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKCWlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKCWlzU2ltdWxhdGVkOiBmYWxzZSwKCglwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7CgkJdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7CgoJCXRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTsKCgkJaWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkgewoJCQllLnByZXZlbnREZWZhdWx0KCk7CgkJfQoJfSwKCXN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7CgkJdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7CgoJCXRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOwoKCQlpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7CgkJCWUuc3RvcFByb3BhZ2F0aW9uKCk7CgkJfQoJfSwKCXN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7CgkJdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7CgoJCXRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOwoKCQlpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7CgkJCWUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CgkJfQoKCQl0aGlzLnN0b3BQcm9wYWdhdGlvbigpOwoJfQp9OwoKLy8gSW5jbHVkZXMgYWxsIGNvbW1vbiBldmVudCBwcm9wcyBpbmNsdWRpbmcgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQgc3BlY2lmaWMgcHJvcHMKalF1ZXJ5LmVhY2goIHsKCWFsdEtleTogdHJ1ZSwKCWJ1YmJsZXM6IHRydWUsCgljYW5jZWxhYmxlOiB0cnVlLAoJY2hhbmdlZFRvdWNoZXM6IHRydWUsCgljdHJsS2V5OiB0cnVlLAoJZGV0YWlsOiB0cnVlLAoJZXZlbnRQaGFzZTogdHJ1ZSwKCW1ldGFLZXk6IHRydWUsCglwYWdlWDogdHJ1ZSwKCXBhZ2VZOiB0cnVlLAoJc2hpZnRLZXk6IHRydWUsCgl2aWV3OiB0cnVlLAoJImNoYXIiOiB0cnVlLAoJY29kZTogdHJ1ZSwKCWNoYXJDb2RlOiB0cnVlLAoJa2V5OiB0cnVlLAoJa2V5Q29kZTogdHJ1ZSwKCWJ1dHRvbjogdHJ1ZSwKCWJ1dHRvbnM6IHRydWUsCgljbGllbnRYOiB0cnVlLAoJY2xpZW50WTogdHJ1ZSwKCW9mZnNldFg6IHRydWUsCglvZmZzZXRZOiB0cnVlLAoJcG9pbnRlcklkOiB0cnVlLAoJcG9pbnRlclR5cGU6IHRydWUsCglzY3JlZW5YOiB0cnVlLAoJc2NyZWVuWTogdHJ1ZSwKCXRhcmdldFRvdWNoZXM6IHRydWUsCgl0b0VsZW1lbnQ6IHRydWUsCgl0b3VjaGVzOiB0cnVlLAoJd2hpY2g6IHRydWUKfSwgalF1ZXJ5LmV2ZW50LmFkZFByb3AgKTsKCmpRdWVyeS5lYWNoKCB7IGZvY3VzOiAiZm9jdXNpbiIsIGJsdXI6ICJmb2N1c291dCIgfSwgZnVuY3Rpb24oIHR5cGUsIGRlbGVnYXRlVHlwZSApIHsKCglmdW5jdGlvbiBmb2N1c01hcHBlZEhhbmRsZXIoIG5hdGl2ZUV2ZW50ICkgewoJCWlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkgewoKCQkJLy8gU3VwcG9ydDogSUUgMTErCgkJCS8vIEF0dGFjaCBhIHNpbmdsZSBmb2N1c2luL2ZvY3Vzb3V0IGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHMKCQkJLy8gZm9jdXMvYmx1ci4gVGhpcyBpcyBiZWNhdXNlIHRoZSBmb3JtZXIgYXJlIHN5bmNocm9ub3VzIGluIElFIHdoaWxlIHRoZSBsYXR0ZXIKCQkJLy8gYXJlIGFzeW5jLiBJbiBvdGhlciBicm93c2VycywgYWxsIHRob3NlIGhhbmRsZXJzIGFyZSBpbnZva2VkIHN5bmNocm9ub3VzbHkuCgoJCQkvLyBgaGFuZGxlYCBmcm9tIHByaXZhdGUgZGF0YSB3b3VsZCBhbHJlYWR5IHdyYXAgdGhlIGV2ZW50LCBidXQgd2UgbmVlZAoJCQkvLyB0byBjaGFuZ2UgdGhlIGB0eXBlYCBoZXJlLgoJCQl2YXIgaGFuZGxlID0gZGF0YVByaXYuZ2V0KCB0aGlzLCAiaGFuZGxlIiApLAoJCQkJZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBuYXRpdmVFdmVudCApOwoJCQlldmVudC50eXBlID0gbmF0aXZlRXZlbnQudHlwZSA9PT0gImZvY3VzaW4iID8gImZvY3VzIiA6ICJibHVyIjsKCQkJZXZlbnQuaXNTaW11bGF0ZWQgPSB0cnVlOwoKCQkJLy8gRmlyc3QsIGhhbmRsZSBmb2N1c2luL2ZvY3Vzb3V0CgkJCWhhbmRsZSggbmF0aXZlRXZlbnQgKTsKCgkJCS8vIC4uLnRoZW4sIGhhbmRsZSBmb2N1cy9ibHVyCgkJCS8vCgkJCS8vIGZvY3VzL2JsdXIgZG9uJ3QgYnViYmxlIHdoaWxlIGZvY3VzaW4vZm9jdXNvdXQgZG87IHNpbXVsYXRlIHRoZSBmb3JtZXIgYnkgb25seQoJCQkvLyBpbnZva2luZyB0aGUgaGFuZGxlciBhdCB0aGUgbG93ZXIgbGV2ZWwuCgkJCWlmICggZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICkgewoKCQkJCS8vIFRoZSBzZXR1cCBwYXJ0IGNhbGxzIGBsZXZlcmFnZU5hdGl2ZWAsIHdoaWNoLCBpbiB0dXJuLCBjYWxscwoJCQkJLy8gYGpRdWVyeS5ldmVudC5hZGRgLCBzbyBldmVudCBoYW5kbGUgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQKCQkJCS8vIGJ5IHRoaXMgcG9pbnQuCgkJCQloYW5kbGUoIGV2ZW50ICk7CgkJCX0KCQl9IGVsc2UgewoKCQkJLy8gRm9yIG5vbi1JRSBicm93c2VycywgYXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudAoJCQkvLyB3aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXQuCgkJCWpRdWVyeS5ldmVudC5zaW11bGF0ZSggZGVsZWdhdGVUeXBlLCBuYXRpdmVFdmVudC50YXJnZXQsCgkJCQlqUXVlcnkuZXZlbnQuZml4KCBuYXRpdmVFdmVudCApICk7CgkJfQoJfQoKCWpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gPSB7CgoJCS8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IGlmIHBvc3NpYmxlIHNvIGJsdXIvZm9jdXMgc2VxdWVuY2UgaXMgY29ycmVjdAoJCXNldHVwOiBmdW5jdGlvbigpIHsKCgkJCXZhciBhdHRhY2hlczsKCgkJCS8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyCgkJCS8vIGRhdGFQcml2LnNldCggdGhpcywgImZvY3VzIiwgLi4uICkKCQkJLy8gZGF0YVByaXYuc2V0KCB0aGlzLCAiYmx1ciIsIC4uLiApCgkJCWxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlLCB0cnVlICk7CgoJCQlpZiAoIGRvY3VtZW50LmRvY3VtZW50TW9kZSApIHsKCgkJCQkvLyBTdXBwb3J0OiBJRSA5IC0gMTErCgkJCQkvLyBXZSB1c2UgdGhlIHNhbWUgbmF0aXZlIGhhbmRsZXIgZm9yIGZvY3VzaW4gJiBmb2N1cyAoYW5kIGZvY3Vzb3V0ICYgYmx1cikKCQkJCS8vIHNvIHdlIG5lZWQgdG8gY29vcmRpbmF0ZSBzZXR1cCAmIHRlYXJkb3duIHBhcnRzIGJldHdlZW4gdGhvc2UgZXZlbnRzLgoJCQkJLy8gVXNlIGBkZWxlZ2F0ZVR5cGVgIGFzIHRoZSBrZXkgYXMgYHR5cGVgIGlzIGFscmVhZHkgdXNlZCBieSBgbGV2ZXJhZ2VOYXRpdmVgLgoJCQkJYXR0YWNoZXMgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIGRlbGVnYXRlVHlwZSApOwoJCQkJaWYgKCAhYXR0YWNoZXMgKSB7CgkJCQkJdGhpcy5hZGRFdmVudExpc3RlbmVyKCBkZWxlZ2F0ZVR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciApOwoJCQkJfQoJCQkJZGF0YVByaXYuc2V0KCB0aGlzLCBkZWxlZ2F0ZVR5cGUsICggYXR0YWNoZXMgfHwgMCApICsgMSApOwoJCQl9IGVsc2UgewoKCQkJCS8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyCgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQl9LAoJCXRyaWdnZXI6IGZ1bmN0aW9uKCkgewoKCQkJLy8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXIKCQkJbGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUgKTsKCgkJCS8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb24KCQkJcmV0dXJuIHRydWU7CgkJfSwKCgkJdGVhcmRvd246IGZ1bmN0aW9uKCkgewoJCQl2YXIgYXR0YWNoZXM7CgoJCQlpZiAoIGRvY3VtZW50LmRvY3VtZW50TW9kZSApIHsKCQkJCWF0dGFjaGVzID0gZGF0YVByaXYuZ2V0KCB0aGlzLCBkZWxlZ2F0ZVR5cGUgKSAtIDE7CgkJCQlpZiAoICFhdHRhY2hlcyApIHsKCQkJCQl0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoIGRlbGVnYXRlVHlwZSwgZm9jdXNNYXBwZWRIYW5kbGVyICk7CgkJCQkJZGF0YVByaXYucmVtb3ZlKCB0aGlzLCBkZWxlZ2F0ZVR5cGUgKTsKCQkJCX0gZWxzZSB7CgkJCQkJZGF0YVByaXYuc2V0KCB0aGlzLCBkZWxlZ2F0ZVR5cGUsIGF0dGFjaGVzICk7CgkJCQl9CgkJCX0gZWxzZSB7CgoJCQkJLy8gUmV0dXJuIGZhbHNlIHRvIGluZGljYXRlIHN0YW5kYXJkIHRlYXJkb3duIHNob3VsZCBiZSBhcHBsaWVkCgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQl9LAoKCQkvLyBTdXBwcmVzcyBuYXRpdmUgZm9jdXMgb3IgYmx1ciBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlCgkJLy8gYSBsZXZlcmFnZWQgbmF0aXZlLWV2ZW50IHN0YWNrCgkJX2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHsKCQkJcmV0dXJuIGRhdGFQcml2LmdldCggZXZlbnQudGFyZ2V0LCB0eXBlICk7CgkJfSwKCgkJZGVsZWdhdGVUeXBlOiBkZWxlZ2F0ZVR5cGUKCX07CgoJLy8gU3VwcG9ydDogRmlyZWZveCA8PTQ0CgkvLyBGaXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZlbnRzCgkvLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4NwoJLy8KCS8vIFN1cHBvcnQ6IENocm9tZSA8PTQ4IC0gNDksIFNhZmFyaSA8PTkuMCAtIDkuMQoJLy8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZvY3VzICYgYmx1ciBldmVudHMsCgkvLyB3aGljaCBpcyBzcGVjIHZpb2xhdGlvbiAtIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWZvY3VzZXZlbnQtZXZlbnQtb3JkZXIKCS8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3CgkvLwoJLy8gU3VwcG9ydDogSUUgOSAtIDExKwoJLy8gVG8gcHJlc2VydmUgcmVsYXRpdmUgZm9jdXNpbi9mb2N1cyAmIGZvY3Vzb3V0L2JsdXIgZXZlbnQgb3JkZXIgZ3VhcmFudGVlZCBvbiB0aGUgMy54IGJyYW5jaCwKCS8vIGF0dGFjaCBhIHNpbmdsZSBoYW5kbGVyIGZvciBib3RoIGV2ZW50cyBpbiBJRS4KCWpRdWVyeS5ldmVudC5zcGVjaWFsWyBkZWxlZ2F0ZVR5cGUgXSA9IHsKCQlzZXR1cDogZnVuY3Rpb24oKSB7CgoJCQkvLyBIYW5kbGU6IHJlZ3VsYXIgbm9kZXMgKHZpYSBgdGhpcy5vd25lckRvY3VtZW50YCksIHdpbmRvdwoJCQkvLyAodmlhIGB0aGlzLmRvY3VtZW50YCkgJiBkb2N1bWVudCAodmlhIGB0aGlzYCkuCgkJCXZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLAoJCQkJZGF0YUhvbGRlciA9IGRvY3VtZW50LmRvY3VtZW50TW9kZSA/IHRoaXMgOiBkb2MsCgkJCQlhdHRhY2hlcyA9IGRhdGFQcml2LmdldCggZGF0YUhvbGRlciwgZGVsZWdhdGVUeXBlICk7CgoJCQkvLyBTdXBwb3J0OiBJRSA5IC0gMTErCgkJCS8vIFdlIHVzZSB0aGUgc2FtZSBuYXRpdmUgaGFuZGxlciBmb3IgZm9jdXNpbiAmIGZvY3VzIChhbmQgZm9jdXNvdXQgJiBibHVyKQoJCQkvLyBzbyB3ZSBuZWVkIHRvIGNvb3JkaW5hdGUgc2V0dXAgJiB0ZWFyZG93biBwYXJ0cyBiZXR3ZWVuIHRob3NlIGV2ZW50cy4KCQkJLy8gVXNlIGBkZWxlZ2F0ZVR5cGVgIGFzIHRoZSBrZXkgYXMgYHR5cGVgIGlzIGFscmVhZHkgdXNlZCBieSBgbGV2ZXJhZ2VOYXRpdmVgLgoJCQlpZiAoICFhdHRhY2hlcyApIHsKCQkJCWlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkgewoJCQkJCXRoaXMuYWRkRXZlbnRMaXN0ZW5lciggZGVsZWdhdGVUeXBlLCBmb2N1c01hcHBlZEhhbmRsZXIgKTsKCQkJCX0gZWxzZSB7CgkJCQkJZG9jLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciwgdHJ1ZSApOwoJCQkJfQoJCQl9CgkJCWRhdGFQcml2LnNldCggZGF0YUhvbGRlciwgZGVsZWdhdGVUeXBlLCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTsKCQl9LAoJCXRlYXJkb3duOiBmdW5jdGlvbigpIHsKCQkJdmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLmRvY3VtZW50IHx8IHRoaXMsCgkJCQlkYXRhSG9sZGVyID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlID8gdGhpcyA6IGRvYywKCQkJCWF0dGFjaGVzID0gZGF0YVByaXYuZ2V0KCBkYXRhSG9sZGVyLCBkZWxlZ2F0ZVR5cGUgKSAtIDE7CgoJCQlpZiAoICFhdHRhY2hlcyApIHsKCQkJCWlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkgewoJCQkJCXRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lciggZGVsZWdhdGVUeXBlLCBmb2N1c01hcHBlZEhhbmRsZXIgKTsKCQkJCX0gZWxzZSB7CgkJCQkJZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciwgdHJ1ZSApOwoJCQkJfQoJCQkJZGF0YVByaXYucmVtb3ZlKCBkYXRhSG9sZGVyLCBkZWxlZ2F0ZVR5cGUgKTsKCQkJfSBlbHNlIHsKCQkJCWRhdGFQcml2LnNldCggZGF0YUhvbGRlciwgZGVsZWdhdGVUeXBlLCBhdHRhY2hlcyApOwoJCQl9CgkJfQoJfTsKfSApOwoKLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzCi8vIHNvIHRoYXQgZXZlbnQgZGVsZWdhdGlvbiB3b3JrcyBpbiBqUXVlcnkuCi8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0Ci8vCi8vIFN1cHBvcnQ6IFNhZmFyaSA3IG9ubHkKLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6Ci8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ3MDI1OAovLyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBidWcgKGl0IGV4aXN0ZWQgaW4gb2xkZXIgQ2hyb21lIHZlcnNpb25zIGFzIHdlbGwpLgpqUXVlcnkuZWFjaCggewoJbW91c2VlbnRlcjogIm1vdXNlb3ZlciIsCgltb3VzZWxlYXZlOiAibW91c2VvdXQiLAoJcG9pbnRlcmVudGVyOiAicG9pbnRlcm92ZXIiLAoJcG9pbnRlcmxlYXZlOiAicG9pbnRlcm91dCIKfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHsKCWpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7CgkJZGVsZWdhdGVUeXBlOiBmaXgsCgkJYmluZFR5cGU6IGZpeCwKCgkJaGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7CgkJCXZhciByZXQsCgkJCQl0YXJnZXQgPSB0aGlzLAoJCQkJcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsCgkJCQloYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7CgoJCQkvLyBGb3IgbW91c2VlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LgoJCQkvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvdwoJCQlpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7CgkJCQlldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlOwoJCQkJcmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwoJCQkJZXZlbnQudHlwZSA9IGZpeDsKCQkJfQoJCQlyZXR1cm4gcmV0OwoJCX0KCX07Cn0gKTsKCmpRdWVyeS5mbi5leHRlbmQoIHsKCglvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7CgkJcmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7Cgl9LAoJb25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHsKCQlyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTsKCX0sCglvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkgewoJCXZhciBoYW5kbGVPYmosIHR5cGU7CgkJaWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7CgoJCQkvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50CgkJCWhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajsKCQkJalF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZigKCQkJCWhhbmRsZU9iai5uYW1lc3BhY2UgPwoJCQkJCWhhbmRsZU9iai5vcmlnVHlwZSArICIuIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOgoJCQkJCWhhbmRsZU9iai5vcmlnVHlwZSwKCQkJCWhhbmRsZU9iai5zZWxlY3RvciwKCQkJCWhhbmRsZU9iai5oYW5kbGVyCgkJCSk7CgkJCXJldHVybiB0aGlzOwoJCX0KCQlpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9iamVjdCIgKSB7CgoJCQkvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKQoJCQlmb3IgKCB0eXBlIGluIHR5cGVzICkgewoJCQkJdGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7CgkJCX0KCQkJcmV0dXJuIHRoaXM7CgkJfQoJCWlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gImZ1bmN0aW9uIiApIHsKCgkJCS8vICggdHlwZXMgWywgZm5dICkKCQkJZm4gPSBzZWxlY3RvcjsKCQkJc2VsZWN0b3IgPSB1bmRlZmluZWQ7CgkJfQoJCWlmICggZm4gPT09IGZhbHNlICkgewoJCQlmbiA9IHJldHVybkZhbHNlOwoJCX0KCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKCQkJalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApOwoJCX0gKTsKCX0KfSApOwoKCnZhcgoKCS8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSwgRWRnZSAxMiAtIDEzIG9ubHkKCS8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuCgkvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xNzM2NTEyLwoJcm5vSW5uZXJodG1sID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksCgoJLy8gY2hlY2tlZD0iY2hlY2tlZCIgb3IgY2hlY2tlZAoJcmNoZWNrZWQgPSAvY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSwKCglyY2xlYW5TY3JpcHQgPSAvXlxzKjwhXFtDREFUQVxbfFxdXF0+XHMqJC9nOwoKLy8gUHJlZmVyIGEgdGJvZHkgb3ZlciBpdHMgcGFyZW50IHRhYmxlIGZvciBjb250YWluaW5nIG5ldyByb3dzCmZ1bmN0aW9uIG1hbmlwdWxhdGlvblRhcmdldCggZWxlbSwgY29udGVudCApIHsKCWlmICggbm9kZU5hbWUoIGVsZW0sICJ0YWJsZSIgKSAmJgoJCW5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsICJ0ciIgKSApIHsKCgkJcmV0dXJuIGpRdWVyeSggZWxlbSApLmNoaWxkcmVuKCAidGJvZHkiIClbIDAgXSB8fCBlbGVtOwoJfQoKCXJldHVybiBlbGVtOwp9CgovLyBSZXBsYWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uCmZ1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7CgllbGVtLnR5cGUgPSAoIGVsZW0uZ2V0QXR0cmlidXRlKCAidHlwZSIgKSAhPT0gbnVsbCApICsgIi8iICsgZWxlbS50eXBlOwoJcmV0dXJuIGVsZW07Cn0KZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHsKCWlmICggKCBlbGVtLnR5cGUgfHwgIiIgKS5zbGljZSggMCwgNSApID09PSAidHJ1ZS8iICkgewoJCWVsZW0udHlwZSA9IGVsZW0udHlwZS5zbGljZSggNSApOwoJfSBlbHNlIHsKCQllbGVtLnJlbW92ZUF0dHJpYnV0ZSggInR5cGUiICk7Cgl9CgoJcmV0dXJuIGVsZW07Cn0KCmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7Cgl2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQsIHVkYXRhT2xkLCB1ZGF0YUN1ciwgZXZlbnRzOwoKCWlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHsKCQlyZXR1cm47Cgl9CgoJLy8gMS4gQ29weSBwcml2YXRlIGRhdGE6IGV2ZW50cywgaGFuZGxlcnMsIGV0Yy4KCWlmICggZGF0YVByaXYuaGFzRGF0YSggc3JjICkgKSB7CgkJcGRhdGFPbGQgPSBkYXRhUHJpdi5nZXQoIHNyYyApOwoJCWV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50czsKCgkJaWYgKCBldmVudHMgKSB7CgkJCWRhdGFQcml2LnJlbW92ZSggZGVzdCwgImhhbmRsZSBldmVudHMiICk7CgoJCQlmb3IgKCB0eXBlIGluIGV2ZW50cyApIHsKCQkJCWZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkgewoJCQkJCWpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTsKCQkJCX0KCQkJfQoJCX0KCX0KCgkvLyAyLiBDb3B5IHVzZXIgZGF0YQoJaWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHsKCQl1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7CgkJdWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTsKCgkJZGF0YVVzZXIuc2V0KCBkZXN0LCB1ZGF0YUN1ciApOwoJfQp9CgovLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHMKZnVuY3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHsKCXZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKCgkvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi4KCWlmICggbm9kZU5hbWUgPT09ICJpbnB1dCIgJiYgcmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHsKCQlkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDsKCgkvLyBGYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZCBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9ucwoJfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJpbnB1dCIgfHwgbm9kZU5hbWUgPT09ICJ0ZXh0YXJlYSIgKSB7CgkJZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlOwoJfQp9CgpmdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7CgoJLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cwoJYXJncyA9IGZsYXQoIGFyZ3MgKTsKCgl2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBkb2MsCgkJaSA9IDAsCgkJbCA9IGNvbGxlY3Rpb24ubGVuZ3RoLAoJCWlOb0Nsb25lID0gbCAtIDEsCgkJdmFsdWUgPSBhcmdzWyAwIF0sCgkJdmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTsKCgkvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXQKCWlmICggdmFsdWVJc0Z1bmN0aW9uIHx8CgkJCSggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJgoJCQkJIXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7CgkJcmV0dXJuIGNvbGxlY3Rpb24uZWFjaCggZnVuY3Rpb24oIGluZGV4ICkgewoJCQl2YXIgc2VsZiA9IGNvbGxlY3Rpb24uZXEoIGluZGV4ICk7CgkJCWlmICggdmFsdWVJc0Z1bmN0aW9uICkgewoJCQkJYXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRtbCgpICk7CgkJCX0KCQkJZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7CgkJfSApOwoJfQoKCWlmICggbCApIHsKCQlmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwgaWdub3JlZCApOwoJCWZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDsKCgkJaWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHsKCQkJZnJhZ21lbnQgPSBmaXJzdDsKCQl9CgoJCS8vIFJlcXVpcmUgZWl0aGVyIG5ldyBjb250ZW50IG9yIGFuIGludGVyZXN0IGluIGlnbm9yZWQgZWxlbWVudHMgdG8gaW52b2tlIHRoZSBjYWxsYmFjawoJCWlmICggZmlyc3QgfHwgaWdub3JlZCApIHsKCQkJc2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsICJzY3JpcHQiICksIGRpc2FibGVTY3JpcHQgKTsKCQkJaGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoOwoKCQkJLy8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbQoJCQkvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXAKCQkJLy8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKHRyYWMtODA3MCkuCgkJCWZvciAoIDsgaSA8IGw7IGkrKyApIHsKCQkJCW5vZGUgPSBmcmFnbWVudDsKCgkJCQlpZiAoIGkgIT09IGlOb0Nsb25lICkgewoJCQkJCW5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTsKCgkJCQkJLy8gS2VlcCByZWZlcmVuY2VzIHRvIGNsb25lZCBzY3JpcHRzIGZvciBsYXRlciByZXN0b3JhdGlvbgoJCQkJCWlmICggaGFzU2NyaXB0cyApIHsKCgkJCQkJCS8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seQoJCQkJCQkvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0CgkJCQkJCWpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCAic2NyaXB0IiApICk7CgkJCQkJfQoJCQkJfQoKCQkJCWNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApOwoJCQl9CgoJCQlpZiAoIGhhc1NjcmlwdHMgKSB7CgkJCQlkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50OwoKCQkJCS8vIFJlLWVuYWJsZSBzY3JpcHRzCgkJCQlqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7CgoJCQkJLy8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0IGRvY3VtZW50IGluc2VydGlvbgoJCQkJZm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7CgkJCQkJbm9kZSA9IHNjcmlwdHNbIGkgXTsKCQkJCQlpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCAiIiApICYmCgkJCQkJCSFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsICJnbG9iYWxFdmFsIiApICYmCgkJCQkJCWpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7CgoJCQkJCQlpZiAoIG5vZGUuc3JjICYmICggbm9kZS50eXBlIHx8ICIiICkudG9Mb3dlckNhc2UoKSAgIT09ICJtb2R1bGUiICkgewoKCQkJCQkJCS8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50CgkJCQkJCQlpZiAoIGpRdWVyeS5fZXZhbFVybCAmJiAhbm9kZS5ub01vZHVsZSApIHsKCQkJCQkJCQlqUXVlcnkuX2V2YWxVcmwoIG5vZGUuc3JjLCB7CgkJCQkJCQkJCW5vbmNlOiBub2RlLm5vbmNlIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCAibm9uY2UiICkKCQkJCQkJCQl9LCBkb2MgKTsKCQkJCQkJCX0KCQkJCQkJfSBlbHNlIHsKCgkJCQkJCQkvLyBVbndyYXAgYSBDREFUQSBzZWN0aW9uIGNvbnRhaW5pbmcgc2NyaXB0IGNvbnRlbnRzLiBUaGlzIHNob3VsZG4ndCBiZQoJCQkJCQkJLy8gbmVlZGVkIGFzIGluIFhNTCBkb2N1bWVudHMgdGhleSdyZSBhbHJlYWR5IG5vdCB2aXNpYmxlIHdoZW4KCQkJCQkJCS8vIGluc3BlY3RpbmcgZWxlbWVudCBjb250ZW50cyBhbmQgaW4gSFRNTCBkb2N1bWVudHMgdGhleSBoYXZlIG5vCgkJCQkJCQkvLyBtZWFuaW5nIGJ1dCB3ZSdyZSBwcmVzZXJ2aW5nIHRoYXQgbG9naWMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgoJCQkJCQkJLy8gVGhpcyB3aWxsIGJlIHJlbW92ZWQgY29tcGxldGVseSBpbiA0LjAuIFNlZSBnaC00OTA0LgoJCQkJCQkJRE9NRXZhbCggbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKCByY2xlYW5TY3JpcHQsICIiICksIG5vZGUsIGRvYyApOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQoKCXJldHVybiBjb2xsZWN0aW9uOwp9CgpmdW5jdGlvbiByZW1vdmUoIGVsZW0sIHNlbGVjdG9yLCBrZWVwRGF0YSApIHsKCXZhciBub2RlLAoJCW5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSwKCQlpID0gMDsKCglmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7CgkJaWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSApIHsKCQkJalF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBub2RlICkgKTsKCQl9CgoJCWlmICggbm9kZS5wYXJlbnROb2RlICkgewoJCQlpZiAoIGtlZXBEYXRhICYmIGlzQXR0YWNoZWQoIG5vZGUgKSApIHsKCQkJCXNldEdsb2JhbEV2YWwoIGdldEFsbCggbm9kZSwgInNjcmlwdCIgKSApOwoJCQl9CgkJCW5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApOwoJCX0KCX0KCglyZXR1cm4gZWxlbTsKfQoKalF1ZXJ5LmV4dGVuZCggewoJaHRtbFByZWZpbHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7CgkJcmV0dXJuIGh0bWw7Cgl9LAoKCWNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7CgkJdmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsCgkJCWNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKSwKCQkJaW5QYWdlID0gaXNBdHRhY2hlZCggZWxlbSApOwoKCQkvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXMKCQlpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmCgkJCQkhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7CgoJCQkvLyBXZSBlc2NoZXcgalF1ZXJ5I2ZpbmQgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczoKCQkJLy8gaHR0cHM6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMgoJCQlkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7CgkJCXNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7CgoJCQlmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKCQkJCWZpeElucHV0KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApOwoJCQl9CgkJfQoKCQkvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lCgkJaWYgKCBkYXRhQW5kRXZlbnRzICkgewoJCQlpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkgewoJCQkJc3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTsKCQkJCWRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7CgoJCQkJZm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CgkJCQkJY2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQljbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTsKCQkJfQoJCX0KCgkJLy8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeQoJCWRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUsICJzY3JpcHQiICk7CgkJaWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHsKCQkJc2V0R2xvYmFsRXZhbCggZGVzdEVsZW1lbnRzLCAhaW5QYWdlICYmIGdldEFsbCggZWxlbSwgInNjcmlwdCIgKSApOwoJCX0KCgkJLy8gUmV0dXJuIHRoZSBjbG9uZWQgc2V0CgkJcmV0dXJuIGNsb25lOwoJfSwKCgljbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHsKCQl2YXIgZGF0YSwgZWxlbSwgdHlwZSwKCQkJc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsLAoJCQlpID0gMDsKCgkJZm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkgewoJCQlpZiAoIGFjY2VwdERhdGEoIGVsZW0gKSApIHsKCQkJCWlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7CgkJCQkJaWYgKCBkYXRhLmV2ZW50cyApIHsKCQkJCQkJZm9yICggdHlwZSBpbiBkYXRhLmV2ZW50cyApIHsKCQkJCQkJCWlmICggc3BlY2lhbFsgdHlwZSBdICkgewoJCQkJCQkJCWpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTsKCgkJCQkJCQkvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkCgkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCWpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCgkJCQkJLy8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NSsKCQkJCQkvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmUKCQkJCQllbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7CgkJCQl9CgkJCQlpZiAoIGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSApIHsKCgkJCQkJLy8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NSsKCQkJCQkvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmUKCQkJCQllbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gPSB1bmRlZmluZWQ7CgkJCQl9CgkJCX0KCQl9Cgl9Cn0gKTsKCmpRdWVyeS5mbi5leHRlbmQoIHsKCWRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkgewoJCXJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7Cgl9LAoKCXJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkgewoJCXJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yICk7Cgl9LAoKCXRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKCQlyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7CgkJCXJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8KCQkJCWpRdWVyeS50ZXh0KCB0aGlzICkgOgoJCQkJdGhpcy5lbXB0eSgpLmVhY2goIGZ1bmN0aW9uKCkgewoJCQkJCWlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkgewoJCQkJCQl0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7CgkJCQkJfQoJCQkJfSApOwoJCX0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7Cgl9LAoKCWFwcGVuZDogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgewoJCQlpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHsKCQkJCXZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTsKCQkJCXRhcmdldC5hcHBlbmRDaGlsZCggZWxlbSApOwoJCQl9CgkJfSApOwoJfSwKCglwcmVwZW5kOiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7CgkJCWlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkgewoJCQkJdmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApOwoJCQkJdGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTsKCQkJfQoJCX0gKTsKCX0sCgoJYmVmb3JlOiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7CgkJCWlmICggdGhpcy5wYXJlbnROb2RlICkgewoJCQkJdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApOwoJCQl9CgkJfSApOwoJfSwKCglhZnRlcjogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgewoJCQlpZiAoIHRoaXMucGFyZW50Tm9kZSApIHsKCQkJCXRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTsKCQkJfQoJCX0gKTsKCX0sCgoJZW1wdHk6IGZ1bmN0aW9uKCkgewoJCXZhciBlbGVtLAoJCQlpID0gMDsKCgkJZm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7CgkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKCgkJCQkvLyBQcmV2ZW50IG1lbW9yeSBsZWFrcwoJCQkJalF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7CgoJCQkJLy8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXMKCQkJCWVsZW0udGV4dENvbnRlbnQgPSAiIjsKCQkJfQoJCX0KCgkJcmV0dXJuIHRoaXM7Cgl9LAoKCWNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7CgkJZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50czsKCQlkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7CgoJCXJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7CgkJCXJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7CgkJfSApOwoJfSwKCglodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7CgkJcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgewoJCQl2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSwKCQkJCWkgPSAwLAoJCQkJbCA9IHRoaXMubGVuZ3RoOwoKCQkJaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CgkJCQlyZXR1cm4gZWxlbS5pbm5lckhUTUw7CgkJCX0KCgkJCS8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUwKCQkJaWYgKCB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJgoJCQkJIXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbICIiLCAiIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpIF0gKSB7CgoJCQkJdmFsdWUgPSBqUXVlcnkuaHRtbFByZWZpbHRlciggdmFsdWUgKTsKCgkJCQl0cnkgewoJCQkJCWZvciAoIDsgaSA8IGw7IGkrKyApIHsKCQkJCQkJZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTsKCgkJCQkJCS8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcwoJCQkJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CgkJCQkJCQlqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTsKCQkJCQkJCWVsZW0uaW5uZXJIVE1MID0gdmFsdWU7CgkJCQkJCX0KCQkJCQl9CgoJCQkJCWVsZW0gPSAwOwoKCQkJCS8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZAoJCQkJfSBjYXRjaCAoIGUgKSB7fQoJCQl9CgoJCQlpZiAoIGVsZW0gKSB7CgkJCQl0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApOwoJCQl9CgkJfSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTsKCX0sCgoJcmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkgewoJCXZhciBpZ25vcmVkID0gW107CgoJCS8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIG5vbi1pZ25vcmVkIGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudAoJCXJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKCQkJdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTsKCgkJCWlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7CgkJCQlqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIHRoaXMgKSApOwoJCQkJaWYgKCBwYXJlbnQgKSB7CgkJCQkJcGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApOwoJCQkJfQoJCQl9CgoJCS8vIEZvcmNlIGNhbGxiYWNrIGludm9jYXRpb24KCQl9LCBpZ25vcmVkICk7Cgl9Cn0gKTsKCmpRdWVyeS5lYWNoKCB7CglhcHBlbmRUbzogImFwcGVuZCIsCglwcmVwZW5kVG86ICJwcmVwZW5kIiwKCWluc2VydEJlZm9yZTogImJlZm9yZSIsCglpbnNlcnRBZnRlcjogImFmdGVyIiwKCXJlcGxhY2VBbGw6ICJyZXBsYWNlV2l0aCIKfSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkgewoJalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CgkJdmFyIGVsZW1zLAoJCQlyZXQgPSBbXSwKCQkJaW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLAoJCQlsYXN0ID0gaW5zZXJ0Lmxlbmd0aCAtIDEsCgkJCWkgPSAwOwoKCQlmb3IgKCA7IGkgPD0gbGFzdDsgaSsrICkgewoJCQllbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApOwoJCQlqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7CgoJCQkvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHkKCQkJLy8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdAoJCQlwdXNoLmFwcGx5KCByZXQsIGVsZW1zLmdldCgpICk7CgkJfQoKCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApOwoJfTsKfSApOwp2YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggIl4oIiArIHBudW0gKyAiKSg/IXB4KVthLXolXSskIiwgImkiICk7Cgp2YXIgcmN1c3RvbVByb3AgPSAvXi0tLzsKCgp2YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7CgoJCS8vIFN1cHBvcnQ6IElFIDw9MTEgb25seSwgRmlyZWZveCA8PTMwICh0cmFjLTE1MDk4LCB0cmFjLTE0MTUwKQoJCS8vIElFIHRocm93cyBvbiBlbGVtZW50cyBjcmVhdGVkIGluIHBvcHVwcwoJCS8vIEZGIG1lYW53aGlsZSB0aHJvd3Mgb24gZnJhbWUgZWxlbWVudHMgdGhyb3VnaCAiZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSIKCQl2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldzsKCgkJaWYgKCAhdmlldyB8fCAhdmlldy5vcGVuZXIgKSB7CgkJCXZpZXcgPSB3aW5kb3c7CgkJfQoKCQlyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7Cgl9OwoKdmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2sgKSB7Cgl2YXIgcmV0LCBuYW1lLAoJCW9sZCA9IHt9OwoKCS8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lcwoJZm9yICggbmFtZSBpbiBvcHRpb25zICkgewoJCW9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdOwoJCWVsZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlvbnNbIG5hbWUgXTsKCX0KCglyZXQgPSBjYWxsYmFjay5jYWxsKCBlbGVtICk7CgoJLy8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzCglmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7CgkJZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07Cgl9CgoJcmV0dXJuIHJldDsKfTsKCgp2YXIgcmJveFN0eWxlID0gbmV3IFJlZ0V4cCggY3NzRXhwYW5kLmpvaW4oICJ8IiApLCAiaSIgKTsKCgoKKCBmdW5jdGlvbigpIHsKCgkvLyBFeGVjdXRpbmcgYm90aCBwaXhlbFBvc2l0aW9uICYgYm94U2l6aW5nUmVsaWFibGUgdGVzdHMgcmVxdWlyZSBvbmx5IG9uZSBsYXlvdXQKCS8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uCglmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHsKCgkJLy8gVGhpcyBpcyBhIHNpbmdsZXRvbiwgd2UgbmVlZCB0byBleGVjdXRlIGl0IG9ubHkgb25jZQoJCWlmICggIWRpdiApIHsKCQkJcmV0dXJuOwoJCX0KCgkJY29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4OyIgKwoJCQkibWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowIjsKCQlkaXYuc3R5bGUuY3NzVGV4dCA9CgkJCSJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7IiArCgkJCSJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4OyIgKwoJCQkid2lkdGg6NjAlO3RvcDoxJSI7CgkJZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBjb250YWluZXIgKS5hcHBlbmRDaGlsZCggZGl2ICk7CgoJCXZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTsKCQlwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSAiMSUiOwoKCQkvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDQ0CgkJcmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5tYXJnaW5MZWZ0ICkgPT09IDEyOwoKCQkvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBTYWZhcmkgPD05LjEgLSAxMC4xLCBpT1MgPD03LjAgLSA5LjMKCQkvLyBTb21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3QKCQlkaXYuc3R5bGUucmlnaHQgPSAiNjAlIjsKCQlwaXhlbEJveFN0eWxlc1ZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUucmlnaHQgKSA9PT0gMzY7CgoJCS8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5CgkJLy8gRGV0ZWN0IG1pc3JlcG9ydGluZyBvZiBjb250ZW50IGRpbWVuc2lvbnMgZm9yIGJveC1zaXppbmc6Ym9yZGVyLWJveCBlbGVtZW50cwoJCWJveFNpemluZ1JlbGlhYmxlVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS53aWR0aCApID09PSAzNjsKCgkJLy8gU3VwcG9ydDogSUUgOSBvbmx5CgkJLy8gRGV0ZWN0IG92ZXJmbG93OnNjcm9sbCBzY3Jld2luZXNzIChnaC0zNjk5KQoJCS8vIFN1cHBvcnQ6IENocm9tZSA8PTY0CgkJLy8gRG9uJ3QgZ2V0IHRyaWNrZWQgd2hlbiB6b29tIGFmZmVjdHMgb2Zmc2V0V2lkdGggKGdoLTQwMjkpCgkJZGl2LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKCQlzY3JvbGxib3hTaXplVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXYub2Zmc2V0V2lkdGggLyAzICkgPT09IDEyOwoKCQlkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApOwoKCQkvLyBOdWxsaWZ5IHRoZSBkaXYgc28gaXQgd291bGRuJ3QgYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkgYW5kCgkJLy8gaXQgd2lsbCBhbHNvIGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZAoJCWRpdiA9IG51bGw7Cgl9CgoJZnVuY3Rpb24gcm91bmRQaXhlbE1lYXN1cmVzKCBtZWFzdXJlICkgewoJCXJldHVybiBNYXRoLnJvdW5kKCBwYXJzZUZsb2F0KCBtZWFzdXJlICkgKTsKCX0KCgl2YXIgcGl4ZWxQb3NpdGlvblZhbCwgYm94U2l6aW5nUmVsaWFibGVWYWwsIHNjcm9sbGJveFNpemVWYWwsIHBpeGVsQm94U3R5bGVzVmFsLAoJCXJlbGlhYmxlVHJEaW1lbnNpb25zVmFsLCByZWxpYWJsZU1hcmdpbkxlZnRWYWwsCgkJY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKSwKCQlkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApOwoKCS8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJvbm1lbnRzCglpZiAoICFkaXYuc3R5bGUgKSB7CgkJcmV0dXJuOwoJfQoKCS8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHkKCS8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICh0cmFjLTg5MDgpCglkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPSAiY29udGVudC1ib3giOwoJZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gIiI7CglzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gImNvbnRlbnQtYm94IjsKCglqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7CgkJYm94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkgewoJCQljb21wdXRlU3R5bGVUZXN0cygpOwoJCQlyZXR1cm4gYm94U2l6aW5nUmVsaWFibGVWYWw7CgkJfSwKCQlwaXhlbEJveFN0eWxlczogZnVuY3Rpb24oKSB7CgkJCWNvbXB1dGVTdHlsZVRlc3RzKCk7CgkJCXJldHVybiBwaXhlbEJveFN0eWxlc1ZhbDsKCQl9LAoJCXBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkgewoJCQljb21wdXRlU3R5bGVUZXN0cygpOwoJCQlyZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDsKCQl9LAoJCXJlbGlhYmxlTWFyZ2luTGVmdDogZnVuY3Rpb24oKSB7CgkJCWNvbXB1dGVTdHlsZVRlc3RzKCk7CgkJCXJldHVybiByZWxpYWJsZU1hcmdpbkxlZnRWYWw7CgkJfSwKCQlzY3JvbGxib3hTaXplOiBmdW5jdGlvbigpIHsKCQkJY29tcHV0ZVN0eWxlVGVzdHMoKTsKCQkJcmV0dXJuIHNjcm9sbGJveFNpemVWYWw7CgkJfSwKCgkJLy8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxNSAtIDE4KwoJCS8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0CgkJLy8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuCgkJLy8gQmVoYXZpb3IgaW4gSUUgOSBpcyBtb3JlIHN1YnRsZSB0aGFuIGluIG5ld2VyIHZlcnNpb25zICYgaXQgcGFzc2VzCgkJLy8gc29tZSB2ZXJzaW9ucyBvZiB0aGlzIHRlc3Q7IG1ha2Ugc3VyZSBub3QgdG8gbWFrZSBpdCBwYXNzIHRoZXJlIQoJCS8vCgkJLy8gU3VwcG9ydDogRmlyZWZveCA3MCsKCQkvLyBPbmx5IEZpcmVmb3ggaW5jbHVkZXMgYm9yZGVyIHdpZHRocwoJCS8vIGluIGNvbXB1dGVkIGRpbWVuc2lvbnMuIChnaC00NTI5KQoJCXJlbGlhYmxlVHJEaW1lbnNpb25zOiBmdW5jdGlvbigpIHsKCQkJdmFyIHRhYmxlLCB0ciwgdHJDaGlsZCwgdHJTdHlsZTsKCQkJaWYgKCByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCA9PSBudWxsICkgewoJCQkJdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAidGFibGUiICk7CgkJCQl0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJ0ciIgKTsKCQkJCXRyQ2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApOwoKCQkJCXRhYmxlLnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGUiOwoJCQkJdHIuc3R5bGUuY3NzVGV4dCA9ICJib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JvcmRlcjoxcHggc29saWQiOwoKCQkJCS8vIFN1cHBvcnQ6IENocm9tZSA4NisKCQkJCS8vIEhlaWdodCBzZXQgdGhyb3VnaCBjc3NUZXh0IGRvZXMgbm90IGdldCBhcHBsaWVkLgoJCQkJLy8gQ29tcHV0ZWQgaGVpZ2h0IHRoZW4gY29tZXMgYmFjayBhcyAwLgoJCQkJdHIuc3R5bGUuaGVpZ2h0ID0gIjFweCI7CgkJCQl0ckNoaWxkLnN0eWxlLmhlaWdodCA9ICI5cHgiOwoKCQkJCS8vIFN1cHBvcnQ6IEFuZHJvaWQgOCBDaHJvbWUgODYrCgkJCQkvLyBJbiBvdXIgYm9keUJhY2tncm91bmQuaHRtbCBpZnJhbWUsCgkJCQkvLyBkaXNwbGF5IGZvciBhbGwgZGl2IGVsZW1lbnRzIGlzIHNldCB0byAiaW5saW5lIiwKCQkJCS8vIHdoaWNoIGNhdXNlcyBhIHByb2JsZW0gb25seSBpbiBBbmRyb2lkIDggQ2hyb21lIDg2LgoJCQkJLy8gRW5zdXJpbmcgdGhlIGRpdiBpcyBgZGlzcGxheTogYmxvY2tgCgkJCQkvLyBnZXRzIGFyb3VuZCB0aGlzIGlzc3VlLgoJCQkJdHJDaGlsZC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKCgkJCQlkb2N1bWVudEVsZW1lbnQKCQkJCQkuYXBwZW5kQ2hpbGQoIHRhYmxlICkKCQkJCQkuYXBwZW5kQ2hpbGQoIHRyICkKCQkJCQkuYXBwZW5kQ2hpbGQoIHRyQ2hpbGQgKTsKCgkJCQl0clN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIHRyICk7CgkJCQlyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCA9ICggcGFyc2VJbnQoIHRyU3R5bGUuaGVpZ2h0LCAxMCApICsKCQkJCQlwYXJzZUludCggdHJTdHlsZS5ib3JkZXJUb3BXaWR0aCwgMTAgKSArCgkJCQkJcGFyc2VJbnQoIHRyU3R5bGUuYm9yZGVyQm90dG9tV2lkdGgsIDEwICkgKSA9PT0gdHIub2Zmc2V0SGVpZ2h0OwoKCQkJCWRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggdGFibGUgKTsKCQkJfQoJCQlyZXR1cm4gcmVsaWFibGVUckRpbWVuc2lvbnNWYWw7CgkJfQoJfSApOwp9ICkoKTsKCgpmdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkgewoJdmFyIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsIHJldCwKCQlpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICksCgoJCS8vIFN1cHBvcnQ6IEZpcmVmb3ggNTErCgkJLy8gUmV0cmlldmluZyBzdHlsZSBiZWZvcmUgY29tcHV0ZWQgc29tZWhvdwoJCS8vIGZpeGVzIGFuIGlzc3VlIHdpdGggZ2V0dGluZyB3cm9uZyB2YWx1ZXMKCQkvLyBvbiBkZXRhY2hlZCBlbGVtZW50cwoJCXN0eWxlID0gZWxlbS5zdHlsZTsKCgljb21wdXRlZCA9IGNvbXB1dGVkIHx8IGdldFN0eWxlcyggZWxlbSApOwoKCS8vIGdldFByb3BlcnR5VmFsdWUgaXMgbmVlZGVkIGZvcjoKCS8vICAgLmNzcygnZmlsdGVyJykgKElFIDkgb25seSwgdHJhYy0xMjUzNykKCS8vICAgLmNzcygnLS1jdXN0b21Qcm9wZXJ0eSkgKGdoLTMxNDQpCglpZiAoIGNvbXB1dGVkICkgewoKCQkvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSsKCQkvLyBJRSBvbmx5IHN1cHBvcnRzIGAiZmxvYXQiYCBpbiBgZ2V0UHJvcGVydHlWYWx1ZWA7IGluIGNvbXB1dGVkIHN0eWxlcwoJCS8vIGl0J3Mgb25seSBhdmFpbGFibGUgYXMgYCJjc3NGbG9hdCJgLiBXZSBubyBsb25nZXIgbW9kaWZ5IHByb3BlcnRpZXMKCQkvLyBzZW50IHRvIGAuY3NzKClgIGFwYXJ0IGZyb20gY2FtZWxDYXNpbmcsIHNvIHdlIG5lZWQgdG8gY2hlY2sgYm90aC4KCQkvLyBOb3JtYWxseSwgdGhpcyB3b3VsZCBjcmVhdGUgZGlmZmVyZW5jZSBpbiBiZWhhdmlvcjogaWYKCQkvLyBgZ2V0UHJvcGVydHlWYWx1ZWAgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcsIHRoZSB2YWx1ZSByZXR1cm5lZAoJCS8vIGJ5IGAuY3NzKClgIHdvdWxkIGJlIGB1bmRlZmluZWRgLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGNhc2UgZm9yCgkJLy8gZGlzY29ubmVjdGVkIGVsZW1lbnRzLiBIb3dldmVyLCBpbiBJRSBldmVuIGRpc2Nvbm5lY3RlZCBlbGVtZW50cwoJCS8vIHdpdGggbm8gc3R5bGVzIHJldHVybiBgIm5vbmUiYCBmb3IgYGdldFByb3BlcnR5VmFsdWUoICJmbG9hdCIgKWAKCQlyZXQgPSBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXTsKCgkJaWYgKCBpc0N1c3RvbVByb3AgJiYgcmV0ICkgewoKCQkJLy8gU3VwcG9ydDogRmlyZWZveCAxMDUrLCBDaHJvbWUgPD0xMDUrCgkJCS8vIFNwZWMgcmVxdWlyZXMgdHJpbW1pbmcgd2hpdGVzcGFjZSBmb3IgY3VzdG9tIHByb3BlcnRpZXMgKGdoLTQ5MjYpLgoJCQkvLyBGaXJlZm94IG9ubHkgdHJpbXMgbGVhZGluZyB3aGl0ZXNwYWNlLiBDaHJvbWUganVzdCBjb2xsYXBzZXMKCQkJLy8gYm90aCBsZWFkaW5nICYgdHJhaWxpbmcgd2hpdGVzcGFjZSB0byBhIHNpbmdsZSBzcGFjZS4KCQkJLy8KCQkJLy8gRmFsbCBiYWNrIHRvIGB1bmRlZmluZWRgIGlmIGVtcHR5IHN0cmluZyByZXR1cm5lZC4KCQkJLy8gVGhpcyBjb2xsYXBzZXMgYSBtaXNzaW5nIGRlZmluaXRpb24gd2l0aCBwcm9wZXJ0eSBkZWZpbmVkCgkJCS8vIGFuZCBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIGJ1dCB0aGVyZSdzIG5vIHN0YW5kYXJkIEFQSQoJCQkvLyBhbGxvd2luZyB1cyB0byBkaWZmZXJlbnRpYXRlIHRoZW0gd2l0aG91dCBhIHBlcmZvcm1hbmNlIHBlbmFsdHkKCQkJLy8gYW5kIHJldHVybmluZyBgdW5kZWZpbmVkYCBhbGlnbnMgd2l0aCBvbGRlciBqUXVlcnkuCgkJCS8vCgkJCS8vIHJ0cmltQ1NTIHRyZWF0cyBVKzAwMEQgQ0FSUklBR0UgUkVUVVJOIGFuZCBVKzAwMEMgRk9STSBGRUVECgkJCS8vIGFzIHdoaXRlc3BhY2Ugd2hpbGUgQ1NTIGRvZXMgbm90LCBidXQgdGhpcyBpcyBub3QgYSBwcm9ibGVtCgkJCS8vIGJlY2F1c2UgQ1NTIHByZXByb2Nlc3NpbmcgcmVwbGFjZXMgdGhlbSB3aXRoIFUrMDAwQSBMSU5FIEZFRUQKCQkJLy8gKHdoaWNoICppcyogQ1NTIHdoaXRlc3BhY2UpCgkJCS8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc3ludGF4LTMvI2lucHV0LXByZXByb2Nlc3NpbmcKCQkJcmV0ID0gcmV0LnJlcGxhY2UoIHJ0cmltQ1NTLCAiJDEiICkgfHwgdW5kZWZpbmVkOwoJCX0KCgkJaWYgKCByZXQgPT09ICIiICYmICFpc0F0dGFjaGVkKCBlbGVtICkgKSB7CgkJCXJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApOwoJCX0KCgkJLy8gQSB0cmlidXRlIHRvIHRoZSAiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkcyIKCQkvLyBBbmRyb2lkIEJyb3dzZXIgcmV0dXJucyBwZXJjZW50YWdlIGZvciBzb21lIHZhbHVlcywKCQkvLyBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzLgoJCS8vIFRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzoKCQkvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI3Jlc29sdmVkLXZhbHVlcwoJCWlmICggIXN1cHBvcnQucGl4ZWxCb3hTdHlsZXMoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcmJveFN0eWxlLnRlc3QoIG5hbWUgKSApIHsKCgkJCS8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXMKCQkJd2lkdGggPSBzdHlsZS53aWR0aDsKCQkJbWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDsKCQkJbWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDsKCgkJCS8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXQKCQkJc3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0OwoJCQlyZXQgPSBjb21wdXRlZC53aWR0aDsKCgkJCS8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXMKCQkJc3R5bGUud2lkdGggPSB3aWR0aDsKCQkJc3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDsKCQkJc3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDsKCQl9Cgl9CgoJcmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID8KCgkJLy8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seQoJCS8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuCgkJcmV0ICsgIiIgOgoJCXJldDsKfQoKCmZ1bmN0aW9uIGFkZEdldEhvb2tJZiggY29uZGl0aW9uRm4sIGhvb2tGbiApIHsKCgkvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLgoJcmV0dXJuIHsKCQlnZXQ6IGZ1bmN0aW9uKCkgewoJCQlpZiAoIGNvbmRpdGlvbkZuKCkgKSB7CgoJCQkJLy8gSG9vayBub3QgbmVlZGVkIChvciBpdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgaXQgZHVlCgkJCQkvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuCgkJCQlkZWxldGUgdGhpcy5nZXQ7CgkJCQlyZXR1cm47CgkJCX0KCgkJCS8vIEhvb2sgbmVlZGVkOyByZWRlZmluZSBpdCBzbyB0aGF0IHRoZSBzdXBwb3J0IHRlc3QgaXMgbm90IGV4ZWN1dGVkIGFnYWluLgoJCQlyZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKCQl9Cgl9Owp9CgoKdmFyIGNzc1ByZWZpeGVzID0gWyAiV2Via2l0IiwgIk1veiIsICJtcyIgXSwKCWVtcHR5U3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApLnN0eWxlLAoJdmVuZG9yUHJvcHMgPSB7fTsKCi8vIFJldHVybiBhIHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSBvciB1bmRlZmluZWQKZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB7CgoJLy8gQ2hlY2sgZm9yIHZlbmRvciBwcmVmaXhlZCBuYW1lcwoJdmFyIGNhcE5hbWUgPSBuYW1lWyAwIF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoIDEgKSwKCQlpID0gY3NzUHJlZml4ZXMubGVuZ3RoOwoKCXdoaWxlICggaS0tICkgewoJCW5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTsKCQlpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHsKCQkJcmV0dXJuIG5hbWU7CgkJfQoJfQp9CgovLyBSZXR1cm4gYSBwb3RlbnRpYWxseS1tYXBwZWQgalF1ZXJ5LmNzc1Byb3BzIG9yIHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eQpmdW5jdGlvbiBmaW5hbFByb3BOYW1lKCBuYW1lICkgewoJdmFyIGZpbmFsID0galF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gfHwgdmVuZG9yUHJvcHNbIG5hbWUgXTsKCglpZiAoIGZpbmFsICkgewoJCXJldHVybiBmaW5hbDsKCX0KCWlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkgewoJCXJldHVybiBuYW1lOwoJfQoJcmV0dXJuIHZlbmRvclByb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7Cn0KCgp2YXIKCgkvLyBTd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlCgkvLyBleGNlcHQgInRhYmxlIiwgInRhYmxlLWNlbGwiLCBvciAidGFibGUtY2FwdGlvbiIKCS8vIFNlZSBoZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxheQoJcmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLAoJY3NzU2hvdyA9IHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHZpc2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiAiYmxvY2siIH0sCgljc3NOb3JtYWxUcmFuc2Zvcm0gPSB7CgkJbGV0dGVyU3BhY2luZzogIjAiLAoJCWZvbnRXZWlnaHQ6ICI0MDAiCgl9OwoKZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIF9lbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7CgoJLy8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlbgoJLy8gbm9ybWFsaXplZCBhdCB0aGlzIHBvaW50Cgl2YXIgbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKTsKCXJldHVybiBtYXRjaGVzID8KCgkJLy8gR3VhcmQgYWdhaW5zdCB1bmRlZmluZWQgInN1YnRyYWN0IiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzCgkJTWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCAicHgiICkgOgoJCXZhbHVlOwp9CgpmdW5jdGlvbiBib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgYm94LCBpc0JvcmRlckJveCwgc3R5bGVzLCBjb21wdXRlZFZhbCApIHsKCXZhciBpID0gZGltZW5zaW9uID09PSAid2lkdGgiID8gMSA6IDAsCgkJZXh0cmEgPSAwLAoJCWRlbHRhID0gMCwKCQltYXJnaW5EZWx0YSA9IDA7CgoJLy8gQWRqdXN0bWVudCBtYXkgbm90IGJlIG5lY2Vzc2FyeQoJaWYgKCBib3ggPT09ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250ZW50IiApICkgewoJCXJldHVybiAwOwoJfQoKCWZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHsKCgkJLy8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luCgkJLy8gQ291bnQgbWFyZ2luIGRlbHRhIHNlcGFyYXRlbHkgdG8gb25seSBhZGQgaXQgYWZ0ZXIgc2Nyb2xsIGd1dHRlciBhZGp1c3RtZW50LgoJCS8vIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgbmVnYXRpdmUgbWFyZ2lucyB3b3JrIHdpdGggYG91dGVySGVpZ2h0KCB0cnVlIClgIChnaC0zOTgyKS4KCQlpZiAoIGJveCA9PT0gIm1hcmdpbiIgKSB7CgkJCW1hcmdpbkRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIGJveCArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTsKCQl9CgoJCS8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBjb250ZW50LWJveCwgd2UncmUgc2Vla2luZyAicGFkZGluZyIgb3IgImJvcmRlciIgb3IgIm1hcmdpbiIKCQlpZiAoICFpc0JvcmRlckJveCApIHsKCgkJCS8vIEFkZCBwYWRkaW5nCgkJCWRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sICJwYWRkaW5nIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTsKCgkJCS8vIEZvciAiYm9yZGVyIiBvciAibWFyZ2luIiwgYWRkIGJvcmRlcgoJCQlpZiAoIGJveCAhPT0gInBhZGRpbmciICkgewoJCQkJZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgImJvcmRlciIgKyBjc3NFeHBhbmRbIGkgXSArICJXaWR0aCIsIHRydWUsIHN0eWxlcyApOwoKCQkJLy8gQnV0IHN0aWxsIGtlZXAgdHJhY2sgb2YgaXQgb3RoZXJ3aXNlCgkJCX0gZWxzZSB7CgkJCQlleHRyYSArPSBqUXVlcnkuY3NzKCBlbGVtLCAiYm9yZGVyIiArIGNzc0V4cGFuZFsgaSBdICsgIldpZHRoIiwgdHJ1ZSwgc3R5bGVzICk7CgkJCX0KCgkJLy8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGJvcmRlci1ib3ggKGNvbnRlbnQgKyBwYWRkaW5nICsgYm9yZGVyKSwgd2UncmUgc2Vla2luZyAiY29udGVudCIgb3IKCQkvLyAicGFkZGluZyIgb3IgIm1hcmdpbiIKCQl9IGVsc2UgewoKCQkJLy8gRm9yICJjb250ZW50Iiwgc3VidHJhY3QgcGFkZGluZwoJCQlpZiAoIGJveCA9PT0gImNvbnRlbnQiICkgewoJCQkJZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgInBhZGRpbmciICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApOwoJCQl9CgoJCQkvLyBGb3IgImNvbnRlbnQiIG9yICJwYWRkaW5nIiwgc3VidHJhY3QgYm9yZGVyCgkJCWlmICggYm94ICE9PSAibWFyZ2luIiApIHsKCQkJCWRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sICJib3JkZXIiICsgY3NzRXhwYW5kWyBpIF0gKyAiV2lkdGgiLCB0cnVlLCBzdHlsZXMgKTsKCQkJfQoJCX0KCX0KCgkvLyBBY2NvdW50IGZvciBwb3NpdGl2ZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyIHdoZW4gcmVxdWVzdGVkIGJ5IHByb3ZpZGluZyBjb21wdXRlZFZhbAoJaWYgKCAhaXNCb3JkZXJCb3ggJiYgY29tcHV0ZWRWYWwgPj0gMCApIHsKCgkJLy8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIGEgcm91bmRlZCBzdW0gb2YgY29udGVudCwgcGFkZGluZywgc2Nyb2xsIGd1dHRlciwgYW5kIGJvcmRlcgoJCS8vIEFzc3VtaW5nIGludGVnZXIgc2Nyb2xsIGd1dHRlciwgc3VidHJhY3QgdGhlIHJlc3QgYW5kIHJvdW5kIGRvd24KCQlkZWx0YSArPSBNYXRoLm1heCggMCwgTWF0aC5jZWlsKAoJCQllbGVtWyAib2Zmc2V0IiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC0KCQkJY29tcHV0ZWRWYWwgLQoJCQlkZWx0YSAtCgkJCWV4dHJhIC0KCQkJMC41CgoJCS8vIElmIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyB1bmtub3duLCB0aGVuIHdlIGNhbid0IGRldGVybWluZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyCgkJLy8gVXNlIGFuIGV4cGxpY2l0IHplcm8gdG8gYXZvaWQgTmFOIChnaC0zOTY0KQoJCSkgKSB8fCAwOwoJfQoKCXJldHVybiBkZWx0YSArIG1hcmdpbkRlbHRhOwp9CgpmdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICkgewoKCS8vIFN0YXJ0IHdpdGggY29tcHV0ZWQgc3R5bGUKCXZhciBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSwKCgkJLy8gVG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdywgb25seSBmZXRjaCBib3hTaXppbmcgaWYgd2UgbmVlZCBpdCAoZ2gtNDMyMikuCgkJLy8gRmFrZSBjb250ZW50LWJveCB1bnRpbCB3ZSBrbm93IGl0J3MgbmVlZGVkIHRvIGtub3cgdGhlIHRydWUgdmFsdWUuCgkJYm94U2l6aW5nTmVlZGVkID0gIXN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSB8fCBleHRyYSwKCQlpc0JvcmRlckJveCA9IGJveFNpemluZ05lZWRlZCAmJgoJCQlqUXVlcnkuY3NzKCBlbGVtLCAiYm94U2l6aW5nIiwgZmFsc2UsIHN0eWxlcyApID09PSAiYm9yZGVyLWJveCIsCgkJdmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94LAoKCQl2YWwgPSBjdXJDU1MoIGVsZW0sIGRpbWVuc2lvbiwgc3R5bGVzICksCgkJb2Zmc2V0UHJvcCA9ICJvZmZzZXQiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApOwoKCS8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NAoJLy8gUmV0dXJuIGEgY29uZm91bmRpbmcgbm9uLXBpeGVsIHZhbHVlIG9yIGZlaWduIGlnbm9yYW5jZSwgYXMgYXBwcm9wcmlhdGUuCglpZiAoIHJudW1ub25weC50ZXN0KCB2YWwgKSApIHsKCQlpZiAoICFleHRyYSApIHsKCQkJcmV0dXJuIHZhbDsKCQl9CgkJdmFsID0gImF1dG8iOwoJfQoKCgkvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seQoJLy8gVXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3Igd2hlbiBib3ggc2l6aW5nIGlzIHVucmVsaWFibGUuCgkvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3guCglpZiAoICggIXN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSAmJiBpc0JvcmRlckJveCB8fAoKCQkvLyBTdXBwb3J0OiBJRSAxMCAtIDExKywgRWRnZSAxNSAtIDE4KwoJCS8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0CgkJLy8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuCgkJLy8gSW50ZXJlc3RpbmdseSwgaW4gc29tZSBjYXNlcyBJRSA5IGRvZXNuJ3Qgc3VmZmVyIGZyb20gdGhpcyBpc3N1ZS4KCQkhc3VwcG9ydC5yZWxpYWJsZVRyRGltZW5zaW9ucygpICYmIG5vZGVOYW1lKCBlbGVtLCAidHIiICkgfHwKCgkJLy8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzICJhdXRvIgoJCS8vIFRoaXMgaGFwcGVucyBmb3IgaW5saW5lIGVsZW1lbnRzIHdpdGggbm8gZXhwbGljaXQgc2V0dGluZyAoZ2gtMzU3MSkKCQl2YWwgPT09ICJhdXRvIiB8fAoKCQkvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIC0gNC4zIG9ubHkKCQkvLyBBbHNvIHVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIG1pc3JlcG9ydGVkIGlubGluZSBkaW1lbnNpb25zIChnaC0zNjAyKQoJCSFwYXJzZUZsb2F0KCB2YWwgKSAmJiBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gImlubGluZSIgKSAmJgoKCQkvLyBNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSAmIGNvbm5lY3RlZAoJCWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7CgoJCWlzQm9yZGVyQm94ID0galF1ZXJ5LmNzcyggZWxlbSwgImJveFNpemluZyIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gImJvcmRlci1ib3giOwoKCQkvLyBXaGVyZSBhdmFpbGFibGUsIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBhcHByb3hpbWF0ZSBib3JkZXIgYm94IGRpbWVuc2lvbnMuCgkJLy8gV2hlcmUgbm90IGF2YWlsYWJsZSAoZS5nLiwgU1ZHKSwgYXNzdW1lIHVucmVsaWFibGUgYm94LXNpemluZyBhbmQgaW50ZXJwcmV0IHRoZQoJCS8vIHJldHJpZXZlZCB2YWx1ZSBhcyBhIGNvbnRlbnQgYm94IGRpbWVuc2lvbi4KCQl2YWx1ZUlzQm9yZGVyQm94ID0gb2Zmc2V0UHJvcCBpbiBlbGVtOwoJCWlmICggdmFsdWVJc0JvcmRlckJveCApIHsKCQkJdmFsID0gZWxlbVsgb2Zmc2V0UHJvcCBdOwoJCX0KCX0KCgkvLyBOb3JtYWxpemUgIiIgYW5kIGF1dG8KCXZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7CgoJLy8gQWRqdXN0IGZvciB0aGUgZWxlbWVudCdzIGJveCBtb2RlbAoJcmV0dXJuICggdmFsICsKCQlib3hNb2RlbEFkanVzdG1lbnQoCgkJCWVsZW0sCgkJCWRpbWVuc2lvbiwKCQkJZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/ICJib3JkZXIiIDogImNvbnRlbnQiICksCgkJCXZhbHVlSXNCb3JkZXJCb3gsCgkJCXN0eWxlcywKCgkJCS8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgY29tcHV0ZWQgc2l6ZSB0byByZXF1ZXN0IHNjcm9sbCBndXR0ZXIgY2FsY3VsYXRpb24gKGdoLTM1ODkpCgkJCXZhbAoJCSkKCSkgKyAicHgiOwp9CgpqUXVlcnkuZXh0ZW5kKCB7CgoJLy8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBkZWZhdWx0CgkvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHkKCWNzc0hvb2tzOiB7CgkJb3BhY2l0eTogewoJCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKCQkJCWlmICggY29tcHV0ZWQgKSB7CgoJCQkJCS8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5CgkJCQkJdmFyIHJldCA9IGN1ckNTUyggZWxlbSwgIm9wYWNpdHkiICk7CgkJCQkJcmV0dXJuIHJldCA9PT0gIiIgPyAiMSIgOiByZXQ7CgkJCQl9CgkJCX0KCQl9Cgl9LAoKCS8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkICJweCIgdG8gdGhlc2UgcG9zc2libHktdW5pdGxlc3MgcHJvcGVydGllcwoJY3NzTnVtYmVyOiB7CgkJYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IHRydWUsCgkJYXNwZWN0UmF0aW86IHRydWUsCgkJYm9yZGVySW1hZ2VTbGljZTogdHJ1ZSwKCQljb2x1bW5Db3VudDogdHJ1ZSwKCQlmbGV4R3JvdzogdHJ1ZSwKCQlmbGV4U2hyaW5rOiB0cnVlLAoJCWZvbnRXZWlnaHQ6IHRydWUsCgkJZ3JpZEFyZWE6IHRydWUsCgkJZ3JpZENvbHVtbjogdHJ1ZSwKCQlncmlkQ29sdW1uRW5kOiB0cnVlLAoJCWdyaWRDb2x1bW5TdGFydDogdHJ1ZSwKCQlncmlkUm93OiB0cnVlLAoJCWdyaWRSb3dFbmQ6IHRydWUsCgkJZ3JpZFJvd1N0YXJ0OiB0cnVlLAoJCWxpbmVIZWlnaHQ6IHRydWUsCgkJb3BhY2l0eTogdHJ1ZSwKCQlvcmRlcjogdHJ1ZSwKCQlvcnBoYW5zOiB0cnVlLAoJCXNjYWxlOiB0cnVlLAoJCXdpZG93czogdHJ1ZSwKCQl6SW5kZXg6IHRydWUsCgkJem9vbTogdHJ1ZSwKCgkJLy8gU1ZHLXJlbGF0ZWQKCQlmaWxsT3BhY2l0eTogdHJ1ZSwKCQlmbG9vZE9wYWNpdHk6IHRydWUsCgkJc3RvcE9wYWNpdHk6IHRydWUsCgkJc3Ryb2tlTWl0ZXJsaW1pdDogdHJ1ZSwKCQlzdHJva2VPcGFjaXR5OiB0cnVlCgl9LAoKCS8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmUKCS8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWUKCWNzc1Byb3BzOiB7fSwKCgkvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9kZQoJc3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7CgoJCS8vIERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcwoJCWlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICFlbGVtLnN0eWxlICkgewoJCQlyZXR1cm47CgkJfQoKCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUKCQl2YXIgcmV0LCB0eXBlLCBob29rcywKCQkJb3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSwKCQkJaXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLAoJCQlzdHlsZSA9IGVsZW0uc3R5bGU7CgoJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3QKCQkvLyB3YW50IHRvIHF1ZXJ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHkKCQkvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuCgkJaWYgKCAhaXNDdXN0b21Qcm9wICkgewoJCQluYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTsKCQl9CgoJCS8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uCgkJaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07CgoJCS8vIENoZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2YWx1ZQoJCWlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKCQkJdHlwZSA9IHR5cGVvZiB2YWx1ZTsKCgkJCS8vIENvbnZlcnQgIis9IiBvciAiLT0iIHRvIHJlbGF0aXZlIG51bWJlcnMgKHRyYWMtNzM0NSkKCQkJaWYgKCB0eXBlID09PSAic3RyaW5nIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBdICkgewoJCQkJdmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApOwoKCQkJCS8vIEZpeGVzIGJ1ZyB0cmFjLTkyMzcKCQkJCXR5cGUgPSAibnVtYmVyIjsKCQkJfQoKCQkJLy8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICh0cmFjLTcxMTYpCgkJCWlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7CgkJCQlyZXR1cm47CgkJCX0KCgkJCS8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKQoJCQkvLyBUaGUgaXNDdXN0b21Qcm9wIGNoZWNrIGNhbiBiZSByZW1vdmVkIGluIGpRdWVyeSA0LjAgd2hlbiB3ZSBvbmx5IGF1dG8tYXBwZW5kCgkJCS8vICJweCIgdG8gYSBmZXcgaGFyZGNvZGVkIHZhbHVlcy4KCQkJaWYgKCB0eXBlID09PSAibnVtYmVyIiAmJiAhaXNDdXN0b21Qcm9wICkgewoJCQkJdmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/ICIiIDogInB4IiApOwoJCQl9CgoJCQkvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzCgkJCWlmICggIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYmIHZhbHVlID09PSAiIiAmJiBuYW1lLmluZGV4T2YoICJiYWNrZ3JvdW5kIiApID09PSAwICkgewoJCQkJc3R5bGVbIG5hbWUgXSA9ICJpbmhlcml0IjsKCQkJfQoKCQkJLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlCgkJCWlmICggIWhvb2tzIHx8ICEoICJzZXQiIGluIGhvb2tzICkgfHwKCQkJCSggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHsKCgkJCQlpZiAoIGlzQ3VzdG9tUHJvcCApIHsKCQkJCQlzdHlsZS5zZXRQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTsKCQkJCX0gZWxzZSB7CgkJCQkJc3R5bGVbIG5hbWUgXSA9IHZhbHVlOwoJCQkJfQoJCQl9CgoJCX0gZWxzZSB7CgoJCQkvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKCQkJaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJgoJCQkJKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHsKCgkJCQlyZXR1cm4gcmV0OwoJCQl9CgoJCQkvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdAoJCQlyZXR1cm4gc3R5bGVbIG5hbWUgXTsKCQl9Cgl9LAoKCWNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7CgkJdmFyIHZhbCwgbnVtLCBob29rcywKCQkJb3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSwKCQkJaXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApOwoKCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0CgkJLy8gd2FudCB0byBtb2RpZnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eQoJCS8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC4KCQlpZiAoICFpc0N1c3RvbVByb3AgKSB7CgkJCW5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApOwoJCX0KCgkJLy8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZQoJCWhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdOwoKCQkvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZQoJCWlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgKSB7CgkJCXZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTsKCQl9CgoJCS8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0CgkJaWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsKCQkJdmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTsKCQl9CgoJCS8vIENvbnZlcnQgIm5vcm1hbCIgdG8gY29tcHV0ZWQgdmFsdWUKCQlpZiAoIHZhbCA9PT0gIm5vcm1hbCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zvcm0gKSB7CgkJCXZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdOwoJCX0KCgkJLy8gTWFrZSBudW1lcmljIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmljCgkJaWYgKCBleHRyYSA9PT0gIiIgfHwgZXh0cmEgKSB7CgkJCW51bSA9IHBhcnNlRmxvYXQoIHZhbCApOwoJCQlyZXR1cm4gZXh0cmEgPT09IHRydWUgfHwgaXNGaW5pdGUoIG51bSApID8gbnVtIHx8IDAgOiB2YWw7CgkJfQoKCQlyZXR1cm4gdmFsOwoJfQp9ICk7CgpqUXVlcnkuZWFjaCggWyAiaGVpZ2h0IiwgIndpZHRoIiBdLCBmdW5jdGlvbiggX2ksIGRpbWVuc2lvbiApIHsKCWpRdWVyeS5jc3NIb29rc1sgZGltZW5zaW9uIF0gPSB7CgkJZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkgewoJCQlpZiAoIGNvbXB1dGVkICkgewoKCQkJCS8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbQoJCQkJLy8gYnV0IGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXQKCQkJCXJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkgKSAmJgoKCQkJCQkvLyBTdXBwb3J0OiBTYWZhcmkgOCsKCQkJCQkvLyBUYWJsZSBjb2x1bW5zIGluIFNhZmFyaSBoYXZlIG5vbi16ZXJvIG9mZnNldFdpZHRoICYgemVybwoJCQkJCS8vIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHVubGVzcyBkaXNwbGF5IGlzIGNoYW5nZWQuCgkJCQkJLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5CgkJCQkJLy8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYSBkaXNjb25uZWN0ZWQgbm9kZQoJCQkJCS8vIGluIElFIHRocm93cyBhbiBlcnJvci4KCQkJCQkoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoIHx8ICFlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICkgPwoJCQkJCXN3YXAoIGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkgewoJCQkJCQlyZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApOwoJCQkJCX0gKSA6CgkJCQkJZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApOwoJCQl9CgkJfSwKCgkJc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIGV4dHJhICkgewoJCQl2YXIgbWF0Y2hlcywKCQkJCXN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLAoKCQkJCS8vIE9ubHkgcmVhZCBzdHlsZXMucG9zaXRpb24gaWYgdGhlIHRlc3QgaGFzIGEgY2hhbmNlIHRvIGZhaWwKCQkJCS8vIHRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3cuCgkJCQlzY3JvbGxib3hTaXplQnVnZ3kgPSAhc3VwcG9ydC5zY3JvbGxib3hTaXplKCkgJiYKCQkJCQlzdHlsZXMucG9zaXRpb24gPT09ICJhYnNvbHV0ZSIsCgoJCQkJLy8gVG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdywgb25seSBmZXRjaCBib3hTaXppbmcgaWYgd2UgbmVlZCBpdCAoZ2gtMzk5MSkKCQkJCWJveFNpemluZ05lZWRlZCA9IHNjcm9sbGJveFNpemVCdWdneSB8fCBleHRyYSwKCQkJCWlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmCgkJCQkJalF1ZXJ5LmNzcyggZWxlbSwgImJveFNpemluZyIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gImJvcmRlci1ib3giLAoJCQkJc3VidHJhY3QgPSBleHRyYSA/CgkJCQkJYm94TW9kZWxBZGp1c3RtZW50KAoJCQkJCQllbGVtLAoJCQkJCQlkaW1lbnNpb24sCgkJCQkJCWV4dHJhLAoJCQkJCQlpc0JvcmRlckJveCwKCQkJCQkJc3R5bGVzCgkJCQkJKSA6CgkJCQkJMDsKCgkJCS8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZAoJCQkvLyBmYWtpbmcgYSBjb250ZW50LWJveCB0byBnZXQgYm9yZGVyIGFuZCBwYWRkaW5nIChnaC0zNjk5KQoJCQlpZiAoIGlzQm9yZGVyQm94ICYmIHNjcm9sbGJveFNpemVCdWdneSApIHsKCQkJCXN1YnRyYWN0IC09IE1hdGguY2VpbCgKCQkJCQllbGVtWyAib2Zmc2V0IiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC0KCQkJCQlwYXJzZUZsb2F0KCBzdHlsZXNbIGRpbWVuc2lvbiBdICkgLQoJCQkJCWJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCAiYm9yZGVyIiwgZmFsc2UsIHN0eWxlcyApIC0KCQkJCQkwLjUKCQkJCSk7CgkJCX0KCgkJCS8vIENvbnZlcnQgdG8gcGl4ZWxzIGlmIHZhbHVlIGFkanVzdG1lbnQgaXMgbmVlZGVkCgkJCWlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYKCQkJCSggbWF0Y2hlc1sgMyBdIHx8ICJweCIgKSAhPT0gInB4IiApIHsKCgkJCQllbGVtLnN0eWxlWyBkaW1lbnNpb24gXSA9IHZhbHVlOwoJCQkJdmFsdWUgPSBqUXVlcnkuY3NzKCBlbGVtLCBkaW1lbnNpb24gKTsKCQkJfQoKCQkJcmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKTsKCQl9Cgl9Owp9ICk7CgpqUXVlcnkuY3NzSG9va3MubWFyZ2luTGVmdCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpbkxlZnQsCglmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CgkJaWYgKCBjb21wdXRlZCApIHsKCQkJcmV0dXJuICggcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCAibWFyZ2luTGVmdCIgKSApIHx8CgkJCQllbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLQoJCQkJCXN3YXAoIGVsZW0sIHsgbWFyZ2luTGVmdDogMCB9LCBmdW5jdGlvbigpIHsKCQkJCQkJcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDsKCQkJCQl9ICkKCQkJKSArICJweCI7CgkJfQoJfQopOwoKLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkgYW5pbWF0ZSB0byBleHBhbmQgcHJvcGVydGllcwpqUXVlcnkuZWFjaCggewoJbWFyZ2luOiAiIiwKCXBhZGRpbmc6ICIiLAoJYm9yZGVyOiAiV2lkdGgiCn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHsKCWpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7CgkJZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7CgkJCXZhciBpID0gMCwKCQkJCWV4cGFuZGVkID0ge30sCgoJCQkJLy8gQXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nCgkJCQlwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgPyB2YWx1ZS5zcGxpdCggIiAiICkgOiBbIHZhbHVlIF07CgoJCQlmb3IgKCA7IGkgPCA0OyBpKysgKSB7CgkJCQlleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9CgkJCQkJcGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdOwoJCQl9CgoJCQlyZXR1cm4gZXhwYW5kZWQ7CgkJfQoJfTsKCglpZiAoIHByZWZpeCAhPT0gIm1hcmdpbiIgKSB7CgkJalF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjsKCX0KfSApOwoKalF1ZXJ5LmZuLmV4dGVuZCggewoJY3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CgkJcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgewoJCQl2YXIgc3R5bGVzLCBsZW4sCgkJCQltYXAgPSB7fSwKCQkJCWkgPSAwOwoKCQkJaWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7CgkJCQlzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKTsKCQkJCWxlbiA9IG5hbWUubGVuZ3RoOwoKCQkJCWZvciAoIDsgaSA8IGxlbjsgaSsrICkgewoJCQkJCW1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTsKCQkJCX0KCgkJCQlyZXR1cm4gbWFwOwoJCQl9CgoJCQlyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/CgkJCQlqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOgoJCQkJalF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApOwoJCX0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOwoJfQp9ICk7CgoKZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkgewoJcmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTsKfQpqUXVlcnkuVHdlZW4gPSBUd2VlbjsKClR3ZWVuLnByb3RvdHlwZSA9IHsKCWNvbnN0cnVjdG9yOiBUd2VlbiwKCWluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCApIHsKCQl0aGlzLmVsZW0gPSBlbGVtOwoJCXRoaXMucHJvcCA9IHByb3A7CgkJdGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgalF1ZXJ5LmVhc2luZy5fZGVmYXVsdDsKCQl0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwoJCXRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCk7CgkJdGhpcy5lbmQgPSBlbmQ7CgkJdGhpcy51bml0ID0gdW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/ICIiIDogInB4IiApOwoJfSwKCWN1cjogZnVuY3Rpb24oKSB7CgkJdmFyIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTsKCgkJcmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/CgkJCWhvb2tzLmdldCggdGhpcyApIDoKCQkJVHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApOwoJfSwKCXJ1bjogZnVuY3Rpb24oIHBlcmNlbnQgKSB7CgkJdmFyIGVhc2VkLAoJCQlob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07CgoJCWlmICggdGhpcy5vcHRpb25zLmR1cmF0aW9uICkgewoJCQl0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXSgKCQkJCXBlcmNlbnQsIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIHBlcmNlbnQsIDAsIDEsIHRoaXMub3B0aW9ucy5kdXJhdGlvbgoJCQkpOwoJCX0gZWxzZSB7CgkJCXRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50OwoJCX0KCQl0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7CgoJCWlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7CgkJCXRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTsKCQl9CgoJCWlmICggaG9va3MgJiYgaG9va3Muc2V0ICkgewoJCQlob29rcy5zZXQoIHRoaXMgKTsKCQl9IGVsc2UgewoJCQlUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7CgkJfQoJCXJldHVybiB0aGlzOwoJfQp9OwoKVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0gVHdlZW4ucHJvdG90eXBlOwoKVHdlZW4ucHJvcEhvb2tzID0gewoJX2RlZmF1bHQ6IHsKCQlnZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHsKCQkJdmFyIHJlc3VsdDsKCgkJCS8vIFVzZSBhIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5IHdoZW4gaXQgaXMgbm90IGEgRE9NIGVsZW1lbnQsCgkJCS8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuCgkJCWlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAhPT0gMSB8fAoJCQkJdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7CgkJCQlyZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdOwoJCQl9CgoJCQkvLyBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBhcyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHkKCQkJLy8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy4KCQkJLy8gU2ltcGxlIHZhbHVlcyBzdWNoIGFzICIxMHB4IiBhcmUgcGFyc2VkIHRvIEZsb2F0OwoJCQkvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFzICJyb3RhdGUoMXJhZCkiIGFyZSByZXR1cm5lZCBhcy1pcy4KCQkJcmVzdWx0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgIiIgKTsKCgkJCS8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgImF1dG8iIGFyZSBjb252ZXJ0ZWQgdG8gMC4KCQkJcmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09PSAiYXV0byIgPyAwIDogcmVzdWx0OwoJCX0sCgkJc2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7CgoJCQkvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC4KCQkJLy8gVXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlLgoJCQkvLyBVc2UgLnN0eWxlIGlmIGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3BlcnRpZXMgd2hlcmUgYXZhaWxhYmxlLgoJCQlpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7CgkJCQlqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApOwoJCQl9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmICgKCQkJCWpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdIHx8CgkJCQkJdHdlZW4uZWxlbS5zdHlsZVsgZmluYWxQcm9wTmFtZSggdHdlZW4ucHJvcCApIF0gIT0gbnVsbCApICkgewoJCQkJalF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7CgkJCX0gZWxzZSB7CgkJCQl0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7CgkJCX0KCQl9Cgl9Cn07CgovLyBTdXBwb3J0OiBJRSA8PTkgb25seQovLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXMKVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0gewoJc2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7CgkJaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHsKCQkJdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93OwoJCX0KCX0KfTsKCmpRdWVyeS5lYXNpbmcgPSB7CglsaW5lYXI6IGZ1bmN0aW9uKCBwICkgewoJCXJldHVybiBwOwoJfSwKCXN3aW5nOiBmdW5jdGlvbiggcCApIHsKCQlyZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyOwoJfSwKCV9kZWZhdWx0OiAic3dpbmciCn07CgpqUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5cGUuaW5pdDsKCi8vIEJhY2sgY29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50CmpRdWVyeS5meC5zdGVwID0ge307CgoKCgp2YXIKCWZ4Tm93LCBpblByb2dyZXNzLAoJcmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sCglycnVuID0gL3F1ZXVlSG9va3MkLzsKCmZ1bmN0aW9uIHNjaGVkdWxlKCkgewoJaWYgKCBpblByb2dyZXNzICkgewoJCWlmICggZG9jdW1lbnQuaGlkZGVuID09PSBmYWxzZSAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lICkgewoJCQl3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBzY2hlZHVsZSApOwoJCX0gZWxzZSB7CgkJCXdpbmRvdy5zZXRUaW1lb3V0KCBzY2hlZHVsZSwgalF1ZXJ5LmZ4LmludGVydmFsICk7CgkJfQoKCQlqUXVlcnkuZngudGljaygpOwoJfQp9CgovLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5jaHJvbm91c2x5CmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkgewoJd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgewoJCWZ4Tm93ID0gdW5kZWZpbmVkOwoJfSApOwoJcmV0dXJuICggZnhOb3cgPSBEYXRlLm5vdygpICk7Cn0KCi8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uCmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7Cgl2YXIgd2hpY2gsCgkJaSA9IDAsCgkJYXR0cnMgPSB7IGhlaWdodDogdHlwZSB9OwoKCS8vIElmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcywKCS8vIG90aGVyd2lzZSBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0CglpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDsKCWZvciAoIDsgaSA8IDQ7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHsKCQl3aGljaCA9IGNzc0V4cGFuZFsgaSBdOwoJCWF0dHJzWyAibWFyZ2luIiArIHdoaWNoIF0gPSBhdHRyc1sgInBhZGRpbmciICsgd2hpY2ggXSA9IHR5cGU7Cgl9CgoJaWYgKCBpbmNsdWRlV2lkdGggKSB7CgkJYXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTsKCX0KCglyZXR1cm4gYXR0cnM7Cn0KCmZ1bmN0aW9uIGNyZWF0ZVR3ZWVuKCB2YWx1ZSwgcHJvcCwgYW5pbWF0aW9uICkgewoJdmFyIHR3ZWVuLAoJCWNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbICIqIiBdICksCgkJaW5kZXggPSAwLAoJCWxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoOwoJZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKCQlpZiAoICggdHdlZW4gPSBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApICkgewoKCQkJLy8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHkKCQkJcmV0dXJuIHR3ZWVuOwoJCX0KCX0KfQoKZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7Cgl2YXIgcHJvcCwgdmFsdWUsIHRvZ2dsZSwgaG9va3MsIG9sZGZpcmUsIHByb3BUd2VlbiwgcmVzdG9yZURpc3BsYXksIGRpc3BsYXksCgkJaXNCb3ggPSAid2lkdGgiIGluIHByb3BzIHx8ICJoZWlnaHQiIGluIHByb3BzLAoJCWFuaW0gPSB0aGlzLAoJCW9yaWcgPSB7fSwKCQlzdHlsZSA9IGVsZW0uc3R5bGUsCgkJaGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSwKCQlkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgImZ4c2hvdyIgKTsKCgkvLyBRdWV1ZS1za2lwcGluZyBhbmltYXRpb25zIGhpamFjayB0aGUgZnggaG9va3MKCWlmICggIW9wdHMucXVldWUgKSB7CgkJaG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sICJmeCIgKTsKCQlpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7CgkJCWhvb2tzLnVucXVldWVkID0gMDsKCQkJb2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7CgkJCWhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHsKCQkJCWlmICggIWhvb2tzLnVucXVldWVkICkgewoJCQkJCW9sZGZpcmUoKTsKCQkJCX0KCQkJfTsKCQl9CgkJaG9va3MudW5xdWV1ZWQrKzsKCgkJYW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkgewoKCQkJLy8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXMKCQkJYW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkgewoJCQkJaG9va3MudW5xdWV1ZWQtLTsKCQkJCWlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgImZ4IiApLmxlbmd0aCApIHsKCQkJCQlob29rcy5lbXB0eS5maXJlKCk7CgkJCQl9CgkJCX0gKTsKCQl9ICk7Cgl9CgoJLy8gRGV0ZWN0IHNob3cvaGlkZSBhbmltYXRpb25zCglmb3IgKCBwcm9wIGluIHByb3BzICkgewoJCXZhbHVlID0gcHJvcHNbIHByb3AgXTsKCQlpZiAoIHJmeHR5cGVzLnRlc3QoIHZhbHVlICkgKSB7CgkJCWRlbGV0ZSBwcm9wc1sgcHJvcCBdOwoJCQl0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09ICJ0b2dnbGUiOwoJCQlpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/ICJoaWRlIiA6ICJzaG93IiApICkgewoKCQkJCS8vIFByZXRlbmQgdG8gYmUgaGlkZGVuIGlmIHRoaXMgaXMgYSAic2hvdyIgYW5kCgkJCQkvLyB0aGVyZSBpcyBzdGlsbCBkYXRhIGZyb20gYSBzdG9wcGVkIHNob3cvaGlkZQoJCQkJaWYgKCB2YWx1ZSA9PT0gInNob3ciICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHsKCQkJCQloaWRkZW4gPSB0cnVlOwoKCQkJCS8vIElnbm9yZSBhbGwgb3RoZXIgbm8tb3Agc2hvdy9oaWRlIGRhdGEKCQkJCX0gZWxzZSB7CgkJCQkJY29udGludWU7CgkJCQl9CgkJCX0KCQkJb3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTsKCQl9Cgl9CgoJLy8gQmFpbCBvdXQgaWYgdGhpcyBpcyBhIG5vLW9wIGxpa2UgLmhpZGUoKS5oaWRlKCkKCXByb3BUd2VlbiA9ICFqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcHMgKTsKCWlmICggIXByb3BUd2VlbiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkgewoJCXJldHVybjsKCX0KCgkvLyBSZXN0cmljdCAib3ZlcmZsb3ciIGFuZCAiZGlzcGxheSIgc3R5bGVzIGR1cmluZyBib3ggYW5pbWF0aW9ucwoJaWYgKCBpc0JveCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgewoKCQkvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1CgkJLy8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdCBpbmZlciB0aGUgc2hvcnRoYW5kCgkJLy8gZnJvbSBpZGVudGljYWxseS12YWx1ZWQgb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgYW5kIEVkZ2UganVzdCBtaXJyb3JzCgkJLy8gdGhlIG92ZXJmbG93WCB2YWx1ZSB0aGVyZS4KCQlvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTsKCgkJLy8gSWRlbnRpZnkgYSBkaXNwbGF5IHR5cGUsIHByZWZlcnJpbmcgb2xkIHNob3cvaGlkZSBkYXRhIG92ZXIgdGhlIENTUyBjYXNjYWRlCgkJcmVzdG9yZURpc3BsYXkgPSBkYXRhU2hvdyAmJiBkYXRhU2hvdy5kaXNwbGF5OwoJCWlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHsKCQkJcmVzdG9yZURpc3BsYXkgPSBkYXRhUHJpdi5nZXQoIGVsZW0sICJkaXNwbGF5IiApOwoJCX0KCQlkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICk7CgkJaWYgKCBkaXNwbGF5ID09PSAibm9uZSIgKSB7CgkJCWlmICggcmVzdG9yZURpc3BsYXkgKSB7CgkJCQlkaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7CgkJCX0gZWxzZSB7CgoJCQkJLy8gR2V0IG5vbmVtcHR5IHZhbHVlKHMpIGJ5IHRlbXBvcmFyaWx5IGZvcmNpbmcgdmlzaWJpbGl0eQoJCQkJc2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7CgkJCQlyZXN0b3JlRGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheSB8fCByZXN0b3JlRGlzcGxheTsKCQkJCWRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKTsKCQkJCXNob3dIaWRlKCBbIGVsZW0gXSApOwoJCQl9CgkJfQoKCQkvLyBBbmltYXRlIGlubGluZSBlbGVtZW50cyBhcyBpbmxpbmUtYmxvY2sKCQlpZiAoIGRpc3BsYXkgPT09ICJpbmxpbmUiIHx8IGRpc3BsYXkgPT09ICJpbmxpbmUtYmxvY2siICYmIHJlc3RvcmVEaXNwbGF5ICE9IG51bGwgKSB7CgkJCWlmICggalF1ZXJ5LmNzcyggZWxlbSwgImZsb2F0IiApID09PSAibm9uZSIgKSB7CgoJCQkJLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHB1cmUgc2hvdy9oaWRlIGFuaW1hdGlvbnMKCQkJCWlmICggIXByb3BUd2VlbiApIHsKCQkJCQlhbmltLmRvbmUoIGZ1bmN0aW9uKCkgewoJCQkJCQlzdHlsZS5kaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7CgkJCQkJfSApOwoJCQkJCWlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHsKCQkJCQkJZGlzcGxheSA9IHN0eWxlLmRpc3BsYXk7CgkJCQkJCXJlc3RvcmVEaXNwbGF5ID0gZGlzcGxheSA9PT0gIm5vbmUiID8gIiIgOiBkaXNwbGF5OwoJCQkJCX0KCQkJCX0KCQkJCXN0eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIjsKCQkJfQoJCX0KCX0KCglpZiAoIG9wdHMub3ZlcmZsb3cgKSB7CgkJc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKCQlhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7CgkJCXN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdOwoJCQlzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07CgkJCXN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTsKCQl9ICk7Cgl9CgoJLy8gSW1wbGVtZW50IHNob3cvaGlkZSBhbmltYXRpb25zCglwcm9wVHdlZW4gPSBmYWxzZTsKCWZvciAoIHByb3AgaW4gb3JpZyApIHsKCgkJLy8gR2VuZXJhbCBzaG93L2hpZGUgc2V0dXAgZm9yIHRoaXMgZWxlbWVudCBhbmltYXRpb24KCQlpZiAoICFwcm9wVHdlZW4gKSB7CgkJCWlmICggZGF0YVNob3cgKSB7CgkJCQlpZiAoICJoaWRkZW4iIGluIGRhdGFTaG93ICkgewoJCQkJCWhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjsKCQkJCX0KCQkJfSBlbHNlIHsKCQkJCWRhdGFTaG93ID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCAiZnhzaG93IiwgeyBkaXNwbGF5OiByZXN0b3JlRGlzcGxheSB9ICk7CgkJCX0KCgkJCS8vIFN0b3JlIGhpZGRlbi92aXNpYmxlIGZvciB0b2dnbGUgc28gYC5zdG9wKCkudG9nZ2xlKClgICJyZXZlcnNlcyIKCQkJaWYgKCB0b2dnbGUgKSB7CgkJCQlkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuOwoJCQl9CgoJCQkvLyBTaG93IGVsZW1lbnRzIGJlZm9yZSBhbmltYXRpbmcgdGhlbQoJCQlpZiAoIGhpZGRlbiApIHsKCQkJCXNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApOwoJCQl9CgoJCQkvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi8KCgkJCWFuaW0uZG9uZSggZnVuY3Rpb24oKSB7CgoJCQkJLyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi8KCgkJCQkvLyBUaGUgZmluYWwgc3RlcCBvZiBhICJoaWRlIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50CgkJCQlpZiAoICFoaWRkZW4gKSB7CgkJCQkJc2hvd0hpZGUoIFsgZWxlbSBdICk7CgkJCQl9CgkJCQlkYXRhUHJpdi5yZW1vdmUoIGVsZW0sICJmeHNob3ciICk7CgkJCQlmb3IgKCBwcm9wIGluIG9yaWcgKSB7CgkJCQkJalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBvcmlnWyBwcm9wIF0gKTsKCQkJCX0KCQkJfSApOwoJCX0KCgkJLy8gUGVyLXByb3BlcnR5IHNldHVwCgkJcHJvcFR3ZWVuID0gY3JlYXRlVHdlZW4oIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwLCBwcm9wLCBhbmltICk7CgkJaWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7CgkJCWRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7CgkJCWlmICggaGlkZGVuICkgewoJCQkJcHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDsKCQkJCXByb3BUd2Vlbi5zdGFydCA9IDA7CgkJCX0KCQl9Cgl9Cn0KCmZ1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkgewoJdmFyIGluZGV4LCBuYW1lLCBlYXNpbmcsIHZhbHVlLCBob29rczsKCgkvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5kIGV4cGFuZCBjc3NIb29rIHBhc3MKCWZvciAoIGluZGV4IGluIHByb3BzICkgewoJCW5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7CgkJZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdOwoJCXZhbHVlID0gcHJvcHNbIGluZGV4IF07CgkJaWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkgewoJCQllYXNpbmcgPSB2YWx1ZVsgMSBdOwoJCQl2YWx1ZSA9IHByb3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTsKCQl9CgoJCWlmICggaW5kZXggIT09IG5hbWUgKSB7CgkJCXByb3BzWyBuYW1lIF0gPSB2YWx1ZTsKCQkJZGVsZXRlIHByb3BzWyBpbmRleCBdOwoJCX0KCgkJaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTsKCQlpZiAoIGhvb2tzICYmICJleHBhbmQiIGluIGhvb2tzICkgewoJCQl2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTsKCQkJZGVsZXRlIHByb3BzWyBuYW1lIF07CgoJCQkvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuCgkJCS8vIFJldXNpbmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgIm5hbWUiCgkJCWZvciAoIGluZGV4IGluIHZhbHVlICkgewoJCQkJaWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkgewoJCQkJCXByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07CgkJCQkJc3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZzsKCQkJCX0KCQkJfQoJCX0gZWxzZSB7CgkJCXNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2luZzsKCQl9Cgl9Cn0KCmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHsKCXZhciByZXN1bHQsCgkJc3RvcHBlZCwKCQlpbmRleCA9IDAsCgkJbGVuZ3RoID0gQW5pbWF0aW9uLnByZWZpbHRlcnMubGVuZ3RoLAoJCWRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHsKCgkJCS8vIERvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxlY3RvcgoJCQlkZWxldGUgdGljay5lbGVtOwoJCX0gKSwKCQl0aWNrID0gZnVuY3Rpb24oKSB7CgkJCWlmICggc3RvcHBlZCApIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQl2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAoJCQkJcmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLAoKCQkJCS8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHkKCQkJCS8vIEFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVzIHRvIHVzZSBgMSAtICggMC41IHx8IDAgKWAgKHRyYWMtMTI0OTcpCgkJCQl0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsCgkJCQlwZXJjZW50ID0gMSAtIHRlbXAsCgkJCQlpbmRleCA9IDAsCgkJCQlsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDsKCgkJCWZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7CgkJCQlhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApOwoJCQl9CgoJCQlkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0gKTsKCgkJCS8vIElmIHRoZXJlJ3MgbW9yZSB0byBkbywgeWllbGQKCQkJaWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7CgkJCQlyZXR1cm4gcmVtYWluaW5nOwoJCQl9CgoJCQkvLyBJZiB0aGlzIHdhcyBhbiBlbXB0eSBhbmltYXRpb24sIHN5bnRoZXNpemUgYSBmaW5hbCBwcm9ncmVzcyBub3RpZmljYXRpb24KCQkJaWYgKCAhbGVuZ3RoICkgewoJCQkJZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApOwoJCQl9CgoJCQkvLyBSZXNvbHZlIHRoZSBhbmltYXRpb24gYW5kIHJlcG9ydCBpdHMgY29uY2x1c2lvbgoJCQlkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApOwoJCQlyZXR1cm4gZmFsc2U7CgkJfSwKCQlhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKCB7CgkJCWVsZW06IGVsZW0sCgkJCXByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcGVydGllcyApLAoJCQlvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7CgkJCQlzcGVjaWFsRWFzaW5nOiB7fSwKCQkJCWVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdAoJCQl9LCBvcHRpb25zICksCgkJCW9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcywKCQkJb3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLAoJCQlzdGFydFRpbWU6IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksCgkJCWR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLAoJCQl0d2VlbnM6IFtdLAoJCQljcmVhdGVUd2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCApIHsKCQkJCXZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCwKCQkJCQlhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nWyBwcm9wIF0gfHwgYW5pbWF0aW9uLm9wdHMuZWFzaW5nICk7CgkJCQlhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7CgkJCQlyZXR1cm4gdHdlZW47CgkJCX0sCgkJCXN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkgewoJCQkJdmFyIGluZGV4ID0gMCwKCgkJCQkJLy8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zCgkJCQkJLy8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0CgkJCQkJbGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDogMDsKCQkJCWlmICggc3RvcHBlZCApIHsKCQkJCQlyZXR1cm4gdGhpczsKCQkJCX0KCQkJCXN0b3BwZWQgPSB0cnVlOwoJCQkJZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKCQkJCQlhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApOwoJCQkJfQoKCQkJCS8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0CgkJCQlpZiAoIGdvdG9FbmQgKSB7CgkJCQkJZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApOwoJCQkJCWRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7CgkJCQl9IGVsc2UgewoJCQkJCWRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTsKCQkJCX0KCQkJCXJldHVybiB0aGlzOwoJCQl9CgkJfSApLAoJCXByb3BzID0gYW5pbWF0aW9uLnByb3BzOwoKCXByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7CgoJZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKCQlyZXN1bHQgPSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApOwoJCWlmICggcmVzdWx0ICkgewoJCQlpZiAoIGlzRnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7CgkJCQlqUXVlcnkuX3F1ZXVlSG9va3MoIGFuaW1hdGlvbi5lbGVtLCBhbmltYXRpb24ub3B0cy5xdWV1ZSApLnN0b3AgPQoJCQkJCXJlc3VsdC5zdG9wLmJpbmQoIHJlc3VsdCApOwoJCQl9CgkJCXJldHVybiByZXN1bHQ7CgkJfQoJfQoKCWpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7CgoJaWYgKCBpc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkgewoJCWFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApOwoJfQoKCS8vIEF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zCglhbmltYXRpb24KCQkucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzICkKCQkuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKQoJCS5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsICkKCQkuYWx3YXlzKCBhbmltYXRpb24ub3B0cy5hbHdheXMgKTsKCglqUXVlcnkuZngudGltZXIoCgkJalF1ZXJ5LmV4dGVuZCggdGljaywgewoJCQllbGVtOiBlbGVtLAoJCQlhbmltOiBhbmltYXRpb24sCgkJCXF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZQoJCX0gKQoJKTsKCglyZXR1cm4gYW5pbWF0aW9uOwp9CgpqUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7CgoJdHdlZW5lcnM6IHsKCQkiKiI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkgewoJCQl2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApOwoJCQlhZGp1c3RDU1MoIHR3ZWVuLmVsZW0sIHByb3AsIHJjc3NOdW0uZXhlYyggdmFsdWUgKSwgdHdlZW4gKTsKCQkJcmV0dXJuIHR3ZWVuOwoJCX0gXQoJfSwKCgl0d2VlbmVyOiBmdW5jdGlvbiggcHJvcHMsIGNhbGxiYWNrICkgewoJCWlmICggaXNGdW5jdGlvbiggcHJvcHMgKSApIHsKCQkJY2FsbGJhY2sgPSBwcm9wczsKCQkJcHJvcHMgPSBbICIqIiBdOwoJCX0gZWxzZSB7CgkJCXByb3BzID0gcHJvcHMubWF0Y2goIHJub3RodG1sd2hpdGUgKTsKCQl9CgoJCXZhciBwcm9wLAoJCQlpbmRleCA9IDAsCgkJCWxlbmd0aCA9IHByb3BzLmxlbmd0aDsKCgkJZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKCQkJcHJvcCA9IHByb3BzWyBpbmRleCBdOwoJCQlBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdOwoJCQlBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApOwoJCX0KCX0sCgoJcHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sCgoJcHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7CgkJaWYgKCBwcmVwZW5kICkgewoJCQlBbmltYXRpb24ucHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApOwoJCX0gZWxzZSB7CgkJCUFuaW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7CgkJfQoJfQp9ICk7CgpqUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7Cgl2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSAib2JqZWN0IiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDogewoJCWNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8CgkJCWlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsCgkJZHVyYXRpb246IHNwZWVkLAoJCWVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nCgl9OwoKCS8vIEdvIHRvIHRoZSBlbmQgc3RhdGUgaWYgZnggYXJlIG9mZgoJaWYgKCBqUXVlcnkuZngub2ZmICkgewoJCW9wdC5kdXJhdGlvbiA9IDA7CgoJfSBlbHNlIHsKCQlpZiAoIHR5cGVvZiBvcHQuZHVyYXRpb24gIT09ICJudW1iZXIiICkgewoJCQlpZiAoIG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRzICkgewoJCQkJb3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF07CgoJCQl9IGVsc2UgewoJCQkJb3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDsKCQkJfQoJCX0KCX0KCgkvLyBOb3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiAiZngiCglpZiAoIG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHsKCQlvcHQucXVldWUgPSAiZngiOwoJfQoKCS8vIFF1ZXVlaW5nCglvcHQub2xkID0gb3B0LmNvbXBsZXRlOwoKCW9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewoJCWlmICggaXNGdW5jdGlvbiggb3B0Lm9sZCApICkgewoJCQlvcHQub2xkLmNhbGwoIHRoaXMgKTsKCQl9CgoJCWlmICggb3B0LnF1ZXVlICkgewoJCQlqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7CgkJfQoJfTsKCglyZXR1cm4gb3B0Owp9OwoKalF1ZXJ5LmZuLmV4dGVuZCggewoJZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkgewoKCQkvLyBTaG93IGFueSBoaWRkZW4gZWxlbWVudHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5IHRvIDAKCQlyZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuV2l0aGluVHJlZSApLmNzcyggIm9wYWNpdHkiLCAwICkuc2hvdygpCgoJCQkvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQKCQkJLmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKCX0sCglhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CgkJdmFyIGVtcHR5ID0galF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSwKCQkJb3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLAoJCQlkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkgewoKCQkJCS8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0CgkJCQl2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7CgoJCQkJLy8gRW1wdHkgYW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5CgkJCQlpZiAoIGVtcHR5IHx8IGRhdGFQcml2LmdldCggdGhpcywgImZpbmlzaCIgKSApIHsKCQkJCQlhbmltLnN0b3AoIHRydWUgKTsKCQkJCX0KCQkJfTsKCgkJZG9BbmltYXRpb24uZmluaXNoID0gZG9BbmltYXRpb247CgoJCXJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID8KCQkJdGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDoKCQkJdGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApOwoJfSwKCXN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkgewoJCXZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7CgkJCXZhciBzdG9wID0gaG9va3Muc3RvcDsKCQkJZGVsZXRlIGhvb2tzLnN0b3A7CgkJCXN0b3AoIGdvdG9FbmQgKTsKCQl9OwoKCQlpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKCQkJZ290b0VuZCA9IGNsZWFyUXVldWU7CgkJCWNsZWFyUXVldWUgPSB0eXBlOwoJCQl0eXBlID0gdW5kZWZpbmVkOwoJCX0KCQlpZiAoIGNsZWFyUXVldWUgKSB7CgkJCXRoaXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKCQl9CgoJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgewoJCQl2YXIgZGVxdWV1ZSA9IHRydWUsCgkJCQlpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgInF1ZXVlSG9va3MiLAoJCQkJdGltZXJzID0galF1ZXJ5LnRpbWVycywKCQkJCWRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTsKCgkJCWlmICggaW5kZXggKSB7CgkJCQlpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICkgewoJCQkJCXN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJZm9yICggaW5kZXggaW4gZGF0YSApIHsKCQkJCQlpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHsKCQkJCQkJc3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7CgkJCQkJfQoJCQkJfQoJCQl9CgoJCQlmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkgewoJCQkJaWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJgoJCQkJCSggdHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApICkgewoKCQkJCQl0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7CgkJCQkJZGVxdWV1ZSA9IGZhbHNlOwoJCQkJCXRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7CgkJCQl9CgkJCX0KCgkJCS8vIFN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuCgkJCS8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2gKCQkJLy8gd2lsbCBkZXF1ZXVlIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kLgoJCQlpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7CgkJCQlqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOwoJCQl9CgkJfSApOwoJfSwKCWZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7CgkJaWYgKCB0eXBlICE9PSBmYWxzZSApIHsKCQkJdHlwZSA9IHR5cGUgfHwgImZ4IjsKCQl9CgkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CgkJCXZhciBpbmRleCwKCQkJCWRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSwKCQkJCXF1ZXVlID0gZGF0YVsgdHlwZSArICJxdWV1ZSIgXSwKCQkJCWhvb2tzID0gZGF0YVsgdHlwZSArICJxdWV1ZUhvb2tzIiBdLAoJCQkJdGltZXJzID0galF1ZXJ5LnRpbWVycywKCQkJCWxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDsKCgkJCS8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGEKCQkJZGF0YS5maW5pc2ggPSB0cnVlOwoKCQkJLy8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0CgkJCWpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTsKCgkJCWlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHsKCQkJCWhvb2tzLnN0b3AuY2FsbCggdGhpcywgdHJ1ZSApOwoJCQl9CgoJCQkvLyBMb29rIGZvciBhbnkgYWN0aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbQoJCQlmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkgewoJCQkJaWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7CgkJCQkJdGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggdHJ1ZSApOwoJCQkJCXRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7CgkJCQl9CgkJCX0KCgkJCS8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtCgkJCWZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7CgkJCQlpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHsKCQkJCQlxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApOwoJCQkJfQoJCQl9CgoJCQkvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZwoJCQlkZWxldGUgZGF0YS5maW5pc2g7CgkJfSApOwoJfQp9ICk7CgpqUXVlcnkuZWFjaCggWyAidG9nZ2xlIiwgInNob3ciLCAiaGlkZSIgXSwgZnVuY3Rpb24oIF9pLCBuYW1lICkgewoJdmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07CglqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKCQlyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09ICJib29sZWFuIiA/CgkJCWNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6CgkJCXRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKCX07Cn0gKTsKCi8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnMKalF1ZXJ5LmVhY2goIHsKCXNsaWRlRG93bjogZ2VuRngoICJzaG93IiApLAoJc2xpZGVVcDogZ2VuRngoICJoaWRlIiApLAoJc2xpZGVUb2dnbGU6IGdlbkZ4KCAidG9nZ2xlIiApLAoJZmFkZUluOiB7IG9wYWNpdHk6ICJzaG93IiB9LAoJZmFkZU91dDogeyBvcGFjaXR5OiAiaGlkZSIgfSwKCWZhZGVUb2dnbGU6IHsgb3BhY2l0eTogInRvZ2dsZSIgfQp9LCBmdW5jdGlvbiggbmFtZSwgcHJvcHMgKSB7CglqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKCQlyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKCX07Cn0gKTsKCmpRdWVyeS50aW1lcnMgPSBbXTsKalF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHsKCXZhciB0aW1lciwKCQlpID0gMCwKCQl0aW1lcnMgPSBqUXVlcnkudGltZXJzOwoKCWZ4Tm93ID0gRGF0ZS5ub3coKTsKCglmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7CgkJdGltZXIgPSB0aW1lcnNbIGkgXTsKCgkJLy8gUnVuIHRoZSB0aW1lciBhbmQgc2FmZWx5IHJlbW92ZSBpdCB3aGVuIGRvbmUgKGFsbG93aW5nIGZvciBleHRlcm5hbCByZW1vdmFsKQoJCWlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkgewoJCQl0aW1lcnMuc3BsaWNlKCBpLS0sIDEgKTsKCQl9Cgl9CgoJaWYgKCAhdGltZXJzLmxlbmd0aCApIHsKCQlqUXVlcnkuZnguc3RvcCgpOwoJfQoJZnhOb3cgPSB1bmRlZmluZWQ7Cn07CgpqUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7CglqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7CglqUXVlcnkuZnguc3RhcnQoKTsKfTsKCmpRdWVyeS5meC5pbnRlcnZhbCA9IDEzOwpqUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHsKCWlmICggaW5Qcm9ncmVzcyApIHsKCQlyZXR1cm47Cgl9CgoJaW5Qcm9ncmVzcyA9IHRydWU7CglzY2hlZHVsZSgpOwp9OwoKalF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHsKCWluUHJvZ3Jlc3MgPSBudWxsOwp9OwoKalF1ZXJ5LmZ4LnNwZWVkcyA9IHsKCXNsb3c6IDYwMCwKCWZhc3Q6IDIwMCwKCgkvLyBEZWZhdWx0IHNwZWVkCglfZGVmYXVsdDogNDAwCn07CgoKLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLgpqUXVlcnkuZm4uZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHsKCXRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7Cgl0eXBlID0gdHlwZSB8fCAiZngiOwoKCXJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBmdW5jdGlvbiggbmV4dCwgaG9va3MgKSB7CgkJdmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCggbmV4dCwgdGltZSApOwoJCWhvb2tzLnN0b3AgPSBmdW5jdGlvbigpIHsKCQkJd2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApOwoJCX07Cgl9ICk7Cn07CgoKKCBmdW5jdGlvbigpIHsKCXZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJpbnB1dCIgKSwKCQlzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAic2VsZWN0IiApLAoJCW9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggIm9wdGlvbiIgKSApOwoKCWlucHV0LnR5cGUgPSAiY2hlY2tib3giOwoKCS8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjMgb25seQoJLy8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgIm9uIgoJc3VwcG9ydC5jaGVja09uID0gaW5wdXQudmFsdWUgIT09ICIiOwoKCS8vIFN1cHBvcnQ6IElFIDw9MTEgb25seQoJLy8gTXVzdCBhY2Nlc3Mgc2VsZWN0ZWRJbmRleCB0byBtYWtlIGRlZmF1bHQgb3B0aW9ucyBzZWxlY3QKCXN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7CgoJLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5CgkvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpbwoJaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiaW5wdXQiICk7CglpbnB1dC52YWx1ZSA9ICJ0IjsKCWlucHV0LnR5cGUgPSAicmFkaW8iOwoJc3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09ICJ0IjsKfSApKCk7CgoKdmFyIGJvb2xIb29rLAoJYXR0ckhhbmRsZSA9IGpRdWVyeS5leHByLmF0dHJIYW5kbGU7CgpqUXVlcnkuZm4uZXh0ZW5kKCB7CglhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CgkJcmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOwoJfSwKCglyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHsKCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKCQkJalF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5hbWUgKTsKCQl9ICk7Cgl9Cn0gKTsKCmpRdWVyeS5leHRlbmQoIHsKCWF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKCQl2YXIgcmV0LCBob29rcywKCQkJblR5cGUgPSBlbGVtLm5vZGVUeXBlOwoKCQkvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCgkJaWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHsKCQkJcmV0dXJuOwoJCX0KCgkJLy8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQKCQlpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gInVuZGVmaW5lZCIgKSB7CgkJCXJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTsKCQl9CgoJCS8vIEF0dHJpYnV0ZSBob29rcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgbG93ZXJjYXNlIHZlcnNpb24KCQkvLyBHcmFiIG5lY2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZpbmVkCgkJaWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7CgkJCWhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwKCQkJCSggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6IHVuZGVmaW5lZCApOwoJCX0KCgkJaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgewoJCQlpZiAoIHZhbHVlID09PSBudWxsICkgewoJCQkJalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKCQkJCXJldHVybjsKCQkJfQoKCQkJaWYgKCBob29rcyAmJiAic2V0IiBpbiBob29rcyAmJgoJCQkJKCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkgewoJCQkJcmV0dXJuIHJldDsKCQkJfQoKCQkJZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgIiIgKTsKCQkJcmV0dXJuIHZhbHVlOwoJCX0KCgkJaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7CgkJCXJldHVybiByZXQ7CgkJfQoKCQlyZXQgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7CgoJCS8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkCgkJcmV0dXJuIHJldCA9PSBudWxsID8gdW5kZWZpbmVkIDogcmV0OwoJfSwKCglhdHRySG9va3M6IHsKCQl0eXBlOiB7CgkJCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewoJCQkJaWYgKCAhc3VwcG9ydC5yYWRpb1ZhbHVlICYmIHZhbHVlID09PSAicmFkaW8iICYmCgkJCQkJbm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSApIHsKCQkJCQl2YXIgdmFsID0gZWxlbS52YWx1ZTsKCQkJCQllbGVtLnNldEF0dHJpYnV0ZSggInR5cGUiLCB2YWx1ZSApOwoJCQkJCWlmICggdmFsICkgewoJCQkJCQllbGVtLnZhbHVlID0gdmFsOwoJCQkJCX0KCQkJCQlyZXR1cm4gdmFsdWU7CgkJCQl9CgkJCX0KCQl9Cgl9LAoKCXJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKCQl2YXIgbmFtZSwKCQkJaSA9IDAsCgoJCQkvLyBBdHRyaWJ1dGUgbmFtZXMgY2FuIGNvbnRhaW4gbm9uLUhUTUwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzCgkJCS8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2F0dHJpYnV0ZXMtMgoJCQlhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApOwoKCQlpZiAoIGF0dHJOYW1lcyAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgewoJCQl3aGlsZSAoICggbmFtZSA9IGF0dHJOYW1lc1sgaSsrIF0gKSApIHsKCQkJCWVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7CgkJCX0KCQl9Cgl9Cn0gKTsKCi8vIEhvb2tzIGZvciBib29sZWFuIGF0dHJpYnV0ZXMKYm9vbEhvb2sgPSB7CglzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKCQlpZiAoIHZhbHVlID09PSBmYWxzZSApIHsKCgkJCS8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2UKCQkJalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKCQl9IGVsc2UgewoJCQllbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZSApOwoJCX0KCQlyZXR1cm4gbmFtZTsKCX0KfTsKCmpRdWVyeS5lYWNoKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCggL1x3Ky9nICksIGZ1bmN0aW9uKCBfaSwgbmFtZSApIHsKCXZhciBnZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1lIF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjsKCglhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7CgkJdmFyIHJldCwgaGFuZGxlLAoJCQlsb3dlcmNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOwoKCQlpZiAoICFpc1hNTCApIHsKCgkJCS8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3AgYnkgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSBnZXR0ZXIKCQkJaGFuZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdOwoJCQlhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSByZXQ7CgkJCXJldCA9IGdldHRlciggZWxlbSwgbmFtZSwgaXNYTUwgKSAhPSBudWxsID8KCQkJCWxvd2VyY2FzZU5hbWUgOgoJCQkJbnVsbDsKCQkJYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gaGFuZGxlOwoJCX0KCQlyZXR1cm4gcmV0OwoJfTsKfSApOwoKCgoKdmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLAoJcmNsaWNrYWJsZSA9IC9eKD86YXxhcmVhKSQvaTsKCmpRdWVyeS5mbi5leHRlbmQoIHsKCXByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKCQlyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7Cgl9LAoKCXJlbW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkgewoJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgewoJCQlkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07CgkJfSApOwoJfQp9ICk7CgpqUXVlcnkuZXh0ZW5kKCB7Cglwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7CgkJdmFyIHJldCwgaG9va3MsCgkJCW5UeXBlID0gZWxlbS5ub2RlVHlwZTsKCgkJLy8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2RlcwoJCWlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7CgkJCXJldHVybjsKCQl9CgoJCWlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkgewoKCQkJLy8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rcwoJCQluYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOwoJCQlob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTsKCQl9CgoJCWlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKCQkJaWYgKCBob29rcyAmJiAic2V0IiBpbiBob29rcyAmJgoJCQkJKCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkgewoJCQkJcmV0dXJuIHJldDsKCQkJfQoKCQkJcmV0dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTsKCQl9CgoJCWlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkgewoJCQlyZXR1cm4gcmV0OwoJCX0KCgkJcmV0dXJuIGVsZW1bIG5hbWUgXTsKCX0sCgoJcHJvcEhvb2tzOiB7CgkJdGFiSW5kZXg6IHsKCQkJZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKCgkJCQkvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5CgkJCQkvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGUKCQkJCS8vIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldAoJCQkJLy8gVXNlIHByb3BlciBhdHRyaWJ1dGUgcmV0cmlldmFsICh0cmFjLTEyMDcyKQoJCQkJdmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgInRhYmluZGV4IiApOwoKCQkJCWlmICggdGFiaW5kZXggKSB7CgkJCQkJcmV0dXJuIHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKTsKCQkJCX0KCgkJCQlpZiAoCgkJCQkJcmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHwKCQkJCQlyY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJgoJCQkJCWVsZW0uaHJlZgoJCQkJKSB7CgkJCQkJcmV0dXJuIDA7CgkJCQl9CgoJCQkJcmV0dXJuIC0xOwoJCQl9CgkJfQoJfSwKCglwcm9wRml4OiB7CgkJImZvciI6ICJodG1sRm9yIiwKCQkiY2xhc3MiOiAiY2xhc3NOYW1lIgoJfQp9ICk7CgovLyBTdXBwb3J0OiBJRSA8PTExIG9ubHkKLy8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5Ci8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWQKLy8gb24gdGhlIG9wdGlvbgovLyBUaGUgZ2V0dGVyIGVuc3VyZXMgYSBkZWZhdWx0IG9wdGlvbiBpcyBzZWxlY3RlZAovLyB3aGVuIGluIGFuIG9wdGdyb3VwCi8vIGVzbGludCBydWxlICJuby11bnVzZWQtZXhwcmVzc2lvbnMiIGlzIGRpc2FibGVkIGZvciB0aGlzIGNvZGUKLy8gc2luY2UgaXQgY29uc2lkZXJzIHN1Y2ggYWNjZXNzaW9ucyBub29wCmlmICggIXN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7CglqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0gewoJCWdldDogZnVuY3Rpb24oIGVsZW0gKSB7CgoJCQkvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiAib2ZmIiAqLwoKCQkJdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKCQkJaWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7CgkJCQlwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OwoJCQl9CgkJCXJldHVybiBudWxsOwoJCX0sCgkJc2V0OiBmdW5jdGlvbiggZWxlbSApIHsKCgkJCS8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6ICJvZmYiICovCgoJCQl2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOwoJCQlpZiAoIHBhcmVudCApIHsKCQkJCXBhcmVudC5zZWxlY3RlZEluZGV4OwoKCQkJCWlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7CgkJCQkJcGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKCQkJCX0KCQkJfQoJCX0KCX07Cn0KCmpRdWVyeS5lYWNoKCBbCgkidGFiSW5kZXgiLAoJInJlYWRPbmx5IiwKCSJtYXhMZW5ndGgiLAoJImNlbGxTcGFjaW5nIiwKCSJjZWxsUGFkZGluZyIsCgkicm93U3BhbiIsCgkiY29sU3BhbiIsCgkidXNlTWFwIiwKCSJmcmFtZUJvcmRlciIsCgkiY29udGVudEVkaXRhYmxlIgpdLCBmdW5jdGlvbigpIHsKCWpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7Cn0gKTsKCgoKCgkvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gSFRNTCBzcGVjCgkvLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLWFzY2lpLXdoaXRlc3BhY2UKCWZ1bmN0aW9uIHN0cmlwQW5kQ29sbGFwc2UoIHZhbHVlICkgewoJCXZhciB0b2tlbnMgPSB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdOwoJCXJldHVybiB0b2tlbnMuam9pbiggIiAiICk7Cgl9CgoKZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7CglyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoICJjbGFzcyIgKSB8fCAiIjsKfQoKZnVuY3Rpb24gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICkgewoJaWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkgewoJCXJldHVybiB2YWx1ZTsKCX0KCWlmICggdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiApIHsKCQlyZXR1cm4gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTsKCX0KCXJldHVybiBbXTsKfQoKalF1ZXJ5LmZuLmV4dGVuZCggewoJYWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKCQl2YXIgY2xhc3NOYW1lcywgY3VyLCBjdXJWYWx1ZSwgY2xhc3NOYW1lLCBpLCBmaW5hbFZhbHVlOwoKCQlpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CgkJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkgewoJCQkJalF1ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApOwoJCQl9ICk7CgkJfQoKCQljbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7CgoJCWlmICggY2xhc3NOYW1lcy5sZW5ndGggKSB7CgkJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgewoJCQkJY3VyVmFsdWUgPSBnZXRDbGFzcyggdGhpcyApOwoJCQkJY3VyID0gdGhpcy5ub2RlVHlwZSA9PT0gMSAmJiAoICIgIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyAiICIgKTsKCgkJCQlpZiAoIGN1ciApIHsKCQkJCQlmb3IgKCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKysgKSB7CgkJCQkJCWNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkgXTsKCQkJCQkJaWYgKCBjdXIuaW5kZXhPZiggIiAiICsgY2xhc3NOYW1lICsgIiAiICkgPCAwICkgewoJCQkJCQkJY3VyICs9IGNsYXNzTmFtZSArICIgIjsKCQkJCQkJfQoJCQkJCX0KCgkJCQkJLy8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy4KCQkJCQlmaW5hbFZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZSggY3VyICk7CgkJCQkJaWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHsKCQkJCQkJdGhpcy5zZXRBdHRyaWJ1dGUoICJjbGFzcyIsIGZpbmFsVmFsdWUgKTsKCQkJCQl9CgkJCQl9CgkJCX0gKTsKCQl9CgoJCXJldHVybiB0aGlzOwoJfSwKCglyZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkgewoJCXZhciBjbGFzc05hbWVzLCBjdXIsIGN1clZhbHVlLCBjbGFzc05hbWUsIGksIGZpbmFsVmFsdWU7CgoJCWlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKCQkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7CgkJCQlqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7CgkJCX0gKTsKCQl9CgoJCWlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7CgkJCXJldHVybiB0aGlzLmF0dHIoICJjbGFzcyIsICIiICk7CgkJfQoKCQljbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7CgoJCWlmICggY2xhc3NOYW1lcy5sZW5ndGggKSB7CgkJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgewoJCQkJY3VyVmFsdWUgPSBnZXRDbGFzcyggdGhpcyApOwoKCQkJCS8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpCgkJCQljdXIgPSB0aGlzLm5vZGVUeXBlID09PSAxICYmICggIiAiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArICIgIiApOwoKCQkJCWlmICggY3VyICkgewoJCQkJCWZvciAoIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKyApIHsKCQkJCQkJY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSBdOwoKCQkJCQkJLy8gUmVtb3ZlICphbGwqIGluc3RhbmNlcwoJCQkJCQl3aGlsZSAoIGN1ci5pbmRleE9mKCAiICIgKyBjbGFzc05hbWUgKyAiICIgKSA+IC0xICkgewoJCQkJCQkJY3VyID0gY3VyLnJlcGxhY2UoICIgIiArIGNsYXNzTmFtZSArICIgIiwgIiAiICk7CgkJCQkJCX0KCQkJCQl9CgoJCQkJCS8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuCgkJCQkJZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApOwoJCQkJCWlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7CgkJCQkJCXRoaXMuc2V0QXR0cmlidXRlKCAiY2xhc3MiLCBmaW5hbFZhbHVlICk7CgkJCQkJfQoJCQkJfQoJCQl9ICk7CgkJfQoKCQlyZXR1cm4gdGhpczsKCX0sCgoJdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7CgkJdmFyIGNsYXNzTmFtZXMsIGNsYXNzTmFtZSwgaSwgc2VsZiwKCQkJdHlwZSA9IHR5cGVvZiB2YWx1ZSwKCQkJaXNWYWxpZFZhbHVlID0gdHlwZSA9PT0gInN0cmluZyIgfHwgQXJyYXkuaXNBcnJheSggdmFsdWUgKTsKCgkJaWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkgewoJCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHsKCQkJCWpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKAoJCQkJCXZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICksCgkJCQkJc3RhdGVWYWwKCQkJCSk7CgkJCX0gKTsKCQl9CgoJCWlmICggdHlwZW9mIHN0YXRlVmFsID09PSAiYm9vbGVhbiIgJiYgaXNWYWxpZFZhbHVlICkgewoJCQlyZXR1cm4gc3RhdGVWYWwgPyB0aGlzLmFkZENsYXNzKCB2YWx1ZSApIDogdGhpcy5yZW1vdmVDbGFzcyggdmFsdWUgKTsKCQl9CgoJCWNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTsKCgkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CgkJCWlmICggaXNWYWxpZFZhbHVlICkgewoKCQkJCS8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzCgkJCQlzZWxmID0galF1ZXJ5KCB0aGlzICk7CgoJCQkJZm9yICggaSA9IDA7IGkgPCBjbGFzc05hbWVzLmxlbmd0aDsgaSsrICkgewoJCQkJCWNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkgXTsKCgkJCQkJLy8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0CgkJCQkJaWYgKCBzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKSApIHsKCQkJCQkJc2VsZi5yZW1vdmVDbGFzcyggY2xhc3NOYW1lICk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJc2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7CgkJCQkJfQoJCQkJfQoKCQkJLy8gVG9nZ2xlIHdob2xlIGNsYXNzIG5hbWUKCQkJfSBlbHNlIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSAiYm9vbGVhbiIgKSB7CgkJCQljbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApOwoJCQkJaWYgKCBjbGFzc05hbWUgKSB7CgoJCQkJCS8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXQKCQkJCQlkYXRhUHJpdi5zZXQoIHRoaXMsICJfX2NsYXNzTmFtZV9fIiwgY2xhc3NOYW1lICk7CgkJCQl9CgoJCQkJLy8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgY2xhc3MgbmFtZSBvciBpZiB3ZSdyZSBwYXNzZWQgYGZhbHNlYCwKCQkJCS8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuCgkJCQkvLyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBzYXZlZCAoaWYgYW55dGhpbmcpLAoJCQkJLy8gZmFsbGluZyBiYWNrIHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm90aGluZyB3YXMgc3RvcmVkLgoJCQkJaWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHsKCQkJCQl0aGlzLnNldEF0dHJpYnV0ZSggImNsYXNzIiwKCQkJCQkJY2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/CgkJCQkJCQkiIiA6CgkJCQkJCQlkYXRhUHJpdi5nZXQoIHRoaXMsICJfX2NsYXNzTmFtZV9fIiApIHx8ICIiCgkJCQkJKTsKCQkJCX0KCQkJfQoJCX0gKTsKCX0sCgoJaGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKCQl2YXIgY2xhc3NOYW1lLCBlbGVtLAoJCQlpID0gMDsKCgkJY2xhc3NOYW1lID0gIiAiICsgc2VsZWN0b3IgKyAiICI7CgkJd2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkgewoJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYKCQkJCSggIiAiICsgc3RyaXBBbmRDb2xsYXBzZSggZ2V0Q2xhc3MoIGVsZW0gKSApICsgIiAiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgkJfQoKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0gKTsKCgoKCnZhciBycmV0dXJuID0gL1xyL2c7CgpqUXVlcnkuZm4uZXh0ZW5kKCB7Cgl2YWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKCQl2YXIgaG9va3MsIHJldCwgdmFsdWVJc0Z1bmN0aW9uLAoJCQllbGVtID0gdGhpc1sgMCBdOwoKCQlpZiAoICFhcmd1bWVudHMubGVuZ3RoICkgewoJCQlpZiAoIGVsZW0gKSB7CgkJCQlob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHwKCQkJCQlqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOwoKCQkJCWlmICggaG9va3MgJiYKCQkJCQkiZ2V0IiBpbiBob29rcyAmJgoJCQkJCSggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCAidmFsdWUiICkgKSAhPT0gdW5kZWZpbmVkCgkJCQkpIHsKCQkJCQlyZXR1cm4gcmV0OwoJCQkJfQoKCQkJCXJldCA9IGVsZW0udmFsdWU7CgoJCQkJLy8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlcwoJCQkJaWYgKCB0eXBlb2YgcmV0ID09PSAic3RyaW5nIiApIHsKCQkJCQlyZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sICIiICk7CgkJCQl9CgoJCQkJLy8gSGFuZGxlIGNhc2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyCgkJCQlyZXR1cm4gcmV0ID09IG51bGwgPyAiIiA6IHJldDsKCQkJfQoKCQkJcmV0dXJuOwoJCX0KCgkJdmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTsKCgkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7CgkJCXZhciB2YWw7CgoJCQlpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7CgkJCQlyZXR1cm47CgkJCX0KCgkJCWlmICggdmFsdWVJc0Z1bmN0aW9uICkgewoJCQkJdmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTsKCQkJfSBlbHNlIHsKCQkJCXZhbCA9IHZhbHVlOwoJCQl9CgoJCQkvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyAiIjsgY29udmVydCBudW1iZXJzIHRvIHN0cmluZwoJCQlpZiAoIHZhbCA9PSBudWxsICkgewoJCQkJdmFsID0gIiI7CgoJCQl9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSAibnVtYmVyIiApIHsKCQkJCXZhbCArPSAiIjsKCgkJCX0gZWxzZSBpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkgewoJCQkJdmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7CgkJCQkJcmV0dXJuIHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICsgIiI7CgkJCQl9ICk7CgkJCX0KCgkJCWhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOwoKCQkJLy8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmcKCQkJaWYgKCAhaG9va3MgfHwgISggInNldCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgInZhbHVlIiApID09PSB1bmRlZmluZWQgKSB7CgkJCQl0aGlzLnZhbHVlID0gdmFsOwoJCQl9CgkJfSApOwoJfQp9ICk7CgpqUXVlcnkuZXh0ZW5kKCB7Cgl2YWxIb29rczogewoJCW9wdGlvbjogewoJCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewoKCQkJCXZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCAidmFsdWUiICk7CgkJCQlyZXR1cm4gdmFsICE9IG51bGwgPwoJCQkJCXZhbCA6CgoJCQkJCS8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5CgkJCQkJLy8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKHRyYWMtMTQ2ODYsIHRyYWMtMTQ4NTgpCgkJCQkJLy8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UKCQkJCQkvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZQoJCQkJCXN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTsKCQkJfQoJCX0sCgkJc2VsZWN0OiB7CgkJCWdldDogZnVuY3Rpb24oIGVsZW0gKSB7CgkJCQl2YXIgdmFsdWUsIG9wdGlvbiwgaSwKCQkJCQlvcHRpb25zID0gZWxlbS5vcHRpb25zLAoJCQkJCWluZGV4ID0gZWxlbS5zZWxlY3RlZEluZGV4LAoJCQkJCW9uZSA9IGVsZW0udHlwZSA9PT0gInNlbGVjdC1vbmUiLAoJCQkJCXZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSwKCQkJCQltYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDsKCgkJCQlpZiAoIGluZGV4IDwgMCApIHsKCQkJCQlpID0gbWF4OwoKCQkJCX0gZWxzZSB7CgkJCQkJaSA9IG9uZSA/IGluZGV4IDogMDsKCQkJCX0KCgkJCQkvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zCgkJCQlmb3IgKCA7IGkgPCBtYXg7IGkrKyApIHsKCQkJCQlvcHRpb24gPSBvcHRpb25zWyBpIF07CgoJCQkJCS8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5CgkJCQkJLy8gSUU4LTkgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAodHJhYy0yNTUxKQoJCQkJCWlmICggKCBvcHRpb24uc2VsZWN0ZWQgfHwgaSA9PT0gaW5kZXggKSAmJgoKCQkJCQkJCS8vIERvbid0IHJldHVybiBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkIG9yIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXAKCQkJCQkJCSFvcHRpb24uZGlzYWJsZWQgJiYKCQkJCQkJCSggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8CgkJCQkJCQkJIW5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgIm9wdGdyb3VwIiApICkgKSB7CgoJCQkJCQkvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uCgkJCQkJCXZhbHVlID0galF1ZXJ5KCBvcHRpb24gKS52YWwoKTsKCgkJCQkJCS8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzCgkJCQkJCWlmICggb25lICkgewoJCQkJCQkJcmV0dXJuIHZhbHVlOwoJCQkJCQl9CgoJCQkJCQkvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheQoJCQkJCQl2YWx1ZXMucHVzaCggdmFsdWUgKTsKCQkJCQl9CgkJCQl9CgoJCQkJcmV0dXJuIHZhbHVlczsKCQkJfSwKCgkJCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewoJCQkJdmFyIG9wdGlvblNldCwgb3B0aW9uLAoJCQkJCW9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCgkJCQkJdmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSwKCQkJCQlpID0gb3B0aW9ucy5sZW5ndGg7CgoJCQkJd2hpbGUgKCBpLS0gKSB7CgkJCQkJb3B0aW9uID0gb3B0aW9uc1sgaSBdOwoKCQkJCQkvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqLwoKCQkJCQlpZiAoIG9wdGlvbi5zZWxlY3RlZCA9CgkJCQkJCWpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTEKCQkJCQkpIHsKCQkJCQkJb3B0aW9uU2V0ID0gdHJ1ZTsKCQkJCQl9CgoJCQkJCS8qIGVzbGludC1lbmFibGUgbm8tY29uZC1hc3NpZ24gKi8KCQkJCX0KCgkJCQkvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldAoJCQkJaWYgKCAhb3B0aW9uU2V0ICkgewoJCQkJCWVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xOwoJCQkJfQoJCQkJcmV0dXJuIHZhbHVlczsKCQkJfQoJCX0KCX0KfSApOwoKLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXIKalF1ZXJ5LmVhY2goIFsgInJhZGlvIiwgImNoZWNrYm94IiBdLCBmdW5jdGlvbigpIHsKCWpRdWVyeS52YWxIb29rc1sgdGhpcyBdID0gewoJCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewoJCQlpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7CgkJCQlyZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KCBlbGVtICkudmFsKCksIHZhbHVlICkgPiAtMSApOwoJCQl9CgkJfQoJfTsKCWlmICggIXN1cHBvcnQuY2hlY2tPbiApIHsKCQlqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHsKCQkJcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCAidmFsdWUiICkgPT09IG51bGwgPyAib24iIDogZWxlbS52YWx1ZTsKCQl9OwoJfQp9ICk7CgoKCgovLyBSZXR1cm4galF1ZXJ5IGZvciBhdHRyaWJ1dGVzLW9ubHkgaW5jbHVzaW9uCnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjsKCnZhciBub25jZSA9IHsgZ3VpZDogRGF0ZS5ub3coKSB9OwoKdmFyIHJxdWVyeSA9ICggL1w/LyApOwoKCgovLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nCmpRdWVyeS5wYXJzZVhNTCA9IGZ1bmN0aW9uKCBkYXRhICkgewoJdmFyIHhtbCwgcGFyc2VyRXJyb3JFbGVtOwoJaWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIgKSB7CgkJcmV0dXJuIG51bGw7Cgl9CgoJLy8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHkKCS8vIElFIHRocm93cyBvbiBwYXJzZUZyb21TdHJpbmcgd2l0aCBpbnZhbGlkIGlucHV0LgoJdHJ5IHsKCQl4bWwgPSAoIG5ldyB3aW5kb3cuRE9NUGFyc2VyKCkgKS5wYXJzZUZyb21TdHJpbmcoIGRhdGEsICJ0ZXh0L3htbCIgKTsKCX0gY2F0Y2ggKCBlICkge30KCglwYXJzZXJFcnJvckVsZW0gPSB4bWwgJiYgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAicGFyc2VyZXJyb3IiIClbIDAgXTsKCWlmICggIXhtbCB8fCBwYXJzZXJFcnJvckVsZW0gKSB7CgkJalF1ZXJ5LmVycm9yKCAiSW52YWxpZCBYTUw6ICIgKyAoCgkJCXBhcnNlckVycm9yRWxlbSA/CgkJCQlqUXVlcnkubWFwKCBwYXJzZXJFcnJvckVsZW0uY2hpbGROb2RlcywgZnVuY3Rpb24oIGVsICkgewoJCQkJCXJldHVybiBlbC50ZXh0Q29udGVudDsKCQkJCX0gKS5qb2luKCAiXG4iICkgOgoJCQkJZGF0YQoJCSkgKTsKCX0KCXJldHVybiB4bWw7Cn07CgoKdmFyIHJmb2N1c01vcnBoID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLAoJc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbiggZSApIHsKCQllLnN0b3BQcm9wYWdhdGlvbigpOwoJfTsKCmpRdWVyeS5leHRlbmQoIGpRdWVyeS5ldmVudCwgewoKCXRyaWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkgewoKCQl2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLCBsYXN0RWxlbWVudCwKCQkJZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sCgkJCXR5cGUgPSBoYXNPd24uY2FsbCggZXZlbnQsICJ0eXBlIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LAoJCQluYW1lc3BhY2VzID0gaGFzT3duLmNhbGwoIGV2ZW50LCAibmFtZXNwYWNlIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCAiLiIgKSA6IFtdOwoKCQljdXIgPSBsYXN0RWxlbWVudCA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50OwoKCQkvLyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcwoJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkgewoJCQlyZXR1cm47CgkJfQoKCQkvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3cKCQlpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7CgkJCXJldHVybjsKCQl9CgoJCWlmICggdHlwZS5pbmRleE9mKCAiLiIgKSA+IC0xICkgewoKCQkJLy8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKQoJCQluYW1lc3BhY2VzID0gdHlwZS5zcGxpdCggIi4iICk7CgkJCXR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7CgkJCW5hbWVzcGFjZXMuc29ydCgpOwoJCX0KCQlvbnR5cGUgPSB0eXBlLmluZGV4T2YoICI6IiApIDwgMCAmJiAib24iICsgdHlwZTsKCgkJLy8gQ2FsbGVyIGNhbiBwYXNzIGluIGEgalF1ZXJ5LkV2ZW50IG9iamVjdCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5cGUgc3RyaW5nCgkJZXZlbnQgPSBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/CgkJCWV2ZW50IDoKCQkJbmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSAib2JqZWN0IiAmJiBldmVudCApOwoKCQkvLyBUcmlnZ2VyIGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUpCgkJZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7CgkJZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCAiLiIgKTsKCQlldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID8KCQkJbmV3IFJlZ0V4cCggIihefFxcLikiICsgbmFtZXNwYWNlcy5qb2luKCAiXFwuKD86LipcXC58KSIgKSArICIoXFwufCQpIiApIDoKCQkJbnVsbDsKCgkJLy8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkCgkJZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkOwoJCWlmICggIWV2ZW50LnRhcmdldCApIHsKCQkJZXZlbnQudGFyZ2V0ID0gZWxlbTsKCQl9CgoJCS8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3QKCQlkYXRhID0gZGF0YSA9PSBudWxsID8KCQkJWyBldmVudCBdIDoKCQkJalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7CgoJCS8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXMKCQlzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKCQlpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJLy8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAodHJhYy05OTUxKQoJCS8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAodHJhYy05NzI0KQoJCWlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHsKCgkJCWJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlOwoJCQlpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkgewoJCQkJY3VyID0gY3VyLnBhcmVudE5vZGU7CgkJCX0KCQkJZm9yICggOyBjdXI7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkgewoJCQkJZXZlbnRQYXRoLnB1c2goIGN1ciApOwoJCQkJdG1wID0gY3VyOwoJCQl9CgoJCQkvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSkKCQkJaWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7CgkJCQlldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7CgkJCX0KCQl9CgoJCS8vIEZpcmUgaGFuZGxlcnMgb24gdGhlIGV2ZW50IHBhdGgKCQlpID0gMDsKCQl3aGlsZSAoICggY3VyID0gZXZlbnRQYXRoWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkgewoJCQlsYXN0RWxlbWVudCA9IGN1cjsKCQkJZXZlbnQudHlwZSA9IGkgPiAxID8KCQkJCWJ1YmJsZVR5cGUgOgoJCQkJc3BlY2lhbC5iaW5kVHlwZSB8fCB0eXBlOwoKCQkJLy8galF1ZXJ5IGhhbmRsZXIKCQkJaGFuZGxlID0gKCBkYXRhUHJpdi5nZXQoIGN1ciwgImV2ZW50cyIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsICkgKVsgZXZlbnQudHlwZSBdICYmCgkJCQlkYXRhUHJpdi5nZXQoIGN1ciwgImhhbmRsZSIgKTsKCQkJaWYgKCBoYW5kbGUgKSB7CgkJCQloYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApOwoJCQl9CgoJCQkvLyBOYXRpdmUgaGFuZGxlcgoJCQloYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTsKCQkJaWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkgewoJCQkJZXZlbnQucmVzdWx0ID0gaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTsKCQkJCWlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHsKCQkJCQlldmVudC5wcmV2ZW50RGVmYXVsdCgpOwoJCQkJfQoJCQl9CgkJfQoJCWV2ZW50LnR5cGUgPSB0eXBlOwoKCQkvLyBJZiBub2JvZHkgcHJldmVudGVkIHRoZSBkZWZhdWx0IGFjdGlvbiwgZG8gaXQgbm93CgkJaWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHsKCgkJCWlmICggKCAhc3BlY2lhbC5fZGVmYXVsdCB8fAoJCQkJc3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiYKCQkJCWFjY2VwdERhdGEoIGVsZW0gKSApIHsKCgkJCQkvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGV2ZW50LgoJCQkJLy8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKHRyYWMtNjE3MCkKCQkJCWlmICggb250eXBlICYmIGlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSApICYmICFpc1dpbmRvdyggZWxlbSApICkgewoKCQkJCQkvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kCgkJCQkJdG1wID0gZWxlbVsgb250eXBlIF07CgoJCQkJCWlmICggdG1wICkgewoJCQkJCQllbGVtWyBvbnR5cGUgXSA9IG51bGw7CgkJCQkJfQoKCQkJCQkvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZQoJCQkJCWpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlOwoKCQkJCQlpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7CgkJCQkJCWxhc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7CgkJCQkJfQoKCQkJCQllbGVtWyB0eXBlIF0oKTsKCgkJCQkJaWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkgewoJCQkJCQlsYXN0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApOwoJCQkJCX0KCgkJCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDsKCgkJCQkJaWYgKCB0bXAgKSB7CgkJCQkJCWVsZW1bIG9udHlwZSBdID0gdG1wOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCgkJcmV0dXJuIGV2ZW50LnJlc3VsdDsKCX0sCgoJLy8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lCgkvLyBVc2VkIG9ubHkgZm9yIGBmb2N1cyhpbiB8IG91dClgIGV2ZW50cwoJc2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCApIHsKCQl2YXIgZSA9IGpRdWVyeS5leHRlbmQoCgkJCW5ldyBqUXVlcnkuRXZlbnQoKSwKCQkJZXZlbnQsCgkJCXsKCQkJCXR5cGU6IHR5cGUsCgkJCQlpc1NpbXVsYXRlZDogdHJ1ZQoJCQl9CgkJKTsKCgkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTsKCX0KCn0gKTsKCmpRdWVyeS5mbi5leHRlbmQoIHsKCgl0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTsKCQl9ICk7Cgl9LAoJdHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgewoJCXZhciBlbGVtID0gdGhpc1sgMCBdOwoJCWlmICggZWxlbSApIHsKCQkJcmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7CgkJfQoJfQp9ICk7CgoKdmFyCglyYnJhY2tldCA9IC9cW1xdJC8sCglyQ1JMRiA9IC9ccj9cbi9nLAoJcnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLAoJcnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pOwoKZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkgewoJdmFyIG5hbWU7CgoJaWYgKCBBcnJheS5pc0FycmF5KCBvYmogKSApIHsKCgkJLy8gU2VyaWFsaXplIGFycmF5IGl0ZW0uCgkJalF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7CgkJCWlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7CgoJCQkJLy8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLgoJCQkJYWRkKCBwcmVmaXgsIHYgKTsKCgkJCX0gZWxzZSB7CgoJCQkJLy8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguCgkJCQlidWlsZFBhcmFtcygKCQkJCQlwcmVmaXggKyAiWyIgKyAoIHR5cGVvZiB2ID09PSAib2JqZWN0IiAmJiB2ICE9IG51bGwgPyBpIDogIiIgKSArICJdIiwKCQkJCQl2LAoJCQkJCXRyYWRpdGlvbmFsLAoJCQkJCWFkZAoJCQkJKTsKCQkJfQoJCX0gKTsKCgl9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgdG9UeXBlKCBvYmogKSA9PT0gIm9iamVjdCIgKSB7CgoJCS8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS4KCQlmb3IgKCBuYW1lIGluIG9iaiApIHsKCQkJYnVpbGRQYXJhbXMoIHByZWZpeCArICJbIiArIG5hbWUgKyAiXSIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7CgkJfQoKCX0gZWxzZSB7CgoJCS8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS4KCQlhZGQoIHByZWZpeCwgb2JqICk7Cgl9Cn0KCi8vIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mCi8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZwpqUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7Cgl2YXIgcHJlZml4LAoJCXMgPSBbXSwKCQlhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZU9yRnVuY3Rpb24gKSB7CgoJCQkvLyBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHVzZSBpdHMgcmV0dXJuIHZhbHVlCgkJCXZhciB2YWx1ZSA9IGlzRnVuY3Rpb24oIHZhbHVlT3JGdW5jdGlvbiApID8KCQkJCXZhbHVlT3JGdW5jdGlvbigpIDoKCQkJCXZhbHVlT3JGdW5jdGlvbjsKCgkJCXNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgIj0iICsKCQkJCWVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgPT0gbnVsbCA/ICIiIDogdmFsdWUgKTsKCQl9OwoKCWlmICggYSA9PSBudWxsICkgewoJCXJldHVybiAiIjsKCX0KCgkvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLgoJaWYgKCBBcnJheS5pc0FycmF5KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSApICkgewoKCQkvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHMKCQlqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7CgkJCWFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7CgkJfSApOwoKCX0gZWxzZSB7CgoJCS8vIElmIHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhlICJvbGQiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlcgoJCS8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LgoJCWZvciAoIHByZWZpeCBpbiBhICkgewoJCQlidWlsZFBhcmFtcyggcHJlZml4LCBhWyBwcmVmaXggXSwgdHJhZGl0aW9uYWwsIGFkZCApOwoJCX0KCX0KCgkvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uCglyZXR1cm4gcy5qb2luKCAiJiIgKTsKfTsKCmpRdWVyeS5mbi5leHRlbmQoIHsKCXNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7Cgl9LAoJc2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7CgoJCQkvLyBDYW4gYWRkIHByb3BIb29rIGZvciAiZWxlbWVudHMiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50cwoJCQl2YXIgZWxlbWVudHMgPSBqUXVlcnkucHJvcCggdGhpcywgImVsZW1lbnRzIiApOwoJCQlyZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpczsKCQl9ICkuZmlsdGVyKCBmdW5jdGlvbigpIHsKCQkJdmFyIHR5cGUgPSB0aGlzLnR5cGU7CgoJCQkvLyBVc2UgLmlzKCAiOmRpc2FibGVkIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzCgkJCXJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCAiOmRpc2FibGVkIiApICYmCgkJCQlyc3VibWl0dGFibGUudGVzdCggdGhpcy5ub2RlTmFtZSApICYmICFyc3VibWl0dGVyVHlwZXMudGVzdCggdHlwZSApICYmCgkJCQkoIHRoaXMuY2hlY2tlZCB8fCAhcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7CgkJfSApLm1hcCggZnVuY3Rpb24oIF9pLCBlbGVtICkgewoJCQl2YXIgdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7CgoJCQlpZiAoIHZhbCA9PSBudWxsICkgewoJCQkJcmV0dXJuIG51bGw7CgkJCX0KCgkJCWlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7CgkJCQlyZXR1cm4galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsICkgewoJCQkJCXJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkgfTsKCQkJCX0gKTsKCQkJfQoKCQkJcmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9OwoJCX0gKS5nZXQoKTsKCX0KfSApOwoKCnZhcgoJcjIwID0gLyUyMC9nLAoJcmhhc2ggPSAvIy4qJC8sCglyYW50aUNhY2hlID0gLyhbPyZdKV89W14mXSovLAoJcmhlYWRlcnMgPSAvXiguKj8pOlsgXHRdKihbXlxyXG5dKikkL21nLAoKCS8vIHRyYWMtNzY1MywgdHJhYy04MTI1LCB0cmFjLTgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvbgoJcmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLywKCXJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLAoJcnByb3RvY29sID0gL15cL1wvLywKCgkvKiBQcmVmaWx0ZXJzCgkgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKQoJICogMikgVGhlc2UgYXJlIGNhbGxlZDoKCSAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnQKCSAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSkKCSAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGUKCSAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkCgkgKiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3duIHRvICIqIiBpZiBuZWVkZWQKCSAqLwoJcHJlZmlsdGVycyA9IHt9LAoKCS8qIFRyYW5zcG9ydHMgYmluZGluZ3MKCSAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGUKCSAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkCgkgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byAiKiIgaWYgbmVlZGVkCgkgKi8KCXRyYW5zcG9ydHMgPSB7fSwKCgkvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICh0cmFjLTEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uCglhbGxUeXBlcyA9ICIqLyIuY29uY2F0KCAiKiIgKSwKCgkvLyBBbmNob3IgdGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW4KCW9yaWdpbkFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJhIiApOwoKb3JpZ2luQW5jaG9yLmhyZWYgPSBsb2NhdGlvbi5ocmVmOwoKLy8gQmFzZSAiY29uc3RydWN0b3IiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnQKZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUgKSB7CgoJLy8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byAiKiIKCXJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkgewoKCQlpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09ICJzdHJpbmciICkgewoJCQlmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uOwoJCQlkYXRhVHlwZUV4cHJlc3Npb24gPSAiKiI7CgkJfQoKCQl2YXIgZGF0YVR5cGUsCgkJCWkgPSAwLAoJCQlkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdOwoKCQlpZiAoIGlzRnVuY3Rpb24oIGZ1bmMgKSApIHsKCgkJCS8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb24KCQkJd2hpbGUgKCAoIGRhdGFUeXBlID0gZGF0YVR5cGVzWyBpKysgXSApICkgewoKCQkJCS8vIFByZXBlbmQgaWYgcmVxdWVzdGVkCgkJCQlpZiAoIGRhdGFUeXBlWyAwIF0gPT09ICIrIiApIHsKCQkJCQlkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgIioiOwoJCQkJCSggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkudW5zaGlmdCggZnVuYyApOwoKCQkJCS8vIE90aGVyd2lzZSBhcHBlbmQKCQkJCX0gZWxzZSB7CgkJCQkJKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7CgkJCQl9CgkJCX0KCQl9Cgl9Owp9CgovLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHMKZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHsKCgl2YXIgaW5zcGVjdGVkID0ge30sCgkJc2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7CgoJZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7CgkJdmFyIHNlbGVjdGVkOwoJCWluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7CgkJalF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHsKCQkJdmFyIGRhdGFUeXBlT3JUcmFuc3BvcnQgPSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTsKCQkJaWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gInN0cmluZyIgJiYKCQkJCSFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHsKCgkJCQlvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7CgkJCQlpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7CgkJCQlyZXR1cm4gISggc2VsZWN0ZWQgPSBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7CgkJCX0KCQl9ICk7CgkJcmV0dXJuIHNlbGVjdGVkOwoJfQoKCXJldHVybiBpbnNwZWN0KCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdICkgfHwgIWluc3BlY3RlZFsgIioiIF0gJiYgaW5zcGVjdCggIioiICk7Cn0KCi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9ucwovLyB0aGF0IHRha2VzICJmbGF0IiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZCkKLy8gRml4ZXMgdHJhYy05ODg3CmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkgewoJdmFyIGtleSwgZGVlcCwKCQlmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307CgoJZm9yICgga2V5IGluIHNyYyApIHsKCQlpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHsKCQkJKCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTsKCQl9Cgl9CglpZiAoIGRlZXAgKSB7CgkJalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7Cgl9CgoJcmV0dXJuIHRhcmdldDsKfQoKLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OgogKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKQogKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKICovCmZ1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7CgoJdmFyIGN0LCB0eXBlLCBmaW5hbERhdGFUeXBlLCBmaXJzdERhdGFUeXBlLAoJCWNvbnRlbnRzID0gcy5jb250ZW50cywKCQlkYXRhVHlwZXMgPSBzLmRhdGFUeXBlczsKCgkvLyBSZW1vdmUgYXV0byBkYXRhVHlwZSBhbmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2VzcwoJd2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gIioiICkgewoJCWRhdGFUeXBlcy5zaGlmdCgpOwoJCWlmICggY3QgPT09IHVuZGVmaW5lZCApIHsKCQkJY3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiQ29udGVudC1UeXBlIiApOwoJCX0KCX0KCgkvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGUKCWlmICggY3QgKSB7CgkJZm9yICggdHlwZSBpbiBjb250ZW50cyApIHsKCQkJaWYgKCBjb250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHsKCQkJCWRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7CgkJCQlicmVhazsKCQkJfQoJCX0KCX0KCgkvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGUKCWlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkgewoJCWZpbmFsRGF0YVR5cGUgPSBkYXRhVHlwZXNbIDAgXTsKCX0gZWxzZSB7CgoJCS8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXMKCQlmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHsKCQkJaWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgIiAiICsgZGF0YVR5cGVzWyAwIF0gXSApIHsKCQkJCWZpbmFsRGF0YVR5cGUgPSB0eXBlOwoJCQkJYnJlYWs7CgkJCX0KCQkJaWYgKCAhZmlyc3REYXRhVHlwZSApIHsKCQkJCWZpcnN0RGF0YVR5cGUgPSB0eXBlOwoJCQl9CgkJfQoKCQkvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmUKCQlmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlOwoJfQoKCS8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGUKCS8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkCgkvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlCglpZiAoIGZpbmFsRGF0YVR5cGUgKSB7CgkJaWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHsKCQkJZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTsKCQl9CgkJcmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdOwoJfQp9CgovKiBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlCiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZQogKi8KZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICkgewoJdmFyIGNvbnYyLCBjdXJyZW50LCBjb252LCB0bXAsIHByZXYsCgkJY29udmVydGVycyA9IHt9LAoKCQkvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uCgkJZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMuc2xpY2UoKTsKCgkvLyBDcmVhdGUgY29udmVydGVycyBtYXAgd2l0aCBsb3dlcmNhc2VkIGtleXMKCWlmICggZGF0YVR5cGVzWyAxIF0gKSB7CgkJZm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7CgkJCWNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBjb252IF07CgkJfQoJfQoKCWN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTsKCgkvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZQoJd2hpbGUgKCBjdXJyZW50ICkgewoKCQlpZiAoIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSApIHsKCQkJanFYSFJbIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSBdID0gcmVzcG9uc2U7CgkJfQoKCQkvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZAoJCWlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHsKCQkJcmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7CgkJfQoKCQlwcmV2ID0gY3VycmVudDsKCQljdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7CgoJCWlmICggY3VycmVudCApIHsKCgkJCS8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG8KCQkJaWYgKCBjdXJyZW50ID09PSAiKiIgKSB7CgoJCQkJY3VycmVudCA9IHByZXY7CgoJCQkvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50CgkJCX0gZWxzZSBpZiAoIHByZXYgIT09ICIqIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkgewoKCQkJCS8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyCgkJCQljb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyAiKiAiICsgY3VycmVudCBdOwoKCQkJCS8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyCgkJCQlpZiAoICFjb252ICkgewoJCQkJCWZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7CgoJCQkJCQkvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnQKCQkJCQkJdG1wID0gY29udjIuc3BsaXQoICIgIiApOwoJCQkJCQlpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkgewoKCQkJCQkJCS8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dAoJCQkJCQkJY29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyAiICIgKyB0bXBbIDAgXSBdIHx8CgkJCQkJCQkJY29udmVydGVyc1sgIiogIiArIHRtcFsgMCBdIF07CgkJCQkJCQlpZiAoIGNvbnYgKSB7CgoJCQkJCQkJCS8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnMKCQkJCQkJCQlpZiAoIGNvbnYgPT09IHRydWUgKSB7CgkJCQkJCQkJCWNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdOwoKCQkJCQkJCQkvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBlCgkJCQkJCQkJfSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSApIHsKCQkJCQkJCQkJY3VycmVudCA9IHRtcFsgMCBdOwoJCQkJCQkJCQlkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTsKCQkJCQkJCQl9CgkJCQkJCQkJYnJlYWs7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgoJCQkJLy8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpCgkJCQlpZiAoIGNvbnYgIT09IHRydWUgKSB7CgoJCQkJCS8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW0KCQkJCQlpZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7CgkJCQkJCXJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTsKCQkJCQl9IGVsc2UgewoJCQkJCQl0cnkgewoJCQkJCQkJcmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApOwoJCQkJCQl9IGNhdGNoICggZSApIHsKCQkJCQkJCXJldHVybiB7CgkJCQkJCQkJc3RhdGU6ICJwYXJzZXJlcnJvciIsCgkJCQkJCQkJZXJyb3I6IGNvbnYgPyBlIDogIk5vIGNvbnZlcnNpb24gZnJvbSAiICsgcHJldiArICIgdG8gIiArIGN1cnJlbnQKCQkJCQkJCX07CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9CgoJcmV0dXJuIHsgc3RhdGU6ICJzdWNjZXNzIiwgZGF0YTogcmVzcG9uc2UgfTsKfQoKalF1ZXJ5LmV4dGVuZCggewoKCS8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhlIG51bWJlciBvZiBhY3RpdmUgcXVlcmllcwoJYWN0aXZlOiAwLAoKCS8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3QKCWxhc3RNb2RpZmllZDoge30sCglldGFnOiB7fSwKCglhamF4U2V0dGluZ3M6IHsKCQl1cmw6IGxvY2F0aW9uLmhyZWYsCgkJdHlwZTogIkdFVCIsCgkJaXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSwKCQlnbG9iYWw6IHRydWUsCgkJcHJvY2Vzc0RhdGE6IHRydWUsCgkJYXN5bmM6IHRydWUsCgkJY29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLAoKCQkvKgoJCXRpbWVvdXQ6IDAsCgkJZGF0YTogbnVsbCwKCQlkYXRhVHlwZTogbnVsbCwKCQl1c2VybmFtZTogbnVsbCwKCQlwYXNzd29yZDogbnVsbCwKCQljYWNoZTogbnVsbCwKCQl0aHJvd3M6IGZhbHNlLAoJCXRyYWRpdGlvbmFsOiBmYWxzZSwKCQloZWFkZXJzOiB7fSwKCQkqLwoKCQlhY2NlcHRzOiB7CgkJCSIqIjogYWxsVHlwZXMsCgkJCXRleHQ6ICJ0ZXh0L3BsYWluIiwKCQkJaHRtbDogInRleHQvaHRtbCIsCgkJCXhtbDogImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLAoJCQlqc29uOiAiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IgoJCX0sCgoJCWNvbnRlbnRzOiB7CgkJCXhtbDogL1xieG1sXGIvLAoJCQlodG1sOiAvXGJodG1sLywKCQkJanNvbjogL1xianNvblxiLwoJCX0sCgoJCXJlc3BvbnNlRmllbGRzOiB7CgkJCXhtbDogInJlc3BvbnNlWE1MIiwKCQkJdGV4dDogInJlc3BvbnNlVGV4dCIsCgkJCWpzb246ICJyZXNwb25zZUpTT04iCgkJfSwKCgkJLy8gRGF0YSBjb252ZXJ0ZXJzCgkJLy8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsICIqIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2UKCQljb252ZXJ0ZXJzOiB7CgoJCQkvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHQKCQkJIiogdGV4dCI6IFN0cmluZywKCgkJCS8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKQoJCQkidGV4dCBodG1sIjogdHJ1ZSwKCgkJCS8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb24KCQkJInRleHQganNvbiI6IEpTT04ucGFyc2UsCgoJCQkvLyBQYXJzZSB0ZXh0IGFzIHhtbAoJCQkidGV4dCB4bWwiOiBqUXVlcnkucGFyc2VYTUwKCQl9LAoKCQkvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOgoJCS8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWYKCQkvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZQoJCS8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKQoJCWZsYXRPcHRpb25zOiB7CgkJCXVybDogdHJ1ZSwKCQkJY29udGV4dDogdHJ1ZQoJCX0KCX0sCgoJLy8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXQKCS8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy4KCS8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuCglhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkgewoJCXJldHVybiBzZXR0aW5ncyA/CgoJCQkvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdAoJCQlhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6CgoJCQkvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzCgkJCWFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApOwoJfSwKCglhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSwKCWFqYXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLAoKCS8vIE1haW4gbWV0aG9kCglhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkgewoKCQkvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZQoJCWlmICggdHlwZW9mIHVybCA9PT0gIm9iamVjdCIgKSB7CgkJCW9wdGlvbnMgPSB1cmw7CgkJCXVybCA9IHVuZGVmaW5lZDsKCQl9CgoJCS8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0CgkJb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CgoJCXZhciB0cmFuc3BvcnQsCgoJCQkvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtCgkJCWNhY2hlVVJMLAoKCQkJLy8gUmVzcG9uc2UgaGVhZGVycwoJCQlyZXNwb25zZUhlYWRlcnNTdHJpbmcsCgkJCXJlc3BvbnNlSGVhZGVycywKCgkJCS8vIHRpbWVvdXQgaGFuZGxlCgkJCXRpbWVvdXRUaW1lciwKCgkJCS8vIFVybCBjbGVhbnVwIHZhcgoJCQl1cmxBbmNob3IsCgoJCQkvLyBSZXF1ZXN0IHN0YXRlIChiZWNvbWVzIGZhbHNlIHVwb24gc2VuZCBhbmQgdHJ1ZSB1cG9uIGNvbXBsZXRpb24pCgkJCWNvbXBsZXRlZCwKCgkJCS8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZAoJCQlmaXJlR2xvYmFscywKCgkJCS8vIExvb3AgdmFyaWFibGUKCQkJaSwKCgkJCS8vIHVuY2FjaGVkIHBhcnQgb2YgdGhlIHVybAoJCQl1bmNhY2hlZCwKCgkJCS8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3QKCQkJcyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksCgoJCQkvLyBDYWxsYmFja3MgY29udGV4dAoJCQljYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcywKCgkJCS8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMgaXMgY2FsbGJhY2tDb250ZXh0IGlmIGl0IGlzIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IGNvbGxlY3Rpb24KCQkJZ2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmCgkJCQkoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlwZSB8fCBjYWxsYmFja0NvbnRleHQuanF1ZXJ5ICkgPwoJCQkJalF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6CgkJCQlqUXVlcnkuZXZlbnQsCgoJCQkvLyBEZWZlcnJlZHMKCQkJZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSwKCQkJY29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKSwKCgkJCS8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCgkJCXN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sCgoJCQkvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKQoJCQlyZXF1ZXN0SGVhZGVycyA9IHt9LAoJCQlyZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sCgoJCQkvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2UKCQkJc3RyQWJvcnQgPSAiY2FuY2VsZWQiLAoKCQkJLy8gRmFrZSB4aHIKCQkJanFYSFIgPSB7CgkJCQlyZWFkeVN0YXRlOiAwLAoKCQkJCS8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWQKCQkJCWdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkgewoJCQkJCXZhciBtYXRjaDsKCQkJCQlpZiAoIGNvbXBsZXRlZCApIHsKCQkJCQkJaWYgKCAhcmVzcG9uc2VIZWFkZXJzICkgewoJCQkJCQkJcmVzcG9uc2VIZWFkZXJzID0ge307CgkJCQkJCQl3aGlsZSAoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkgewoJCQkJCQkJCXJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgIiAiIF0gPQoJCQkJCQkJCQkoIHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgIiAiIF0gfHwgW10gKQoJCQkJCQkJCQkJLmNvbmNhdCggbWF0Y2hbIDIgXSApOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCW1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSArICIgIiBdOwoJCQkJCX0KCQkJCQlyZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaC5qb2luKCAiLCAiICk7CgkJCQl9LAoKCQkJCS8vIFJhdyBzdHJpbmcKCQkJCWdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7CgkJCQkJcmV0dXJuIGNvbXBsZXRlZCA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7CgkJCQl9LAoKCQkJCS8vIENhY2hlcyB0aGUgaGVhZGVyCgkJCQlzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CgkJCQkJaWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHsKCQkJCQkJbmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdID0KCQkJCQkJCXJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8IG5hbWU7CgkJCQkJCXJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTsKCQkJCQl9CgkJCQkJcmV0dXJuIHRoaXM7CgkJCQl9LAoKCQkJCS8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyCgkJCQlvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHsKCQkJCQlpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkgewoJCQkJCQlzLm1pbWVUeXBlID0gdHlwZTsKCQkJCQl9CgkJCQkJcmV0dXJuIHRoaXM7CgkJCQl9LAoKCQkJCS8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCgkJCQlzdGF0dXNDb2RlOiBmdW5jdGlvbiggbWFwICkgewoJCQkJCXZhciBjb2RlOwoJCQkJCWlmICggbWFwICkgewoJCQkJCQlpZiAoIGNvbXBsZXRlZCApIHsKCgkJCQkJCQkvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3MKCQkJCQkJCWpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApOwoJCQkJCQl9IGVsc2UgewoKCQkJCQkJCS8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2tzIGluIGEgd2F5IHRoYXQgcHJlc2VydmVzIG9sZCBvbmVzCgkJCQkJCQlmb3IgKCBjb2RlIGluIG1hcCApIHsKCQkJCQkJCQlzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCQlyZXR1cm4gdGhpczsKCQkJCX0sCgoJCQkJLy8gQ2FuY2VsIHRoZSByZXF1ZXN0CgkJCQlhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7CgkJCQkJdmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7CgkJCQkJaWYgKCB0cmFuc3BvcnQgKSB7CgkJCQkJCXRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0ICk7CgkJCQkJfQoJCQkJCWRvbmUoIDAsIGZpbmFsVGV4dCApOwoJCQkJCXJldHVybiB0aGlzOwoJCQkJfQoJCQl9OwoKCQkvLyBBdHRhY2ggZGVmZXJyZWRzCgkJZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKTsKCgkJLy8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpCgkJLy8gSGFuZGxlIGZhbHN5IHVybCBpbiB0aGUgc2V0dGluZ3Mgb2JqZWN0ICh0cmFjLTEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpCgkJLy8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlCgkJcy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9uLmhyZWYgKSArICIiICkKCQkJLnJlcGxhY2UoIHJwcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyAiLy8iICk7CgoJCS8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0IHRyYWMtMTIwMDQKCQlzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlOwoKCQkvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0CgkJcy5kYXRhVHlwZXMgPSAoIHMuZGF0YVR5cGUgfHwgIioiICkudG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgIiIgXTsKCgkJLy8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHRoZSBvcmlnaW4gZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBvcmlnaW4uCgkJaWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7CgkJCXVybEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJhIiApOwoKCQkJLy8gU3VwcG9ydDogSUUgPD04IC0gMTEsIEVkZ2UgMTIgLSAxNQoJCQkvLyBJRSB0aHJvd3MgZXhjZXB0aW9uIG9uIGFjY2Vzc2luZyB0aGUgaHJlZiBwcm9wZXJ0eSBpZiB1cmwgaXMgbWFsZm9ybWVkLAoJCQkvLyBlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbTo4MHgvCgkJCXRyeSB7CgkJCQl1cmxBbmNob3IuaHJlZiA9IHMudXJsOwoKCQkJCS8vIFN1cHBvcnQ6IElFIDw9OCAtIDExIG9ubHkKCQkJCS8vIEFuY2hvcidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3aGVuIHMudXJsIGlzIHJlbGF0aXZlCgkJCQl1cmxBbmNob3IuaHJlZiA9IHVybEFuY2hvci5ocmVmOwoJCQkJcy5jcm9zc0RvbWFpbiA9IG9yaWdpbkFuY2hvci5wcm90b2NvbCArICIvLyIgKyBvcmlnaW5BbmNob3IuaG9zdCAhPT0KCQkJCQl1cmxBbmNob3IucHJvdG9jb2wgKyAiLy8iICsgdXJsQW5jaG9yLmhvc3Q7CgkJCX0gY2F0Y2ggKCBlICkgewoKCQkJCS8vIElmIHRoZXJlIGlzIGFuIGVycm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWluLAoJCQkJLy8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRoZSB0cmFuc3BvcnQgaWYgaXQgaXMgaW52YWxpZAoJCQkJcy5jcm9zc0RvbWFpbiA9IHRydWU7CgkJCX0KCQl9CgoJCS8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZwoJCWlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gInN0cmluZyIgKSB7CgkJCXMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRyYWRpdGlvbmFsICk7CgkJfQoKCQkvLyBBcHBseSBwcmVmaWx0ZXJzCgkJaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7CgoJCS8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlCgkJaWYgKCBjb21wbGV0ZWQgKSB7CgkJCXJldHVybiBqcVhIUjsKCQl9CgoJCS8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvCgkJLy8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKHRyYWMtMTUxMTgpCgkJZmlyZUdsb2JhbHMgPSBqUXVlcnkuZXZlbnQgJiYgcy5nbG9iYWw7CgoJCS8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHMKCQlpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHsKCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RhcnQiICk7CgkJfQoKCQkvLyBVcHBlcmNhc2UgdGhlIHR5cGUKCQlzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTsKCgkJLy8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnQKCQlzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTsKCgkJLy8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlCgkJLy8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uCgkJLy8gUmVtb3ZlIGhhc2ggdG8gc2ltcGxpZnkgdXJsIG1hbmlwdWxhdGlvbgoJCWNhY2hlVVJMID0gcy51cmwucmVwbGFjZSggcmhhc2gsICIiICk7CgoJCS8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50CgkJaWYgKCAhcy5oYXNDb250ZW50ICkgewoKCQkJLy8gUmVtZW1iZXIgdGhlIGhhc2ggc28gd2UgY2FuIHB1dCBpdCBiYWNrCgkJCXVuY2FjaGVkID0gcy51cmwuc2xpY2UoIGNhY2hlVVJMLmxlbmd0aCApOwoKCQkJLy8gSWYgZGF0YSBpcyBhdmFpbGFibGUgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQsIGFwcGVuZCBkYXRhIHRvIHVybAoJCQlpZiAoIHMuZGF0YSAmJiAoIHMucHJvY2Vzc0RhdGEgfHwgdHlwZW9mIHMuZGF0YSA9PT0gInN0cmluZyIgKSApIHsKCQkJCWNhY2hlVVJMICs9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyAiJiIgOiAiPyIgKSArIHMuZGF0YTsKCgkJCQkvLyB0cmFjLTk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeQoJCQkJZGVsZXRlIHMuZGF0YTsKCQkJfQoKCQkJLy8gQWRkIG9yIHVwZGF0ZSBhbnRpLWNhY2hlIHBhcmFtIGlmIG5lZWRlZAoJCQlpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkgewoJCQkJY2FjaGVVUkwgPSBjYWNoZVVSTC5yZXBsYWNlKCByYW50aUNhY2hlLCAiJDEiICk7CgkJCQl1bmNhY2hlZCA9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyAiJiIgOiAiPyIgKSArICJfPSIgKyAoIG5vbmNlLmd1aWQrKyApICsKCQkJCQl1bmNhY2hlZDsKCQkJfQoKCQkJLy8gUHV0IGhhc2ggYW5kIGFudGktY2FjaGUgb24gdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkIChnaC0xNzMyKQoJCQlzLnVybCA9IGNhY2hlVVJMICsgdW5jYWNoZWQ7CgoJCS8vIENoYW5nZSAnJTIwJyB0byAnKycgaWYgdGhpcyBpcyBlbmNvZGVkIGZvcm0gYm9keSBjb250ZW50IChnaC0yNjU4KQoJCX0gZWxzZSBpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmCgkJCSggcy5jb250ZW50VHlwZSB8fCAiIiApLmluZGV4T2YoICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiICkgPT09IDAgKSB7CgkJCXMuZGF0YSA9IHMuZGF0YS5yZXBsYWNlKCByMjAsICIrIiApOwoJCX0KCgkJLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4KCQlpZiAoIHMuaWZNb2RpZmllZCApIHsKCQkJaWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkgewoJCQkJanFYSFIuc2V0UmVxdWVzdEhlYWRlciggIklmLU1vZGlmaWVkLVNpbmNlIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApOwoJCQl9CgkJCWlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7CgkJCQlqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTm9uZS1NYXRjaCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7CgkJCX0KCQl9CgoJCS8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudAoJCWlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkgewoJCQlqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiQ29udGVudC1UeXBlIiwgcy5jb250ZW50VHlwZSApOwoJCX0KCgkJLy8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZQoJCWpxWEhSLnNldFJlcXVlc3RIZWFkZXIoCgkJCSJBY2NlcHQiLAoJCQlzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdID8KCQkJCXMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICsKCQkJCQkoIHMuZGF0YVR5cGVzWyAwIF0gIT09ICIqIiA/ICIsICIgKyBhbGxUeXBlcyArICI7IHE9MC4wMSIgOiAiIiApIDoKCQkJCXMuYWNjZXB0c1sgIioiIF0KCQkpOwoKCQkvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb24KCQlmb3IgKCBpIGluIHMuaGVhZGVycyApIHsKCQkJanFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTsKCQl9CgoJCS8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnQKCQlpZiAoIHMuYmVmb3JlU2VuZCAmJgoJCQkoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IGNvbXBsZXRlZCApICkgewoKCQkJLy8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuCgkJCXJldHVybiBqcVhIUi5hYm9ydCgpOwoJCX0KCgkJLy8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uCgkJc3RyQWJvcnQgPSAiYWJvcnQiOwoKCQkvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHMKCQljb21wbGV0ZURlZmVycmVkLmFkZCggcy5jb21wbGV0ZSApOwoJCWpxWEhSLmRvbmUoIHMuc3VjY2VzcyApOwoJCWpxWEhSLmZhaWwoIHMuZXJyb3IgKTsKCgkJLy8gR2V0IHRyYW5zcG9ydAoJCXRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApOwoKCQkvLyBJZiBubyB0cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnQKCQlpZiAoICF0cmFuc3BvcnQgKSB7CgkJCWRvbmUoIC0xLCAiTm8gVHJhbnNwb3J0IiApOwoJCX0gZWxzZSB7CgkJCWpxWEhSLnJlYWR5U3RhdGUgPSAxOwoKCQkJLy8gU2VuZCBnbG9iYWwgZXZlbnQKCQkJaWYgKCBmaXJlR2xvYmFscyApIHsKCQkJCWdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheFNlbmQiLCBbIGpxWEhSLCBzIF0gKTsKCQkJfQoKCQkJLy8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmUKCQkJaWYgKCBjb21wbGV0ZWQgKSB7CgkJCQlyZXR1cm4ganFYSFI7CgkJCX0KCgkJCS8vIFRpbWVvdXQKCQkJaWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7CgkJCQl0aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7CgkJCQkJanFYSFIuYWJvcnQoICJ0aW1lb3V0IiApOwoJCQkJfSwgcy50aW1lb3V0ICk7CgkJCX0KCgkJCXRyeSB7CgkJCQljb21wbGV0ZWQgPSBmYWxzZTsKCQkJCXRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApOwoJCQl9IGNhdGNoICggZSApIHsKCgkJCQkvLyBSZXRocm93IHBvc3QtY29tcGxldGlvbiBleGNlcHRpb25zCgkJCQlpZiAoIGNvbXBsZXRlZCApIHsKCQkJCQl0aHJvdyBlOwoJCQkJfQoKCQkJCS8vIFByb3BhZ2F0ZSBvdGhlcnMgYXMgcmVzdWx0cwoJCQkJZG9uZSggLTEsIGUgKTsKCQkJfQoJCX0KCgkJLy8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lCgkJZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7CgkJCXZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsCgkJCQlzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDsKCgkJCS8vIElnbm9yZSByZXBlYXQgaW52b2NhdGlvbnMKCQkJaWYgKCBjb21wbGV0ZWQgKSB7CgkJCQlyZXR1cm47CgkJCX0KCgkJCWNvbXBsZXRlZCA9IHRydWU7CgoJCQkvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0cwoJCQlpZiAoIHRpbWVvdXRUaW1lciApIHsKCQkJCXdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApOwoJCQl9CgoJCQkvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvbgoJCQkvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKQoJCQl0cmFuc3BvcnQgPSB1bmRlZmluZWQ7CgoJCQkvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzCgkJCXJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgIiI7CgoJCQkvLyBTZXQgcmVhZHlTdGF0ZQoJCQlqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwOwoKCQkJLy8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWwKCQkJaXNTdWNjZXNzID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQ7CgoJCQkvLyBHZXQgcmVzcG9uc2UgZGF0YQoJCQlpZiAoIHJlc3BvbnNlcyApIHsKCQkJCXJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApOwoJCQl9CgoJCQkvLyBVc2UgYSBub29wIGNvbnZlcnRlciBmb3IgbWlzc2luZyBzY3JpcHQgYnV0IG5vdCBpZiBqc29ucAoJCQlpZiAoICFpc1N1Y2Nlc3MgJiYKCQkJCWpRdWVyeS5pbkFycmF5KCAic2NyaXB0Iiwgcy5kYXRhVHlwZXMgKSA+IC0xICYmCgkJCQlqUXVlcnkuaW5BcnJheSggImpzb24iLCBzLmRhdGFUeXBlcyApIDwgMCApIHsKCQkJCXMuY29udmVydGVyc1sgInRleHQgc2NyaXB0IiBdID0gZnVuY3Rpb24oKSB7fTsKCQkJfQoKCQkJLy8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KQoJCQlyZXNwb25zZSA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApOwoKCQkJLy8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmcKCQkJaWYgKCBpc1N1Y2Nlc3MgKSB7CgoJCQkJLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4KCQkJCWlmICggcy5pZk1vZGlmaWVkICkgewoJCQkJCW1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoICJMYXN0LU1vZGlmaWVkIiApOwoJCQkJCWlmICggbW9kaWZpZWQgKSB7CgkJCQkJCWpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDsKCQkJCQl9CgkJCQkJbW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggImV0YWciICk7CgkJCQkJaWYgKCBtb2RpZmllZCApIHsKCQkJCQkJalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDsKCQkJCQl9CgkJCQl9CgoJCQkJLy8gaWYgbm8gY29udGVudAoJCQkJaWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09ICJIRUFEIiApIHsKCQkJCQlzdGF0dXNUZXh0ID0gIm5vY29udGVudCI7CgoJCQkJLy8gaWYgbm90IG1vZGlmaWVkCgkJCQl9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHsKCQkJCQlzdGF0dXNUZXh0ID0gIm5vdG1vZGlmaWVkIjsKCgkJCQkvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXQKCQkJCX0gZWxzZSB7CgkJCQkJc3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXRlOwoJCQkJCXN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhOwoJCQkJCWVycm9yID0gcmVzcG9uc2UuZXJyb3I7CgkJCQkJaXNTdWNjZXNzID0gIWVycm9yOwoJCQkJfQoJCQl9IGVsc2UgewoKCQkJCS8vIEV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0IGFuZCBub3JtYWxpemUgZm9yIG5vbi1hYm9ydHMKCQkJCWVycm9yID0gc3RhdHVzVGV4dDsKCQkJCWlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkgewoJCQkJCXN0YXR1c1RleHQgPSAiZXJyb3IiOwoJCQkJCWlmICggc3RhdHVzIDwgMCApIHsKCQkJCQkJc3RhdHVzID0gMDsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCS8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0CgkJCWpxWEhSLnN0YXR1cyA9IHN0YXR1czsKCQkJanFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyAiIjsKCgkJCS8vIFN1Y2Nlc3MvRXJyb3IKCQkJaWYgKCBpc1N1Y2Nlc3MgKSB7CgkJCQlkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTsKCQkJfSBlbHNlIHsKCQkJCWRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApOwoJCQl9CgoJCQkvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcwoJCQlqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7CgkJCXN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7CgoJCQlpZiAoIGZpcmVHbG9iYWxzICkgewoJCQkJZ2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIGlzU3VjY2VzcyA/ICJhamF4U3VjY2VzcyIgOiAiYWpheEVycm9yIiwKCQkJCQlbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApOwoJCQl9CgoJCQkvLyBDb21wbGV0ZQoJCQljb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQgXSApOwoKCQkJaWYgKCBmaXJlR2xvYmFscyApIHsKCQkJCWdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheENvbXBsZXRlIiwgWyBqcVhIUiwgcyBdICk7CgoJCQkJLy8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyCgkJCQlpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkgewoJCQkJCWpRdWVyeS5ldmVudC50cmlnZ2VyKCAiYWpheFN0b3AiICk7CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiBqcVhIUjsKCX0sCgoJZ2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7CgkJcmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssICJqc29uIiApOwoJfSwKCglnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkgewoJCXJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssICJzY3JpcHQiICk7Cgl9Cn0gKTsKCmpRdWVyeS5lYWNoKCBbICJnZXQiLCAicG9zdCIgXSwgZnVuY3Rpb24oIF9pLCBtZXRob2QgKSB7CglqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7CgoJCS8vIFNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkCgkJaWYgKCBpc0Z1bmN0aW9uKCBkYXRhICkgKSB7CgkJCXR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrOwoJCQljYWxsYmFjayA9IGRhdGE7CgkJCWRhdGEgPSB1bmRlZmluZWQ7CgkJfQoKCQkvLyBUaGUgdXJsIGNhbiBiZSBhbiBvcHRpb25zIG9iamVjdCAod2hpY2ggdGhlbiBtdXN0IGhhdmUgLnVybCkKCQlyZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHsKCQkJdXJsOiB1cmwsCgkJCXR5cGU6IG1ldGhvZCwKCQkJZGF0YVR5cGU6IHR5cGUsCgkJCWRhdGE6IGRhdGEsCgkJCXN1Y2Nlc3M6IGNhbGxiYWNrCgkJfSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7Cgl9Owp9ICk7CgpqUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7Cgl2YXIgaTsKCWZvciAoIGkgaW4gcy5oZWFkZXJzICkgewoJCWlmICggaS50b0xvd2VyQ2FzZSgpID09PSAiY29udGVudC10eXBlIiApIHsKCQkJcy5jb250ZW50VHlwZSA9IHMuaGVhZGVyc1sgaSBdIHx8ICIiOwoJCX0KCX0KfSApOwoKCmpRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMsIGRvYyApIHsKCXJldHVybiBqUXVlcnkuYWpheCggewoJCXVybDogdXJsLAoKCQkvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKHRyYWMtMTEyNjQpCgkJdHlwZTogIkdFVCIsCgkJZGF0YVR5cGU6ICJzY3JpcHQiLAoJCWNhY2hlOiB0cnVlLAoJCWFzeW5jOiBmYWxzZSwKCQlnbG9iYWw6IGZhbHNlLAoKCQkvLyBPbmx5IGV2YWx1YXRlIHRoZSByZXNwb25zZSBpZiBpdCBpcyBzdWNjZXNzZnVsIChnaC00MTI2KQoJCS8vIGRhdGFGaWx0ZXIgaXMgbm90IGludm9rZWQgZm9yIGZhaWx1cmUgcmVzcG9uc2VzLCBzbyB1c2luZyBpdCBpbnN0ZWFkCgkJLy8gb2YgdGhlIGRlZmF1bHQgY29udmVydGVyIGlzIGtsdWRneSBidXQgaXQgd29ya3MuCgkJY29udmVydGVyczogewoJCQkidGV4dCBzY3JpcHQiOiBmdW5jdGlvbigpIHt9CgkJfSwKCQlkYXRhRmlsdGVyOiBmdW5jdGlvbiggcmVzcG9uc2UgKSB7CgkJCWpRdWVyeS5nbG9iYWxFdmFsKCByZXNwb25zZSwgb3B0aW9ucywgZG9jICk7CgkJfQoJfSApOwp9OwoKCmpRdWVyeS5mbi5leHRlbmQoIHsKCXdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkgewoJCXZhciB3cmFwOwoKCQlpZiAoIHRoaXNbIDAgXSApIHsKCQkJaWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7CgkJCQlodG1sID0gaHRtbC5jYWxsKCB0aGlzWyAwIF0gKTsKCQkJfQoKCQkJLy8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmQKCQkJd3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1sgMCBdLm93bmVyRG9jdW1lbnQgKS5lcSggMCApLmNsb25lKCB0cnVlICk7CgoJCQlpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgewoJCQkJd3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbIDAgXSApOwoJCQl9CgoJCQl3cmFwLm1hcCggZnVuY3Rpb24oKSB7CgkJCQl2YXIgZWxlbSA9IHRoaXM7CgoJCQkJd2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkgewoJCQkJCWVsZW0gPSBlbGVtLmZpcnN0RWxlbWVudENoaWxkOwoJCQkJfQoKCQkJCXJldHVybiBlbGVtOwoJCQl9ICkuYXBwZW5kKCB0aGlzICk7CgkJfQoKCQlyZXR1cm4gdGhpczsKCX0sCgoJd3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHsKCQlpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHsKCQkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7CgkJCQlqUXVlcnkoIHRoaXMgKS53cmFwSW5uZXIoIGh0bWwuY2FsbCggdGhpcywgaSApICk7CgkJCX0gKTsKCQl9CgoJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgewoJCQl2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLAoJCQkJY29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7CgoJCQlpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHsKCQkJCWNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTsKCgkJCX0gZWxzZSB7CgkJCQlzZWxmLmFwcGVuZCggaHRtbCApOwoJCQl9CgkJfSApOwoJfSwKCgl3cmFwOiBmdW5jdGlvbiggaHRtbCApIHsKCQl2YXIgaHRtbElzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCBodG1sICk7CgoJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgewoJCQlqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBodG1sSXNGdW5jdGlvbiA/IGh0bWwuY2FsbCggdGhpcywgaSApIDogaHRtbCApOwoJCX0gKTsKCX0sCgoJdW53cmFwOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CgkJdGhpcy5wYXJlbnQoIHNlbGVjdG9yICkubm90KCAiYm9keSIgKS5lYWNoKCBmdW5jdGlvbigpIHsKCQkJalF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApOwoJCX0gKTsKCQlyZXR1cm4gdGhpczsKCX0KfSApOwoKCmpRdWVyeS5leHByLnBzZXVkb3MuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7CglyZXR1cm4gIWpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSggZWxlbSApOwp9OwpqUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHsKCXJldHVybiAhISggZWxlbS5vZmZzZXRXaWR0aCB8fCBlbGVtLm9mZnNldEhlaWdodCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICk7Cn07CgoKCgpqUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkgewoJdHJ5IHsKCQlyZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpOwoJfSBjYXRjaCAoIGUgKSB7fQp9OwoKdmFyIHhoclN1Y2Nlc3NTdGF0dXMgPSB7CgoJCS8vIEZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwCgkJMDogMjAwLAoKCQkvLyBTdXBwb3J0OiBJRSA8PTkgb25seQoJCS8vIHRyYWMtMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDQKCQkxMjIzOiAyMDQKCX0sCgl4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpOwoKc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCAid2l0aENyZWRlbnRpYWxzIiBpbiB4aHJTdXBwb3J0ZWQgKTsKc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7CgpqUXVlcnkuYWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7Cgl2YXIgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s7CgoJLy8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdAoJaWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkgewoJCXJldHVybiB7CgkJCXNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHsKCQkJCXZhciBpLAoJCQkJCXhociA9IG9wdGlvbnMueGhyKCk7CgoJCQkJeGhyLm9wZW4oCgkJCQkJb3B0aW9ucy50eXBlLAoJCQkJCW9wdGlvbnMudXJsLAoJCQkJCW9wdGlvbnMuYXN5bmMsCgkJCQkJb3B0aW9ucy51c2VybmFtZSwKCQkJCQlvcHRpb25zLnBhc3N3b3JkCgkJCQkpOwoKCQkJCS8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWQKCQkJCWlmICggb3B0aW9ucy54aHJGaWVsZHMgKSB7CgkJCQkJZm9yICggaSBpbiBvcHRpb25zLnhockZpZWxkcyApIHsKCQkJCQkJeGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdOwoJCQkJCX0KCQkJCX0KCgkJCQkvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkCgkJCQlpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7CgkJCQkJeGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTsKCQkJCX0KCgkJCQkvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlcgoJCQkJLy8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZQoJCQkJLy8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS4KCQkJCS8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKQoJCQkJLy8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuCgkJCQlpZiAoICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyAiWC1SZXF1ZXN0ZWQtV2l0aCIgXSApIHsKCQkJCQloZWFkZXJzWyAiWC1SZXF1ZXN0ZWQtV2l0aCIgXSA9ICJYTUxIdHRwUmVxdWVzdCI7CgkJCQl9CgoJCQkJLy8gU2V0IGhlYWRlcnMKCQkJCWZvciAoIGkgaW4gaGVhZGVycyApIHsKCQkJCQl4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7CgkJCQl9CgoJCQkJLy8gQ2FsbGJhY2sKCQkJCWNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7CgkJCQkJcmV0dXJuIGZ1bmN0aW9uKCkgewoJCQkJCQlpZiAoIGNhbGxiYWNrICkgewoJCQkJCQkJY2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9CgkJCQkJCQkJeGhyLm9uZXJyb3IgPSB4aHIub25hYm9ydCA9IHhoci5vbnRpbWVvdXQgPQoJCQkJCQkJCQl4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDsKCgkJCQkJCQlpZiAoIHR5cGUgPT09ICJhYm9ydCIgKSB7CgkJCQkJCQkJeGhyLmFib3J0KCk7CgkJCQkJCQl9IGVsc2UgaWYgKCB0eXBlID09PSAiZXJyb3IiICkgewoKCQkJCQkJCQkvLyBTdXBwb3J0OiBJRSA8PTkgb25seQoJCQkJCQkJCS8vIE9uIGEgbWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93cwoJCQkJCQkJCS8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGUKCQkJCQkJCQlpZiAoIHR5cGVvZiB4aHIuc3RhdHVzICE9PSAibnVtYmVyIiApIHsKCQkJCQkJCQkJY29tcGxldGUoIDAsICJlcnJvciIgKTsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQljb21wbGV0ZSgKCgkJCQkJCQkJCQkvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgdHJhYy04NjA1LCB0cmFjLTE0MjA3CgkJCQkJCQkJCQl4aHIuc3RhdHVzLAoJCQkJCQkJCQkJeGhyLnN0YXR1c1RleHQKCQkJCQkJCQkJKTsKCQkJCQkJCQl9CgkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCWNvbXBsZXRlKAoJCQkJCQkJCQl4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cywKCQkJCQkJCQkJeGhyLnN0YXR1c1RleHQsCgoJCQkJCQkJCQkvLyBTdXBwb3J0OiBJRSA8PTkgb25seQoJCQkJCQkJCQkvLyBJRTkgaGFzIG5vIFhIUjIgYnV0IHRocm93cyBvbiBiaW5hcnkgKHRyYWMtMTE0MjYpCgkJCQkJCQkJCS8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0OTgpCgkJCQkJCQkJCSggeGhyLnJlc3BvbnNlVHlwZSB8fCAidGV4dCIgKSAhPT0gInRleHQiICB8fAoJCQkJCQkJCQl0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gInN0cmluZyIgPwoJCQkJCQkJCQkJeyBiaW5hcnk6IHhoci5yZXNwb25zZSB9IDoKCQkJCQkJCQkJCXsgdGV4dDogeGhyLnJlc3BvbnNlVGV4dCB9LAoJCQkJCQkJCQl4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkKCQkJCQkJCQkpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfTsKCQkJCX07CgoJCQkJLy8gTGlzdGVuIHRvIGV2ZW50cwoJCQkJeGhyLm9ubG9hZCA9IGNhbGxiYWNrKCk7CgkJCQllcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSB4aHIub250aW1lb3V0ID0gY2FsbGJhY2soICJlcnJvciIgKTsKCgkJCQkvLyBTdXBwb3J0OiBJRSA5IG9ubHkKCQkJCS8vIFVzZSBvbnJlYWR5c3RhdGVjaGFuZ2UgdG8gcmVwbGFjZSBvbmFib3J0CgkJCQkvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJvcnRzCgkJCQlpZiAoIHhoci5vbmFib3J0ICE9PSB1bmRlZmluZWQgKSB7CgkJCQkJeGhyLm9uYWJvcnQgPSBlcnJvckNhbGxiYWNrOwoJCQkJfSBlbHNlIHsKCQkJCQl4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CgoJCQkJCQkvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXMKCQkJCQkJaWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHsKCgkJCQkJCQkvLyBBbGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJzdCwKCQkJCQkJCS8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydAoJCQkJCQkJLy8gQWxzbywgc2F2ZSBlcnJvckNhbGxiYWNrIHRvIGEgdmFyaWFibGUKCQkJCQkJCS8vIGFzIHhoci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nlc3NlZAoJCQkJCQkJd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgewoJCQkJCQkJCWlmICggY2FsbGJhY2sgKSB7CgkJCQkJCQkJCWVycm9yQ2FsbGJhY2soKTsKCQkJCQkJCQl9CgkJCQkJCQl9ICk7CgkJCQkJCX0KCQkJCQl9OwoJCQkJfQoKCQkJCS8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2sKCQkJCWNhbGxiYWNrID0gY2FsbGJhY2soICJhYm9ydCIgKTsKCgkJCQl0cnkgewoKCQkJCQkvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pCgkJCQkJeGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApOwoJCQkJfSBjYXRjaCAoIGUgKSB7CgoJCQkJCS8vIHRyYWMtMTQ2ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldAoJCQkJCWlmICggY2FsbGJhY2sgKSB7CgkJCQkJCXRocm93IGU7CgkJCQkJfQoJCQkJfQoJCQl9LAoKCQkJYWJvcnQ6IGZ1bmN0aW9uKCkgewoJCQkJaWYgKCBjYWxsYmFjayApIHsKCQkJCQljYWxsYmFjaygpOwoJCQkJfQoJCQl9CgkJfTsKCX0KfSApOwoKCgoKLy8gUHJldmVudCBhdXRvLWV4ZWN1dGlvbiBvZiBzY3JpcHRzIHdoZW4gbm8gZXhwbGljaXQgZGF0YVR5cGUgd2FzIHByb3ZpZGVkIChTZWUgZ2gtMjQzMikKalF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkgewoJaWYgKCBzLmNyb3NzRG9tYWluICkgewoJCXMuY29udGVudHMuc2NyaXB0ID0gZmFsc2U7Cgl9Cn0gKTsKCi8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlCmpRdWVyeS5hamF4U2V0dXAoIHsKCWFjY2VwdHM6IHsKCQlzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsICIgKwoJCQkiYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0IgoJfSwKCWNvbnRlbnRzOiB7CgkJc2NyaXB0OiAvXGIoPzpqYXZhfGVjbWEpc2NyaXB0XGIvCgl9LAoJY29udmVydGVyczogewoJCSJ0ZXh0IHNjcmlwdCI6IGZ1bmN0aW9uKCB0ZXh0ICkgewoJCQlqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApOwoJCQlyZXR1cm4gdGV4dDsKCQl9Cgl9Cn0gKTsKCi8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgY3Jvc3NEb21haW4KalF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJzY3JpcHQiLCBmdW5jdGlvbiggcyApIHsKCWlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkgewoJCXMuY2FjaGUgPSBmYWxzZTsKCX0KCWlmICggcy5jcm9zc0RvbWFpbiApIHsKCQlzLnR5cGUgPSAiR0VUIjsKCX0KfSApOwoKLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0CmpRdWVyeS5hamF4VHJhbnNwb3J0KCAic2NyaXB0IiwgZnVuY3Rpb24oIHMgKSB7CgoJLy8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiBvciBmb3JjZWQtYnktYXR0cnMgcmVxdWVzdHMKCWlmICggcy5jcm9zc0RvbWFpbiB8fCBzLnNjcmlwdEF0dHJzICkgewoJCXZhciBzY3JpcHQsIGNhbGxiYWNrOwoJCXJldHVybiB7CgkJCXNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHsKCQkJCXNjcmlwdCA9IGpRdWVyeSggIjxzY3JpcHQ+IiApCgkJCQkJLmF0dHIoIHMuc2NyaXB0QXR0cnMgfHwge30gKQoJCQkJCS5wcm9wKCB7IGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCwgc3JjOiBzLnVybCB9ICkKCQkJCQkub24oICJsb2FkIGVycm9yIiwgY2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkgewoJCQkJCQlzY3JpcHQucmVtb3ZlKCk7CgkJCQkJCWNhbGxiYWNrID0gbnVsbDsKCQkJCQkJaWYgKCBldnQgKSB7CgkJCQkJCQljb21wbGV0ZSggZXZ0LnR5cGUgPT09ICJlcnJvciIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7CgkJCQkJCX0KCQkJCQl9ICk7CgoJCQkJLy8gVXNlIG5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIHRvIGF2b2lkIG91ciBkb21NYW5pcCBBSkFYIHRyaWNrZXJ5CgkJCQlkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApOwoJCQl9LAoJCQlhYm9ydDogZnVuY3Rpb24oKSB7CgkJCQlpZiAoIGNhbGxiYWNrICkgewoJCQkJCWNhbGxiYWNrKCk7CgkJCQl9CgkJCX0KCQl9OwoJfQp9ICk7CgoKCgp2YXIgb2xkQ2FsbGJhY2tzID0gW10sCglyanNvbnAgPSAvKD0pXD8oPz0mfCQpfFw/XD8vOwoKLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5ncwpqUXVlcnkuYWpheFNldHVwKCB7Cglqc29ucDogImNhbGxiYWNrIiwKCWpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkgewoJCXZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBhbmRvICsgIl8iICsgKCBub25jZS5ndWlkKysgKSApOwoJCXRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlOwoJCXJldHVybiBjYWxsYmFjazsKCX0KfSApOwoKLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzCmpRdWVyeS5hamF4UHJlZmlsdGVyKCAianNvbiBqc29ucCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHsKCgl2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsCgkJanNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID8KCQkJInVybCIgOgoJCQl0eXBlb2Ygcy5kYXRhID09PSAic3RyaW5nIiAmJgoJCQkJKCBzLmNvbnRlbnRUeXBlIHx8ICIiICkKCQkJCQkuaW5kZXhPZiggImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIgKSA9PT0gMCAmJgoJCQkJcmpzb25wLnRlc3QoIHMuZGF0YSApICYmICJkYXRhIgoJCSk7CgoJLy8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzICJqc29ucCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXQKCWlmICgganNvblByb3AgfHwgcy5kYXRhVHlwZXNbIDAgXSA9PT0gImpzb25wIiApIHsKCgkJLy8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdAoJCWNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxsYmFjayA9IGlzRnVuY3Rpb24oIHMuanNvbnBDYWxsYmFjayApID8KCQkJcy5qc29ucENhbGxiYWNrKCkgOgoJCQlzLmpzb25wQ2FsbGJhY2s7CgoJCS8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGEKCQlpZiAoIGpzb25Qcm9wICkgewoJCQlzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsICIkMSIgKyBjYWxsYmFja05hbWUgKTsKCQl9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHsKCQkJcy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/ICImIiA6ICI/IiApICsgcy5qc29ucCArICI9IiArIGNhbGxiYWNrTmFtZTsKCQl9CgoJCS8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb24KCQlzLmNvbnZlcnRlcnNbICJzY3JpcHQganNvbiIgXSA9IGZ1bmN0aW9uKCkgewoJCQlpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHsKCQkJCWpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgIiB3YXMgbm90IGNhbGxlZCIgKTsKCQkJfQoJCQlyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTsKCQl9OwoKCQkvLyBGb3JjZSBqc29uIGRhdGFUeXBlCgkJcy5kYXRhVHlwZXNbIDAgXSA9ICJqc29uIjsKCgkJLy8gSW5zdGFsbCBjYWxsYmFjawoJCW92ZXJ3cml0dGVuID0gd2luZG93WyBjYWxsYmFja05hbWUgXTsKCQl3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gZnVuY3Rpb24oKSB7CgkJCXJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzOwoJCX07CgoJCS8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKQoJCWpxWEhSLmFsd2F5cyggZnVuY3Rpb24oKSB7CgoJCQkvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXQKCQkJaWYgKCBvdmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVkICkgewoJCQkJalF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUgKTsKCgkJCS8vIE90aGVyd2lzZSByZXN0b3JlIHByZWV4aXN0aW5nIHZhbHVlCgkJCX0gZWxzZSB7CgkJCQl3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47CgkJCX0KCgkJCS8vIFNhdmUgYmFjayBhcyBmcmVlCgkJCWlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7CgoJCQkJLy8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kCgkJCQlzLmpzb25wQ2FsbGJhY2sgPSBvcmlnaW5hbFNldHRpbmdzLmpzb25wQ2FsbGJhY2s7CgoJCQkJLy8gU2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZQoJCQkJb2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApOwoJCQl9CgoJCQkvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2UKCQkJaWYgKCByZXNwb25zZUNvbnRhaW5lciAmJiBpc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkgewoJCQkJb3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTsKCQkJfQoKCQkJcmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDsKCQl9ICk7CgoJCS8vIERlbGVnYXRlIHRvIHNjcmlwdAoJCXJldHVybiAic2NyaXB0IjsKCX0KfSApOwoKCgoKLy8gU3VwcG9ydDogU2FmYXJpIDggb25seQovLyBJbiBTYWZhcmkgOCBkb2N1bWVudHMgY3JlYXRlZCB2aWEgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50Ci8vIGNvbGxhcHNlIHNpYmxpbmcgZm9ybXM6IHRoZSBzZWNvbmQgb25lIGJlY29tZXMgYSBjaGlsZCBvZiB0aGUgZmlyc3Qgb25lLgovLyBCZWNhdXNlIG9mIHRoYXQsIHRoaXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gU2FmYXJpIDguCi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMzcKc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgPSAoIGZ1bmN0aW9uKCkgewoJdmFyIGJvZHkgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoICIiICkuYm9keTsKCWJvZHkuaW5uZXJIVE1MID0gIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+IjsKCXJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyOwp9ICkoKTsKCgovLyBBcmd1bWVudCAiZGF0YSIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sCi8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCwKLy8gZGVmYXVsdHMgdG8gZG9jdW1lbnQKLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZwpqUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkgewoJaWYgKCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIgKSB7CgkJcmV0dXJuIFtdOwoJfQoJaWYgKCB0eXBlb2YgY29udGV4dCA9PT0gImJvb2xlYW4iICkgewoJCWtlZXBTY3JpcHRzID0gY29udGV4dDsKCQljb250ZXh0ID0gZmFsc2U7Cgl9CgoJdmFyIGJhc2UsIHBhcnNlZCwgc2NyaXB0czsKCglpZiAoICFjb250ZXh0ICkgewoKCQkvLyBTdG9wIHNjcmlwdHMgb3IgaW5saW5lIGV2ZW50IGhhbmRsZXJzIGZyb20gYmVpbmcgZXhlY3V0ZWQgaW1tZWRpYXRlbHkKCQkvLyBieSB1c2luZyBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbgoJCWlmICggc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgKSB7CgkJCWNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoICIiICk7CgoJCQkvLyBTZXQgdGhlIGJhc2UgaHJlZiBmb3IgdGhlIGNyZWF0ZWQgZG9jdW1lbnQKCQkJLy8gc28gYW55IHBhcnNlZCBlbGVtZW50cyB3aXRoIFVSTHMKCQkJLy8gYXJlIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIFVSTCAoZ2gtMjk2NSkKCQkJYmFzZSA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCggImJhc2UiICk7CgkJCWJhc2UuaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWY7CgkJCWNvbnRleHQuaGVhZC5hcHBlbmRDaGlsZCggYmFzZSApOwoJCX0gZWxzZSB7CgkJCWNvbnRleHQgPSBkb2N1bWVudDsKCQl9Cgl9CgoJcGFyc2VkID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICk7CglzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtdOwoKCS8vIFNpbmdsZSB0YWcKCWlmICggcGFyc2VkICkgewoJCXJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdOwoJfQoKCXBhcnNlZCA9IGJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3JpcHRzICk7CgoJaWYgKCBzY3JpcHRzICYmIHNjcmlwdHMubGVuZ3RoICkgewoJCWpRdWVyeSggc2NyaXB0cyApLnJlbW92ZSgpOwoJfQoKCXJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBwYXJzZWQuY2hpbGROb2RlcyApOwp9OwoKCi8qKgogKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlCiAqLwpqUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7Cgl2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLAoJCXNlbGYgPSB0aGlzLAoJCW9mZiA9IHVybC5pbmRleE9mKCAiICIgKTsKCglpZiAoIG9mZiA+IC0xICkgewoJCXNlbGVjdG9yID0gc3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApOwoJCXVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7Cgl9CgoJLy8gSWYgaXQncyBhIGZ1bmN0aW9uCglpZiAoIGlzRnVuY3Rpb24oIHBhcmFtcyApICkgewoKCQkvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFjawoJCWNhbGxiYWNrID0gcGFyYW1zOwoJCXBhcmFtcyA9IHVuZGVmaW5lZDsKCgkvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nCgl9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gIm9iamVjdCIgKSB7CgkJdHlwZSA9ICJQT1NUIjsKCX0KCgkvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdAoJaWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7CgkJalF1ZXJ5LmFqYXgoIHsKCQkJdXJsOiB1cmwsCgoJCQkvLyBJZiAidHlwZSIgdmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuICJHRVQiIG1ldGhvZCB3aWxsIGJlIHVzZWQuCgkJCS8vIE1ha2UgdmFsdWUgb2YgdGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZQoJCQkvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2QKCQkJdHlwZTogdHlwZSB8fCAiR0VUIiwKCQkJZGF0YVR5cGU6ICJodG1sIiwKCQkJZGF0YTogcGFyYW1zCgkJfSApLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7CgoJCQkvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2sKCQkJcmVzcG9uc2UgPSBhcmd1bWVudHM7CgoJCQlzZWxmLmh0bWwoIHNlbGVjdG9yID8KCgkJCQkvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXYKCQkJCS8vIEV4Y2x1ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9ycwoJCQkJalF1ZXJ5KCAiPGRpdj4iICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOgoKCQkJCS8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0CgkJCQlyZXNwb25zZVRleHQgKTsKCgkJLy8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyAiZGF0YSIsICJzdGF0dXMiLCAianFYSFIiCgkJLy8gYnV0IHRoZXkgYXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLgoJCS8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgImpxWEhSIiwgInN0YXR1cyIsICJlcnJvciIKCQl9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHsKCQkJc2VsZi5lYWNoKCBmdW5jdGlvbigpIHsKCQkJCWNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7CgkJCX0gKTsKCQl9ICk7Cgl9CgoJcmV0dXJuIHRoaXM7Cn07CgoKCgpqUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7CglyZXR1cm4galF1ZXJ5LmdyZXAoIGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHsKCQlyZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTsKCX0gKS5sZW5ndGg7Cn07CgoKCgpqUXVlcnkub2Zmc2V0ID0gewoJc2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHsKCQl2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLAoJCQlwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sICJwb3NpdGlvbiIgKSwKCQkJY3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLAoJCQlwcm9wcyA9IHt9OwoKCQkvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtCgkJaWYgKCBwb3NpdGlvbiA9PT0gInN0YXRpYyIgKSB7CgkJCWVsZW0uc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwoJCX0KCgkJY3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTsKCQljdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCAidG9wIiApOwoJCWN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCAibGVmdCIgKTsKCQljYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09ICJhYnNvbHV0ZSIgfHwgcG9zaXRpb24gPT09ICJmaXhlZCIgKSAmJgoJCQkoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKCAiYXV0byIgKSA+IC0xOwoKCQkvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlcgoJCS8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZAoJCWlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7CgkJCWN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpOwoJCQljdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7CgkJCWN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0OwoKCQl9IGVsc2UgewoJCQljdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwOwoJCQljdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7CgkJfQoKCQlpZiAoIGlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHsKCgkJCS8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KQoJCQlvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyT2Zmc2V0ICkgKTsKCQl9CgoJCWlmICggb3B0aW9ucy50b3AgIT0gbnVsbCApIHsKCQkJcHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDsKCQl9CgkJaWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHsKCQkJcHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7CgkJfQoKCQlpZiAoICJ1c2luZyIgaW4gb3B0aW9ucyApIHsKCQkJb3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApOwoKCQl9IGVsc2UgewoJCQljdXJFbGVtLmNzcyggcHJvcHMgKTsKCQl9Cgl9Cn07CgpqUXVlcnkuZm4uZXh0ZW5kKCB7CgoJLy8gb2Zmc2V0KCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgYm9yZGVyIGJveCB0byB0aGUgZG9jdW1lbnQgb3JpZ2luCglvZmZzZXQ6IGZ1bmN0aW9uKCBvcHRpb25zICkgewoKCQkvLyBQcmVzZXJ2ZSBjaGFpbmluZyBmb3Igc2V0dGVyCgkJaWYgKCBhcmd1bWVudHMubGVuZ3RoICkgewoJCQlyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8KCQkJCXRoaXMgOgoJCQkJdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHsKCQkJCQlqUXVlcnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApOwoJCQkJfSApOwoJCX0KCgkJdmFyIHJlY3QsIHdpbiwKCQkJZWxlbSA9IHRoaXNbIDAgXTsKCgkJaWYgKCAhZWxlbSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJLy8gUmV0dXJuIHplcm9zIGZvciBkaXNjb25uZWN0ZWQgYW5kIGhpZGRlbiAoZGlzcGxheTogbm9uZSkgZWxlbWVudHMgKGdoLTIzMTApCgkJLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5CgkJLy8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYQoJCS8vIGRpc2Nvbm5lY3RlZCBub2RlIGluIElFIHRocm93cyBhbiBlcnJvcgoJCWlmICggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7CgkJCXJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9OwoJCX0KCgkJLy8gR2V0IGRvY3VtZW50LXJlbGF0aXZlIHBvc2l0aW9uIGJ5IGFkZGluZyB2aWV3cG9ydCBzY3JvbGwgdG8gdmlld3BvcnQtcmVsYXRpdmUgZ0JDUgoJCXJlY3QgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCXdpbiA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldzsKCQlyZXR1cm4gewoJCQl0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0LAoJCQlsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXQKCQl9OwoJfSwKCgkvLyBwb3NpdGlvbigpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIG1hcmdpbiBib3ggdG8gaXRzIG9mZnNldCBwYXJlbnQncyBwYWRkaW5nIGJveAoJLy8gVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgYmVoYXZpb3Igb2YgQ1NTIGFic29sdXRlIHBvc2l0aW9uaW5nCglwb3NpdGlvbjogZnVuY3Rpb24oKSB7CgkJaWYgKCAhdGhpc1sgMCBdICkgewoJCQlyZXR1cm47CgkJfQoKCQl2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsIGRvYywKCQkJZWxlbSA9IHRoaXNbIDAgXSwKCQkJcGFyZW50T2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAgfTsKCgkJLy8gcG9zaXRpb246Zml4ZWQgZWxlbWVudHMgYXJlIG9mZnNldCBmcm9tIHRoZSB2aWV3cG9ydCwgd2hpY2ggaXRzZWxmIGFsd2F5cyBoYXMgemVybyBvZmZzZXQKCQlpZiAoIGpRdWVyeS5jc3MoIGVsZW0sICJwb3NpdGlvbiIgKSA9PT0gImZpeGVkIiApIHsKCgkJCS8vIEFzc3VtZSBwb3NpdGlvbjpmaXhlZCBpbXBsaWVzIGF2YWlsYWJpbGl0eSBvZiBnZXRCb3VuZGluZ0NsaWVudFJlY3QKCQkJb2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCgkJfSBlbHNlIHsKCQkJb2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTsKCgkJCS8vIEFjY291bnQgZm9yIHRoZSAqcmVhbCogb2Zmc2V0IHBhcmVudCwgd2hpY2ggY2FuIGJlIHRoZSBkb2N1bWVudCBvciBpdHMgcm9vdCBlbGVtZW50CgkJCS8vIHdoZW4gYSBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxlbWVudCBpcyBpZGVudGlmaWVkCgkJCWRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDsKCQkJb2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQgfHwgZG9jLmRvY3VtZW50RWxlbWVudDsKCQkJd2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYKCQkJCSggb2Zmc2V0UGFyZW50ID09PSBkb2MuYm9keSB8fCBvZmZzZXRQYXJlbnQgPT09IGRvYy5kb2N1bWVudEVsZW1lbnQgKSAmJgoJCQkJalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCAicG9zaXRpb24iICkgPT09ICJzdGF0aWMiICkgewoKCQkJCW9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5wYXJlbnROb2RlOwoJCQl9CgkJCWlmICggb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPT0gZWxlbSAmJiBvZmZzZXRQYXJlbnQubm9kZVR5cGUgPT09IDEgKSB7CgoJCQkJLy8gSW5jb3Jwb3JhdGUgYm9yZGVycyBpbnRvIGl0cyBvZmZzZXQsIHNpbmNlIHRoZXkgYXJlIG91dHNpZGUgaXRzIGNvbnRlbnQgb3JpZ2luCgkJCQlwYXJlbnRPZmZzZXQgPSBqUXVlcnkoIG9mZnNldFBhcmVudCApLm9mZnNldCgpOwoJCQkJcGFyZW50T2Zmc2V0LnRvcCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsICJib3JkZXJUb3BXaWR0aCIsIHRydWUgKTsKCQkJCXBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgImJvcmRlckxlZnRXaWR0aCIsIHRydWUgKTsKCQkJfQoJCX0KCgkJLy8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2lucwoJCXJldHVybiB7CgkJCXRvcDogb2Zmc2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVlcnkuY3NzKCBlbGVtLCAibWFyZ2luVG9wIiwgdHJ1ZSApLAoJCQlsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0IC0galF1ZXJ5LmNzcyggZWxlbSwgIm1hcmdpbkxlZnQiLCB0cnVlICkKCQl9OwoJfSwKCgkvLyBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBkb2N1bWVudEVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczoKCS8vIDEpIEZvciB0aGUgZWxlbWVudCBpbnNpZGUgdGhlIGlmcmFtZSB3aXRob3V0IG9mZnNldFBhcmVudCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4KCS8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvdwoJLy8gMikgRm9yIHRoZSBoaWRkZW4gb3IgZGV0YWNoZWQgZWxlbWVudAoJLy8gMykgRm9yIGJvZHkgb3IgaHRtbCBlbGVtZW50LCBpLmUuIGluIGNhc2Ugb2YgdGhlIGh0bWwgbm9kZSAtIGl0IHdpbGwgcmV0dXJuIGl0c2VsZgoJLy8KCS8vIGJ1dCB0aG9zZSBleGNlcHRpb25zIHdlcmUgbmV2ZXIgcHJlc2VudGVkIGFzIGEgcmVhbCBsaWZlIHVzZS1jYXNlcwoJLy8gYW5kIG1pZ2h0IGJlIGNvbnNpZGVyZWQgYXMgbW9yZSBwcmVmZXJhYmxlIHJlc3VsdHMuCgkvLwoJLy8gVGhpcyBsb2dpYywgaG93ZXZlciwgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHBvaW50IGluIHRoZSBmdXR1cmUKCW9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHsKCQkJdmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50OwoKCQkJd2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYgalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCAicG9zaXRpb24iICkgPT09ICJzdGF0aWMiICkgewoJCQkJb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDsKCQkJfQoKCQkJcmV0dXJuIG9mZnNldFBhcmVudCB8fCBkb2N1bWVudEVsZW1lbnQ7CgkJfSApOwoJfQp9ICk7CgovLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHMKalF1ZXJ5LmVhY2goIHsgc2Nyb2xsTGVmdDogInBhZ2VYT2Zmc2V0Iiwgc2Nyb2xsVG9wOiAicGFnZVlPZmZzZXQiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7Cgl2YXIgdG9wID0gInBhZ2VZT2Zmc2V0IiA9PT0gcHJvcDsKCglqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHsKCQlyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7CgoJCQkvLyBDb2FsZXNjZSBkb2N1bWVudHMgYW5kIHdpbmRvd3MKCQkJdmFyIHdpbjsKCQkJaWYgKCBpc1dpbmRvdyggZWxlbSApICkgewoJCQkJd2luID0gZWxlbTsKCQkJfSBlbHNlIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHsKCQkJCXdpbiA9IGVsZW0uZGVmYXVsdFZpZXc7CgkJCX0KCgkJCWlmICggdmFsID09PSB1bmRlZmluZWQgKSB7CgkJCQlyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTsKCQkJfQoKCQkJaWYgKCB3aW4gKSB7CgkJCQl3aW4uc2Nyb2xsVG8oCgkJCQkJIXRvcCA/IHZhbCA6IHdpbi5wYWdlWE9mZnNldCwKCQkJCQl0b3AgPyB2YWwgOiB3aW4ucGFnZVlPZmZzZXQKCQkJCSk7CgoJCQl9IGVsc2UgewoJCQkJZWxlbVsgbWV0aG9kIF0gPSB2YWw7CgkJCX0KCQl9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApOwoJfTsKfSApOwoKLy8gU3VwcG9ydDogU2FmYXJpIDw9NyAtIDkuMSwgQ2hyb21lIDw9MzcgLSA0OQovLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvbgovLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODQKLy8gQmxpbmsgYnVnOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD01ODkzNDcKLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodDsKLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmUKalF1ZXJ5LmVhY2goIFsgInRvcCIsICJsZWZ0IiBdLCBmdW5jdGlvbiggX2ksIHByb3AgKSB7CglqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5waXhlbFBvc2l0aW9uLAoJCWZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKCQkJaWYgKCBjb21wdXRlZCApIHsKCQkJCWNvbXB1dGVkID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7CgoJCQkJLy8gSWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0CgkJCQlyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgPwoJCQkJCWpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArICJweCIgOgoJCQkJCWNvbXB1dGVkOwoJCQl9CgkJfQoJKTsKfSApOwoKCi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kcwpqUXVlcnkuZWFjaCggeyBIZWlnaHQ6ICJoZWlnaHQiLCBXaWR0aDogIndpZHRoIiB9LCBmdW5jdGlvbiggbmFtZSwgdHlwZSApIHsKCWpRdWVyeS5lYWNoKCB7CgkJcGFkZGluZzogImlubmVyIiArIG5hbWUsCgkJY29udGVudDogdHlwZSwKCQkiIjogIm91dGVyIiArIG5hbWUKCX0sIGZ1bmN0aW9uKCBkZWZhdWx0RXh0cmEsIGZ1bmNOYW1lICkgewoKCQkvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGgKCQlqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHsKCQkJdmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gImJvb2xlYW4iICksCgkJCQlleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/ICJtYXJnaW4iIDogImJvcmRlciIgKTsKCgkJCXJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHsKCQkJCXZhciBkb2M7CgoJCQkJaWYgKCBpc1dpbmRvdyggZWxlbSApICkgewoKCQkJCQkvLyAkKCB3aW5kb3cgKS5vdXRlcldpZHRoL0hlaWdodCByZXR1cm4gdy9oIGluY2x1ZGluZyBzY3JvbGxiYXJzIChnaC0xNzI5KQoJCQkJCXJldHVybiBmdW5jTmFtZS5pbmRleE9mKCAib3V0ZXIiICkgPT09IDAgPwoJCQkJCQllbGVtWyAiaW5uZXIiICsgbmFtZSBdIDoKCQkJCQkJZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbICJjbGllbnQiICsgbmFtZSBdOwoJCQkJfQoKCQkJCS8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHQKCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHsKCQkJCQlkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDsKCgkJCQkJLy8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLAoJCQkJCS8vIHdoaWNoZXZlciBpcyBncmVhdGVzdAoJCQkJCXJldHVybiBNYXRoLm1heCgKCQkJCQkJZWxlbS5ib2R5WyAic2Nyb2xsIiArIG5hbWUgXSwgZG9jWyAic2Nyb2xsIiArIG5hbWUgXSwKCQkJCQkJZWxlbS5ib2R5WyAib2Zmc2V0IiArIG5hbWUgXSwgZG9jWyAib2Zmc2V0IiArIG5hbWUgXSwKCQkJCQkJZG9jWyAiY2xpZW50IiArIG5hbWUgXQoJCQkJCSk7CgkJCQl9CgoJCQkJcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPwoKCQkJCQkvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0CgkJCQkJalF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6CgoJCQkJCS8vIFNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQKCQkJCQlqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApOwoJCQl9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSApOwoJCX07Cgl9ICk7Cn0gKTsKCgpqUXVlcnkuZWFjaCggWwoJImFqYXhTdGFydCIsCgkiYWpheFN0b3AiLAoJImFqYXhDb21wbGV0ZSIsCgkiYWpheEVycm9yIiwKCSJhamF4U3VjY2VzcyIsCgkiYWpheFNlbmQiCl0sIGZ1bmN0aW9uKCBfaSwgdHlwZSApIHsKCWpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkgewoJCXJldHVybiB0aGlzLm9uKCB0eXBlLCBmbiApOwoJfTsKfSApOwoKCgoKalF1ZXJ5LmZuLmV4dGVuZCggewoKCWJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7CgkJcmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApOwoJfSwKCXVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHsKCQlyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApOwoJfSwKCglkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7CgkJcmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTsKCX0sCgl1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHsKCgkJLy8gKCBuYW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKQoJCXJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8KCQkJdGhpcy5vZmYoIHNlbGVjdG9yLCAiKioiICkgOgoJCQl0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yIHx8ICIqKiIsIGZuICk7Cgl9LAoKCWhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHsKCQlyZXR1cm4gdGhpcwoJCQkub24oICJtb3VzZWVudGVyIiwgZm5PdmVyICkKCQkJLm9uKCAibW91c2VsZWF2ZSIsIGZuT3V0IHx8IGZuT3ZlciApOwoJfQp9ICk7CgpqUXVlcnkuZWFjaCgKCSggImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCByZXNpemUgc2Nyb2xsIGNsaWNrIGRibGNsaWNrICIgKwoJIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlICIgKwoJImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnUiICkuc3BsaXQoICIgIiApLAoJZnVuY3Rpb24oIF9pLCBuYW1lICkgewoKCQkvLyBIYW5kbGUgZXZlbnQgYmluZGluZwoJCWpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkgewoJCQlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgPwoJCQkJdGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6CgkJCQl0aGlzLnRyaWdnZXIoIG5hbWUgKTsKCQl9OwoJfQopOwoKCgoKLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5Ci8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUAovLyBSZXF1aXJlIHRoYXQgdGhlICJ3aGl0ZXNwYWNlIHJ1biIgc3RhcnRzIGZyb20gYSBub24td2hpdGVzcGFjZQovLyB0byBhdm9pZCBPKE5eMikgYmVoYXZpb3Igd2hlbiB0aGUgZW5naW5lIHdvdWxkIHRyeSBtYXRjaGluZyAiXHMrJCIgYXQgZWFjaCBzcGFjZSBwb3NpdGlvbi4KdmFyIHJ0cmltID0gL15bXHNcdUZFRkZceEEwXSt8KFteXHNcdUZFRkZceEEwXSlbXHNcdUZFRkZceEEwXSskL2c7CgovLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnkKLy8gYXJndW1lbnRzLgovLyBqUXVlcnkucHJveHkgaXMgZGVwcmVjYXRlZCB0byBwcm9tb3RlIHN0YW5kYXJkcyAoc3BlY2lmaWNhbGx5IEZ1bmN0aW9uI2JpbmQpCi8vIEhvd2V2ZXIsIGl0IGlzIG5vdCBzbGF0ZWQgZm9yIHJlbW92YWwgYW55IHRpbWUgc29vbgpqUXVlcnkucHJveHkgPSBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7Cgl2YXIgdG1wLCBhcmdzLCBwcm94eTsKCglpZiAoIHR5cGVvZiBjb250ZXh0ID09PSAic3RyaW5nIiApIHsKCQl0bXAgPSBmblsgY29udGV4dCBdOwoJCWNvbnRleHQgPSBmbjsKCQlmbiA9IHRtcDsKCX0KCgkvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlYwoJLy8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC4KCWlmICggIWlzRnVuY3Rpb24oIGZuICkgKSB7CgkJcmV0dXJuIHVuZGVmaW5lZDsKCX0KCgkvLyBTaW11bGF0ZWQgYmluZAoJYXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApOwoJcHJveHkgPSBmdW5jdGlvbigpIHsKCQlyZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTsKCX07CgoJLy8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkCglwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKzsKCglyZXR1cm4gcHJveHk7Cn07CgpqUXVlcnkuaG9sZFJlYWR5ID0gZnVuY3Rpb24oIGhvbGQgKSB7CglpZiAoIGhvbGQgKSB7CgkJalF1ZXJ5LnJlYWR5V2FpdCsrOwoJfSBlbHNlIHsKCQlqUXVlcnkucmVhZHkoIHRydWUgKTsKCX0KfTsKalF1ZXJ5LmlzQXJyYXkgPSBBcnJheS5pc0FycmF5OwpqUXVlcnkucGFyc2VKU09OID0gSlNPTi5wYXJzZTsKalF1ZXJ5Lm5vZGVOYW1lID0gbm9kZU5hbWU7CmpRdWVyeS5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjsKalF1ZXJ5LmlzV2luZG93ID0gaXNXaW5kb3c7CmpRdWVyeS5jYW1lbENhc2UgPSBjYW1lbENhc2U7CmpRdWVyeS50eXBlID0gdG9UeXBlOwoKalF1ZXJ5Lm5vdyA9IERhdGUubm93OwoKalF1ZXJ5LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKCBvYmogKSB7CgoJLy8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG8KCS8vIHN0cmluZ3MgYW5kIG51bWJlcnMgKHByaW1pdGl2ZXMgb3Igb2JqZWN0cykKCS8vIHRoYXQgY2FuIGJlIGNvZXJjZWQgdG8gZmluaXRlIG51bWJlcnMgKGdoLTI2NjIpCgl2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTsKCXJldHVybiAoIHR5cGUgPT09ICJudW1iZXIiIHx8IHR5cGUgPT09ICJzdHJpbmciICkgJiYKCgkJLy8gcGFyc2VGbG9hdCBOYU5zIG51bWVyaWMtY2FzdCBmYWxzZSBwb3NpdGl2ZXMgKCIiKQoJCS8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKCIweC4uLiIpCgkJLy8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOCgkJIWlzTmFOKCBvYmogLSBwYXJzZUZsb2F0KCBvYmogKSApOwp9OwoKalF1ZXJ5LnRyaW0gPSBmdW5jdGlvbiggdGV4dCApIHsKCXJldHVybiB0ZXh0ID09IG51bGwgPwoJCSIiIDoKCQkoIHRleHQgKyAiIiApLnJlcGxhY2UoIHJ0cmltLCAiJDEiICk7Cn07CgoKCi8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlcgovLyBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLCBidXQgbm90IHZpYSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlwdCB0aGF0Ci8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdAovLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlCi8vIGRlcml2ZWQgZnJvbSBmaWxlIG5hbWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxvd2VyY2FzZQovLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHMKLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLgoKLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGQKLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhbgovLyBBTUQgbG9hZGVyIGlzIHByZXNlbnQuIGpRdWVyeSBpcyBhIHNwZWNpYWwgY2FzZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQovLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uCgppZiAoIHR5cGVvZiBkZWZpbmUgPT09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCApIHsKCWRlZmluZSggImpxdWVyeSIsIFtdLCBmdW5jdGlvbigpIHsKCQlyZXR1cm4galF1ZXJ5OwoJfSApOwp9CgoKCgp2YXIKCgkvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGUKCV9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LAoKCS8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlCglfJCA9IHdpbmRvdy4kOwoKalF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHsKCWlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHsKCQl3aW5kb3cuJCA9IF8kOwoJfQoKCWlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7CgkJd2luZG93LmpRdWVyeSA9IF9qUXVlcnk7Cgl9CgoJcmV0dXJuIGpRdWVyeTsKfTsKCi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1ECi8vICh0cmFjLTcxMDIjY29tbWVudDoxMCwgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC81NTcpCi8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKHRyYWMtMTM1NjYpCmlmICggdHlwZW9mIG5vR2xvYmFsID09PSAidW5kZWZpbmVkIiApIHsKCXdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTsKfQoKCgoKcmV0dXJuIGpRdWVyeTsKfSApOwo=]]></data>
	</file>
	<file>
	  <filename>/assets/jquery.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpRdWVyeSB2My43LjEgfCAoYykgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLwohZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZS5kb2N1bWVudD90KGUsITApOmZ1bmN0aW9uKGUpe2lmKCFlLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpO3JldHVybiB0KGUpfTp0KGUpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihpZSxlKXsidXNlIHN0cmljdCI7dmFyIG9lPVtdLHI9T2JqZWN0LmdldFByb3RvdHlwZU9mLGFlPW9lLnNsaWNlLGc9b2UuZmxhdD9mdW5jdGlvbihlKXtyZXR1cm4gb2UuZmxhdC5jYWxsKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gb2UuY29uY2F0LmFwcGx5KFtdLGUpfSxzPW9lLnB1c2gsc2U9b2UuaW5kZXhPZixuPXt9LGk9bi50b1N0cmluZyx1ZT1uLmhhc093blByb3BlcnR5LG89dWUudG9TdHJpbmcsYT1vLmNhbGwoT2JqZWN0KSxsZT17fSx2PWZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYibnVtYmVyIiE9dHlwZW9mIGUubm9kZVR5cGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlLml0ZW19LHk9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJmU9PT1lLndpbmRvd30sQz1pZS5kb2N1bWVudCx1PXt0eXBlOiEwLHNyYzohMCxub25jZTohMCxub01vZHVsZTohMH07ZnVuY3Rpb24gbShlLHQsbil7dmFyIHIsaSxvPShuPW58fEMpLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2lmKG8udGV4dD1lLHQpZm9yKHIgaW4gdSkoaT10W3JdfHx0LmdldEF0dHJpYnV0ZSYmdC5nZXRBdHRyaWJ1dGUocikpJiZvLnNldEF0dHJpYnV0ZShyLGkpO24uaGVhZC5hcHBlbmRDaGlsZChvKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pfWZ1bmN0aW9uIHgoZSl7cmV0dXJuIG51bGw9PWU/ZSsiIjoib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlP25baS5jYWxsKGUpXXx8Im9iamVjdCI6dHlwZW9mIGV9dmFyIHQ9IjMuNy4xIixsPS9IVE1MJC9pLGNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBjZS5mbi5pbml0KGUsdCl9O2Z1bmN0aW9uIGMoZSl7dmFyIHQ9ISFlJiYibGVuZ3RoImluIGUmJmUubGVuZ3RoLG49eChlKTtyZXR1cm4hdihlKSYmIXkoZSkmJigiYXJyYXkiPT09bnx8MD09PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmMDx0JiZ0LTEgaW4gZSl9ZnVuY3Rpb24gZmUoZSx0KXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dC50b0xvd2VyQ2FzZSgpfWNlLmZuPWNlLnByb3RvdHlwZT17anF1ZXJ5OnQsY29uc3RydWN0b3I6Y2UsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBhZS5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/YWUuY2FsbCh0aGlzKTplPDA/dGhpc1tlK3RoaXMubGVuZ3RoXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9Y2UubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLGUpO3JldHVybiB0LnByZXZPYmplY3Q9dGhpcyx0fSxlYWNoOmZ1bmN0aW9uKGUpe3JldHVybiBjZS5lYWNoKHRoaXMsZSl9LG1hcDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soY2UubWFwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCxlKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sZXZlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhjZS5ncmVwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4odCsxKSUyfSkpfSxvZGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soY2UuZ3JlcCh0aGlzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQlMn0pKX0sZXE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZW5ndGgsbj0rZSsoZTwwP3Q6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKDA8PW4mJm48dD9bdGhpc1tuXV06W10pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKCl9LHB1c2g6cyxzb3J0Om9lLnNvcnQsc3BsaWNlOm9lLnNwbGljZX0sY2UuZXh0ZW5kPWNlLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBlLHQsbixyLGksbyxhPWFyZ3VtZW50c1swXXx8e30scz0xLHU9YXJndW1lbnRzLmxlbmd0aCxsPSExO2ZvcigiYm9vbGVhbiI9PXR5cGVvZiBhJiYobD1hLGE9YXJndW1lbnRzW3NdfHx7fSxzKyspLCJvYmplY3QiPT10eXBlb2YgYXx8dihhKXx8KGE9e30pLHM9PT11JiYoYT10aGlzLHMtLSk7czx1O3MrKylpZihudWxsIT0oZT1hcmd1bWVudHNbc10pKWZvcih0IGluIGUpcj1lW3RdLCJfX3Byb3RvX18iIT09dCYmYSE9PXImJihsJiZyJiYoY2UuaXNQbGFpbk9iamVjdChyKXx8KGk9QXJyYXkuaXNBcnJheShyKSkpPyhuPWFbdF0sbz1pJiYhQXJyYXkuaXNBcnJheShuKT9bXTppfHxjZS5pc1BsYWluT2JqZWN0KG4pP246e30saT0hMSxhW3RdPWNlLmV4dGVuZChsLG8scikpOnZvaWQgMCE9PXImJihhW3RdPXIpKTtyZXR1cm4gYX0sY2UuZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyh0K01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKGUpfSxub29wOmZ1bmN0aW9uKCl7fSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuISghZXx8IltvYmplY3QgT2JqZWN0XSIhPT1pLmNhbGwoZSkpJiYoISh0PXIoZSkpfHwiZnVuY3Rpb24iPT10eXBlb2Yobj11ZS5jYWxsKHQsImNvbnN0cnVjdG9yIikmJnQuY29uc3RydWN0b3IpJiZvLmNhbGwobik9PT1hKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXJldHVybiExO3JldHVybiEwfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGUsdCxuKXttKGUse25vbmNlOnQmJnQubm9uY2V9LG4pfSxlYWNoOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wO2lmKGMoZSkpe2ZvcihuPWUubGVuZ3RoO3I8bjtyKyspaWYoITE9PT10LmNhbGwoZVtyXSxyLGVbcl0pKWJyZWFrfWVsc2UgZm9yKHIgaW4gZSlpZighMT09PXQuY2FsbChlW3JdLHIsZVtyXSkpYnJlYWs7cmV0dXJuIGV9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj0iIixyPTAsaT1lLm5vZGVUeXBlO2lmKCFpKXdoaWxlKHQ9ZVtyKytdKW4rPWNlLnRleHQodCk7cmV0dXJuIDE9PT1pfHwxMT09PWk/ZS50ZXh0Q29udGVudDo5PT09aT9lLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudDozPT09aXx8ND09PWk/ZS5ub2RlVmFsdWU6bn0sbWFrZUFycmF5OmZ1bmN0aW9uKGUsdCl7dmFyIG49dHx8W107cmV0dXJuIG51bGwhPWUmJihjKE9iamVjdChlKSk/Y2UubWVyZ2Uobiwic3RyaW5nIj09dHlwZW9mIGU/W2VdOmUpOnMuY2FsbChuLGUpKSxufSxpbkFycmF5OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09dD8tMTpzZS5jYWxsKHQsZSxuKX0saXNYTUxEb2M6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5uYW1lc3BhY2VVUkksbj1lJiYoZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIWwudGVzdCh0fHxuJiZuLm5vZGVOYW1lfHwiSFRNTCIpfSxtZXJnZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0rdC5sZW5ndGgscj0wLGk9ZS5sZW5ndGg7cjxuO3IrKyllW2krK109dFtyXTtyZXR1cm4gZS5sZW5ndGg9aSxlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9W10saT0wLG89ZS5sZW5ndGgsYT0hbjtpPG87aSsrKSF0KGVbaV0saSkhPT1hJiZyLnB1c2goZVtpXSk7cmV0dXJuIHJ9LG1hcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPTAsYT1bXTtpZihjKGUpKWZvcihyPWUubGVuZ3RoO288cjtvKyspbnVsbCE9KGk9dChlW29dLG8sbikpJiZhLnB1c2goaSk7ZWxzZSBmb3IobyBpbiBlKW51bGwhPShpPXQoZVtvXSxvLG4pKSYmYS5wdXNoKGkpO3JldHVybiBnKGEpfSxndWlkOjEsc3VwcG9ydDpsZX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihjZS5mbltTeW1ib2wuaXRlcmF0b3JdPW9lW1N5bWJvbC5pdGVyYXRvcl0pLGNlLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7blsiW29iamVjdCAiK3QrIl0iXT10LnRvTG93ZXJDYXNlKCl9KTt2YXIgcGU9b2UucG9wLGRlPW9lLnNvcnQsaGU9b2Uuc3BsaWNlLGdlPSJbXFx4MjBcXHRcXHJcXG5cXGZdIix2ZT1uZXcgUmVnRXhwKCJeIitnZSsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitnZSsiKyQiLCJnIik7Y2UuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10JiZ0LnBhcmVudE5vZGU7cmV0dXJuIGU9PT1ufHwhKCFufHwxIT09bi5ub2RlVHlwZXx8IShlLmNvbnRhaW5zP2UuY29udGFpbnMobik6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuKSkpfTt2YXIgZj0vKFtcMC1ceDFmXHg3Zl18Xi0/XGQpfF4tJHxbXlx4ODAtXHVGRkZGXHctXS9nO2Z1bmN0aW9uIHAoZSx0KXtyZXR1cm4gdD8iXDAiPT09ZT8iXHVmZmZkIjplLnNsaWNlKDAsLTEpKyJcXCIrZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpLnRvU3RyaW5nKDE2KSsiICI6IlxcIitlfWNlLmVzY2FwZVNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKGYscCl9O3ZhciB5ZT1DLG1lPXM7IWZ1bmN0aW9uKCl7dmFyIGUsYix3LG8sYSxULHIsQyxkLGksaz1tZSxTPWNlLmV4cGFuZG8sRT0wLG49MCxzPVcoKSxjPVcoKSx1PVcoKSxoPVcoKSxsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10JiYoYT0hMCksMH0sZj0iY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLHQ9Iig/OlxcXFxbXFxkYS1mQS1GXXsxLDZ9IitnZSsiP3xcXFxcW15cXHJcXG5cXGZdfFtcXHctXXxbXlwwLVxceDdmXSkrIixwPSJcXFsiK2dlKyIqKCIrdCsiKSg/OiIrZ2UrIiooWypeJHwhfl0/PSkiK2dlKyIqKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCJ8KCIrdCsiKSl8KSIrZ2UrIipcXF0iLGc9IjooIit0KyIpKD86XFwoKCgnKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcIil8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IitwKyIpKil8LiopXFwpfCkiLHY9bmV3IFJlZ0V4cChnZSsiKyIsImciKSx5PW5ldyBSZWdFeHAoIl4iK2dlKyIqLCIrZ2UrIioiKSxtPW5ldyBSZWdFeHAoIl4iK2dlKyIqKFs+K35dfCIrZ2UrIikiK2dlKyIqIikseD1uZXcgUmVnRXhwKGdlKyJ8PiIpLGo9bmV3IFJlZ0V4cChnKSxBPW5ldyBSZWdFeHAoIl4iK3QrIiQiKSxEPXtJRDpuZXcgUmVnRXhwKCJeIygiK3QrIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrdCsiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrdCsifFsqXSkiKSxBVFRSOm5ldyBSZWdFeHAoIl4iK3ApLFBTRVVETzpuZXcgUmVnRXhwKCJeIitnKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK2dlKyIqKGV2ZW58b2RkfCgoWystXXwpKFxcZCopbnwpIitnZSsiKig/OihbKy1dfCkiK2dlKyIqKFxcZCspfCkpIitnZSsiKlxcKXwpIiwiaSIpLGJvb2w6bmV3IFJlZ0V4cCgiXig/OiIrZisiKSQiLCJpIiksbmVlZHNDb250ZXh0Om5ldyBSZWdFeHAoIl4iK2dlKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK2dlKyIqKCg/Oi1cXGQpP1xcZCopIitnZSsiKlxcKXwpKD89W14tXXwkKSIsImkiKX0sTj0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLHE9L15oXGQkL2ksTD0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLEg9L1srfl0vLE89bmV3IFJlZ0V4cCgiXFxcXFtcXGRhLWZBLUZdezEsNn0iK2dlKyI/fFxcXFwoW15cXHJcXG5cXGZdKSIsImciKSxQPWZ1bmN0aW9uKGUsdCl7dmFyIG49IjB4IitlLnNsaWNlKDEpLTY1NTM2O3JldHVybiB0fHwobjwwP1N0cmluZy5mcm9tQ2hhckNvZGUobis2NTUzNik6U3RyaW5nLmZyb21DaGFyQ29kZShuPj4xMHw1NTI5NiwxMDIzJm58NTYzMjApKX0sTT1mdW5jdGlvbigpe1YoKX0sUj1KKGZ1bmN0aW9uKGUpe3JldHVybiEwPT09ZS5kaXNhYmxlZCYmZmUoZSwiZmllbGRzZXQiKX0se2RpcjoicGFyZW50Tm9kZSIsbmV4dDoibGVnZW5kIn0pO3RyeXtrLmFwcGx5KG9lPWFlLmNhbGwoeWUuY2hpbGROb2RlcykseWUuY2hpbGROb2Rlcyksb2VbeWUuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGUpe2s9e2FwcGx5OmZ1bmN0aW9uKGUsdCl7bWUuYXBwbHkoZSxhZS5jYWxsKHQpKX0sY2FsbDpmdW5jdGlvbihlKXttZS5hcHBseShlLGFlLmNhbGwoYXJndW1lbnRzLDEpKX19fWZ1bmN0aW9uIEkodCxlLG4scil7dmFyIGksbyxhLHMsdSxsLGMsZj1lJiZlLm93bmVyRG9jdW1lbnQscD1lP2Uubm9kZVR5cGU6OTtpZihuPW58fFtdLCJzdHJpbmciIT10eXBlb2YgdHx8IXR8fDEhPT1wJiY5IT09cCYmMTEhPT1wKXJldHVybiBuO2lmKCFyJiYoVihlKSxlPWV8fFQsQykpe2lmKDExIT09cCYmKHU9TC5leGVjKHQpKSlpZihpPXVbMV0pe2lmKDk9PT1wKXtpZighKGE9ZS5nZXRFbGVtZW50QnlJZChpKSkpcmV0dXJuIG47aWYoYS5pZD09PWkpcmV0dXJuIGsuY2FsbChuLGEpLG59ZWxzZSBpZihmJiYoYT1mLmdldEVsZW1lbnRCeUlkKGkpKSYmSS5jb250YWlucyhlLGEpJiZhLmlkPT09aSlyZXR1cm4gay5jYWxsKG4sYSksbn1lbHNle2lmKHVbMl0pcmV0dXJuIGsuYXBwbHkobixlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHQpKSxuO2lmKChpPXVbM10pJiZlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIGsuYXBwbHkobixlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaSkpLG59aWYoIShoW3QrIiAiXXx8ZCYmZC50ZXN0KHQpKSl7aWYoYz10LGY9ZSwxPT09cCYmKHgudGVzdCh0KXx8bS50ZXN0KHQpKSl7KGY9SC50ZXN0KHQpJiZVKGUucGFyZW50Tm9kZSl8fGUpPT1lJiZsZS5zY29wZXx8KChzPWUuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPWNlLmVzY2FwZVNlbGVjdG9yKHMpOmUuc2V0QXR0cmlidXRlKCJpZCIscz1TKSksbz0obD1ZKHQpKS5sZW5ndGg7d2hpbGUoby0tKWxbb109KHM/IiMiK3M6IjpzY29wZSIpKyIgIitRKGxbb10pO2M9bC5qb2luKCIsIil9dHJ5e3JldHVybiBrLmFwcGx5KG4sZi5xdWVyeVNlbGVjdG9yQWxsKGMpKSxufWNhdGNoKGUpe2godCwhMCl9ZmluYWxseXtzPT09UyYmZS5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4gcmUodC5yZXBsYWNlKHZlLCIkMSIpLGUsbixyKX1mdW5jdGlvbiBXKCl7dmFyIHI9W107cmV0dXJuIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gci5wdXNoKHQrIiAiKT5iLmNhY2hlTGVuZ3RoJiZkZWxldGUgZVtyLnNoaWZ0KCldLGVbdCsiICJdPW59fWZ1bmN0aW9uIEYoZSl7cmV0dXJuIGVbU109ITAsZX1mdW5jdGlvbiAkKGUpe3ZhciB0PVQuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKTt0cnl7cmV0dXJuISFlKHQpfWNhdGNoKGUpe3JldHVybiExfWZpbmFsbHl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdD1udWxsfX1mdW5jdGlvbiBCKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZmUoZSwiaW5wdXQiKSYmZS50eXBlPT09dH19ZnVuY3Rpb24gXyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuKGZlKGUsImlucHV0Iil8fGZlKGUsImJ1dHRvbiIpKSYmZS50eXBlPT09dH19ZnVuY3Rpb24geih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuImZvcm0iaW4gZT9lLnBhcmVudE5vZGUmJiExPT09ZS5kaXNhYmxlZD8ibGFiZWwiaW4gZT8ibGFiZWwiaW4gZS5wYXJlbnROb2RlP2UucGFyZW50Tm9kZS5kaXNhYmxlZD09PXQ6ZS5kaXNhYmxlZD09PXQ6ZS5pc0Rpc2FibGVkPT09dHx8ZS5pc0Rpc2FibGVkIT09IXQmJlIoZSk9PT10OmUuZGlzYWJsZWQ9PT10OiJsYWJlbCJpbiBlJiZlLmRpc2FibGVkPT09dH19ZnVuY3Rpb24gWChhKXtyZXR1cm4gRihmdW5jdGlvbihvKXtyZXR1cm4gbz0rbyxGKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKFtdLGUubGVuZ3RoLG8pLGk9ci5sZW5ndGg7d2hpbGUoaS0tKWVbbj1yW2ldXSYmKGVbbl09ISh0W25dPWVbbl0pKX0pfSl9ZnVuY3Rpb24gVShlKXtyZXR1cm4gZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEVsZW1lbnRzQnlUYWdOYW1lJiZlfWZ1bmN0aW9uIFYoZSl7dmFyIHQsbj1lP2Uub3duZXJEb2N1bWVudHx8ZTp5ZTtyZXR1cm4gbiE9VCYmOT09PW4ubm9kZVR5cGUmJm4uZG9jdW1lbnRFbGVtZW50JiYocj0oVD1uKS5kb2N1bWVudEVsZW1lbnQsQz0hY2UuaXNYTUxEb2MoVCksaT1yLm1hdGNoZXN8fHIud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxyLm1zTWF0Y2hlc1NlbGVjdG9yLHIubXNNYXRjaGVzU2VsZWN0b3ImJnllIT1UJiYodD1ULmRlZmF1bHRWaWV3KSYmdC50b3AhPT10JiZ0LmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsTSksbGUuZ2V0QnlJZD0kKGZ1bmN0aW9uKGUpe3JldHVybiByLmFwcGVuZENoaWxkKGUpLmlkPWNlLmV4cGFuZG8sIVQuZ2V0RWxlbWVudHNCeU5hbWV8fCFULmdldEVsZW1lbnRzQnlOYW1lKGNlLmV4cGFuZG8pLmxlbmd0aH0pLGxlLmRpc2Nvbm5lY3RlZE1hdGNoPSQoZnVuY3Rpb24oZSl7cmV0dXJuIGkuY2FsbChlLCIqIil9KSxsZS5zY29wZT0kKGZ1bmN0aW9uKCl7cmV0dXJuIFQucXVlcnlTZWxlY3RvckFsbCgiOnNjb3BlIil9KSxsZS5jc3NIYXM9JChmdW5jdGlvbigpe3RyeXtyZXR1cm4gVC5xdWVyeVNlbGVjdG9yKCI6aGFzKCosOmpxZmFrZSkiKSwhMX1jYXRjaChlKXtyZXR1cm4hMH19KSxsZS5nZXRCeUlkPyhiLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoTyxQKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJpZCIpPT09dH19LGIuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50QnlJZCYmQyl7dmFyIG49dC5nZXRFbGVtZW50QnlJZChlKTtyZXR1cm4gbj9bbl06W119fSk6KGIuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciBuPWUucmVwbGFjZShPLFApO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiB0JiZ0LnZhbHVlPT09bn19LGIuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50QnlJZCYmQyl7dmFyIG4scixpLG89dC5nZXRFbGVtZW50QnlJZChlKTtpZihvKXtpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb107aT10LmdldEVsZW1lbnRzQnlOYW1lKGUpLHI9MDt3aGlsZShvPWlbcisrXSlpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb119cmV0dXJuW119fSksYi5maW5kLlRBRz1mdW5jdGlvbihlLHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50c0J5VGFnTmFtZT90LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpOnQucXVlcnlTZWxlY3RvckFsbChlKX0sYi5maW5kLkNMQVNTPWZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJkMpcmV0dXJuIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKX0sZD1bXSwkKGZ1bmN0aW9uKGUpe3ZhciB0O3IuYXBwZW5kQ2hpbGQoZSkuaW5uZXJIVE1MPSI8YSBpZD0nIitTKyInIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+PHNlbGVjdCBpZD0nIitTKyItXHJcXCcgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsZS5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RofHxkLnB1c2goIlxcWyIrZ2UrIiooPzp2YWx1ZXwiK2YrIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZH49IitTKyItXSIpLmxlbmd0aHx8ZC5wdXNoKCJ+PSIpLGUucXVlcnlTZWxlY3RvckFsbCgiYSMiK1MrIisqIikubGVuZ3RofHxkLnB1c2goIi4jLitbK35dIiksZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aHx8ZC5wdXNoKCI6Y2hlY2tlZCIpLCh0PVQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkuc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJEIiksci5hcHBlbmRDaGlsZChlKS5kaXNhYmxlZD0hMCwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZGlzYWJsZWQiKS5sZW5ndGgmJmQucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSwodD1ULmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnNldEF0dHJpYnV0ZSgibmFtZSIsIiIpLGUuYXBwZW5kQ2hpbGQodCksZS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT0nJ10iKS5sZW5ndGh8fGQucHVzaCgiXFxbIitnZSsiKm5hbWUiK2dlKyIqPSIrZ2UrIiooPzonJ3xcIlwiKSIpfSksbGUuY3NzSGFzfHxkLnB1c2goIjpoYXMiKSxkPWQubGVuZ3RoJiZuZXcgUmVnRXhwKGQuam9pbigifCIpKSxsPWZ1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGE9ITAsMDt2YXIgbj0hZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gbnx8KDEmKG49KGUub3duZXJEb2N1bWVudHx8ZSk9PSh0Lm93bmVyRG9jdW1lbnR8fHQpP2UuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk6MSl8fCFsZS5zb3J0RGV0YWNoZWQmJnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSk9PT1uP2U9PT1UfHxlLm93bmVyRG9jdW1lbnQ9PXllJiZJLmNvbnRhaW5zKHllLGUpPy0xOnQ9PT1UfHx0Lm93bmVyRG9jdW1lbnQ9PXllJiZJLmNvbnRhaW5zKHllLHQpPzE6bz9zZS5jYWxsKG8sZSktc2UuY2FsbChvLHQpOjA6NCZuPy0xOjEpfSksVH1mb3IoZSBpbiBJLm1hdGNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSShlLG51bGwsbnVsbCx0KX0sSS5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oZSx0KXtpZihWKGUpLEMmJiFoW3QrIiAiXSYmKCFkfHwhZC50ZXN0KHQpKSl0cnl7dmFyIG49aS5jYWxsKGUsdCk7aWYobnx8bGUuZGlzY29ubmVjdGVkTWF0Y2h8fGUuZG9jdW1lbnQmJjExIT09ZS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gbn1jYXRjaChlKXtoKHQsITApfXJldHVybiAwPEkodCxULG51bGwsW2VdKS5sZW5ndGh9LEkuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9VCYmVihlKSxjZS5jb250YWlucyhlLHQpfSxJLmF0dHI9ZnVuY3Rpb24oZSx0KXsoZS5vd25lckRvY3VtZW50fHxlKSE9VCYmVihlKTt2YXIgbj1iLmF0dHJIYW5kbGVbdC50b0xvd2VyQ2FzZSgpXSxyPW4mJnVlLmNhbGwoYi5hdHRySGFuZGxlLHQudG9Mb3dlckNhc2UoKSk/bihlLHQsIUMpOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09cj9yOmUuZ2V0QXR0cmlidXRlKHQpfSxJLmVycm9yPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sY2UudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIgdCxuPVtdLHI9MCxpPTA7aWYoYT0hbGUuc29ydFN0YWJsZSxvPSFsZS5zb3J0U3RhYmxlJiZhZS5jYWxsKGUsMCksZGUuY2FsbChlLGwpLGEpe3doaWxlKHQ9ZVtpKytdKXQ9PT1lW2ldJiYocj1uLnB1c2goaSkpO3doaWxlKHItLSloZS5jYWxsKGUsbltyXSwxKX1yZXR1cm4gbz1udWxsLGV9LGNlLmZuLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soY2UudW5pcXVlU29ydChhZS5hcHBseSh0aGlzKSkpfSwoYj1jZS5leHByPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86RixtYXRjaDpELGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnJlcGxhY2UoTyxQKSxlWzNdPShlWzNdfHxlWzRdfHxlWzVdfHwiIikucmVwbGFjZShPLFApLCJ+PSI9PT1lWzJdJiYoZVszXT0iICIrZVszXSsiICIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2FzZSgpLCJudGgiPT09ZVsxXS5zbGljZSgwLDMpPyhlWzNdfHxJLmVycm9yKGVbMF0pLGVbNF09KyhlWzRdP2VbNV0rKGVbNl18fDEpOjIqKCJldmVuIj09PWVbM118fCJvZGQiPT09ZVszXSkpLGVbNV09KyhlWzddK2VbOF18fCJvZGQiPT09ZVszXSkpOmVbM10mJkkuZXJyb3IoZVswXSksZX0sUFNFVURPOmZ1bmN0aW9uKGUpe3ZhciB0LG49IWVbNl0mJmVbMl07cmV0dXJuIEQuQ0hJTEQudGVzdChlWzBdKT9udWxsOihlWzNdP2VbMl09ZVs0XXx8ZVs1XXx8IiI6biYmai50ZXN0KG4pJiYodD1ZKG4sITApKSYmKHQ9bi5pbmRleE9mKCIpIixuLmxlbmd0aC10KS1uLmxlbmd0aCkmJihlWzBdPWVbMF0uc2xpY2UoMCx0KSxlWzJdPW4uc2xpY2UoMCx0KSksZS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShPLFApLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09ZT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihlKXtyZXR1cm4gZmUoZSx0KX19LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PXNbZSsiICJdO3JldHVybiB0fHwodD1uZXcgUmVnRXhwKCIoXnwiK2dlKyIpIitlKyIoIitnZSsifCQpIikpJiZzKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQudGVzdCgic3RyaW5nIj09dHlwZW9mIGUuY2xhc3NOYW1lJiZlLmNsYXNzTmFtZXx8InVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEF0dHJpYnV0ZSYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKG4scixpKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9SS5hdHRyKGUsbik7cmV0dXJuIG51bGw9PXQ/IiE9Ij09PXI6IXJ8fCh0Kz0iIiwiPSI9PT1yP3Q9PT1pOiIhPSI9PT1yP3QhPT1pOiJePSI9PT1yP2kmJjA9PT10LmluZGV4T2YoaSk6Iio9Ij09PXI/aSYmLTE8dC5pbmRleE9mKGkpOiIkPSI9PT1yP2kmJnQuc2xpY2UoLWkubGVuZ3RoKT09PWk6In49Ij09PXI/LTE8KCIgIit0LnJlcGxhY2UodiwiICIpKyIgIikuaW5kZXhPZihpKToifD0iPT09ciYmKHQ9PT1pfHx0LnNsaWNlKDAsaS5sZW5ndGgrMSk9PT1pKyItIikpfX0sQ0hJTEQ6ZnVuY3Rpb24oZCxlLHQsaCxnKXt2YXIgdj0ibnRoIiE9PWQuc2xpY2UoMCwzKSx5PSJsYXN0IiE9PWQuc2xpY2UoLTQpLG09Im9mLXR5cGUiPT09ZTtyZXR1cm4gMT09PWgmJjA9PT1nP2Z1bmN0aW9uKGUpe3JldHVybiEhZS5wYXJlbnROb2RlfTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1PXYhPT15PyJuZXh0U2libGluZyI6InByZXZpb3VzU2libGluZyIsbD1lLnBhcmVudE5vZGUsYz1tJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksZj0hbiYmIW0scD0hMTtpZihsKXtpZih2KXt3aGlsZSh1KXtvPWU7d2hpbGUobz1vW3VdKWlmKG0/ZmUobyxjKToxPT09by5ub2RlVHlwZSlyZXR1cm4hMTtzPXU9Im9ubHkiPT09ZCYmIXMmJiJuZXh0U2libGluZyJ9cmV0dXJuITB9aWYocz1beT9sLmZpcnN0Q2hpbGQ6bC5sYXN0Q2hpbGRdLHkmJmYpe3A9KGE9KHI9KGk9bFtTXXx8KGxbU109e30pKVtkXXx8W10pWzBdPT09RSYmclsxXSkmJnJbMl0sbz1hJiZsLmNoaWxkTm9kZXNbYV07d2hpbGUobz0rK2EmJm8mJm9bdV18fChwPWE9MCl8fHMucG9wKCkpaWYoMT09PW8ubm9kZVR5cGUmJisrcCYmbz09PWUpe2lbZF09W0UsYSxwXTticmVha319ZWxzZSBpZihmJiYocD1hPShyPShpPWVbU118fChlW1NdPXt9KSlbZF18fFtdKVswXT09PUUmJnJbMV0pLCExPT09cCl3aGlsZShvPSsrYSYmbyYmb1t1XXx8KHA9YT0wKXx8cy5wb3AoKSlpZigobT9mZShvLGMpOjE9PT1vLm5vZGVUeXBlKSYmKytwJiYoZiYmKChpPW9bU118fChvW1NdPXt9KSlbZF09W0UscF0pLG89PT1lKSlicmVhaztyZXR1cm4ocC09Zyk9PT1ofHxwJWg9PTAmJjA8PXAvaH19fSxQU0VVRE86ZnVuY3Rpb24oZSxvKXt2YXIgdCxhPWIucHNldWRvc1tlXXx8Yi5zZXRGaWx0ZXJzW2UudG9Mb3dlckNhc2UoKV18fEkuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIitlKTtyZXR1cm4gYVtTXT9hKG8pOjE8YS5sZW5ndGg/KHQ9W2UsZSwiIixvXSxiLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT9GKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKGUsbyksaT1yLmxlbmd0aDt3aGlsZShpLS0pZVtuPXNlLmNhbGwoZSxyW2ldKV09ISh0W25dPXJbaV0pfSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSwwLHQpfSk6YX19LHBzZXVkb3M6e25vdDpGKGZ1bmN0aW9uKGUpe3ZhciByPVtdLGk9W10scz1uZShlLnJlcGxhY2UodmUsIiQxIikpO3JldHVybiBzW1NdP0YoZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1zKGUsbnVsbCxyLFtdKSxhPWUubGVuZ3RoO3doaWxlKGEtLSkoaT1vW2FdKSYmKGVbYV09ISh0W2FdPWkpKX0pOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gclswXT1lLHMocixudWxsLG4saSksclswXT1udWxsLCFpLnBvcCgpfX0pLGhhczpGKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gMDxJKHQsZSkubGVuZ3RofX0pLGNvbnRhaW5zOkYoZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC5yZXBsYWNlKE8sUCksZnVuY3Rpb24oZSl7cmV0dXJuLTE8KGUudGV4dENvbnRlbnR8fGNlLnRleHQoZSkpLmluZGV4T2YodCl9fSksbGFuZzpGKGZ1bmN0aW9uKG4pe3JldHVybiBBLnRlc3Qobnx8IiIpfHxJLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK24pLG49bi5yZXBsYWNlKE8sUCkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihlKXt2YXIgdDtkb3tpZih0PUM/ZS5sYW5nOmUuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHxlLmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybih0PXQudG9Mb3dlckNhc2UoKSk9PT1ufHwwPT09dC5pbmRleE9mKG4rIi0iKX13aGlsZSgoZT1lLnBhcmVudE5vZGUpJiYxPT09ZS5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWllLmxvY2F0aW9uJiZpZS5sb2NhdGlvbi5oYXNoO3JldHVybiB0JiZ0LnNsaWNlKDEpPT09ZS5pZH0scm9vdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXJ9LGZvY3VzOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIFQuYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fSgpJiZULmhhc0ZvY3VzKCkmJiEhKGUudHlwZXx8ZS5ocmVmfHx+ZS50YWJJbmRleCl9LGVuYWJsZWQ6eighMSksZGlzYWJsZWQ6eighMCksY2hlY2tlZDpmdW5jdGlvbihlKXtyZXR1cm4gZmUoZSwiaW5wdXQiKSYmISFlLmNoZWNrZWR8fGZlKGUsIm9wdGlvbiIpJiYhIWUuc2VsZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LCEwPT09ZS5zZWxlY3RlZH0sZW1wdHk6ZnVuY3Rpb24oZSl7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKWlmKGUubm9kZVR5cGU8NilyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiFiLnBzZXVkb3MuZW1wdHkoZSl9LGhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gcS50ZXN0KGUubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihlKXtyZXR1cm4gTi50ZXN0KGUubm9kZU5hbWUpfSxidXR0b246ZnVuY3Rpb24oZSl7cmV0dXJuIGZlKGUsImlucHV0IikmJiJidXR0b24iPT09ZS50eXBlfHxmZShlLCJidXR0b24iKX0sdGV4dDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZmUoZSwiaW5wdXQiKSYmInRleHQiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0ZXh0Ij09PXQudG9Mb3dlckNhc2UoKSl9LGZpcnN0OlgoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0OlgoZnVuY3Rpb24oZSx0KXtyZXR1cm5bdC0xXX0pLGVxOlgoZnVuY3Rpb24oZSx0LG4pe3JldHVybltuPDA/bit0Om5dfSksZXZlbjpYKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0O24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksb2RkOlgoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MTtuPHQ7bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxsdDpYKGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtmb3Iocj1uPDA/bit0OnQ8bj90Om47MDw9LS1yOyllLnB1c2gocik7cmV0dXJuIGV9KSxndDpYKGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDpuOysrcjx0OyllLnB1c2gocik7cmV0dXJuIGV9KX19KS5wc2V1ZG9zLm50aD1iLnBzZXVkb3MuZXEse3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KWIucHNldWRvc1tlXT1CKGUpO2ZvcihlIGlue3N1Ym1pdDohMCxyZXNldDohMH0pYi5wc2V1ZG9zW2VdPV8oZSk7ZnVuY3Rpb24gRygpe31mdW5jdGlvbiBZKGUsdCl7dmFyIG4scixpLG8sYSxzLHUsbD1jW2UrIiAiXTtpZihsKXJldHVybiB0PzA6bC5zbGljZSgwKTthPWUscz1bXSx1PWIucHJlRmlsdGVyO3doaWxlKGEpe2ZvcihvIGluIG4mJiEocj15LmV4ZWMoYSkpfHwociYmKGE9YS5zbGljZShyWzBdLmxlbmd0aCl8fGEpLHMucHVzaChpPVtdKSksbj0hMSwocj1tLmV4ZWMoYSkpJiYobj1yLnNoaWZ0KCksaS5wdXNoKHt2YWx1ZTpuLHR5cGU6clswXS5yZXBsYWNlKHZlLCIgIil9KSxhPWEuc2xpY2Uobi5sZW5ndGgpKSxiLmZpbHRlcikhKHI9RFtvXS5leGVjKGEpKXx8dVtvXSYmIShyPXVbb10ocikpfHwobj1yLnNoaWZ0KCksaS5wdXNoKHt2YWx1ZTpuLHR5cGU6byxtYXRjaGVzOnJ9KSxhPWEuc2xpY2Uobi5sZW5ndGgpKTtpZighbilicmVha31yZXR1cm4gdD9hLmxlbmd0aDphP0kuZXJyb3IoZSk6YyhlLHMpLnNsaWNlKDApfWZ1bmN0aW9uIFEoZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aCxyPSIiO3Q8bjt0Kyspcis9ZVt0XS52YWx1ZTtyZXR1cm4gcn1mdW5jdGlvbiBKKGEsZSx0KXt2YXIgcz1lLmRpcix1PWUubmV4dCxsPXV8fHMsYz10JiYicGFyZW50Tm9kZSI9PT1sLGY9bisrO3JldHVybiBlLmZpcnN0P2Z1bmN0aW9uKGUsdCxuKXt3aGlsZShlPWVbc10paWYoMT09PWUubm9kZVR5cGV8fGMpcmV0dXJuIGEoZSx0LG4pO3JldHVybiExfTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPVtFLGZdO2lmKG4pe3doaWxlKGU9ZVtzXSlpZigoMT09PWUubm9kZVR5cGV8fGMpJiZhKGUsdCxuKSlyZXR1cm4hMH1lbHNlIHdoaWxlKGU9ZVtzXSlpZigxPT09ZS5ub2RlVHlwZXx8YylpZihpPWVbU118fChlW1NdPXt9KSx1JiZmZShlLHUpKWU9ZVtzXXx8ZTtlbHNle2lmKChyPWlbbF0pJiZyWzBdPT09RSYmclsxXT09PWYpcmV0dXJuIG9bMl09clsyXTtpZigoaVtsXT1vKVsyXT1hKGUsdCxuKSlyZXR1cm4hMH1yZXR1cm4hMX19ZnVuY3Rpb24gSyhpKXtyZXR1cm4gMTxpLmxlbmd0aD9mdW5jdGlvbihlLHQsbil7dmFyIHI9aS5sZW5ndGg7d2hpbGUoci0tKWlmKCFpW3JdKGUsdCxuKSlyZXR1cm4hMTtyZXR1cm4hMH06aVswXX1mdW5jdGlvbiBaKGUsdCxuLHIsaSl7Zm9yKHZhciBvLGE9W10scz0wLHU9ZS5sZW5ndGgsbD1udWxsIT10O3M8dTtzKyspKG89ZVtzXSkmJihuJiYhbihvLHIsaSl8fChhLnB1c2gobyksbCYmdC5wdXNoKHMpKSk7cmV0dXJuIGF9ZnVuY3Rpb24gZWUoZCxoLGcsdix5LGUpe3JldHVybiB2JiYhdltTXSYmKHY9ZWUodikpLHkmJiF5W1NdJiYoeT1lZSh5LGUpKSxGKGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHU9W10sbD1bXSxjPXQubGVuZ3RoLGY9ZXx8ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpO3IrKylJKGUsdFtyXSxuKTtyZXR1cm4gbn0oaHx8IioiLG4ubm9kZVR5cGU/W25dOm4sW10pLHA9IWR8fCFlJiZoP2Y6WihmLHUsZCxuLHIpO2lmKGc/ZyhwLHM9eXx8KGU/ZDpjfHx2KT9bXTp0LG4scik6cz1wLHYpe2k9WihzLGwpLHYoaSxbXSxuLHIpLG89aS5sZW5ndGg7d2hpbGUoby0tKShhPWlbb10pJiYoc1tsW29dXT0hKHBbbFtvXV09YSkpfWlmKGUpe2lmKHl8fGQpe2lmKHkpe2k9W10sbz1zLmxlbmd0aDt3aGlsZShvLS0pKGE9c1tvXSkmJmkucHVzaChwW29dPWEpO3kobnVsbCxzPVtdLGkscil9bz1zLmxlbmd0aDt3aGlsZShvLS0pKGE9c1tvXSkmJi0xPChpPXk/c2UuY2FsbChlLGEpOnVbb10pJiYoZVtpXT0hKHRbaV09YSkpfX1lbHNlIHM9WihzPT09dD9zLnNwbGljZShjLHMubGVuZ3RoKTpzKSx5P3kobnVsbCx0LHMscik6ay5hcHBseSh0LHMpfSl9ZnVuY3Rpb24gdGUoZSl7Zm9yKHZhciBpLHQsbixyPWUubGVuZ3RoLG89Yi5yZWxhdGl2ZVtlWzBdLnR5cGVdLGE9b3x8Yi5yZWxhdGl2ZVsiICJdLHM9bz8xOjAsdT1KKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09aX0sYSwhMCksbD1KKGZ1bmN0aW9uKGUpe3JldHVybi0xPHNlLmNhbGwoaSxlKX0sYSwhMCksYz1bZnVuY3Rpb24oZSx0LG4pe3ZhciByPSFvJiYobnx8dCE9dyl8fCgoaT10KS5ub2RlVHlwZT91KGUsdCxuKTpsKGUsdCxuKSk7cmV0dXJuIGk9bnVsbCxyfV07czxyO3MrKylpZih0PWIucmVsYXRpdmVbZVtzXS50eXBlXSljPVtKKEsoYyksdCldO2Vsc2V7aWYoKHQ9Yi5maWx0ZXJbZVtzXS50eXBlXS5hcHBseShudWxsLGVbc10ubWF0Y2hlcykpW1NdKXtmb3Iobj0rK3M7bjxyO24rKylpZihiLnJlbGF0aXZlW2Vbbl0udHlwZV0pYnJlYWs7cmV0dXJuIGVlKDE8cyYmSyhjKSwxPHMmJlEoZS5zbGljZSgwLHMtMSkuY29uY2F0KHt2YWx1ZToiICI9PT1lW3MtMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZSh2ZSwiJDEiKSx0LHM8biYmdGUoZS5zbGljZShzLG4pKSxuPHImJnRlKGU9ZS5zbGljZShuKSksbjxyJiZRKGUpKX1jLnB1c2godCl9cmV0dXJuIEsoYyl9ZnVuY3Rpb24gbmUoZSx0KXt2YXIgbix2LHksbSx4LHIsaT1bXSxvPVtdLGE9dVtlKyIgIl07aWYoIWEpe3R8fCh0PVkoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKShhPXRlKHRbbl0pKVtTXT9pLnB1c2goYSk6by5wdXNoKGEpOyhhPXUoZSwodj1vLG09MDwoeT1pKS5sZW5ndGgseD0wPHYubGVuZ3RoLHI9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdT0wLGw9IjAiLGM9ZSYmW10sZj1bXSxwPXcsZD1lfHx4JiZiLmZpbmQuVEFHKCIqIixpKSxoPUUrPW51bGw9PXA/MTpNYXRoLnJhbmRvbSgpfHwuMSxnPWQubGVuZ3RoO2ZvcihpJiYodz10PT1UfHx0fHxpKTtsIT09ZyYmbnVsbCE9KG89ZFtsXSk7bCsrKXtpZih4JiZvKXthPTAsdHx8by5vd25lckRvY3VtZW50PT1UfHwoVihvKSxuPSFDKTt3aGlsZShzPXZbYSsrXSlpZihzKG8sdHx8VCxuKSl7ay5jYWxsKHIsbyk7YnJlYWt9aSYmKEU9aCl9bSYmKChvPSFzJiZvKSYmdS0tLGUmJmMucHVzaChvKSl9aWYodSs9bCxtJiZsIT09dSl7YT0wO3doaWxlKHM9eVthKytdKXMoYyxmLHQsbik7aWYoZSl7aWYoMDx1KXdoaWxlKGwtLSljW2xdfHxmW2xdfHwoZltsXT1wZS5jYWxsKHIpKTtmPVooZil9ay5hcHBseShyLGYpLGkmJiFlJiYwPGYubGVuZ3RoJiYxPHUreS5sZW5ndGgmJmNlLnVuaXF1ZVNvcnQocil9cmV0dXJuIGkmJihFPWgsdz1wKSxjfSxtP0Yocik6cikpKS5zZWxlY3Rvcj1lfXJldHVybiBhfWZ1bmN0aW9uIHJlKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZSxjPSFyJiZZKGU9bC5zZWxlY3Rvcnx8ZSk7aWYobj1ufHxbXSwxPT09Yy5sZW5ndGgpe2lmKDI8KG89Y1swXT1jWzBdLnNsaWNlKDApKS5sZW5ndGgmJiJJRCI9PT0oYT1vWzBdKS50eXBlJiY5PT09dC5ub2RlVHlwZSYmQyYmYi5yZWxhdGl2ZVtvWzFdLnR5cGVdKXtpZighKHQ9KGIuZmluZC5JRChhLm1hdGNoZXNbMF0ucmVwbGFjZShPLFApLHQpfHxbXSlbMF0pKXJldHVybiBuO2wmJih0PXQucGFyZW50Tm9kZSksZT1lLnNsaWNlKG8uc2hpZnQoKS52YWx1ZS5sZW5ndGgpfWk9RC5uZWVkc0NvbnRleHQudGVzdChlKT8wOm8ubGVuZ3RoO3doaWxlKGktLSl7aWYoYT1vW2ldLGIucmVsYXRpdmVbcz1hLnR5cGVdKWJyZWFrO2lmKCh1PWIuZmluZFtzXSkmJihyPXUoYS5tYXRjaGVzWzBdLnJlcGxhY2UoTyxQKSxILnRlc3Qob1swXS50eXBlKSYmVSh0LnBhcmVudE5vZGUpfHx0KSkpe2lmKG8uc3BsaWNlKGksMSksIShlPXIubGVuZ3RoJiZRKG8pKSlyZXR1cm4gay5hcHBseShuLHIpLG47YnJlYWt9fX1yZXR1cm4obHx8bmUoZSxjKSkocix0LCFDLG4sIXR8fEgudGVzdChlKSYmVSh0LnBhcmVudE5vZGUpfHx0KSxufUcucHJvdG90eXBlPWIuZmlsdGVycz1iLnBzZXVkb3MsYi5zZXRGaWx0ZXJzPW5ldyBHLGxlLnNvcnRTdGFibGU9Uy5zcGxpdCgiIikuc29ydChsKS5qb2luKCIiKT09PVMsVigpLGxlLnNvcnREZXRhY2hlZD0kKGZ1bmN0aW9uKGUpe3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oVC5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpKX0pLGNlLmZpbmQ9SSxjZS5leHByWyI6Il09Y2UuZXhwci5wc2V1ZG9zLGNlLnVuaXF1ZT1jZS51bmlxdWVTb3J0LEkuY29tcGlsZT1uZSxJLnNlbGVjdD1yZSxJLnNldERvY3VtZW50PVYsSS50b2tlbml6ZT1ZLEkuZXNjYXBlPWNlLmVzY2FwZVNlbGVjdG9yLEkuZ2V0VGV4dD1jZS50ZXh0LEkuaXNYTUw9Y2UuaXNYTUxEb2MsSS5zZWxlY3RvcnM9Y2UuZXhwcixJLnN1cHBvcnQ9Y2Uuc3VwcG9ydCxJLnVuaXF1ZVNvcnQ9Y2UudW5pcXVlU29ydH0oKTt2YXIgZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9W10saT12b2lkIDAhPT1uO3doaWxlKChlPWVbdF0pJiY5IT09ZS5ub2RlVHlwZSlpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmY2UoZSkuaXMobikpYnJlYWs7ci5wdXNoKGUpfXJldHVybiByfSxoPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufSxiPWNlLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LHc9L148KFthLXpdW15cL1wwPjpceDIwXHRcclxuXGZdKilbXHgyMFx0XHJcblxmXSpcLz8+KD86PFwvXDE+fCkkL2k7ZnVuY3Rpb24gVChlLG4scil7cmV0dXJuIHYobik/Y2UuZ3JlcChlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuISFuLmNhbGwoZSx0LGUpIT09cn0pOm4ubm9kZVR5cGU/Y2UuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09biE9PXJ9KToic3RyaW5nIiE9dHlwZW9mIG4/Y2UuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybi0xPHNlLmNhbGwobixlKSE9PXJ9KTpjZS5maWx0ZXIobixlLHIpfWNlLmZpbHRlcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dFswXTtyZXR1cm4gbiYmKGU9Ijpub3QoIitlKyIpIiksMT09PXQubGVuZ3RoJiYxPT09ci5ub2RlVHlwZT9jZS5maW5kLm1hdGNoZXNTZWxlY3RvcihyLGUpP1tyXTpbXTpjZS5maW5kLm1hdGNoZXMoZSxjZS5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfSkpfSxjZS5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXRoaXMubGVuZ3RoLGk9dGhpcztpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIHRoaXMucHVzaFN0YWNrKGNlKGUpLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7dDxyO3QrKylpZihjZS5jb250YWlucyhpW3RdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihuPXRoaXMucHVzaFN0YWNrKFtdKSx0PTA7dDxyO3QrKyljZS5maW5kKGUsaVt0XSxuKTtyZXR1cm4gMTxyP2NlLnVuaXF1ZVNvcnQobik6bn0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhUKHRoaXMsZXx8W10sITEpKX0sbm90OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhUKHRoaXMsZXx8W10sITApKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFUKHRoaXMsInN0cmluZyI9PXR5cGVvZiBlJiZiLnRlc3QoZSk/Y2UoZSk6ZXx8W10sITEpLmxlbmd0aH19KTt2YXIgayxTPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKykpJC87KGNlLmZuLmluaXQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoIWUpcmV0dXJuIHRoaXM7aWYobj1ufHxrLCJzdHJpbmciPT10eXBlb2YgZSl7aWYoIShyPSI8Ij09PWVbMF0mJiI+Ij09PWVbZS5sZW5ndGgtMV0mJjM8PWUubGVuZ3RoP1tudWxsLGUsbnVsbF06Uy5leGVjKGUpKXx8IXJbMV0mJnQpcmV0dXJuIXR8fHQuanF1ZXJ5Pyh0fHxuKS5maW5kKGUpOnRoaXMuY29uc3RydWN0b3IodCkuZmluZChlKTtpZihyWzFdKXtpZih0PXQgaW5zdGFuY2VvZiBjZT90WzBdOnQsY2UubWVyZ2UodGhpcyxjZS5wYXJzZUhUTUwoclsxXSx0JiZ0Lm5vZGVUeXBlP3Qub3duZXJEb2N1bWVudHx8dDpDLCEwKSksdy50ZXN0KHJbMV0pJiZjZS5pc1BsYWluT2JqZWN0KHQpKWZvcihyIGluIHQpdih0aGlzW3JdKT90aGlzW3JdKHRbcl0pOnRoaXMuYXR0cihyLHRbcl0pO3JldHVybiB0aGlzfXJldHVybihpPUMuZ2V0RWxlbWVudEJ5SWQoclsyXSkpJiYodGhpc1swXT1pLHRoaXMubGVuZ3RoPTEpLHRoaXN9cmV0dXJuIGUubm9kZVR5cGU/KHRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOnYoZSk/dm9pZCAwIT09bi5yZWFkeT9uLnJlYWR5KGUpOmUoY2UpOmNlLm1ha2VBcnJheShlLHRoaXMpfSkucHJvdG90eXBlPWNlLmZuLGs9Y2UoQyk7dmFyIEU9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8saj17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtmdW5jdGlvbiBBKGUsdCl7d2hpbGUoKGU9ZVt0XSkmJjEhPT1lLm5vZGVUeXBlKTtyZXR1cm4gZX1jZS5mbi5leHRlbmQoe2hhczpmdW5jdGlvbihlKXt2YXIgdD1jZShlLHRoaXMpLG49dC5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxuO2UrKylpZihjZS5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLGE9InN0cmluZyIhPXR5cGVvZiBlJiZjZShlKTtpZighYi50ZXN0KGUpKWZvcig7cjxpO3IrKylmb3Iobj10aGlzW3JdO24mJm4hPT10O249bi5wYXJlbnROb2RlKWlmKG4ubm9kZVR5cGU8MTEmJihhPy0xPGEuaW5kZXgobik6MT09PW4ubm9kZVR5cGUmJmNlLmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtvLnB1c2gobik7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKDE8by5sZW5ndGg/Y2UudW5pcXVlU29ydChvKTpvKX0saW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/InN0cmluZyI9PXR5cGVvZiBlP3NlLmNhbGwoY2UoZSksdGhpc1swXSk6c2UuY2FsbCh0aGlzLGUuanF1ZXJ5P2VbMF06ZSk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soY2UudW5pcXVlU29ydChjZS5tZXJnZSh0aGlzLmdldCgpLGNlKGUsdCkpKSl9LGFkZEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWU/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfX0pLGNlLmVhY2goe3BhcmVudDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJjExIT09dC5ub2RlVHlwZT90Om51bGx9LHBhcmVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGQoZSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBkKGUsInBhcmVudE5vZGUiLG4pfSxuZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBBKGUsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oZSl7cmV0dXJuIEEoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIGQoZSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihlKXtyZXR1cm4gZChlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZChlLCJuZXh0U2libGluZyIsbil9LHByZXZVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGQoZSwicHJldmlvdXNTaWJsaW5nIixuKX0sc2libGluZ3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGgoKGUucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsZSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGUpe3JldHVybiBoKGUuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lLmNvbnRlbnREb2N1bWVudCYmcihlLmNvbnRlbnREb2N1bWVudCk/ZS5jb250ZW50RG9jdW1lbnQ6KGZlKGUsInRlbXBsYXRlIikmJihlPWUuY29udGVudHx8ZSksY2UubWVyZ2UoW10sZS5jaGlsZE5vZGVzKSl9fSxmdW5jdGlvbihyLGkpe2NlLmZuW3JdPWZ1bmN0aW9uKGUsdCl7dmFyIG49Y2UubWFwKHRoaXMsaSxlKTtyZXR1cm4iVW50aWwiIT09ci5zbGljZSgtNSkmJih0PWUpLHQmJiJzdHJpbmciPT10eXBlb2YgdCYmKG49Y2UuZmlsdGVyKHQsbikpLDE8dGhpcy5sZW5ndGgmJihqW3JdfHxjZS51bmlxdWVTb3J0KG4pLEUudGVzdChyKSYmbi5yZXZlcnNlKCkpLHRoaXMucHVzaFN0YWNrKG4pfX0pO3ZhciBEPS9bXlx4MjBcdFxyXG5cZl0rL2c7ZnVuY3Rpb24gTihlKXtyZXR1cm4gZX1mdW5jdGlvbiBxKGUpe3Rocm93IGV9ZnVuY3Rpb24gTChlLHQsbixyKXt2YXIgaTt0cnl7ZSYmdihpPWUucHJvbWlzZSk/aS5jYWxsKGUpLmRvbmUodCkuZmFpbChuKTplJiZ2KGk9ZS50aGVuKT9pLmNhbGwoZSx0LG4pOnQuYXBwbHkodm9pZCAwLFtlXS5zbGljZShyKSl9Y2F0Y2goZSl7bi5hcHBseSh2b2lkIDAsW2VdKX19Y2UuQ2FsbGJhY2tzPWZ1bmN0aW9uKHIpe3ZhciBlLG47cj0ic3RyaW5nIj09dHlwZW9mIHI/KGU9cixuPXt9LGNlLmVhY2goZS5tYXRjaChEKXx8W10sZnVuY3Rpb24oZSx0KXtuW3RdPSEwfSksbik6Y2UuZXh0ZW5kKHt9LHIpO3ZhciBpLHQsbyxhLHM9W10sdT1bXSxsPS0xLGM9ZnVuY3Rpb24oKXtmb3IoYT1hfHxyLm9uY2Usbz1pPSEwO3UubGVuZ3RoO2w9LTEpe3Q9dS5zaGlmdCgpO3doaWxlKCsrbDxzLmxlbmd0aCkhMT09PXNbbF0uYXBwbHkodFswXSx0WzFdKSYmci5zdG9wT25GYWxzZSYmKGw9cy5sZW5ndGgsdD0hMSl9ci5tZW1vcnl8fCh0PSExKSxpPSExLGEmJihzPXQ/W106IiIpfSxmPXthZGQ6ZnVuY3Rpb24oKXtyZXR1cm4gcyYmKHQmJiFpJiYobD1zLmxlbmd0aC0xLHUucHVzaCh0KSksZnVuY3Rpb24gbihlKXtjZS5lYWNoKGUsZnVuY3Rpb24oZSx0KXt2KHQpP3IudW5pcXVlJiZmLmhhcyh0KXx8cy5wdXNoKHQpOnQmJnQubGVuZ3RoJiYic3RyaW5nIiE9PXgodCkmJm4odCl9KX0oYXJndW1lbnRzKSx0JiYhaSYmYygpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gY2UuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oZSx0KXt2YXIgbjt3aGlsZSgtMTwobj1jZS5pbkFycmF5KHQscyxuKSkpcy5zcGxpY2UobiwxKSxuPD1sJiZsLS19KSx0aGlzfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/LTE8Y2UuaW5BcnJheShlLHMpOjA8cy5sZW5ndGh9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHMmJihzPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9dT1bXSxzPXQ9IiIsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hc30sbG9jazpmdW5jdGlvbigpe3JldHVybiBhPXU9W10sdHx8aXx8KHM9dD0iIiksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuISFhfSxmaXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiBhfHwodD1bZSwodD10fHxbXSkuc2xpY2U/dC5zbGljZSgpOnRdLHUucHVzaCh0KSxpfHxjKCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gZi5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIW99fTtyZXR1cm4gZn0sY2UuZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihlKXt2YXIgbz1bWyJub3RpZnkiLCJwcm9ncmVzcyIsY2UuQ2FsbGJhY2tzKCJtZW1vcnkiKSxjZS5DYWxsYmFja3MoIm1lbW9yeSIpLDJdLFsicmVzb2x2ZSIsImRvbmUiLGNlLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxjZS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksMCwicmVzb2x2ZWQiXSxbInJlamVjdCIsImZhaWwiLGNlLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxjZS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksMSwicmVqZWN0ZWQiXV0saT0icGVuZGluZyIsYT17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIHMuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSwiY2F0Y2giOmZ1bmN0aW9uKGUpe3JldHVybiBhLnRoZW4obnVsbCxlKX0scGlwZTpmdW5jdGlvbigpe3ZhciBpPWFyZ3VtZW50cztyZXR1cm4gY2UuRGVmZXJyZWQoZnVuY3Rpb24ocil7Y2UuZWFjaChvLGZ1bmN0aW9uKGUsdCl7dmFyIG49dihpW3RbNF1dKSYmaVt0WzRdXTtzW3RbMV1dKGZ1bmN0aW9uKCl7dmFyIGU9biYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZSYmdihlLnByb21pc2UpP2UucHJvbWlzZSgpLnByb2dyZXNzKHIubm90aWZ5KS5kb25lKHIucmVzb2x2ZSkuZmFpbChyLnJlamVjdCk6clt0WzBdKyJXaXRoIl0odGhpcyxuP1tlXTphcmd1bWVudHMpfSl9KSxpPW51bGx9KS5wcm9taXNlKCl9LHRoZW46ZnVuY3Rpb24odCxuLHIpe3ZhciB1PTA7ZnVuY3Rpb24gbChpLG8sYSxzKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLHI9YXJndW1lbnRzLGU9ZnVuY3Rpb24oKXt2YXIgZSx0O2lmKCEoaTx1KSl7aWYoKGU9YS5hcHBseShuLHIpKT09PW8ucHJvbWlzZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvbiIpO3Q9ZSYmKCJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpJiZlLnRoZW4sdih0KT9zP3QuY2FsbChlLGwodSxvLE4scyksbCh1LG8scSxzKSk6KHUrKyx0LmNhbGwoZSxsKHUsbyxOLHMpLGwodSxvLHEscyksbCh1LG8sTixvLm5vdGlmeVdpdGgpKSk6KGEhPT1OJiYobj12b2lkIDAscj1bZV0pLChzfHxvLnJlc29sdmVXaXRoKShuLHIpKX19LHQ9cz9lOmZ1bmN0aW9uKCl7dHJ5e2UoKX1jYXRjaChlKXtjZS5EZWZlcnJlZC5leGNlcHRpb25Ib29rJiZjZS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKGUsdC5lcnJvciksdTw9aSsxJiYoYSE9PXEmJihuPXZvaWQgMCxyPVtlXSksby5yZWplY3RXaXRoKG4scikpfX07aT90KCk6KGNlLkRlZmVycmVkLmdldEVycm9ySG9vaz90LmVycm9yPWNlLkRlZmVycmVkLmdldEVycm9ySG9vaygpOmNlLkRlZmVycmVkLmdldFN0YWNrSG9vayYmKHQuZXJyb3I9Y2UuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCkpLGllLnNldFRpbWVvdXQodCkpfX1yZXR1cm4gY2UuRGVmZXJyZWQoZnVuY3Rpb24oZSl7b1swXVszXS5hZGQobCgwLGUsdihyKT9yOk4sZS5ub3RpZnlXaXRoKSksb1sxXVszXS5hZGQobCgwLGUsdih0KT90Ok4pKSxvWzJdWzNdLmFkZChsKDAsZSx2KG4pP246cSkpfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lP2NlLmV4dGVuZChlLGEpOmF9fSxzPXt9O3JldHVybiBjZS5lYWNoKG8sZnVuY3Rpb24oZSx0KXt2YXIgbj10WzJdLHI9dFs1XTthW3RbMV1dPW4uYWRkLHImJm4uYWRkKGZ1bmN0aW9uKCl7aT1yfSxvWzMtZV1bMl0uZGlzYWJsZSxvWzMtZV1bM10uZGlzYWJsZSxvWzBdWzJdLmxvY2ssb1swXVszXS5sb2NrKSxuLmFkZCh0WzNdLmZpcmUpLHNbdFswXV09ZnVuY3Rpb24oKXtyZXR1cm4gc1t0WzBdKyJXaXRoIl0odGhpcz09PXM/dm9pZCAwOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxzW3RbMF0rIldpdGgiXT1uLmZpcmVXaXRofSksYS5wcm9taXNlKHMpLGUmJmUuY2FsbChzLHMpLHN9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aCx0PW4scj1BcnJheSh0KSxpPWFlLmNhbGwoYXJndW1lbnRzKSxvPWNlLkRlZmVycmVkKCksYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7clt0XT10aGlzLGlbdF09MTxhcmd1bWVudHMubGVuZ3RoP2FlLmNhbGwoYXJndW1lbnRzKTplLC0tbnx8by5yZXNvbHZlV2l0aChyLGkpfX07aWYobjw9MSYmKEwoZSxvLmRvbmUoYSh0KSkucmVzb2x2ZSxvLnJlamVjdCwhbiksInBlbmRpbmciPT09by5zdGF0ZSgpfHx2KGlbdF0mJmlbdF0udGhlbikpKXJldHVybiBvLnRoZW4oKTt3aGlsZSh0LS0pTChpW3RdLGEodCksby5yZWplY3QpO3JldHVybiBvLnByb21pc2UoKX19KTt2YXIgSD0vXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztjZS5EZWZlcnJlZC5leGNlcHRpb25Ib29rPWZ1bmN0aW9uKGUsdCl7aWUuY29uc29sZSYmaWUuY29uc29sZS53YXJuJiZlJiZILnRlc3QoZS5uYW1lKSYmaWUuY29uc29sZS53YXJuKCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiAiK2UubWVzc2FnZSxlLnN0YWNrLHQpfSxjZS5yZWFkeUV4Y2VwdGlvbj1mdW5jdGlvbihlKXtpZS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0pfTt2YXIgTz1jZS5EZWZlcnJlZCgpO2Z1bmN0aW9uIFAoKXtDLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLFApLGllLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLFApLGNlLnJlYWR5KCl9Y2UuZm4ucmVhZHk9ZnVuY3Rpb24oZSl7cmV0dXJuIE8udGhlbihlKVsiY2F0Y2giXShmdW5jdGlvbihlKXtjZS5yZWFkeUV4Y2VwdGlvbihlKX0pLHRoaXN9LGNlLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxyZWFkeTpmdW5jdGlvbihlKXsoITA9PT1lPy0tY2UucmVhZHlXYWl0OmNlLmlzUmVhZHkpfHwoY2UuaXNSZWFkeT0hMCkhPT1lJiYwPC0tY2UucmVhZHlXYWl0fHxPLnJlc29sdmVXaXRoKEMsW2NlXSl9fSksY2UucmVhZHkudGhlbj1PLnRoZW4sImNvbXBsZXRlIj09PUMucmVhZHlTdGF0ZXx8ImxvYWRpbmciIT09Qy5yZWFkeVN0YXRlJiYhQy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw/aWUuc2V0VGltZW91dChjZS5yZWFkeSk6KEMuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsUCksaWUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsUCkpO3ZhciBNPWZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPTAsdT1lLmxlbmd0aCxsPW51bGw9PW47aWYoIm9iamVjdCI9PT14KG4pKWZvcihzIGluIGk9ITAsbilNKGUsdCxzLG5bc10sITAsbyxhKTtlbHNlIGlmKHZvaWQgMCE9PXImJihpPSEwLHYocil8fChhPSEwKSxsJiYoYT8odC5jYWxsKGUsciksdD1udWxsKToobD10LHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsLmNhbGwoY2UoZSksbil9KSksdCkpZm9yKDtzPHU7cysrKXQoZVtzXSxuLGE/cjpyLmNhbGwoZVtzXSxzLHQoZVtzXSxuKSkpO3JldHVybiBpP2U6bD90LmNhbGwoZSk6dT90KGVbMF0sbik6b30sUj0vXi1tcy0vLEk9Ly0oW2Etel0pL2c7ZnVuY3Rpb24gVyhlLHQpe3JldHVybiB0LnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gRihlKXtyZXR1cm4gZS5yZXBsYWNlKFIsIm1zLSIpLnJlcGxhY2UoSSxXKX12YXIgJD1mdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV8fDk9PT1lLm5vZGVUeXBlfHwhK2Uubm9kZVR5cGV9O2Z1bmN0aW9uIEIoKXt0aGlzLmV4cGFuZG89Y2UuZXhwYW5kbytCLnVpZCsrfUIudWlkPTEsQi5wcm90b3R5cGU9e2NhY2hlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdHx8KHQ9e30sJChlKSYmKGUubm9kZVR5cGU/ZVt0aGlzLmV4cGFuZG9dPXQ6T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdGhpcy5leHBhbmRvLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pKSksdH0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMuY2FjaGUoZSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlbRih0KV09bjtlbHNlIGZvcihyIGluIHQpaVtGKHIpXT10W3JdO3JldHVybiBpfSxnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLmNhY2hlKGUpOmVbdGhpcy5leHBhbmRvXSYmZVt0aGlzLmV4cGFuZG9dW0YodCldfSxhY2Nlc3M6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT10fHx0JiYic3RyaW5nIj09dHlwZW9mIHQmJnZvaWQgMD09PW4/dGhpcy5nZXQoZSx0KToodGhpcy5zZXQoZSx0LG4pLHZvaWQgMCE9PW4/bjp0KX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lW3RoaXMuZXhwYW5kb107aWYodm9pZCAwIT09cil7aWYodm9pZCAwIT09dCl7bj0odD1BcnJheS5pc0FycmF5KHQpP3QubWFwKEYpOih0PUYodCkpaW4gcj9bdF06dC5tYXRjaChEKXx8W10pLmxlbmd0aDt3aGlsZShuLS0pZGVsZXRlIHJbdFtuXV19KHZvaWQgMD09PXR8fGNlLmlzRW1wdHlPYmplY3QocikpJiYoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109dm9pZCAwOmRlbGV0ZSBlW3RoaXMuZXhwYW5kb10pfX0saGFzRGF0YTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHZvaWQgMCE9PXQmJiFjZS5pc0VtcHR5T2JqZWN0KHQpfX07dmFyIF89bmV3IEIsej1uZXcgQixYPS9eKD86XHtbXHdcV10qXH18XFtbXHdcV10qXF0pJC8sVT0vW0EtWl0vZztmdW5jdGlvbiBWKGUsdCxuKXt2YXIgcixpO2lmKHZvaWQgMD09PW4mJjE9PT1lLm5vZGVUeXBlKWlmKHI9ImRhdGEtIit0LnJlcGxhY2UoVSwiLSQmIikudG9Mb3dlckNhc2UoKSwic3RyaW5nIj09dHlwZW9mKG49ZS5nZXRBdHRyaWJ1dGUocikpKXt0cnl7bj0idHJ1ZSI9PT0oaT1uKXx8ImZhbHNlIiE9PWkmJigibnVsbCI9PT1pP251bGw6aT09PStpKyIiPytpOlgudGVzdChpKT9KU09OLnBhcnNlKGkpOmkpfWNhdGNoKGUpe316LnNldChlLHQsbil9ZWxzZSBuPXZvaWQgMDtyZXR1cm4gbn1jZS5leHRlbmQoe2hhc0RhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHouaGFzRGF0YShlKXx8Xy5oYXNEYXRhKGUpfSxkYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gei5hY2Nlc3MoZSx0LG4pfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7ei5yZW1vdmUoZSx0KX0sX2RhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBfLmFjY2VzcyhlLHQsbil9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7Xy5yZW1vdmUoZSx0KX19KSxjZS5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24obixlKXt2YXIgdCxyLGksbz10aGlzWzBdLGE9byYmby5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PW4pe2lmKHRoaXMubGVuZ3RoJiYoaT16LmdldChvKSwxPT09by5ub2RlVHlwZSYmIV8uZ2V0KG8sImhhc0RhdGFBdHRycyIpKSl7dD1hLmxlbmd0aDt3aGlsZSh0LS0pYVt0XSYmMD09PShyPWFbdF0ubmFtZSkuaW5kZXhPZigiZGF0YS0iKSYmKHI9RihyLnNsaWNlKDUpKSxWKG8scixpW3JdKSk7Xy5zZXQobywiaGFzRGF0YUF0dHJzIiwhMCl9cmV0dXJuIGl9cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBuP3RoaXMuZWFjaChmdW5jdGlvbigpe3ouc2V0KHRoaXMsbil9KTpNKHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ7aWYobyYmdm9pZCAwPT09ZSlyZXR1cm4gdm9pZCAwIT09KHQ9ei5nZXQobyxuKSk/dDp2b2lkIDAhPT0odD1WKG8sbikpP3Q6dm9pZCAwO3RoaXMuZWFjaChmdW5jdGlvbigpe3ouc2V0KHRoaXMsbixlKX0pfSxudWxsLGUsMTxhcmd1bWVudHMubGVuZ3RoLG51bGwsITApfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt6LnJlbW92ZSh0aGlzLGUpfSl9fSksY2UuZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoZSlyZXR1cm4gdD0odHx8ImZ4IikrInF1ZXVlIixyPV8uZ2V0KGUsdCksbiYmKCFyfHxBcnJheS5pc0FycmF5KG4pP3I9Xy5hY2Nlc3MoZSx0LGNlLm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj1jZS5xdWV1ZShlLHQpLHI9bi5sZW5ndGgsaT1uLnNoaWZ0KCksbz1jZS5fcXVldWVIb29rcyhlLHQpOyJpbnByb2dyZXNzIj09PWkmJihpPW4uc2hpZnQoKSxyLS0pLGkmJigiZngiPT09dCYmbi51bnNoaWZ0KCJpbnByb2dyZXNzIiksZGVsZXRlIG8uc3RvcCxpLmNhbGwoZSxmdW5jdGlvbigpe2NlLmRlcXVldWUoZSx0KX0sbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1cm4gXy5nZXQoZSxuKXx8Xy5hY2Nlc3MoZSxuLHtlbXB0eTpjZS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7Xy5yZW1vdmUoZSxbdCsicXVldWUiLG5dKX0pfSl9fSksY2UuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbih0LG4pe3ZhciBlPTI7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0JiYobj10LHQ9ImZ4IixlLS0pLGFyZ3VtZW50cy5sZW5ndGg8ZT9jZS5xdWV1ZSh0aGlzWzBdLHQpOnZvaWQgMD09PW4/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1jZS5xdWV1ZSh0aGlzLHQsbik7Y2UuX3F1ZXVlSG9va3ModGhpcyx0KSwiZngiPT09dCYmImlucHJvZ3Jlc3MiIT09ZVswXSYmY2UuZGVxdWV1ZSh0aGlzLHQpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2NlLmRlcXVldWUodGhpcyxlKX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9Y2UuRGVmZXJyZWQoKSxvPXRoaXMsYT10aGlzLmxlbmd0aCxzPWZ1bmN0aW9uKCl7LS1yfHxpLnJlc29sdmVXaXRoKG8sW29dKX07InN0cmluZyIhPXR5cGVvZiBlJiYodD1lLGU9dm9pZCAwKSxlPWV8fCJmeCI7d2hpbGUoYS0tKShuPV8uZ2V0KG9bYV0sZSsicXVldWVIb29rcyIpKSYmbi5lbXB0eSYmKHIrKyxuLmVtcHR5LmFkZChzKSk7cmV0dXJuIHMoKSxpLnByb21pc2UodCl9fSk7dmFyIEc9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsWT1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrRysiKShbYS16JV0qKSQiLCJpIiksUT1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLEo9Qy5kb2N1bWVudEVsZW1lbnQsSz1mdW5jdGlvbihlKXtyZXR1cm4gY2UuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfSxaPXtjb21wb3NlZDohMH07Si5nZXRSb290Tm9kZSYmKEs9ZnVuY3Rpb24oZSl7cmV0dXJuIGNlLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8ZS5nZXRSb290Tm9kZShaKT09PWUub3duZXJEb2N1bWVudH0pO3ZhciBlZT1mdW5jdGlvbihlLHQpe3JldHVybiJub25lIj09PShlPXR8fGUpLnN0eWxlLmRpc3BsYXl8fCIiPT09ZS5zdHlsZS5kaXNwbGF5JiZLKGUpJiYibm9uZSI9PT1jZS5jc3MoZSwiZGlzcGxheSIpfTtmdW5jdGlvbiB0ZShlLHQsbixyKXt2YXIgaSxvLGE9MjAscz1yP2Z1bmN0aW9uKCl7cmV0dXJuIHIuY3VyKCl9OmZ1bmN0aW9uKCl7cmV0dXJuIGNlLmNzcyhlLHQsIiIpfSx1PXMoKSxsPW4mJm5bM118fChjZS5jc3NOdW1iZXJbdF0/IiI6InB4IiksYz1lLm5vZGVUeXBlJiYoY2UuY3NzTnVtYmVyW3RdfHwicHgiIT09bCYmK3UpJiZZLmV4ZWMoY2UuY3NzKGUsdCkpO2lmKGMmJmNbM10hPT1sKXt1Lz0yLGw9bHx8Y1szXSxjPSt1fHwxO3doaWxlKGEtLSljZS5zdHlsZShlLHQsYytsKSwoMS1vKSooMS0obz1zKCkvdXx8LjUpKTw9MCYmKGE9MCksYy89bztjKj0yLGNlLnN0eWxlKGUsdCxjK2wpLG49bnx8W119cmV0dXJuIG4mJihjPStjfHwrdXx8MCxpPW5bMV0/YysoblsxXSsxKSpuWzJdOituWzJdLHImJihyLnVuaXQ9bCxyLnN0YXJ0PWMsci5lbmQ9aSkpLGl9dmFyIG5lPXt9O2Z1bmN0aW9uIHJlKGUsdCl7Zm9yKHZhciBuLHIsaSxvLGEscyx1LGw9W10sYz0wLGY9ZS5sZW5ndGg7YzxmO2MrKykocj1lW2NdKS5zdHlsZSYmKG49ci5zdHlsZS5kaXNwbGF5LHQ/KCJub25lIj09PW4mJihsW2NdPV8uZ2V0KHIsImRpc3BsYXkiKXx8bnVsbCxsW2NdfHwoci5zdHlsZS5kaXNwbGF5PSIiKSksIiI9PT1yLnN0eWxlLmRpc3BsYXkmJmVlKHIpJiYobFtjXT0odT1hPW89dm9pZCAwLGE9KGk9cikub3duZXJEb2N1bWVudCxzPWkubm9kZU5hbWUsKHU9bmVbc10pfHwobz1hLmJvZHkuYXBwZW5kQ2hpbGQoYS5jcmVhdGVFbGVtZW50KHMpKSx1PWNlLmNzcyhvLCJkaXNwbGF5Iiksby5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pLCJub25lIj09PXUmJih1PSJibG9jayIpLG5lW3NdPXUpKSkpOiJub25lIiE9PW4mJihsW2NdPSJub25lIixfLnNldChyLCJkaXNwbGF5IixuKSkpO2ZvcihjPTA7YzxmO2MrKyludWxsIT1sW2NdJiYoZVtjXS5zdHlsZS5kaXNwbGF5PWxbY10pO3JldHVybiBlfWNlLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbigpe3JldHVybiByZSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiByZSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGU/ZT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtlZSh0aGlzKT9jZSh0aGlzKS5zaG93KCk6Y2UodGhpcykuaGlkZSgpfSl9fSk7dmFyIHhlLGJlLHdlPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLFRlPS88KFthLXpdW15cL1wwPlx4MjBcdFxyXG5cZl0qKS9pLENlPS9eJHxebW9kdWxlJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaTt4ZT1DLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS5hcHBlbmRDaGlsZChDLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSwoYmU9Qy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGJlLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKSxiZS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0IikseGUuYXBwZW5kQ2hpbGQoYmUpLGxlLmNoZWNrQ2xvbmU9eGUuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLHhlLmlubmVySFRNTD0iPHRleHRhcmVhPng8L3RleHRhcmVhPiIsbGUubm9DbG9uZUNoZWNrZWQ9ISF4ZS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWUseGUuaW5uZXJIVE1MPSI8b3B0aW9uPjwvb3B0aW9uPiIsbGUub3B0aW9uPSEheGUubGFzdENoaWxkO3ZhciBrZT17dGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDpbMCwiIiwiIl19O2Z1bmN0aW9uIFNlKGUsdCl7dmFyIG47cmV0dXJuIG49InVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEVsZW1lbnRzQnlUYWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHx8IioiKToidW5kZWZpbmVkIiE9dHlwZW9mIGUucXVlcnlTZWxlY3RvckFsbD9lLnF1ZXJ5U2VsZWN0b3JBbGwodHx8IioiKTpbXSx2b2lkIDA9PT10fHx0JiZmZShlLHQpP2NlLm1lcmdlKFtlXSxuKTpufWZ1bmN0aW9uIEVlKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKV8uc2V0KGVbbl0sImdsb2JhbEV2YWwiLCF0fHxfLmdldCh0W25dLCJnbG9iYWxFdmFsIikpfWtlLnRib2R5PWtlLnRmb290PWtlLmNvbGdyb3VwPWtlLmNhcHRpb249a2UudGhlYWQsa2UudGg9a2UudGQsbGUub3B0aW9ufHwoa2Uub3B0Z3JvdXA9a2Uub3B0aW9uPVsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0pO3ZhciBqZT0vPHwmIz9cdys7LztmdW5jdGlvbiBBZShlLHQsbixyLGkpe2Zvcih2YXIgbyxhLHMsdSxsLGMsZj10LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxwPVtdLGQ9MCxoPWUubGVuZ3RoO2Q8aDtkKyspaWYoKG89ZVtkXSl8fDA9PT1vKWlmKCJvYmplY3QiPT09eChvKSljZS5tZXJnZShwLG8ubm9kZVR5cGU/W29dOm8pO2Vsc2UgaWYoamUudGVzdChvKSl7YT1hfHxmLmFwcGVuZENoaWxkKHQuY3JlYXRlRWxlbWVudCgiZGl2IikpLHM9KFRlLmV4ZWMobyl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksdT1rZVtzXXx8a2UuX2RlZmF1bHQsYS5pbm5lckhUTUw9dVsxXStjZS5odG1sUHJlZmlsdGVyKG8pK3VbMl0sYz11WzBdO3doaWxlKGMtLSlhPWEubGFzdENoaWxkO2NlLm1lcmdlKHAsYS5jaGlsZE5vZGVzKSwoYT1mLmZpcnN0Q2hpbGQpLnRleHRDb250ZW50PSIifWVsc2UgcC5wdXNoKHQuY3JlYXRlVGV4dE5vZGUobykpO2YudGV4dENvbnRlbnQ9IiIsZD0wO3doaWxlKG89cFtkKytdKWlmKHImJi0xPGNlLmluQXJyYXkobyxyKSlpJiZpLnB1c2gobyk7ZWxzZSBpZihsPUsobyksYT1TZShmLmFwcGVuZENoaWxkKG8pLCJzY3JpcHQiKSxsJiZFZShhKSxuKXtjPTA7d2hpbGUobz1hW2MrK10pQ2UudGVzdChvLnR5cGV8fCIiKSYmbi5wdXNoKG8pfXJldHVybiBmfXZhciBEZT0vXihbXi5dKikoPzpcLiguKyl8KS87ZnVuY3Rpb24gTmUoKXtyZXR1cm4hMH1mdW5jdGlvbiBxZSgpe3JldHVybiExfWZ1bmN0aW9uIExlKGUsdCxuLHIsaSxvKXt2YXIgYSxzO2lmKCJvYmplY3QiPT10eXBlb2YgdCl7Zm9yKHMgaW4ic3RyaW5nIiE9dHlwZW9mIG4mJihyPXJ8fG4sbj12b2lkIDApLHQpTGUoZSxzLG4scix0W3NdLG8pO3JldHVybiBlfWlmKG51bGw9PXImJm51bGw9PWk/KGk9bixyPW49dm9pZCAwKTpudWxsPT1pJiYoInN0cmluZyI9PXR5cGVvZiBuPyhpPXIscj12b2lkIDApOihpPXIscj1uLG49dm9pZCAwKSksITE9PT1pKWk9cWU7ZWxzZSBpZighaSlyZXR1cm4gZTtyZXR1cm4gMT09PW8mJihhPWksKGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGNlKCkub2ZmKGUpLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSkuZ3VpZD1hLmd1aWR8fChhLmd1aWQ9Y2UuZ3VpZCsrKSksZS5lYWNoKGZ1bmN0aW9uKCl7Y2UuZXZlbnQuYWRkKHRoaXMsdCxpLHIsbil9KX1mdW5jdGlvbiBIZShlLHIsdCl7dD8oXy5zZXQoZSxyLCExKSxjZS5ldmVudC5hZGQoZSxyLHtuYW1lc3BhY2U6ITEsaGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdCxuPV8uZ2V0KHRoaXMscik7aWYoMSZlLmlzVHJpZ2dlciYmdGhpc1tyXSl7aWYobikoY2UuZXZlbnQuc3BlY2lhbFtyXXx8e30pLmRlbGVnYXRlVHlwZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtlbHNlIGlmKG49YWUuY2FsbChhcmd1bWVudHMpLF8uc2V0KHRoaXMscixuKSx0aGlzW3JdKCksdD1fLmdldCh0aGlzLHIpLF8uc2V0KHRoaXMsciwhMSksbiE9PXQpcmV0dXJuIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpLHR9ZWxzZSBuJiYoXy5zZXQodGhpcyxyLGNlLmV2ZW50LnRyaWdnZXIoblswXSxuLnNsaWNlKDEpLHRoaXMpKSxlLnN0b3BQcm9wYWdhdGlvbigpLGUuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9TmUpfX0pKTp2b2lkIDA9PT1fLmdldChlLHIpJiZjZS5ldmVudC5hZGQoZSxyLE5lKX1jZS5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvLGEscyx1LGwsYyxmLHAsZCxoLGcsdj1fLmdldCh0KTtpZigkKHQpKXtuLmhhbmRsZXImJihuPShvPW4pLmhhbmRsZXIsaT1vLnNlbGVjdG9yKSxpJiZjZS5maW5kLm1hdGNoZXNTZWxlY3RvcihKLGkpLG4uZ3VpZHx8KG4uZ3VpZD1jZS5ndWlkKyspLCh1PXYuZXZlbnRzKXx8KHU9di5ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSksKGE9di5oYW5kbGUpfHwoYT12LmhhbmRsZT1mdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGNlJiZjZS5ldmVudC50cmlnZ2VyZWQhPT1lLnR5cGU/Y2UuZXZlbnQuZGlzcGF0Y2guYXBwbHkodCxhcmd1bWVudHMpOnZvaWQgMH0pLGw9KGU9KGV8fCIiKS5tYXRjaChEKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlkPWc9KHM9RGUuZXhlYyhlW2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkJiYoZj1jZS5ldmVudC5zcGVjaWFsW2RdfHx7fSxkPShpP2YuZGVsZWdhdGVUeXBlOmYuYmluZFR5cGUpfHxkLGY9Y2UuZXZlbnQuc3BlY2lhbFtkXXx8e30sYz1jZS5leHRlbmQoe3R5cGU6ZCxvcmlnVHlwZTpnLGRhdGE6cixoYW5kbGVyOm4sZ3VpZDpuLmd1aWQsc2VsZWN0b3I6aSxuZWVkc0NvbnRleHQ6aSYmY2UuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChpKSxuYW1lc3BhY2U6aC5qb2luKCIuIil9LG8pLChwPXVbZF0pfHwoKHA9dVtkXT1bXSkuZGVsZWdhdGVDb3VudD0wLGYuc2V0dXAmJiExIT09Zi5zZXR1cC5jYWxsKHQscixoLGEpfHx0LmFkZEV2ZW50TGlzdGVuZXImJnQuYWRkRXZlbnRMaXN0ZW5lcihkLGEpKSxmLmFkZCYmKGYuYWRkLmNhbGwodCxjKSxjLmhhbmRsZXIuZ3VpZHx8KGMuaGFuZGxlci5ndWlkPW4uZ3VpZCkpLGk/cC5zcGxpY2UocC5kZWxlZ2F0ZUNvdW50KyssMCxjKTpwLnB1c2goYyksY2UuZXZlbnQuZ2xvYmFsW2RdPSEwKX19LHJlbW92ZTpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLGEscyx1LGwsYyxmLHAsZCxoLGcsdj1fLmhhc0RhdGEoZSkmJl8uZ2V0KGUpO2lmKHYmJih1PXYuZXZlbnRzKSl7bD0odD0odHx8IiIpLm1hdGNoKEQpfHxbIiJdKS5sZW5ndGg7d2hpbGUobC0tKWlmKGQ9Zz0ocz1EZS5leGVjKHRbbF0pfHxbXSlbMV0saD0oc1syXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGQpe2Y9Y2UuZXZlbnQuc3BlY2lhbFtkXXx8e30scD11W2Q9KHI/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGRdfHxbXSxzPXNbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksYT1vPXAubGVuZ3RoO3doaWxlKG8tLSljPXBbb10sIWkmJmchPT1jLm9yaWdUeXBlfHxuJiZuLmd1aWQhPT1jLmd1aWR8fHMmJiFzLnRlc3QoYy5uYW1lc3BhY2UpfHxyJiZyIT09Yy5zZWxlY3RvciYmKCIqKiIhPT1yfHwhYy5zZWxlY3Rvcil8fChwLnNwbGljZShvLDEpLGMuc2VsZWN0b3ImJnAuZGVsZWdhdGVDb3VudC0tLGYucmVtb3ZlJiZmLnJlbW92ZS5jYWxsKGUsYykpO2EmJiFwLmxlbmd0aCYmKGYudGVhcmRvd24mJiExIT09Zi50ZWFyZG93bi5jYWxsKGUsaCx2LmhhbmRsZSl8fGNlLnJlbW92ZUV2ZW50KGUsZCx2LmhhbmRsZSksZGVsZXRlIHVbZF0pfWVsc2UgZm9yKGQgaW4gdSljZS5ldmVudC5yZW1vdmUoZSxkK3RbbF0sbixyLCEwKTtjZS5pc0VtcHR5T2JqZWN0KHUpJiZfLnJlbW92ZShlLCJoYW5kbGUgZXZlbnRzIil9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksdT1jZS5ldmVudC5maXgoZSksbD0oXy5nZXQodGhpcywiZXZlbnRzIil8fE9iamVjdC5jcmVhdGUobnVsbCkpW3UudHlwZV18fFtdLGM9Y2UuZXZlbnQuc3BlY2lhbFt1LnR5cGVdfHx7fTtmb3Ioc1swXT11LHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXNbdF09YXJndW1lbnRzW3RdO2lmKHUuZGVsZWdhdGVUYXJnZXQ9dGhpcywhYy5wcmVEaXNwYXRjaHx8ITEhPT1jLnByZURpc3BhdGNoLmNhbGwodGhpcyx1KSl7YT1jZS5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsdSxsKSx0PTA7d2hpbGUoKGk9YVt0KytdKSYmIXUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7dS5jdXJyZW50VGFyZ2V0PWkuZWxlbSxuPTA7d2hpbGUoKG89aS5oYW5kbGVyc1tuKytdKSYmIXUuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSl1LnJuYW1lc3BhY2UmJiExIT09by5uYW1lc3BhY2UmJiF1LnJuYW1lc3BhY2UudGVzdChvLm5hbWVzcGFjZSl8fCh1LmhhbmRsZU9iaj1vLHUuZGF0YT1vLmRhdGEsdm9pZCAwIT09KHI9KChjZS5ldmVudC5zcGVjaWFsW28ub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxvLmhhbmRsZXIpLmFwcGx5KGkuZWxlbSxzKSkmJiExPT09KHUucmVzdWx0PXIpJiYodS5wcmV2ZW50RGVmYXVsdCgpLHUuc3RvcFByb3BhZ2F0aW9uKCkpKX1yZXR1cm4gYy5wb3N0RGlzcGF0Y2gmJmMucG9zdERpc3BhdGNoLmNhbGwodGhpcyx1KSx1LnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzPVtdLHU9dC5kZWxlZ2F0ZUNvdW50LGw9ZS50YXJnZXQ7aWYodSYmbC5ub2RlVHlwZSYmISgiY2xpY2siPT09ZS50eXBlJiYxPD1lLmJ1dHRvbikpZm9yKDtsIT09dGhpcztsPWwucGFyZW50Tm9kZXx8dGhpcylpZigxPT09bC5ub2RlVHlwZSYmKCJjbGljayIhPT1lLnR5cGV8fCEwIT09bC5kaXNhYmxlZCkpe2ZvcihvPVtdLGE9e30sbj0wO248dTtuKyspdm9pZCAwPT09YVtpPShyPXRbbl0pLnNlbGVjdG9yKyIgIl0mJihhW2ldPXIubmVlZHNDb250ZXh0Py0xPGNlKGksdGhpcykuaW5kZXgobCk6Y2UuZmluZChpLHRoaXMsbnVsbCxbbF0pLmxlbmd0aCksYVtpXSYmby5wdXNoKHIpO28ubGVuZ3RoJiZzLnB1c2goe2VsZW06bCxoYW5kbGVyczpvfSl9cmV0dXJuIGw9dGhpcyx1PHQubGVuZ3RoJiZzLnB1c2goe2VsZW06bCxoYW5kbGVyczp0LnNsaWNlKHUpfSksc30sYWRkUHJvcDpmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShjZS5FdmVudC5wcm90b3R5cGUsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OnYoZSk/ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIGUodGhpcy5vcmlnaW5hbEV2ZW50KX06ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFt0XX0sc2V0OmZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmV9KX19KX0sZml4OmZ1bmN0aW9uKGUpe3JldHVybiBlW2NlLmV4cGFuZG9dP2U6bmV3IGNlLkV2ZW50KGUpfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sY2xpY2s6e3NldHVwOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXN8fGU7cmV0dXJuIHdlLnRlc3QodC50eXBlKSYmdC5jbGljayYmZmUodCwiaW5wdXQiKSYmSGUodCwiY2xpY2siLCEwKSwhMX0sdHJpZ2dlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzfHxlO3JldHVybiB3ZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJmZlKHQsImlucHV0IikmJkhlKHQsImNsaWNrIiksITB9LF9kZWZhdWx0OmZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0O3JldHVybiB3ZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJmZlKHQsImlucHV0IikmJl8uZ2V0KHQsImNsaWNrIil8fGZlKHQsImEiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUucmVzdWx0JiZlLm9yaWdpbmFsRXZlbnQmJihlLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZS5yZXN1bHQpfX19fSxjZS5yZW1vdmVFdmVudD1mdW5jdGlvbihlLHQsbil7ZS5yZW1vdmVFdmVudExpc3RlbmVyJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuKX0sY2UuRXZlbnQ9ZnVuY3Rpb24oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBjZS5FdmVudCkpcmV0dXJuIG5ldyBjZS5FdmVudChlLHQpO2UmJmUudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWUsdGhpcy50eXBlPWUudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1lLmRlZmF1bHRQcmV2ZW50ZWR8fHZvaWQgMD09PWUuZGVmYXVsdFByZXZlbnRlZCYmITE9PT1lLnJldHVyblZhbHVlP05lOnFlLHRoaXMudGFyZ2V0PWUudGFyZ2V0JiYzPT09ZS50YXJnZXQubm9kZVR5cGU/ZS50YXJnZXQucGFyZW50Tm9kZTplLnRhcmdldCx0aGlzLmN1cnJlbnRUYXJnZXQ9ZS5jdXJyZW50VGFyZ2V0LHRoaXMucmVsYXRlZFRhcmdldD1lLnJlbGF0ZWRUYXJnZXQpOnRoaXMudHlwZT1lLHQmJmNlLmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHxEYXRlLm5vdygpLHRoaXNbY2UuZXhwYW5kb109ITB9LGNlLkV2ZW50LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Y2UuRXZlbnQsaXNEZWZhdWx0UHJldmVudGVkOnFlLGlzUHJvcGFnYXRpb25TdG9wcGVkOnFlLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOnFlLGlzU2ltdWxhdGVkOiExLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPU5lLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPU5lLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1OZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sY2UuZWFjaCh7YWx0S2V5OiEwLGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjaGFuZ2VkVG91Y2hlczohMCxjdHJsS2V5OiEwLGRldGFpbDohMCxldmVudFBoYXNlOiEwLG1ldGFLZXk6ITAscGFnZVg6ITAscGFnZVk6ITAsc2hpZnRLZXk6ITAsdmlldzohMCwiY2hhciI6ITAsY29kZTohMCxjaGFyQ29kZTohMCxrZXk6ITAsa2V5Q29kZTohMCxidXR0b246ITAsYnV0dG9uczohMCxjbGllbnRYOiEwLGNsaWVudFk6ITAsb2Zmc2V0WDohMCxvZmZzZXRZOiEwLHBvaW50ZXJJZDohMCxwb2ludGVyVHlwZTohMCxzY3JlZW5YOiEwLHNjcmVlblk6ITAsdGFyZ2V0VG91Y2hlczohMCx0b0VsZW1lbnQ6ITAsdG91Y2hlczohMCx3aGljaDohMH0sY2UuZXZlbnQuYWRkUHJvcCksY2UuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24ocixpKXtmdW5jdGlvbiBvKGUpe2lmKEMuZG9jdW1lbnRNb2RlKXt2YXIgdD1fLmdldCh0aGlzLCJoYW5kbGUiKSxuPWNlLmV2ZW50LmZpeChlKTtuLnR5cGU9ImZvY3VzaW4iPT09ZS50eXBlPyJmb2N1cyI6ImJsdXIiLG4uaXNTaW11bGF0ZWQ9ITAsdChlKSxuLnRhcmdldD09PW4uY3VycmVudFRhcmdldCYmdChuKX1lbHNlIGNlLmV2ZW50LnNpbXVsYXRlKGksZS50YXJnZXQsY2UuZXZlbnQuZml4KGUpKX1jZS5ldmVudC5zcGVjaWFsW3JdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBlO2lmKEhlKHRoaXMsciwhMCksIUMuZG9jdW1lbnRNb2RlKXJldHVybiExOyhlPV8uZ2V0KHRoaXMsaSkpfHx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoaSxvKSxfLnNldCh0aGlzLGksKGV8fDApKzEpfSx0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIEhlKHRoaXMsciksITB9LHRlYXJkb3duOmZ1bmN0aW9uKCl7dmFyIGU7aWYoIUMuZG9jdW1lbnRNb2RlKXJldHVybiExOyhlPV8uZ2V0KHRoaXMsaSktMSk/Xy5zZXQodGhpcyxpLGUpOih0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoaSxvKSxfLnJlbW92ZSh0aGlzLGkpKX0sX2RlZmF1bHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIF8uZ2V0KGUudGFyZ2V0LHIpfSxkZWxlZ2F0ZVR5cGU6aX0sY2UuZXZlbnQuc3BlY2lhbFtpXT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMuZG9jdW1lbnR8fHRoaXMsdD1DLmRvY3VtZW50TW9kZT90aGlzOmUsbj1fLmdldCh0LGkpO258fChDLmRvY3VtZW50TW9kZT90aGlzLmFkZEV2ZW50TGlzdGVuZXIoaSxvKTplLmFkZEV2ZW50TGlzdGVuZXIocixvLCEwKSksXy5zZXQodCxpLChufHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMuZG9jdW1lbnR8fHRoaXMsdD1DLmRvY3VtZW50TW9kZT90aGlzOmUsbj1fLmdldCh0LGkpLTE7bj9fLnNldCh0LGksbik6KEMuZG9jdW1lbnRNb2RlP3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihpLG8pOmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLG8sITApLF8ucmVtb3ZlKHQsaSkpfX19KSxjZS5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0Iixwb2ludGVyZW50ZXI6InBvaW50ZXJvdmVyIixwb2ludGVybGVhdmU6InBvaW50ZXJvdXQifSxmdW5jdGlvbihlLGkpe2NlLmV2ZW50LnNwZWNpYWxbZV09e2RlbGVnYXRlVHlwZTppLGJpbmRUeXBlOmksaGFuZGxlOmZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5yZWxhdGVkVGFyZ2V0LHI9ZS5oYW5kbGVPYmo7cmV0dXJuIG4mJihuPT09dGhpc3x8Y2UuY29udGFpbnModGhpcyxuKSl8fChlLnR5cGU9ci5vcmlnVHlwZSx0PXIuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS50eXBlPWkpLHR9fX0pLGNlLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIExlKHRoaXMsZSx0LG4scil9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gTGUodGhpcyxlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIHI9ZS5oYW5kbGVPYmosY2UoZS5kZWxlZ2F0ZVRhcmdldCkub2ZmKHIubmFtZXNwYWNlP3Iub3JpZ1R5cGUrIi4iK3IubmFtZXNwYWNlOnIub3JpZ1R5cGUsci5zZWxlY3RvcixyLmhhbmRsZXIpLHRoaXM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtmb3IoaSBpbiBlKXRoaXMub2ZmKGksdCxlW2ldKTtyZXR1cm4gdGhpc31yZXR1cm4hMSE9PXQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0fHwobj10LHQ9dm9pZCAwKSwhMT09PW4mJihuPXFlKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtjZS5ldmVudC5yZW1vdmUodGhpcyxlLG4sdCl9KX19KTt2YXIgT2U9LzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksUGU9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksTWU9L15ccyo8IVxbQ0RBVEFcW3xcXVxdPlxzKiQvZztmdW5jdGlvbiBSZShlLHQpe3JldHVybiBmZShlLCJ0YWJsZSIpJiZmZSgxMSE9PXQubm9kZVR5cGU/dDp0LmZpcnN0Q2hpbGQsInRyIikmJmNlKGUpLmNoaWxkcmVuKCJ0Ym9keSIpWzBdfHxlfWZ1bmN0aW9uIEllKGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKSsiLyIrZS50eXBlLGV9ZnVuY3Rpb24gV2UoZSl7cmV0dXJuInRydWUvIj09PShlLnR5cGV8fCIiKS5zbGljZSgwLDUpP2UudHlwZT1lLnR5cGUuc2xpY2UoNSk6ZS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxlfWZ1bmN0aW9uIEZlKGUsdCl7dmFyIG4scixpLG8sYSxzO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihfLmhhc0RhdGEoZSkmJihzPV8uZ2V0KGUpLmV2ZW50cykpZm9yKGkgaW4gXy5yZW1vdmUodCwiaGFuZGxlIGV2ZW50cyIpLHMpZm9yKG49MCxyPXNbaV0ubGVuZ3RoO248cjtuKyspY2UuZXZlbnQuYWRkKHQsaSxzW2ldW25dKTt6Lmhhc0RhdGEoZSkmJihvPXouYWNjZXNzKGUpLGE9Y2UuZXh0ZW5kKHt9LG8pLHouc2V0KHQsYSkpfX1mdW5jdGlvbiAkZShuLHIsaSxvKXtyPWcocik7dmFyIGUsdCxhLHMsdSxsLGM9MCxmPW4ubGVuZ3RoLHA9Zi0xLGQ9clswXSxoPXYoZCk7aWYoaHx8MTxmJiYic3RyaW5nIj09dHlwZW9mIGQmJiFsZS5jaGVja0Nsb25lJiZQZS50ZXN0KGQpKXJldHVybiBuLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9bi5lcShlKTtoJiYoclswXT1kLmNhbGwodGhpcyxlLHQuaHRtbCgpKSksJGUodCxyLGksbyl9KTtpZihmJiYodD0oZT1BZShyLG5bMF0ub3duZXJEb2N1bWVudCwhMSxuLG8pKS5maXJzdENoaWxkLDE9PT1lLmNoaWxkTm9kZXMubGVuZ3RoJiYoZT10KSx0fHxvKSl7Zm9yKHM9KGE9Y2UubWFwKFNlKGUsInNjcmlwdCIpLEllKSkubGVuZ3RoO2M8ZjtjKyspdT1lLGMhPT1wJiYodT1jZS5jbG9uZSh1LCEwLCEwKSxzJiZjZS5tZXJnZShhLFNlKHUsInNjcmlwdCIpKSksaS5jYWxsKG5bY10sdSxjKTtpZihzKWZvcihsPWFbYS5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCxjZS5tYXAoYSxXZSksYz0wO2M8cztjKyspdT1hW2NdLENlLnRlc3QodS50eXBlfHwiIikmJiFfLmFjY2Vzcyh1LCJnbG9iYWxFdmFsIikmJmNlLmNvbnRhaW5zKGwsdSkmJih1LnNyYyYmIm1vZHVsZSIhPT0odS50eXBlfHwiIikudG9Mb3dlckNhc2UoKT9jZS5fZXZhbFVybCYmIXUubm9Nb2R1bGUmJmNlLl9ldmFsVXJsKHUuc3JjLHtub25jZTp1Lm5vbmNlfHx1LmdldEF0dHJpYnV0ZSgibm9uY2UiKX0sbCk6bSh1LnRleHRDb250ZW50LnJlcGxhY2UoTWUsIiIpLHUsbCkpfXJldHVybiBufWZ1bmN0aW9uIEJlKGUsdCxuKXtmb3IodmFyIHIsaT10P2NlLmZpbHRlcih0LGUpOmUsbz0wO251bGwhPShyPWlbb10pO28rKylufHwxIT09ci5ub2RlVHlwZXx8Y2UuY2xlYW5EYXRhKFNlKHIpKSxyLnBhcmVudE5vZGUmJihuJiZLKHIpJiZFZShTZShyLCJzY3JpcHQiKSksci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIpKTtyZXR1cm4gZX1jZS5leHRlbmQoe2h0bWxQcmVmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGNsb25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjPWUuY2xvbmVOb2RlKCEwKSxmPUsoZSk7aWYoIShsZS5ub0Nsb25lQ2hlY2tlZHx8MSE9PWUubm9kZVR5cGUmJjExIT09ZS5ub2RlVHlwZXx8Y2UuaXNYTUxEb2MoZSkpKWZvcihhPVNlKGMpLHI9MCxpPShvPVNlKGUpKS5sZW5ndGg7cjxpO3IrKylzPW9bcl0sdT1hW3JdLHZvaWQgMCwiaW5wdXQiPT09KGw9dS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSYmd2UudGVzdChzLnR5cGUpP3UuY2hlY2tlZD1zLmNoZWNrZWQ6ImlucHV0IiE9PWwmJiJ0ZXh0YXJlYSIhPT1sfHwodS5kZWZhdWx0VmFsdWU9cy5kZWZhdWx0VmFsdWUpO2lmKHQpaWYobilmb3Iobz1vfHxTZShlKSxhPWF8fFNlKGMpLHI9MCxpPW8ubGVuZ3RoO3I8aTtyKyspRmUob1tyXSxhW3JdKTtlbHNlIEZlKGUsYyk7cmV0dXJuIDA8KGE9U2UoYywic2NyaXB0IikpLmxlbmd0aCYmRWUoYSwhZiYmU2UoZSwic2NyaXB0IikpLGN9LGNsZWFuRGF0YTpmdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGk9Y2UuZXZlbnQuc3BlY2lhbCxvPTA7dm9pZCAwIT09KG49ZVtvXSk7bysrKWlmKCQobikpe2lmKHQ9bltfLmV4cGFuZG9dKXtpZih0LmV2ZW50cylmb3IociBpbiB0LmV2ZW50cylpW3JdP2NlLmV2ZW50LnJlbW92ZShuLHIpOmNlLnJlbW92ZUV2ZW50KG4scix0LmhhbmRsZSk7bltfLmV4cGFuZG9dPXZvaWQgMH1uW3ouZXhwYW5kb10mJihuW3ouZXhwYW5kb109dm9pZCAwKX19fSksY2UuZm4uZXh0ZW5kKHtkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKHRoaXMsZSwhMCl9LHJlbW92ZTpmdW5jdGlvbihlKXtyZXR1cm4gQmUodGhpcyxlKX0sdGV4dDpmdW5jdGlvbihlKXtyZXR1cm4gTSh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lP2NlLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmVhY2goZnVuY3Rpb24oKXsxIT09dGhpcy5ub2RlVHlwZSYmMTEhPT10aGlzLm5vZGVUeXBlJiY5IT09dGhpcy5ub2RlVHlwZXx8KHRoaXMudGV4dENvbnRlbnQ9ZSl9KX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gJGUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fFJlKHRoaXMsZSkuYXBwZW5kQ2hpbGQoZSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiAkZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9UmUodGhpcyxlKTt0Lmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiAkZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiAkZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKX0pfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PTA7bnVsbCE9KGU9dGhpc1t0XSk7dCsrKTE9PT1lLm5vZGVUeXBlJiYoY2UuY2xlYW5EYXRhKFNlKGUsITEpKSxlLnRleHRDb250ZW50PSIiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1udWxsIT1lJiZlLHQ9bnVsbD09dD9lOnQsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gY2UuY2xvbmUodGhpcyxlLHQpfSl9LGh0bWw6ZnVuY3Rpb24oZSl7cmV0dXJuIE0odGhpcyxmdW5jdGlvbihlKXt2YXIgdD10aGlzWzBdfHx7fSxuPTAscj10aGlzLmxlbmd0aDtpZih2b2lkIDA9PT1lJiYxPT09dC5ub2RlVHlwZSlyZXR1cm4gdC5pbm5lckhUTUw7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYhT2UudGVzdChlKSYmIWtlWyhUZS5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7ZT1jZS5odG1sUHJlZmlsdGVyKGUpO3RyeXtmb3IoO248cjtuKyspMT09PSh0PXRoaXNbbl18fHt9KS5ub2RlVHlwZSYmKGNlLmNsZWFuRGF0YShTZSh0LCExKSksdC5pbm5lckhUTUw9ZSk7dD0wfWNhdGNoKGUpe319dCYmdGhpcy5lbXB0eSgpLmFwcGVuZChlKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBuPVtdO3JldHVybiAkZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Y2UuaW5BcnJheSh0aGlzLG4pPDAmJihjZS5jbGVhbkRhdGEoU2UodGhpcykpLHQmJnQucmVwbGFjZUNoaWxkKGUsdGhpcykpfSxuKX19KSxjZS5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oZSxhKXtjZS5mbltlXT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj1bXSxyPWNlKGUpLGk9ci5sZW5ndGgtMSxvPTA7bzw9aTtvKyspdD1vPT09aT90aGlzOnRoaXMuY2xvbmUoITApLGNlKHJbb10pW2FdKHQpLHMuYXBwbHkobix0LmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobil9fSk7dmFyIF9lPW5ldyBSZWdFeHAoIl4oIitHKyIpKD8hcHgpW2EteiVdKyQiLCJpIiksemU9L14tLS8sWGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O3JldHVybiB0JiZ0Lm9wZW5lcnx8KHQ9aWUpLHQuZ2V0Q29tcHV0ZWRTdHlsZShlKX0sVWU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz17fTtmb3IoaSBpbiB0KW9baV09ZS5zdHlsZVtpXSxlLnN0eWxlW2ldPXRbaV07Zm9yKGkgaW4gcj1uLmNhbGwoZSksdCllLnN0eWxlW2ldPW9baV07cmV0dXJuIHJ9LFZlPW5ldyBSZWdFeHAoUS5qb2luKCJ8IiksImkiKTtmdW5jdGlvbiBHZShlLHQsbil7dmFyIHIsaSxvLGEscz16ZS50ZXN0KHQpLHU9ZS5zdHlsZTtyZXR1cm4obj1ufHxYZShlKSkmJihhPW4uZ2V0UHJvcGVydHlWYWx1ZSh0KXx8blt0XSxzJiZhJiYoYT1hLnJlcGxhY2UodmUsIiQxIil8fHZvaWQgMCksIiIhPT1hfHxLKGUpfHwoYT1jZS5zdHlsZShlLHQpKSwhbGUucGl4ZWxCb3hTdHlsZXMoKSYmX2UudGVzdChhKSYmVmUudGVzdCh0KSYmKHI9dS53aWR0aCxpPXUubWluV2lkdGgsbz11Lm1heFdpZHRoLHUubWluV2lkdGg9dS5tYXhXaWR0aD11LndpZHRoPWEsYT1uLndpZHRoLHUud2lkdGg9cix1Lm1pbldpZHRoPWksdS5tYXhXaWR0aD1vKSksdm9pZCAwIT09YT9hKyIiOmF9ZnVuY3Rpb24gWWUoZSx0KXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7aWYoIWUoKSlyZXR1cm4odGhpcy5nZXQ9dCkuYXBwbHkodGhpcyxhcmd1bWVudHMpO2RlbGV0ZSB0aGlzLmdldH19fSFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtpZihsKXt1LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDttYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjAiLGwuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7d2lkdGg6NjAlO3RvcDoxJSIsSi5hcHBlbmRDaGlsZCh1KS5hcHBlbmRDaGlsZChsKTt2YXIgZT1pZS5nZXRDb21wdXRlZFN0eWxlKGwpO249IjElIiE9PWUudG9wLHM9MTI9PT10KGUubWFyZ2luTGVmdCksbC5zdHlsZS5yaWdodD0iNjAlIixvPTM2PT09dChlLnJpZ2h0KSxyPTM2PT09dChlLndpZHRoKSxsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaT0xMj09PXQobC5vZmZzZXRXaWR0aC8zKSxKLnJlbW92ZUNoaWxkKHUpLGw9bnVsbH19ZnVuY3Rpb24gdChlKXtyZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGUpKX12YXIgbixyLGksbyxhLHMsdT1DLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGw9Qy5jcmVhdGVFbGVtZW50KCJkaXYiKTtsLnN0eWxlJiYobC5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iY29udGVudC1ib3giLGwuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIixsZS5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWwuc3R5bGUuYmFja2dyb3VuZENsaXAsY2UuZXh0ZW5kKGxlLHtib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBlKCkscn0scGl4ZWxCb3hTdHlsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLG99LHBpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLG59LHJlbGlhYmxlTWFyZ2luTGVmdDpmdW5jdGlvbigpe3JldHVybiBlKCksc30sc2Nyb2xsYm94U2l6ZTpmdW5jdGlvbigpe3JldHVybiBlKCksaX0scmVsaWFibGVUckRpbWVuc2lvbnM6ZnVuY3Rpb24oKXt2YXIgZSx0LG4scjtyZXR1cm4gbnVsbD09YSYmKGU9Qy5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLHQ9Qy5jcmVhdGVFbGVtZW50KCJ0ciIpLG49Qy5jcmVhdGVFbGVtZW50KCJkaXYiKSxlLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlIix0LnN0eWxlLmNzc1RleHQ9ImJveC1zaXppbmc6Y29udGVudC1ib3g7Ym9yZGVyOjFweCBzb2xpZCIsdC5zdHlsZS5oZWlnaHQ9IjFweCIsbi5zdHlsZS5oZWlnaHQ9IjlweCIsbi5zdHlsZS5kaXNwbGF5PSJibG9jayIsSi5hcHBlbmRDaGlsZChlKS5hcHBlbmRDaGlsZCh0KS5hcHBlbmRDaGlsZChuKSxyPWllLmdldENvbXB1dGVkU3R5bGUodCksYT1wYXJzZUludChyLmhlaWdodCwxMCkrcGFyc2VJbnQoci5ib3JkZXJUb3BXaWR0aCwxMCkrcGFyc2VJbnQoci5ib3JkZXJCb3R0b21XaWR0aCwxMCk9PT10Lm9mZnNldEhlaWdodCxKLnJlbW92ZUNoaWxkKGUpKSxhfX0pKX0oKTt2YXIgUWU9WyJXZWJraXQiLCJNb3oiLCJtcyJdLEplPUMuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsS2U9e307ZnVuY3Rpb24gWmUoZSl7dmFyIHQ9Y2UuY3NzUHJvcHNbZV18fEtlW2VdO3JldHVybiB0fHwoZSBpbiBKZT9lOktlW2VdPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpLG49UWUubGVuZ3RoO3doaWxlKG4tLSlpZigoZT1RZVtuXSt0KWluIEplKXJldHVybiBlfShlKXx8ZSl9dmFyIGV0PS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyx0dD17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sbnQ9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9O2Z1bmN0aW9uIHJ0KGUsdCxuKXt2YXIgcj1ZLmV4ZWModCk7cmV0dXJuIHI/TWF0aC5tYXgoMCxyWzJdLShufHwwKSkrKHJbM118fCJweCIpOnR9ZnVuY3Rpb24gaXQoZSx0LG4scixpLG8pe3ZhciBhPSJ3aWR0aCI9PT10PzE6MCxzPTAsdT0wLGw9MDtpZihuPT09KHI/ImJvcmRlciI6ImNvbnRlbnQiKSlyZXR1cm4gMDtmb3IoO2E8NDthKz0yKSJtYXJnaW4iPT09biYmKGwrPWNlLmNzcyhlLG4rUVthXSwhMCxpKSkscj8oImNvbnRlbnQiPT09biYmKHUtPWNlLmNzcyhlLCJwYWRkaW5nIitRW2FdLCEwLGkpKSwibWFyZ2luIiE9PW4mJih1LT1jZS5jc3MoZSwiYm9yZGVyIitRW2FdKyJXaWR0aCIsITAsaSkpKToodSs9Y2UuY3NzKGUsInBhZGRpbmciK1FbYV0sITAsaSksInBhZGRpbmciIT09bj91Kz1jZS5jc3MoZSwiYm9yZGVyIitRW2FdKyJXaWR0aCIsITAsaSk6cys9Y2UuY3NzKGUsImJvcmRlciIrUVthXSsiV2lkdGgiLCEwLGkpKTtyZXR1cm4hciYmMDw9byYmKHUrPU1hdGgubWF4KDAsTWF0aC5jZWlsKGVbIm9mZnNldCIrdFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSldLW8tdS1zLS41KSl8fDApLHUrbH1mdW5jdGlvbiBvdChlLHQsbil7dmFyIHI9WGUoZSksaT0oIWxlLmJveFNpemluZ1JlbGlhYmxlKCl8fG4pJiYiYm9yZGVyLWJveCI9PT1jZS5jc3MoZSwiYm94U2l6aW5nIiwhMSxyKSxvPWksYT1HZShlLHQscikscz0ib2Zmc2V0Iit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtpZihfZS50ZXN0KGEpKXtpZighbilyZXR1cm4gYTthPSJhdXRvIn1yZXR1cm4oIWxlLmJveFNpemluZ1JlbGlhYmxlKCkmJml8fCFsZS5yZWxpYWJsZVRyRGltZW5zaW9ucygpJiZmZShlLCJ0ciIpfHwiYXV0byI9PT1hfHwhcGFyc2VGbG9hdChhKSYmImlubGluZSI9PT1jZS5jc3MoZSwiZGlzcGxheSIsITEscikpJiZlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiYoaT0iYm9yZGVyLWJveCI9PT1jZS5jc3MoZSwiYm94U2l6aW5nIiwhMSxyKSwobz1zIGluIGUpJiYoYT1lW3NdKSksKGE9cGFyc2VGbG9hdChhKXx8MCkraXQoZSx0LG58fChpPyJib3JkZXIiOiJjb250ZW50IiksbyxyLGEpKyJweCJ9ZnVuY3Rpb24gYXQoZSx0LG4scixpKXtyZXR1cm4gbmV3IGF0LnByb3RvdHlwZS5pbml0KGUsdCxuLHIsaSl9Y2UuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49R2UoZSwib3BhY2l0eSIpO3JldHVybiIiPT09bj8iMSI6bn19fX0sY3NzTnVtYmVyOnthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxhc3BlY3RSYXRpbzohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGNvbHVtbkNvdW50OiEwLGZsZXhHcm93OiEwLGZsZXhTaHJpbms6ITAsZm9udFdlaWdodDohMCxncmlkQXJlYTohMCxncmlkQ29sdW1uOiEwLGdyaWRDb2x1bW5FbmQ6ITAsZ3JpZENvbHVtblN0YXJ0OiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3RhcnQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsc2NhbGU6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwLGZpbGxPcGFjaXR5OiEwLGZsb29kT3BhY2l0eTohMCxzdG9wT3BhY2l0eTohMCxzdHJva2VNaXRlcmxpbWl0OiEwLHN0cm9rZU9wYWNpdHk6ITB9LGNzc1Byb3BzOnt9LHN0eWxlOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKGUmJjMhPT1lLm5vZGVUeXBlJiY4IT09ZS5ub2RlVHlwZSYmZS5zdHlsZSl7dmFyIGksbyxhLHM9Rih0KSx1PXplLnRlc3QodCksbD1lLnN0eWxlO2lmKHV8fCh0PVplKHMpKSxhPWNlLmNzc0hvb2tzW3RdfHxjZS5jc3NIb29rc1tzXSx2b2lkIDA9PT1uKXJldHVybiBhJiYiZ2V0ImluIGEmJnZvaWQgMCE9PShpPWEuZ2V0KGUsITEscikpP2k6bFt0XTsic3RyaW5nIj09PShvPXR5cGVvZiBuKSYmKGk9WS5leGVjKG4pKSYmaVsxXSYmKG49dGUoZSx0LGkpLG89Im51bWJlciIpLG51bGwhPW4mJm49PW4mJigibnVtYmVyIiE9PW98fHV8fChuKz1pJiZpWzNdfHwoY2UuY3NzTnVtYmVyW3NdPyIiOiJweCIpKSxsZS5jbGVhckNsb25lU3R5bGV8fCIiIT09bnx8MCE9PXQuaW5kZXhPZigiYmFja2dyb3VuZCIpfHwobFt0XT0iaW5oZXJpdCIpLGEmJiJzZXQiaW4gYSYmdm9pZCAwPT09KG49YS5zZXQoZSxuLHIpKXx8KHU/bC5zZXRQcm9wZXJ0eSh0LG4pOmxbdF09bikpfX0sY3NzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzPUYodCk7cmV0dXJuIHplLnRlc3QodCl8fCh0PVplKHMpKSwoYT1jZS5jc3NIb29rc1t0XXx8Y2UuY3NzSG9va3Nbc10pJiYiZ2V0ImluIGEmJihpPWEuZ2V0KGUsITAsbikpLHZvaWQgMD09PWkmJihpPUdlKGUsdCxyKSksIm5vcm1hbCI9PT1pJiZ0IGluIG50JiYoaT1udFt0XSksIiI9PT1ufHxuPyhvPXBhcnNlRmxvYXQoaSksITA9PT1ufHxpc0Zpbml0ZShvKT9vfHwwOmkpOml9fSksY2UuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oZSx1KXtjZS5jc3NIb29rc1t1XT17Z2V0OmZ1bmN0aW9uKGUsdCxuKXtpZih0KXJldHVybiFldC50ZXN0KGNlLmNzcyhlLCJkaXNwbGF5IikpfHxlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiZlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoP290KGUsdSxuKTpVZShlLHR0LGZ1bmN0aW9uKCl7cmV0dXJuIG90KGUsdSxuKX0pfSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9WGUoZSksbz0hbGUuc2Nyb2xsYm94U2l6ZSgpJiYiYWJzb2x1dGUiPT09aS5wb3NpdGlvbixhPShvfHxuKSYmImJvcmRlci1ib3giPT09Y2UuY3NzKGUsImJveFNpemluZyIsITEsaSkscz1uP2l0KGUsdSxuLGEsaSk6MDtyZXR1cm4gYSYmbyYmKHMtPU1hdGguY2VpbChlWyJvZmZzZXQiK3VbMF0udG9VcHBlckNhc2UoKSt1LnNsaWNlKDEpXS1wYXJzZUZsb2F0KGlbdV0pLWl0KGUsdSwiYm9yZGVyIiwhMSxpKS0uNSkpLHMmJihyPVkuZXhlYyh0KSkmJiJweCIhPT0oclszXXx8InB4IikmJihlLnN0eWxlW3VdPXQsdD1jZS5jc3MoZSx1KSkscnQoMCx0LHMpfX19KSxjZS5jc3NIb29rcy5tYXJnaW5MZWZ0PVllKGxlLnJlbGlhYmxlTWFyZ2luTGVmdCxmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuKHBhcnNlRmxvYXQoR2UoZSwibWFyZ2luTGVmdCIpKXx8ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LVVlKGUse21hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSkpKyJweCJ9KSxjZS5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oaSxvKXtjZS5jc3NIb29rc1tpK29dPXtleHBhbmQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj17fSxyPSJzdHJpbmciPT10eXBlb2YgZT9lLnNwbGl0KCIgIik6W2VdO3Q8NDt0KyspbltpK1FbdF0rb109clt0XXx8clt0LTJdfHxyWzBdO3JldHVybiBufX0sIm1hcmdpbiIhPT1pJiYoY2UuY3NzSG9va3NbaStvXS5zZXQ9cnQpfSksY2UuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTSh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30sYT0wO2lmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihyPVhlKGUpLGk9dC5sZW5ndGg7YTxpO2ErKylvW3RbYV1dPWNlLmNzcyhlLHRbYV0sITEscik7cmV0dXJuIG99cmV0dXJuIHZvaWQgMCE9PW4/Y2Uuc3R5bGUoZSx0LG4pOmNlLmNzcyhlLHQpfSxlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX19KSwoKGNlLlR3ZWVuPWF0KS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmF0LGluaXQ6ZnVuY3Rpb24oZSx0LG4scixpLG8pe3RoaXMuZWxlbT1lLHRoaXMucHJvcD1uLHRoaXMuZWFzaW5nPWl8fGNlLmVhc2luZy5fZGVmYXVsdCx0aGlzLm9wdGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9cix0aGlzLnVuaXQ9b3x8KGNlLmNzc051bWJlcltuXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGU9YXQucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGUmJmUuZ2V0P2UuZ2V0KHRoaXMpOmF0LnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPWF0LnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9dD1jZS5lYXNpbmdbdGhpcy5lYXNpbmddKGUsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmUsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9dD1lLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0K3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLG4mJm4uc2V0P24uc2V0KHRoaXMpOmF0LnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319KS5pbml0LnByb3RvdHlwZT1hdC5wcm90b3R5cGUsKGF0LnByb3BIb29rcz17X2RlZmF1bHQ6e2dldDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gMSE9PWUuZWxlbS5ub2RlVHlwZXx8bnVsbCE9ZS5lbGVtW2UucHJvcF0mJm51bGw9PWUuZWxlbS5zdHlsZVtlLnByb3BdP2UuZWxlbVtlLnByb3BdOih0PWNlLmNzcyhlLmVsZW0sZS5wcm9wLCIiKSkmJiJhdXRvIiE9PXQ/dDowfSxzZXQ6ZnVuY3Rpb24oZSl7Y2UuZnguc3RlcFtlLnByb3BdP2NlLmZ4LnN0ZXBbZS5wcm9wXShlKToxIT09ZS5lbGVtLm5vZGVUeXBlfHwhY2UuY3NzSG9va3NbZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW1plKGUucHJvcCldP2UuZWxlbVtlLnByb3BdPWUubm93OmNlLnN0eWxlKGUuZWxlbSxlLnByb3AsZS5ub3crZS51bml0KX19fSkuc2Nyb2xsVG9wPWF0LnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oZSl7ZS5lbGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtlLnByb3BdPWUubm93KX19LGNlLmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxzd2luZzpmdW5jdGlvbihlKXtyZXR1cm4uNS1NYXRoLmNvcyhlKk1hdGguUEkpLzJ9LF9kZWZhdWx0OiJzd2luZyJ9LGNlLmZ4PWF0LnByb3RvdHlwZS5pbml0LGNlLmZ4LnN0ZXA9e307dmFyIHN0LHV0LGx0LGN0LGZ0PS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxwdD0vcXVldWVIb29rcyQvO2Z1bmN0aW9uIGR0KCl7dXQmJighMT09PUMuaGlkZGVuJiZpZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/aWUucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGR0KTppZS5zZXRUaW1lb3V0KGR0LGNlLmZ4LmludGVydmFsKSxjZS5meC50aWNrKCkpfWZ1bmN0aW9uIGh0KCl7cmV0dXJuIGllLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtzdD12b2lkIDB9KSxzdD1EYXRlLm5vdygpfWZ1bmN0aW9uIGd0KGUsdCl7dmFyIG4scj0wLGk9e2hlaWdodDplfTtmb3IodD10PzE6MDtyPDQ7cis9Mi10KWlbIm1hcmdpbiIrKG49UVtyXSldPWlbInBhZGRpbmciK25dPWU7cmV0dXJuIHQmJihpLm9wYWNpdHk9aS53aWR0aD1lKSxpfWZ1bmN0aW9uIHZ0KGUsdCxuKXtmb3IodmFyIHIsaT0oeXQudHdlZW5lcnNbdF18fFtdKS5jb25jYXQoeXQudHdlZW5lcnNbIioiXSksbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpZihyPWlbb10uY2FsbChuLHQsZSkpcmV0dXJuIHJ9ZnVuY3Rpb24geXQobyxlLHQpe3ZhciBuLGEscj0wLGk9eXQucHJlZmlsdGVycy5sZW5ndGgscz1jZS5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSB1LmVsZW19KSx1PWZ1bmN0aW9uKCl7aWYoYSlyZXR1cm4hMTtmb3IodmFyIGU9c3R8fGh0KCksdD1NYXRoLm1heCgwLGwuc3RhcnRUaW1lK2wuZHVyYXRpb24tZSksbj0xLSh0L2wuZHVyYXRpb258fDApLHI9MCxpPWwudHdlZW5zLmxlbmd0aDtyPGk7cisrKWwudHdlZW5zW3JdLnJ1bihuKTtyZXR1cm4gcy5ub3RpZnlXaXRoKG8sW2wsbix0XSksbjwxJiZpP3Q6KGl8fHMubm90aWZ5V2l0aChvLFtsLDEsMF0pLHMucmVzb2x2ZVdpdGgobyxbbF0pLCExKX0sbD1zLnByb21pc2Uoe2VsZW06byxwcm9wczpjZS5leHRlbmQoe30sZSksb3B0czpjZS5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOmNlLmVhc2luZy5fZGVmYXVsdH0sdCksb3JpZ2luYWxQcm9wZXJ0aWVzOmUsb3JpZ2luYWxPcHRpb25zOnQsc3RhcnRUaW1lOnN0fHxodCgpLGR1cmF0aW9uOnQuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKGUsdCl7dmFyIG49Y2UuVHdlZW4obyxsLm9wdHMsZSx0LGwub3B0cy5zcGVjaWFsRWFzaW5nW2VdfHxsLm9wdHMuZWFzaW5nKTtyZXR1cm4gbC50d2VlbnMucHVzaChuKSxufSxzdG9wOmZ1bmN0aW9uKGUpe3ZhciB0PTAsbj1lP2wudHdlZW5zLmxlbmd0aDowO2lmKGEpcmV0dXJuIHRoaXM7Zm9yKGE9ITA7dDxuO3QrKylsLnR3ZWVuc1t0XS5ydW4oMSk7cmV0dXJuIGU/KHMubm90aWZ5V2l0aChvLFtsLDEsMF0pLHMucmVzb2x2ZVdpdGgobyxbbCxlXSkpOnMucmVqZWN0V2l0aChvLFtsLGVdKSx0aGlzfX0pLGM9bC5wcm9wcztmb3IoIWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYTtmb3IobiBpbiBlKWlmKGk9dFtyPUYobildLG89ZVtuXSxBcnJheS5pc0FycmF5KG8pJiYoaT1vWzFdLG89ZVtuXT1vWzBdKSxuIT09ciYmKGVbcl09byxkZWxldGUgZVtuXSksKGE9Y2UuY3NzSG9va3Nbcl0pJiYiZXhwYW5kImluIGEpZm9yKG4gaW4gbz1hLmV4cGFuZChvKSxkZWxldGUgZVtyXSxvKW4gaW4gZXx8KGVbbl09b1tuXSx0W25dPWkpO2Vsc2UgdFtyXT1pfShjLGwub3B0cy5zcGVjaWFsRWFzaW5nKTtyPGk7cisrKWlmKG49eXQucHJlZmlsdGVyc1tyXS5jYWxsKGwsbyxjLGwub3B0cykpcmV0dXJuIHYobi5zdG9wKSYmKGNlLl9xdWV1ZUhvb2tzKGwuZWxlbSxsLm9wdHMucXVldWUpLnN0b3A9bi5zdG9wLmJpbmQobikpLG47cmV0dXJuIGNlLm1hcChjLHZ0LGwpLHYobC5vcHRzLnN0YXJ0KSYmbC5vcHRzLnN0YXJ0LmNhbGwobyxsKSxsLnByb2dyZXNzKGwub3B0cy5wcm9ncmVzcykuZG9uZShsLm9wdHMuZG9uZSxsLm9wdHMuY29tcGxldGUpLmZhaWwobC5vcHRzLmZhaWwpLmFsd2F5cyhsLm9wdHMuYWx3YXlzKSxjZS5meC50aW1lcihjZS5leHRlbmQodSx7ZWxlbTpvLGFuaW06bCxxdWV1ZTpsLm9wdHMucXVldWV9KSksbH1jZS5BbmltYXRpb249Y2UuZXh0ZW5kKHl0LHt0d2VlbmVyczp7IioiOltmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY3JlYXRlVHdlZW4oZSx0KTtyZXR1cm4gdGUobi5lbGVtLGUsWS5leGVjKHQpLG4pLG59XX0sdHdlZW5lcjpmdW5jdGlvbihlLHQpe3YoZSk/KHQ9ZSxlPVsiKiJdKTplPWUubWF0Y2goRCk7Zm9yKHZhciBuLHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspbj1lW3JdLHl0LnR3ZWVuZXJzW25dPXl0LnR3ZWVuZXJzW25dfHxbXSx5dC50d2VlbmVyc1tuXS51bnNoaWZ0KHQpfSxwcmVmaWx0ZXJzOltmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGwsYyxmPSJ3aWR0aCJpbiB0fHwiaGVpZ2h0ImluIHQscD10aGlzLGQ9e30saD1lLnN0eWxlLGc9ZS5ub2RlVHlwZSYmZWUoZSksdj1fLmdldChlLCJmeHNob3ciKTtmb3IociBpbiBuLnF1ZXVlfHwobnVsbD09KGE9Y2UuX3F1ZXVlSG9va3MoZSwiZngiKSkudW5xdWV1ZWQmJihhLnVucXVldWVkPTAscz1hLmVtcHR5LmZpcmUsYS5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7YS51bnF1ZXVlZHx8cygpfSksYS51bnF1ZXVlZCsrLHAuYWx3YXlzKGZ1bmN0aW9uKCl7cC5hbHdheXMoZnVuY3Rpb24oKXthLnVucXVldWVkLS0sY2UucXVldWUoZSwiZngiKS5sZW5ndGh8fGEuZW1wdHkuZmlyZSgpfSl9KSksdClpZihpPXRbcl0sZnQudGVzdChpKSl7aWYoZGVsZXRlIHRbcl0sbz1vfHwidG9nZ2xlIj09PWksaT09PShnPyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1pfHwhdnx8dm9pZCAwPT09dltyXSljb250aW51ZTtnPSEwfWRbcl09diYmdltyXXx8Y2Uuc3R5bGUoZSxyKX1pZigodT0hY2UuaXNFbXB0eU9iamVjdCh0KSl8fCFjZS5pc0VtcHR5T2JqZWN0KGQpKWZvcihyIGluIGYmJjE9PT1lLm5vZGVUeXBlJiYobi5vdmVyZmxvdz1baC5vdmVyZmxvdyxoLm92ZXJmbG93WCxoLm92ZXJmbG93WV0sbnVsbD09KGw9diYmdi5kaXNwbGF5KSYmKGw9Xy5nZXQoZSwiZGlzcGxheSIpKSwibm9uZSI9PT0oYz1jZS5jc3MoZSwiZGlzcGxheSIpKSYmKGw/Yz1sOihyZShbZV0sITApLGw9ZS5zdHlsZS5kaXNwbGF5fHxsLGM9Y2UuY3NzKGUsImRpc3BsYXkiKSxyZShbZV0pKSksKCJpbmxpbmUiPT09Y3x8ImlubGluZS1ibG9jayI9PT1jJiZudWxsIT1sKSYmIm5vbmUiPT09Y2UuY3NzKGUsImZsb2F0IikmJih1fHwocC5kb25lKGZ1bmN0aW9uKCl7aC5kaXNwbGF5PWx9KSxudWxsPT1sJiYoYz1oLmRpc3BsYXksbD0ibm9uZSI9PT1jPyIiOmMpKSxoLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxuLm92ZXJmbG93JiYoaC5vdmVyZmxvdz0iaGlkZGVuIixwLmFsd2F5cyhmdW5jdGlvbigpe2gub3ZlcmZsb3c9bi5vdmVyZmxvd1swXSxoLm92ZXJmbG93WD1uLm92ZXJmbG93WzFdLGgub3ZlcmZsb3dZPW4ub3ZlcmZsb3dbMl19KSksdT0hMSxkKXV8fCh2PyJoaWRkZW4iaW4gdiYmKGc9di5oaWRkZW4pOnY9Xy5hY2Nlc3MoZSwiZnhzaG93Iix7ZGlzcGxheTpsfSksbyYmKHYuaGlkZGVuPSFnKSxnJiZyZShbZV0sITApLHAuZG9uZShmdW5jdGlvbigpe2ZvcihyIGluIGd8fHJlKFtlXSksXy5yZW1vdmUoZSwiZnhzaG93IiksZCljZS5zdHlsZShlLHIsZFtyXSl9KSksdT12dChnP3Zbcl06MCxyLHApLHIgaW4gdnx8KHZbcl09dS5zdGFydCxnJiYodS5lbmQ9dS5zdGFydCx1LnN0YXJ0PTApKX1dLHByZWZpbHRlcjpmdW5jdGlvbihlLHQpe3Q/eXQucHJlZmlsdGVycy51bnNoaWZ0KGUpOnl0LnByZWZpbHRlcnMucHVzaChlKX19KSxjZS5zcGVlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZSYmIm9iamVjdCI9PXR5cGVvZiBlP2NlLmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fHYoZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIXYodCkmJnR9O3JldHVybiBjZS5meC5vZmY/ci5kdXJhdGlvbj0wOiJudW1iZXIiIT10eXBlb2Ygci5kdXJhdGlvbiYmKHIuZHVyYXRpb24gaW4gY2UuZnguc3BlZWRzP3IuZHVyYXRpb249Y2UuZnguc3BlZWRzW3IuZHVyYXRpb25dOnIuZHVyYXRpb249Y2UuZnguc3BlZWRzLl9kZWZhdWx0KSxudWxsIT1yLnF1ZXVlJiYhMCE9PXIucXVldWV8fChyLnF1ZXVlPSJmeCIpLHIub2xkPXIuY29tcGxldGUsci5jb21wbGV0ZT1mdW5jdGlvbigpe3Yoci5vbGQpJiZyLm9sZC5jYWxsKHRoaXMpLHIucXVldWUmJmNlLmRlcXVldWUodGhpcyxyLnF1ZXVlKX0scn0sY2UuZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuZmlsdGVyKGVlKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1jZS5pc0VtcHR5T2JqZWN0KHQpLG89Y2Uuc3BlZWQoZSxuLHIpLGE9ZnVuY3Rpb24oKXt2YXIgZT15dCh0aGlzLGNlLmV4dGVuZCh7fSx0KSxvKTsoaXx8Xy5nZXQodGhpcywiZmluaXNoIikpJiZlLnN0b3AoITApfTtyZXR1cm4gYS5maW5pc2g9YSxpfHwhMT09PW8ucXVldWU/dGhpcy5lYWNoKGEpOnRoaXMucXVldWUoby5xdWV1ZSxhKX0sc3RvcDpmdW5jdGlvbihpLGUsbyl7dmFyIGE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChvKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBpJiYobz1lLGU9aSxpPXZvaWQgMCksZSYmdGhpcy5xdWV1ZShpfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT0hMCx0PW51bGwhPWkmJmkrInF1ZXVlSG9va3MiLG49Y2UudGltZXJzLHI9Xy5nZXQodGhpcyk7aWYodClyW3RdJiZyW3RdLnN0b3AmJmEoclt0XSk7ZWxzZSBmb3IodCBpbiByKXJbdF0mJnJbdF0uc3RvcCYmcHQudGVzdCh0KSYmYShyW3RdKTtmb3IodD1uLmxlbmd0aDt0LS07KW5bdF0uZWxlbSE9PXRoaXN8fG51bGwhPWkmJm5bdF0ucXVldWUhPT1pfHwoblt0XS5hbmltLnN0b3AobyksZT0hMSxuLnNwbGljZSh0LDEpKTshZSYmb3x8Y2UuZGVxdWV1ZSh0aGlzLGkpfSl9LGZpbmlzaDpmdW5jdGlvbihhKXtyZXR1cm4hMSE9PWEmJihhPWF8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlLHQ9Xy5nZXQodGhpcyksbj10W2ErInF1ZXVlIl0scj10W2ErInF1ZXVlSG9va3MiXSxpPWNlLnRpbWVycyxvPW4/bi5sZW5ndGg6MDtmb3IodC5maW5pc2g9ITAsY2UucXVldWUodGhpcyxhLFtdKSxyJiZyLnN0b3AmJnIuc3RvcC5jYWxsKHRoaXMsITApLGU9aS5sZW5ndGg7ZS0tOylpW2VdLmVsZW09PT10aGlzJiZpW2VdLnF1ZXVlPT09YSYmKGlbZV0uYW5pbS5zdG9wKCEwKSxpLnNwbGljZShlLDEpKTtmb3IoZT0wO2U8bztlKyspbltlXSYmbltlXS5maW5pc2gmJm5bZV0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIHQuZmluaXNofSl9fSksY2UuZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24oZSxyKXt2YXIgaT1jZS5mbltyXTtjZS5mbltyXT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09dHlwZW9mIGU/aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKGd0KHIsITApLGUsdCxuKX19KSxjZS5lYWNoKHtzbGlkZURvd246Z3QoInNob3ciKSxzbGlkZVVwOmd0KCJoaWRlIiksc2xpZGVUb2dnbGU6Z3QoInRvZ2dsZSIpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oZSxyKXtjZS5mbltlXT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuYW5pbWF0ZShyLGUsdCxuKX19KSxjZS50aW1lcnM9W10sY2UuZngudGljaz1mdW5jdGlvbigpe3ZhciBlLHQ9MCxuPWNlLnRpbWVycztmb3Ioc3Q9RGF0ZS5ub3coKTt0PG4ubGVuZ3RoO3QrKykoZT1uW3RdKSgpfHxuW3RdIT09ZXx8bi5zcGxpY2UodC0tLDEpO24ubGVuZ3RofHxjZS5meC5zdG9wKCksc3Q9dm9pZCAwfSxjZS5meC50aW1lcj1mdW5jdGlvbihlKXtjZS50aW1lcnMucHVzaChlKSxjZS5meC5zdGFydCgpfSxjZS5meC5pbnRlcnZhbD0xMyxjZS5meC5zdGFydD1mdW5jdGlvbigpe3V0fHwodXQ9ITAsZHQoKSl9LGNlLmZ4LnN0b3A9ZnVuY3Rpb24oKXt1dD1udWxsfSxjZS5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sY2UuZm4uZGVsYXk9ZnVuY3Rpb24ocixlKXtyZXR1cm4gcj1jZS5meCYmY2UuZnguc3BlZWRzW3JdfHxyLGU9ZXx8ImZ4Iix0aGlzLnF1ZXVlKGUsZnVuY3Rpb24oZSx0KXt2YXIgbj1pZS5zZXRUaW1lb3V0KGUscik7dC5zdG9wPWZ1bmN0aW9uKCl7aWUuY2xlYXJUaW1lb3V0KG4pfX0pfSxsdD1DLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksY3Q9Qy5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKS5hcHBlbmRDaGlsZChDLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxsdC50eXBlPSJjaGVja2JveCIsbGUuY2hlY2tPbj0iIiE9PWx0LnZhbHVlLGxlLm9wdFNlbGVjdGVkPWN0LnNlbGVjdGVkLChsdD1DLmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnZhbHVlPSJ0IixsdC50eXBlPSJyYWRpbyIsbGUucmFkaW9WYWx1ZT0idCI9PT1sdC52YWx1ZTt2YXIgbXQseHQ9Y2UuZXhwci5hdHRySGFuZGxlO2NlLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiBNKHRoaXMsY2UuYXR0cixlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Y2UucmVtb3ZlQXR0cih0aGlzLGUpfSl9fSksY2UuZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgZS5nZXRBdHRyaWJ1dGU/Y2UucHJvcChlLHQsbik6KDE9PT1vJiZjZS5pc1hNTERvYyhlKXx8KGk9Y2UuYXR0ckhvb2tzW3QudG9Mb3dlckNhc2UoKV18fChjZS5leHByLm1hdGNoLmJvb2wudGVzdCh0KT9tdDp2b2lkIDApKSx2b2lkIDAhPT1uP251bGw9PT1uP3ZvaWQgY2UucmVtb3ZlQXR0cihlLHQpOmkmJiJzZXQiaW4gaSYmdm9pZCAwIT09KHI9aS5zZXQoZSxuLHQpKT9yOihlLnNldEF0dHJpYnV0ZSh0LG4rIiIpLG4pOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6bnVsbD09KHI9Y2UuZmluZC5hdHRyKGUsdCkpP3ZvaWQgMDpyKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oZSx0KXtpZighbGUucmFkaW9WYWx1ZSYmInJhZGlvIj09PXQmJmZlKGUsImlucHV0Iikpe3ZhciBuPWUudmFsdWU7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJ0eXBlIix0KSxuJiYoZS52YWx1ZT1uKSx0fX19fSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wLGk9dCYmdC5tYXRjaChEKTtpZihpJiYxPT09ZS5ub2RlVHlwZSl3aGlsZShuPWlbcisrXSllLnJlbW92ZUF0dHJpYnV0ZShuKX19KSxtdD17c2V0OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hMT09PXQ/Y2UucmVtb3ZlQXR0cihlLG4pOmUuc2V0QXR0cmlidXRlKG4sbiksbn19LGNlLmVhY2goY2UuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGUsdCl7dmFyIGE9eHRbdF18fGNlLmZpbmQuYXR0cjt4dFt0XT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXQudG9Mb3dlckNhc2UoKTtyZXR1cm4gbnx8KGk9eHRbb10seHRbb109cixyPW51bGwhPWEoZSx0LG4pP286bnVsbCx4dFtvXT1pKSxyfX0pO3ZhciBidD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLHd0PS9eKD86YXxhcmVhKSQvaTtmdW5jdGlvbiBUdChlKXtyZXR1cm4oZS5tYXRjaChEKXx8W10pLmpvaW4oIiAiKX1mdW5jdGlvbiBDdChlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIn1mdW5jdGlvbiBrdChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOiJzdHJpbmciPT10eXBlb2YgZSYmZS5tYXRjaChEKXx8W119Y2UuZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE0odGhpcyxjZS5wcm9wLGUsdCwxPGFyZ3VtZW50cy5sZW5ndGgpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tjZS5wcm9wRml4W2VdfHxlXX0pfX0pLGNlLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm4gMT09PW8mJmNlLmlzWE1MRG9jKGUpfHwodD1jZS5wcm9wRml4W3RdfHx0LGk9Y2UucHJvcEhvb2tzW3RdKSx2b2lkIDAhPT1uP2kmJiJzZXQiaW4gaSYmdm9pZCAwIT09KHI9aS5zZXQoZSxuLHQpKT9yOmVbdF09bjppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOmVbdF19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXt2YXIgdD1jZS5maW5kLmF0dHIoZSwidGFiaW5kZXgiKTtyZXR1cm4gdD9wYXJzZUludCh0LDEwKTpidC50ZXN0KGUubm9kZU5hbWUpfHx3dC50ZXN0KGUubm9kZU5hbWUpJiZlLmhyZWY/MDotMX19fSxwcm9wRml4OnsiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIn19KSxsZS5vcHRTZWxlY3RlZHx8KGNlLnByb3BIb29rcy5zZWxlY3RlZD17Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxudWxsfSxzZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3QmJih0LnNlbGVjdGVkSW5kZXgsdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCl9fSksY2UuZWFjaChbInRhYkluZGV4IiwicmVhZE9ubHkiLCJtYXhMZW5ndGgiLCJjZWxsU3BhY2luZyIsImNlbGxQYWRkaW5nIiwicm93U3BhbiIsImNvbFNwYW4iLCJ1c2VNYXAiLCJmcmFtZUJvcmRlciIsImNvbnRlbnRFZGl0YWJsZSJdLGZ1bmN0aW9uKCl7Y2UucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSxjZS5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG8sYTtyZXR1cm4gdih0KT90aGlzLmVhY2goZnVuY3Rpb24oZSl7Y2UodGhpcykuYWRkQ2xhc3ModC5jYWxsKHRoaXMsZSxDdCh0aGlzKSkpfSk6KGU9a3QodCkpLmxlbmd0aD90aGlzLmVhY2goZnVuY3Rpb24oKXtpZihyPUN0KHRoaXMpLG49MT09PXRoaXMubm9kZVR5cGUmJiIgIitUdChyKSsiICIpe2ZvcihvPTA7bzxlLmxlbmd0aDtvKyspaT1lW29dLG4uaW5kZXhPZigiICIraSsiICIpPDAmJihuKz1pKyIgIik7YT1UdChuKSxyIT09YSYmdGhpcy5zZXRBdHRyaWJ1dGUoImNsYXNzIixhKX19KTp0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxvLGE7cmV0dXJuIHYodCk/dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe2NlKHRoaXMpLnJlbW92ZUNsYXNzKHQuY2FsbCh0aGlzLGUsQ3QodGhpcykpKX0pOmFyZ3VtZW50cy5sZW5ndGg/KGU9a3QodCkpLmxlbmd0aD90aGlzLmVhY2goZnVuY3Rpb24oKXtpZihyPUN0KHRoaXMpLG49MT09PXRoaXMubm9kZVR5cGUmJiIgIitUdChyKSsiICIpe2ZvcihvPTA7bzxlLmxlbmd0aDtvKyspe2k9ZVtvXTt3aGlsZSgtMTxuLmluZGV4T2YoIiAiK2krIiAiKSluPW4ucmVwbGFjZSgiICIraSsiICIsIiAiKX1hPVR0KG4pLHIhPT1hJiZ0aGlzLnNldEF0dHJpYnV0ZSgiY2xhc3MiLGEpfX0pOnRoaXM6dGhpcy5hdHRyKCJjbGFzcyIsIiIpfSx0b2dnbGVDbGFzczpmdW5jdGlvbih0LG4pe3ZhciBlLHIsaSxvLGE9dHlwZW9mIHQscz0ic3RyaW5nIj09PWF8fEFycmF5LmlzQXJyYXkodCk7cmV0dXJuIHYodCk/dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe2NlKHRoaXMpLnRvZ2dsZUNsYXNzKHQuY2FsbCh0aGlzLGUsQ3QodGhpcyksbiksbil9KToiYm9vbGVhbiI9PXR5cGVvZiBuJiZzP24/dGhpcy5hZGRDbGFzcyh0KTp0aGlzLnJlbW92ZUNsYXNzKHQpOihlPWt0KHQpLHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKHMpZm9yKG89Y2UodGhpcyksaT0wO2k8ZS5sZW5ndGg7aSsrKXI9ZVtpXSxvLmhhc0NsYXNzKHIpP28ucmVtb3ZlQ2xhc3Mocik6by5hZGRDbGFzcyhyKTtlbHNlIHZvaWQgMCE9PXQmJiJib29sZWFuIiE9PWF8fCgocj1DdCh0aGlzKSkmJl8uc2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iLHIpLHRoaXMuc2V0QXR0cmlidXRlJiZ0aGlzLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHJ8fCExPT09dD8iIjpfLmdldCh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIiKSl9KSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj0wO3Q9IiAiK2UrIiAiO3doaWxlKG49dGhpc1tyKytdKWlmKDE9PT1uLm5vZGVUeXBlJiYtMTwoIiAiK1R0KEN0KG4pKSsiICIpLmluZGV4T2YodCkpcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIFN0PS9cci9nO2NlLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKG4pe3ZhciByLGUsaSx0PXRoaXNbMF07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dihuKSx0aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ7MT09PXRoaXMubm9kZVR5cGUmJihudWxsPT0odD1pP24uY2FsbCh0aGlzLGUsY2UodGhpcykudmFsKCkpOm4pP3Q9IiI6Im51bWJlciI9PXR5cGVvZiB0P3QrPSIiOkFycmF5LmlzQXJyYXkodCkmJih0PWNlLm1hcCh0LGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksKHI9Y2UudmFsSG9va3NbdGhpcy50eXBlXXx8Y2UudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkmJiJzZXQiaW4gciYmdm9pZCAwIT09ci5zZXQodGhpcyx0LCJ2YWx1ZSIpfHwodGhpcy52YWx1ZT10KSl9KSk6dD8ocj1jZS52YWxIb29rc1t0LnR5cGVdfHxjZS52YWxIb29rc1t0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmImdldCJpbiByJiZ2b2lkIDAhPT0oZT1yLmdldCh0LCJ2YWx1ZSIpKT9lOiJzdHJpbmciPT10eXBlb2YoZT10LnZhbHVlKT9lLnJlcGxhY2UoU3QsIiIpOm51bGw9PWU/IiI6ZTp2b2lkIDB9fSksY2UuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9Y2UuZmluZC5hdHRyKGUsInZhbHVlIik7cmV0dXJuIG51bGwhPXQ/dDpUdChjZS50ZXh0KGUpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPWUub3B0aW9ucyxvPWUuc2VsZWN0ZWRJbmRleCxhPSJzZWxlY3Qtb25lIj09PWUudHlwZSxzPWE/bnVsbDpbXSx1PWE/bysxOmkubGVuZ3RoO2ZvcihyPW88MD91OmE/bzowO3I8dTtyKyspaWYoKChuPWlbcl0pLnNlbGVjdGVkfHxyPT09bykmJiFuLmRpc2FibGVkJiYoIW4ucGFyZW50Tm9kZS5kaXNhYmxlZHx8IWZlKG4ucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKHQ9Y2UobikudmFsKCksYSlyZXR1cm4gdDtzLnB1c2godCl9cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLm9wdGlvbnMsbz1jZS5tYWtlQXJyYXkodCksYT1pLmxlbmd0aDt3aGlsZShhLS0pKChyPWlbYV0pLnNlbGVjdGVkPS0xPGNlLmluQXJyYXkoY2UudmFsSG9va3Mub3B0aW9uLmdldChyKSxvKSkmJihuPSEwKTtyZXR1cm4gbnx8KGUuc2VsZWN0ZWRJbmRleD0tMSksb319fX0pLGNlLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtjZS52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGUsdCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gZS5jaGVja2VkPS0xPGNlLmluQXJyYXkoY2UoZSkudmFsKCksdCl9fSxsZS5jaGVja09ufHwoY2UudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KTt2YXIgRXQ9aWUubG9jYXRpb24sanQ9e2d1aWQ6RGF0ZS5ub3coKX0sQXQ9L1w/LztjZS5wYXJzZVhNTD1mdW5jdGlvbihlKXt2YXIgdCxuO2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7dHJ5e3Q9KG5ldyBpZS5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhlLCJ0ZXh0L3htbCIpfWNhdGNoKGUpe31yZXR1cm4gbj10JiZ0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpWzBdLHQmJiFufHxjZS5lcnJvcigiSW52YWxpZCBYTUw6ICIrKG4/Y2UubWFwKG4uY2hpbGROb2RlcyxmdW5jdGlvbihlKXtyZXR1cm4gZS50ZXh0Q29udGVudH0pLmpvaW4oIlxuIik6ZSkpLHR9O3ZhciBEdD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sTnQ9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX07Y2UuZXh0ZW5kKGNlLmV2ZW50LHt0cmlnZ2VyOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbCxjLGYscD1bbnx8Q10sZD11ZS5jYWxsKGUsInR5cGUiKT9lLnR5cGU6ZSxoPXVlLmNhbGwoZSwibmFtZXNwYWNlIik/ZS5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihvPWY9YT1uPW58fEMsMyE9PW4ubm9kZVR5cGUmJjghPT1uLm5vZGVUeXBlJiYhRHQudGVzdChkK2NlLmV2ZW50LnRyaWdnZXJlZCkmJigtMTxkLmluZGV4T2YoIi4iKSYmKGQ9KGg9ZC5zcGxpdCgiLiIpKS5zaGlmdCgpLGguc29ydCgpKSx1PWQuaW5kZXhPZigiOiIpPDAmJiJvbiIrZCwoZT1lW2NlLmV4cGFuZG9dP2U6bmV3IGNlLkV2ZW50KGQsIm9iamVjdCI9PXR5cGVvZiBlJiZlKSkuaXNUcmlnZ2VyPXI/MjozLGUubmFtZXNwYWNlPWguam9pbigiLiIpLGUucm5hbWVzcGFjZT1lLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitoLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsZS5yZXN1bHQ9dm9pZCAwLGUudGFyZ2V0fHwoZS50YXJnZXQ9biksdD1udWxsPT10P1tlXTpjZS5tYWtlQXJyYXkodCxbZV0pLGM9Y2UuZXZlbnQuc3BlY2lhbFtkXXx8e30scnx8IWMudHJpZ2dlcnx8ITEhPT1jLnRyaWdnZXIuYXBwbHkobix0KSkpe2lmKCFyJiYhYy5ub0J1YmJsZSYmIXkobikpe2ZvcihzPWMuZGVsZWdhdGVUeXBlfHxkLER0LnRlc3QocytkKXx8KG89by5wYXJlbnROb2RlKTtvO289by5wYXJlbnROb2RlKXAucHVzaChvKSxhPW87YT09PShuLm93bmVyRG9jdW1lbnR8fEMpJiZwLnB1c2goYS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3d8fGllKX1pPTA7d2hpbGUoKG89cFtpKytdKSYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlmPW8sZS50eXBlPTE8aT9zOmMuYmluZFR5cGV8fGQsKGw9KF8uZ2V0KG8sImV2ZW50cyIpfHxPYmplY3QuY3JlYXRlKG51bGwpKVtlLnR5cGVdJiZfLmdldChvLCJoYW5kbGUiKSkmJmwuYXBwbHkobyx0KSwobD11JiZvW3VdKSYmbC5hcHBseSYmJChvKSYmKGUucmVzdWx0PWwuYXBwbHkobyx0KSwhMT09PWUucmVzdWx0JiZlLnByZXZlbnREZWZhdWx0KCkpO3JldHVybiBlLnR5cGU9ZCxyfHxlLmlzRGVmYXVsdFByZXZlbnRlZCgpfHxjLl9kZWZhdWx0JiYhMSE9PWMuX2RlZmF1bHQuYXBwbHkocC5wb3AoKSx0KXx8ISQobil8fHUmJnYobltkXSkmJiF5KG4pJiYoKGE9blt1XSkmJihuW3VdPW51bGwpLGNlLmV2ZW50LnRyaWdnZXJlZD1kLGUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSYmZi5hZGRFdmVudExpc3RlbmVyKGQsTnQpLG5bZF0oKSxlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmYucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLE50KSxjZS5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLGEmJihuW3VdPWEpKSxlLnJlc3VsdH19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1jZS5leHRlbmQobmV3IGNlLkV2ZW50LG4se3R5cGU6ZSxpc1NpbXVsYXRlZDohMH0pO2NlLmV2ZW50LnRyaWdnZXIocixudWxsLHQpfX0pLGNlLmZuLmV4dGVuZCh7dHJpZ2dlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtjZS5ldmVudC50cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXNbMF07aWYobilyZXR1cm4gY2UuZXZlbnQudHJpZ2dlcihlLHQsbiwhMCl9fSk7dmFyIHF0PS9cW1xdJC8sTHQ9L1xyP1xuL2csSHQ9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLE90PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiBQdChuLGUscixpKXt2YXIgdDtpZihBcnJheS5pc0FycmF5KGUpKWNlLmVhY2goZSxmdW5jdGlvbihlLHQpe3J8fHF0LnRlc3Qobik/aShuLHQpOlB0KG4rIlsiKygib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPXQ/ZToiIikrIl0iLHQscixpKX0pO2Vsc2UgaWYocnx8Im9iamVjdCIhPT14KGUpKWkobixlKTtlbHNlIGZvcih0IGluIGUpUHQobisiWyIrdCsiXSIsZVt0XSxyLGkpfWNlLnBhcmFtPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPWZ1bmN0aW9uKGUsdCl7dmFyIG49dih0KT90KCk6dDtyW3IubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChudWxsPT1uPyIiOm4pfTtpZihudWxsPT1lKXJldHVybiIiO2lmKEFycmF5LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYhY2UuaXNQbGFpbk9iamVjdChlKSljZS5lYWNoKGUsZnVuY3Rpb24oKXtpKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKG4gaW4gZSlQdChuLGVbbl0sdCxpKTtyZXR1cm4gci5qb2luKCImIil9LGNlLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGNlLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9Y2UucHJvcCh0aGlzLCJlbGVtZW50cyIpO3JldHVybiBlP2NlLm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFjZSh0aGlzKS5pcygiOmRpc2FibGVkIikmJk90LnRlc3QodGhpcy5ub2RlTmFtZSkmJiFIdC50ZXN0KGUpJiYodGhpcy5jaGVja2VkfHwhd2UudGVzdChlKSl9KS5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgbj1jZSh0aGlzKS52YWwoKTtyZXR1cm4gbnVsbD09bj9udWxsOkFycmF5LmlzQXJyYXkobik/Y2UubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShMdCwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2UoTHQsIlxyXG4iKX19KS5nZXQoKX19KTt2YXIgTXQ9LyUyMC9nLFJ0PS8jLiokLyxJdD0vKFs/Jl0pXz1bXiZdKi8sV3Q9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9nbSxGdD0vXig/OkdFVHxIRUFEKSQvLCR0PS9eXC9cLy8sQnQ9e30sX3Q9e30senQ9IiovIi5jb25jYXQoIioiKSxYdD1DLmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiBVdChvKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0iKiIpO3ZhciBuLHI9MCxpPWUudG9Mb3dlckNhc2UoKS5tYXRjaChEKXx8W107aWYodih0KSl3aGlsZShuPWlbcisrXSkiKyI9PT1uWzBdPyhuPW4uc2xpY2UoMSl8fCIqIiwob1tuXT1vW25dfHxbXSkudW5zaGlmdCh0KSk6KG9bbl09b1tuXXx8W10pLnB1c2godCl9fWZ1bmN0aW9uIFZ0KHQsaSxvLGEpe3ZhciBzPXt9LHU9dD09PV90O2Z1bmN0aW9uIGwoZSl7dmFyIHI7cmV0dXJuIHNbZV09ITAsY2UuZWFjaCh0W2VdfHxbXSxmdW5jdGlvbihlLHQpe3ZhciBuPXQoaSxvLGEpO3JldHVybiJzdHJpbmciIT10eXBlb2Ygbnx8dXx8c1tuXT91PyEocj1uKTp2b2lkIDA6KGkuZGF0YVR5cGVzLnVuc2hpZnQobiksbChuKSwhMSl9KSxyfXJldHVybiBsKGkuZGF0YVR5cGVzWzBdKXx8IXNbIioiXSYmbCgiKiIpfWZ1bmN0aW9uIEd0KGUsdCl7dmFyIG4scixpPWNlLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKG4gaW4gdCl2b2lkIDAhPT10W25dJiYoKGlbbl0/ZTpyfHwocj17fSkpW25dPXRbbl0pO3JldHVybiByJiZjZS5leHRlbmQoITAsZSxyKSxlfVh0LmhyZWY9RXQuaHJlZixjZS5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOkV0LmhyZWYsdHlwZToiR0VUIixpc0xvY2FsOi9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLnRlc3QoRXQucHJvdG9jb2wpLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6enQsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L1xieG1sXGIvLGh0bWw6L1xiaHRtbC8sanNvbjovXGJqc29uXGIvfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25zZUpTT04ifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6SlNPTi5wYXJzZSwidGV4dCB4bWwiOmNlLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9HdChHdChlLGNlLmFqYXhTZXR0aW5ncyksdCk6R3QoY2UuYWpheFNldHRpbmdzLGUpfSxhamF4UHJlZmlsdGVyOlV0KEJ0KSxhamF4VHJhbnNwb3J0OlV0KF90KSxhamF4OmZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBlJiYodD1lLGU9dm9pZCAwKSx0PXR8fHt9O3ZhciBjLGYscCxuLGQscixoLGcsaSxvLHY9Y2UuYWpheFNldHVwKHt9LHQpLHk9di5jb250ZXh0fHx2LG09di5jb250ZXh0JiYoeS5ub2RlVHlwZXx8eS5qcXVlcnkpP2NlKHkpOmNlLmV2ZW50LHg9Y2UuRGVmZXJyZWQoKSxiPWNlLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSx3PXYuc3RhdHVzQ29kZXx8e30sYT17fSxzPXt9LHU9ImNhbmNlbGVkIixUPXtyZWFkeVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoaCl7aWYoIW4pe249e307d2hpbGUodD1XdC5leGVjKHApKW5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl09KG5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl18fFtdKS5jb25jYXQodFsyXSl9dD1uW2UudG9Mb3dlckNhc2UoKSsiICJdfXJldHVybiBudWxsPT10P251bGw6dC5qb2luKCIsICIpfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gaD9wOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09aCYmKGU9c1tlLnRvTG93ZXJDYXNlKCldPXNbZS50b0xvd2VyQ2FzZSgpXXx8ZSxhW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWgmJih2Lm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZihoKVQuYWx3YXlzKGVbVC5zdGF0dXNdKTtlbHNlIGZvcih0IGluIGUpd1t0XT1bd1t0XSxlW3RdXTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8dTtyZXR1cm4gYyYmYy5hYm9ydCh0KSxsKDAsdCksdGhpc319O2lmKHgucHJvbWlzZShUKSx2LnVybD0oKGV8fHYudXJsfHxFdC5ocmVmKSsiIikucmVwbGFjZSgkdCxFdC5wcm90b2NvbCsiLy8iKSx2LnR5cGU9dC5tZXRob2R8fHQudHlwZXx8di5tZXRob2R8fHYudHlwZSx2LmRhdGFUeXBlcz0odi5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKEQpfHxbIiJdLG51bGw9PXYuY3Jvc3NEb21haW4pe3I9Qy5jcmVhdGVFbGVtZW50KCJhIik7dHJ5e3IuaHJlZj12LnVybCxyLmhyZWY9ci5ocmVmLHYuY3Jvc3NEb21haW49WHQucHJvdG9jb2wrIi8vIitYdC5ob3N0IT1yLnByb3RvY29sKyIvLyIrci5ob3N0fWNhdGNoKGUpe3YuY3Jvc3NEb21haW49ITB9fWlmKHYuZGF0YSYmdi5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiB2LmRhdGEmJih2LmRhdGE9Y2UucGFyYW0odi5kYXRhLHYudHJhZGl0aW9uYWwpKSxWdChCdCx2LHQsVCksaClyZXR1cm4gVDtmb3IoaSBpbihnPWNlLmV2ZW50JiZ2Lmdsb2JhbCkmJjA9PWNlLmFjdGl2ZSsrJiZjZS5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKSx2LnR5cGU9di50eXBlLnRvVXBwZXJDYXNlKCksdi5oYXNDb250ZW50PSFGdC50ZXN0KHYudHlwZSksZj12LnVybC5yZXBsYWNlKFJ0LCIiKSx2Lmhhc0NvbnRlbnQ/di5kYXRhJiZ2LnByb2Nlc3NEYXRhJiYwPT09KHYuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmKHYuZGF0YT12LmRhdGEucmVwbGFjZShNdCwiKyIpKToobz12LnVybC5zbGljZShmLmxlbmd0aCksdi5kYXRhJiYodi5wcm9jZXNzRGF0YXx8InN0cmluZyI9PXR5cGVvZiB2LmRhdGEpJiYoZis9KEF0LnRlc3QoZik/IiYiOiI/Iikrdi5kYXRhLGRlbGV0ZSB2LmRhdGEpLCExPT09di5jYWNoZSYmKGY9Zi5yZXBsYWNlKEl0LCIkMSIpLG89KEF0LnRlc3QoZik/IiYiOiI/IikrIl89IitqdC5ndWlkKysrbyksdi51cmw9ZitvKSx2LmlmTW9kaWZpZWQmJihjZS5sYXN0TW9kaWZpZWRbZl0mJlQuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLGNlLmxhc3RNb2RpZmllZFtmXSksY2UuZXRhZ1tmXSYmVC5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixjZS5ldGFnW2ZdKSksKHYuZGF0YSYmdi5oYXNDb250ZW50JiYhMSE9PXYuY29udGVudFR5cGV8fHQuY29udGVudFR5cGUpJiZULnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsdi5jb250ZW50VHlwZSksVC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLHYuZGF0YVR5cGVzWzBdJiZ2LmFjY2VwdHNbdi5kYXRhVHlwZXNbMF1dP3YuYWNjZXB0c1t2LmRhdGFUeXBlc1swXV0rKCIqIiE9PXYuZGF0YVR5cGVzWzBdPyIsICIrenQrIjsgcT0wLjAxIjoiIik6di5hY2NlcHRzWyIqIl0pLHYuaGVhZGVycylULnNldFJlcXVlc3RIZWFkZXIoaSx2LmhlYWRlcnNbaV0pO2lmKHYuYmVmb3JlU2VuZCYmKCExPT09di5iZWZvcmVTZW5kLmNhbGwoeSxULHYpfHxoKSlyZXR1cm4gVC5hYm9ydCgpO2lmKHU9ImFib3J0IixiLmFkZCh2LmNvbXBsZXRlKSxULmRvbmUodi5zdWNjZXNzKSxULmZhaWwodi5lcnJvciksYz1WdChfdCx2LHQsVCkpe2lmKFQucmVhZHlTdGF0ZT0xLGcmJm0udHJpZ2dlcigiYWpheFNlbmQiLFtULHZdKSxoKXJldHVybiBUO3YuYXN5bmMmJjA8di50aW1lb3V0JiYoZD1pZS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VC5hYm9ydCgidGltZW91dCIpfSx2LnRpbWVvdXQpKTt0cnl7aD0hMSxjLnNlbmQoYSxsKX1jYXRjaChlKXtpZihoKXRocm93IGU7bCgtMSxlKX19ZWxzZSBsKC0xLCJObyBUcmFuc3BvcnQiKTtmdW5jdGlvbiBsKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbD10O2h8fChoPSEwLGQmJmllLmNsZWFyVGltZW91dChkKSxjPXZvaWQgMCxwPXJ8fCIiLFQucmVhZHlTdGF0ZT0wPGU/NDowLGk9MjAwPD1lJiZlPDMwMHx8MzA0PT09ZSxuJiYocz1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscz1lLmNvbnRlbnRzLHU9ZS5kYXRhVHlwZXM7d2hpbGUoIioiPT09dVswXSl1LnNoaWZ0KCksdm9pZCAwPT09ciYmKHI9ZS5taW1lVHlwZXx8dC5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpO2lmKHIpZm9yKGkgaW4gcylpZihzW2ldJiZzW2ldLnRlc3Qocikpe3UudW5zaGlmdChpKTticmVha31pZih1WzBdaW4gbilvPXVbMF07ZWxzZXtmb3IoaSBpbiBuKXtpZighdVswXXx8ZS5jb252ZXJ0ZXJzW2krIiAiK3VbMF1dKXtvPWk7YnJlYWt9YXx8KGE9aSl9bz1vfHxhfWlmKG8pcmV0dXJuIG8hPT11WzBdJiZ1LnVuc2hpZnQobyksbltvXX0odixULG4pKSwhaSYmLTE8Y2UuaW5BcnJheSgic2NyaXB0Iix2LmRhdGFUeXBlcykmJmNlLmluQXJyYXkoImpzb24iLHYuZGF0YVR5cGVzKTwwJiYodi5jb252ZXJ0ZXJzWyJ0ZXh0IHNjcmlwdCJdPWZ1bmN0aW9uKCl7fSkscz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8pbz11O2Vsc2UgaWYoIioiIT09dSYmdSE9PW8pe2lmKCEoYT1sW3UrIiAiK29dfHxsWyIqICIrb10pKWZvcihpIGluIGwpaWYoKHM9aS5zcGxpdCgiICIpKVsxXT09PW8mJihhPWxbdSsiICIrc1swXV18fGxbIiogIitzWzBdXSkpeyEwPT09YT9hPWxbaV06ITAhPT1sW2ldJiYobz1zWzBdLGMudW5zaGlmdChzWzFdKSk7YnJlYWt9aWYoITAhPT1hKWlmKGEmJmVbInRocm93cyJdKXQ9YSh0KTtlbHNlIHRyeXt0PWEodCl9Y2F0Y2goZSl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6YT9lOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fSh2LHMsVCxpKSxpPyh2LmlmTW9kaWZpZWQmJigodT1ULmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIikpJiYoY2UubGFzdE1vZGlmaWVkW2ZdPXUpLCh1PVQuZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSkmJihjZS5ldGFnW2ZdPXUpKSwyMDQ9PT1lfHwiSEVBRCI9PT12LnR5cGU/bD0ibm9jb250ZW50IjozMDQ9PT1lP2w9Im5vdG1vZGlmaWVkIjoobD1zLnN0YXRlLG89cy5kYXRhLGk9IShhPXMuZXJyb3IpKSk6KGE9bCwhZSYmbHx8KGw9ImVycm9yIixlPDAmJihlPTApKSksVC5zdGF0dXM9ZSxULnN0YXR1c1RleHQ9KHR8fGwpKyIiLGk/eC5yZXNvbHZlV2l0aCh5LFtvLGwsVF0pOngucmVqZWN0V2l0aCh5LFtULGwsYV0pLFQuc3RhdHVzQ29kZSh3KSx3PXZvaWQgMCxnJiZtLnRyaWdnZXIoaT8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFtULHYsaT9vOmFdKSxiLmZpcmVXaXRoKHksW1QsbF0pLGcmJihtLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW1Qsdl0pLC0tY2UuYWN0aXZlfHxjZS5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKSl9cmV0dXJuIFR9LGdldEpTT046ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBjZS5nZXQoZSx0LG4sImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNlLmdldChlLHZvaWQgMCx0LCJzY3JpcHQiKX19KSxjZS5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGUsaSl7Y2VbaV09ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHYodCkmJihyPXJ8fG4sbj10LHQ9dm9pZCAwKSxjZS5hamF4KGNlLmV4dGVuZCh7dXJsOmUsdHlwZTppLGRhdGFUeXBlOnIsZGF0YTp0LHN1Y2Nlc3M6bn0sY2UuaXNQbGFpbk9iamVjdChlKSYmZSkpfX0pLGNlLmFqYXhQcmVmaWx0ZXIoZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZS5oZWFkZXJzKSJjb250ZW50LXR5cGUiPT09dC50b0xvd2VyQ2FzZSgpJiYoZS5jb250ZW50VHlwZT1lLmhlYWRlcnNbdF18fCIiKX0pLGNlLl9ldmFsVXJsPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gY2UuYWpheCh7dXJsOmUsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0IixjYWNoZTohMCxhc3luYzohMSxnbG9iYWw6ITEsY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbigpe319LGRhdGFGaWx0ZXI6ZnVuY3Rpb24oZSl7Y2UuZ2xvYmFsRXZhbChlLHQsbil9fSl9LGNlLmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdGhpc1swXSYmKHYoZSkmJihlPWUuY2FsbCh0aGlzWzBdKSksdD1jZShlLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApLHRoaXNbMF0ucGFyZW50Tm9kZSYmdC5pbnNlcnRCZWZvcmUodGhpc1swXSksdC5tYXAoZnVuY3Rpb24oKXt2YXIgZT10aGlzO3doaWxlKGUuZmlyc3RFbGVtZW50Q2hpbGQpZT1lLmZpcnN0RWxlbWVudENoaWxkO3JldHVybiBlfSkuYXBwZW5kKHRoaXMpKSx0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24obil7cmV0dXJuIHYobik/dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe2NlKHRoaXMpLndyYXBJbm5lcihuLmNhbGwodGhpcyxlKSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1jZSh0aGlzKSx0PWUuY29udGVudHMoKTt0Lmxlbmd0aD90LndyYXBBbGwobik6ZS5hcHBlbmQobil9KX0sd3JhcDpmdW5jdGlvbih0KXt2YXIgbj12KHQpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7Y2UodGhpcykud3JhcEFsbChuP3QuY2FsbCh0aGlzLGUpOnQpfSl9LHVud3JhcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wYXJlbnQoZSkubm90KCJib2R5IikuZWFjaChmdW5jdGlvbigpe2NlKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KSx0aGlzfX0pLGNlLmV4cHIucHNldWRvcy5oaWRkZW49ZnVuY3Rpb24oZSl7cmV0dXJuIWNlLmV4cHIucHNldWRvcy52aXNpYmxlKGUpfSxjZS5leHByLnBzZXVkb3MudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hIShlLm9mZnNldFdpZHRofHxlLm9mZnNldEhlaWdodHx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LGNlLmFqYXhTZXR0aW5ncy54aHI9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBpZS5YTUxIdHRwUmVxdWVzdH1jYXRjaChlKXt9fTt2YXIgWXQ9ezA6MjAwLDEyMjM6MjA0fSxRdD1jZS5hamF4U2V0dGluZ3MueGhyKCk7bGUuY29ycz0hIVF0JiYid2l0aENyZWRlbnRpYWxzImluIFF0LGxlLmFqYXg9UXQ9ISFRdCxjZS5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGkpe3ZhciBvLGE7aWYobGUuY29yc3x8UXQmJiFpLmNyb3NzRG9tYWluKXJldHVybntzZW5kOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1pLnhocigpO2lmKHIub3BlbihpLnR5cGUsaS51cmwsaS5hc3luYyxpLnVzZXJuYW1lLGkucGFzc3dvcmQpLGkueGhyRmllbGRzKWZvcihuIGluIGkueGhyRmllbGRzKXJbbl09aS54aHJGaWVsZHNbbl07Zm9yKG4gaW4gaS5taW1lVHlwZSYmci5vdmVycmlkZU1pbWVUeXBlJiZyLm92ZXJyaWRlTWltZVR5cGUoaS5taW1lVHlwZSksaS5jcm9zc0RvbWFpbnx8ZVsiWC1SZXF1ZXN0ZWQtV2l0aCJdfHwoZVsiWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRwUmVxdWVzdCIpLGUpci5zZXRSZXF1ZXN0SGVhZGVyKG4sZVtuXSk7bz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtvJiYobz1hPXIub25sb2FkPXIub25lcnJvcj1yLm9uYWJvcnQ9ci5vbnRpbWVvdXQ9ci5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCwiYWJvcnQiPT09ZT9yLmFib3J0KCk6ImVycm9yIj09PWU/Im51bWJlciIhPXR5cGVvZiByLnN0YXR1cz90KDAsImVycm9yIik6dChyLnN0YXR1cyxyLnN0YXR1c1RleHQpOnQoWXRbci5zdGF0dXNdfHxyLnN0YXR1cyxyLnN0YXR1c1RleHQsInRleHQiIT09KHIucmVzcG9uc2VUeXBlfHwidGV4dCIpfHwic3RyaW5nIiE9dHlwZW9mIHIucmVzcG9uc2VUZXh0P3tiaW5hcnk6ci5yZXNwb25zZX06e3RleHQ6ci5yZXNwb25zZVRleHR9LHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKX19LHIub25sb2FkPW8oKSxhPXIub25lcnJvcj1yLm9udGltZW91dD1vKCJlcnJvciIpLHZvaWQgMCE9PXIub25hYm9ydD9yLm9uYWJvcnQ9YTpyLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQ9PT1yLnJlYWR5U3RhdGUmJmllLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtvJiZhKCl9KX0sbz1vKCJhYm9ydCIpO3RyeXtyLnNlbmQoaS5oYXNDb250ZW50JiZpLmRhdGF8fG51bGwpfWNhdGNoKGUpe2lmKG8pdGhyb3cgZX19LGFib3J0OmZ1bmN0aW9uKCl7byYmbygpfX19KSxjZS5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKGUpe2UuY3Jvc3NEb21haW4mJihlLmNvbnRlbnRzLnNjcmlwdD0hMSl9KSxjZS5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi9cYig/OmphdmF8ZWNtYSlzY3JpcHRcYi99LGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGNlLmdsb2JhbEV2YWwoZSksZX19fSksY2UuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXt2b2lkIDA9PT1lLmNhY2hlJiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSxjZS5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKG4pe3ZhciByLGk7aWYobi5jcm9zc0RvbWFpbnx8bi5zY3JpcHRBdHRycylyZXR1cm57c2VuZDpmdW5jdGlvbihlLHQpe3I9Y2UoIjxzY3JpcHQ+IikuYXR0cihuLnNjcmlwdEF0dHJzfHx7fSkucHJvcCh7Y2hhcnNldDpuLnNjcmlwdENoYXJzZXQsc3JjOm4udXJsfSkub24oImxvYWQgZXJyb3IiLGk9ZnVuY3Rpb24oZSl7ci5yZW1vdmUoKSxpPW51bGwsZSYmdCgiZXJyb3IiPT09ZS50eXBlPzQwNDoyMDAsZS50eXBlKX0pLEMuaGVhZC5hcHBlbmRDaGlsZChyWzBdKX0sYWJvcnQ6ZnVuY3Rpb24oKXtpJiZpKCl9fX0pO3ZhciBKdCxLdD1bXSxadD0vKD0pXD8oPz0mfCQpfFw/XD8vO2NlLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9S3QucG9wKCl8fGNlLmV4cGFuZG8rIl8iK2p0Lmd1aWQrKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLGNlLmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYT0hMSE9PWUuanNvbnAmJihadC50ZXN0KGUudXJsKT8idXJsIjoic3RyaW5nIj09dHlwZW9mIGUuZGF0YSYmMD09PShlLmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikmJlp0LnRlc3QoZS5kYXRhKSYmImRhdGEiKTtpZihhfHwianNvbnAiPT09ZS5kYXRhVHlwZXNbMF0pcmV0dXJuIHI9ZS5qc29ucENhbGxiYWNrPXYoZS5qc29ucENhbGxiYWNrKT9lLmpzb25wQ2FsbGJhY2soKTplLmpzb25wQ2FsbGJhY2ssYT9lW2FdPWVbYV0ucmVwbGFjZShadCwiJDEiK3IpOiExIT09ZS5qc29ucCYmKGUudXJsKz0oQXQudGVzdChlLnVybCk/IiYiOiI/IikrZS5qc29ucCsiPSIrciksZS5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7cmV0dXJuIG98fGNlLmVycm9yKHIrIiB3YXMgbm90IGNhbGxlZCIpLG9bMF19LGUuZGF0YVR5cGVzWzBdPSJqc29uIixpPWllW3JdLGllW3JdPWZ1bmN0aW9uKCl7bz1hcmd1bWVudHN9LG4uYWx3YXlzKGZ1bmN0aW9uKCl7dm9pZCAwPT09aT9jZShpZSkucmVtb3ZlUHJvcChyKTppZVtyXT1pLGVbcl0mJihlLmpzb25wQ2FsbGJhY2s9dC5qc29ucENhbGxiYWNrLEt0LnB1c2gocikpLG8mJnYoaSkmJmkob1swXSksbz1pPXZvaWQgMH0pLCJzY3JpcHQifSksbGUuY3JlYXRlSFRNTERvY3VtZW50PSgoSnQ9Qy5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLmJvZHkpLmlubmVySFRNTD0iPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT4iLDI9PT1KdC5jaGlsZE5vZGVzLmxlbmd0aCksY2UucGFyc2VIVE1MPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGU/W106KCJib29sZWFuIj09dHlwZW9mIHQmJihuPXQsdD0hMSksdHx8KGxlLmNyZWF0ZUhUTUxEb2N1bWVudD8oKHI9KHQ9Qy5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpKS5jcmVhdGVFbGVtZW50KCJiYXNlIikpLmhyZWY9Qy5sb2NhdGlvbi5ocmVmLHQuaGVhZC5hcHBlbmRDaGlsZChyKSk6dD1DKSxvPSFuJiZbXSwoaT13LmV4ZWMoZSkpP1t0LmNyZWF0ZUVsZW1lbnQoaVsxXSldOihpPUFlKFtlXSx0LG8pLG8mJm8ubGVuZ3RoJiZjZShvKS5yZW1vdmUoKSxjZS5tZXJnZShbXSxpLmNoaWxkTm9kZXMpKSk7dmFyIHIsaSxvfSxjZS5mbi5sb2FkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYT10aGlzLHM9ZS5pbmRleE9mKCIgIik7cmV0dXJuLTE8cyYmKHI9VHQoZS5zbGljZShzKSksZT1lLnNsaWNlKDAscykpLHYodCk/KG49dCx0PXZvaWQgMCk6dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYoaT0iUE9TVCIpLDA8YS5sZW5ndGgmJmNlLmFqYXgoe3VybDplLHR5cGU6aXx8IkdFVCIsZGF0YVR5cGU6Imh0bWwiLGRhdGE6dH0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMsYS5odG1sKHI/Y2UoIjxkaXY+IikuYXBwZW5kKGNlLnBhcnNlSFRNTChlKSkuZmluZChyKTplKX0pLmFsd2F5cyhuJiZmdW5jdGlvbihlLHQpe2EuZWFjaChmdW5jdGlvbigpe24uYXBwbHkodGhpcyxvfHxbZS5yZXNwb25zZVRleHQsdCxlXSl9KX0pLHRoaXN9LGNlLmV4cHIucHNldWRvcy5hbmltYXRlZD1mdW5jdGlvbih0KXtyZXR1cm4gY2UuZ3JlcChjZS50aW1lcnMsZnVuY3Rpb24oZSl7cmV0dXJuIHQ9PT1lLmVsZW19KS5sZW5ndGh9LGNlLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbD1jZS5jc3MoZSwicG9zaXRpb24iKSxjPWNlKGUpLGY9e307InN0YXRpYyI9PT1sJiYoZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxzPWMub2Zmc2V0KCksbz1jZS5jc3MoZSwidG9wIiksdT1jZS5jc3MoZSwibGVmdCIpLCgiYWJzb2x1dGUiPT09bHx8ImZpeGVkIj09PWwpJiYtMTwobyt1KS5pbmRleE9mKCJhdXRvIik/KGE9KHI9Yy5wb3NpdGlvbigpKS50b3AsaT1yLmxlZnQpOihhPXBhcnNlRmxvYXQobyl8fDAsaT1wYXJzZUZsb2F0KHUpfHwwKSx2KHQpJiYodD10LmNhbGwoZSxuLGNlLmV4dGVuZCh7fSxzKSkpLG51bGwhPXQudG9wJiYoZi50b3A9dC50b3Atcy50b3ArYSksbnVsbCE9dC5sZWZ0JiYoZi5sZWZ0PXQubGVmdC1zLmxlZnQraSksInVzaW5nImluIHQ/dC51c2luZy5jYWxsKGUsZik6Yy5jc3MoZil9fSxjZS5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbih0KXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe2NlLm9mZnNldC5zZXRPZmZzZXQodGhpcyx0LGUpfSk7dmFyIGUsbixyPXRoaXNbMF07cmV0dXJuIHI/ci5nZXRDbGllbnRSZWN0cygpLmxlbmd0aD8oZT1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LHt0b3A6ZS50b3Arbi5wYWdlWU9mZnNldCxsZWZ0OmUubGVmdCtuLnBhZ2VYT2Zmc2V0fSk6e3RvcDowLGxlZnQ6MH06dm9pZCAwfSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBlLHQsbixyPXRoaXNbMF0saT17dG9wOjAsbGVmdDowfTtpZigiZml4ZWQiPT09Y2UuY3NzKHIsInBvc2l0aW9uIikpdD1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Vsc2V7dD10aGlzLm9mZnNldCgpLG49ci5vd25lckRvY3VtZW50LGU9ci5vZmZzZXRQYXJlbnR8fG4uZG9jdW1lbnRFbGVtZW50O3doaWxlKGUmJihlPT09bi5ib2R5fHxlPT09bi5kb2N1bWVudEVsZW1lbnQpJiYic3RhdGljIj09PWNlLmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5wYXJlbnROb2RlO2UmJmUhPT1yJiYxPT09ZS5ub2RlVHlwZSYmKChpPWNlKGUpLm9mZnNldCgpKS50b3ArPWNlLmNzcyhlLCJib3JkZXJUb3BXaWR0aCIsITApLGkubGVmdCs9Y2UuY3NzKGUsImJvcmRlckxlZnRXaWR0aCIsITApKX1yZXR1cm57dG9wOnQudG9wLWkudG9wLWNlLmNzcyhyLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OnQubGVmdC1pLmxlZnQtY2UuY3NzKHIsIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9mZnNldFBhcmVudDt3aGlsZShlJiYic3RhdGljIj09PWNlLmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fEp9KX19KSxjZS5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKHQsaSl7dmFyIG89InBhZ2VZT2Zmc2V0Ij09PWk7Y2UuZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIE0odGhpcyxmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoeShlKT9yPWU6OT09PWUubm9kZVR5cGUmJihyPWUuZGVmYXVsdFZpZXcpLHZvaWQgMD09PW4pcmV0dXJuIHI/cltpXTplW3RdO3I/ci5zY3JvbGxUbyhvP3IucGFnZVhPZmZzZXQ6bixvP246ci5wYWdlWU9mZnNldCk6ZVt0XT1ufSx0LGUsYXJndW1lbnRzLmxlbmd0aCl9fSksY2UuZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLG4pe2NlLmNzc0hvb2tzW25dPVllKGxlLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oZSx0KXtpZih0KXJldHVybiB0PUdlKGUsbiksX2UudGVzdCh0KT9jZShlKS5wb3NpdGlvbigpW25dKyJweCI6dH0pfSksY2UuZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGEscyl7Y2UuZWFjaCh7cGFkZGluZzoiaW5uZXIiK2EsY29udGVudDpzLCIiOiJvdXRlciIrYX0sZnVuY3Rpb24ocixvKXtjZS5mbltvXT1mdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGgmJihyfHwiYm9vbGVhbiIhPXR5cGVvZiBlKSxpPXJ8fCghMD09PWV8fCEwPT09dD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIE0odGhpcyxmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIHkoZSk/MD09PW8uaW5kZXhPZigib3V0ZXIiKT9lWyJpbm5lciIrYV06ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrYV06OT09PWUubm9kZVR5cGU/KHI9ZS5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgoZS5ib2R5WyJzY3JvbGwiK2FdLHJbInNjcm9sbCIrYV0sZS5ib2R5WyJvZmZzZXQiK2FdLHJbIm9mZnNldCIrYV0sclsiY2xpZW50IithXSkpOnZvaWQgMD09PW4/Y2UuY3NzKGUsdCxpKTpjZS5zdHlsZShlLHQsbixpKX0scyxuP2U6dm9pZCAwLG4pfX0pfSksY2UuZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGUsdCl7Y2UuZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub24odCxlKX19KSxjZS5mbi5leHRlbmQoe2JpbmQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm9uKGUsbnVsbCx0LG4pfSx1bmJpbmQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vZmYoZSxudWxsLHQpfSxkZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbih0LGUsbixyKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGUsIioqIik6dGhpcy5vZmYodCxlfHwiKioiLG4pfSxob3ZlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9uKCJtb3VzZWVudGVyIixlKS5vbigibW91c2VsZWF2ZSIsdHx8ZSl9fSksY2UuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLG4pe2NlLmZuW25dPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDA8YXJndW1lbnRzLmxlbmd0aD90aGlzLm9uKG4sbnVsbCxlLHQpOnRoaXMudHJpZ2dlcihuKX19KTt2YXIgZW49L15bXHNcdUZFRkZceEEwXSt8KFteXHNcdUZFRkZceEEwXSlbXHNcdUZFRkZceEEwXSskL2c7Y2UucHJveHk9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk7aWYoInN0cmluZyI9PXR5cGVvZiB0JiYobj1lW3RdLHQ9ZSxlPW4pLHYoZSkpcmV0dXJuIHI9YWUuY2FsbChhcmd1bWVudHMsMiksKGk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0fHx0aGlzLHIuY29uY2F0KGFlLmNhbGwoYXJndW1lbnRzKSkpfSkuZ3VpZD1lLmd1aWQ9ZS5ndWlkfHxjZS5ndWlkKyssaX0sY2UuaG9sZFJlYWR5PWZ1bmN0aW9uKGUpe2U/Y2UucmVhZHlXYWl0Kys6Y2UucmVhZHkoITApfSxjZS5pc0FycmF5PUFycmF5LmlzQXJyYXksY2UucGFyc2VKU09OPUpTT04ucGFyc2UsY2Uubm9kZU5hbWU9ZmUsY2UuaXNGdW5jdGlvbj12LGNlLmlzV2luZG93PXksY2UuY2FtZWxDYXNlPUYsY2UudHlwZT14LGNlLm5vdz1EYXRlLm5vdyxjZS5pc051bWVyaWM9ZnVuY3Rpb24oZSl7dmFyIHQ9Y2UudHlwZShlKTtyZXR1cm4oIm51bWJlciI9PT10fHwic3RyaW5nIj09PXQpJiYhaXNOYU4oZS1wYXJzZUZsb2F0KGUpKX0sY2UudHJpbT1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjooZSsiIikucmVwbGFjZShlbiwiJDEiKX0sImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIGNlfSk7dmFyIHRuPWllLmpRdWVyeSxubj1pZS4kO3JldHVybiBjZS5ub0NvbmZsaWN0PWZ1bmN0aW9uKGUpe3JldHVybiBpZS4kPT09Y2UmJihpZS4kPW5uKSxlJiZpZS5qUXVlcnk9PT1jZSYmKGllLmpRdWVyeT10biksY2V9LCJ1bmRlZmluZWQiPT10eXBlb2YgZSYmKGllLmpRdWVyeT1pZS4kPWNlKSxjZX0pOwo=]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/doc/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgogICAgPGxpPlZlcnNpb24gMS4xLjAgLSAyMDI2LTA2LTIyCiAgICAgICAgPHVsPgogICAgICAgICAgICA8bGk+QWRkZWQgYWNjZXNzIGd1YXJkcyB0byBhbGwgUEhQIGZpbGVzPC9saT4KICAgICAgICAgICAgPGxpPlJlbW92ZWQgY2xvc2luZyBQSFAgdGFncyBmcm9tIGFsbCBmaWxlczwvbGk+CiAgICAgICAgICAgIDxsaT5QcmVmaXhlZCBhbGwgcHJlZmVyZW5jZSBrZXlzIHdpdGggZ2NwXyB0byBhdm9pZCBjb2xsaXNpb25zPC9saT4KICAgICAgICAgICAgPGxpPkFkZGVkIHByZWZlcmVuY2UgbWlncmF0aW9uIGluIHVwZ3JhZGUgbWV0aG9kPC9saT4KICAgICAgICAgICAgPGxpPlJlbW92ZWQgZXJyb3Igc3VwcHJlc3Npb24gb3BlcmF0b3JzPC9saT4KICAgICAgICAgICAgPGxpPlJlcGxhY2VkIGhlcmVkb2Mgd2l0aCBzdHJpbmcgY29uY2F0ZW5hdGlvbjwvbGk+CiAgICAgICAgICAgIDxsaT5CdW5kbGVkIGpRdWVyeSBsb2NhbGx5IGluc3RlYWQgb2YgZXh0ZXJuYWwgQ0ROPC9saT4KICAgICAgICAgICAgPGxpPlJlbW92ZWQgLmF3cyBkaXJlY3Rvcnkgd2l0aCBjb21wcmVzc2VkIGFyY2hpdmU8L2xpPgogICAgICAgICAgICA8bGk+QWRkZWQgZG9jL0xJQ0VOU0UgZmlsZTwvbGk+CiAgICAgICAgICAgIDxsaT5BZGRlZCBHZXROYW1lKCkgYW5kIEdldERlcGVuZGVuY2llcygpIG1ldGFkYXRhIG1ldGhvZHM8L2xpPgogICAgICAgICAgICA8bGk+VXNlZCBwcm9wZXIgcGVybWlzc2lvbiBjb25zdGFudCBpbiBhZG1pbiBhY3Rpb25zPC9saT4KICAgICAgICAgICAgPGxpPkFkZGVkIG9wdGlvbmFsIENTUkYgcHJvdGVjdGlvbiB2aWEgQ01TTVNFeHQ8L2xpPgogICAgICAgICAgICA8bGk+UmlzayBzY29yZSByZWR1Y2VkIGZyb20gMjA1IHRvIDc8L2xpPgogICAgICAgIDwvdWw+CiAgICA8L2xpPgogICAgPGxpPlZlcnNpb24gMS4wLjIgLSAyMDI1LTA4LTI4CiAgICAgICAgPHVsPgogICAgICAgICAgICA8bGk+QnVnIGZpeGVzIGFuZCBpbXByb3ZlbWVudHM8L2xpPgogICAgICAgIDwvdWw+CiAgICA8L2xpPgogICAgPGxpPlZlcnNpb24gMS4wLjEgLSAyMDI1LTA4LTI4CiAgICAgICAgPHVsPgogICAgICAgICAgICA8bGk+SW5pdGlhbCBpbXByb3ZlbWVudHM8L2xpPgogICAgICAgIDwvdWw+CiAgICA8L2xpPgogICAgPGxpPlZlcnNpb24gMS4wIC0gMjAyNS0wOC0yNwogICAgICAgIDx1bD4KICAgICAgICAgICAgPGxpPkluaXRpYWwgcmVsZWFzZTwvbGk+CiAgICAgICAgPC91bD4KICAgIDwvbGk+CjwvdWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/doc/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAyNSBQaXhlbCBTb2x1dGlvbnMgPG1hZ2FsQHBpeGVsc29sdXRpb25zLmJpej4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKU09GVFdBUkUuCg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_optionstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgU2VlIExJQ0VOU0UgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmlmICghZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSkgZXhpdDsKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKEdvb2dsZUNvbnNlbnRQbGF0Zm9ybTo6TUFOQUdFX1BFUk0pKSByZXR1cm47CgppZiAoaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pKSB7CiAgICAkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCk7Cn0KCmlmIChpc3NldCgkcGFyYW1zWydzdWJtaXRfb3B0aW9ucyddKSkgewogICAgaWYgKGNsYXNzX2V4aXN0cygnXFx4dF91dGlscycpKSBceHRfdXRpbHM6OnZhbGlkX2Zvcm1fY3NyZigpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2djcF9lbmFibGVkJywgaXNzZXQoJHBhcmFtc1snZW5hYmxlZCddKSA/IDEgOiAwKTsKCiAgICBpZiAoaXNzZXQoJHBhcmFtc1snZ29vZ2xlX3RhZ19pZCddKSkgewogICAgICAgICRndGFnX2lkID0gdHJpbSgkcGFyYW1zWydnb29nbGVfdGFnX2lkJ10pOwogICAgICAgIGlmICghZW1wdHkoJGd0YWdfaWQpICYmICFwcmVnX21hdGNoKCcvXihHLVtBLVowLTldezEwfXxHVE0tW0EtWjAtOV17N30pJC9pJywgJGd0YWdfaWQpKSB7CiAgICAgICAgICAgICR0aGlzLT5TZXRFcnJvcigkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9nb29nbGVfdGFnX2lkJykpOwogICAgICAgICAgICAkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdnY3BfZ29vZ2xlX3RhZ19pZCcsICRndGFnX2lkKTsKICAgIH0KCiAgICBpZiAoaXNzZXQoJHBhcmFtc1sncmVndWxhdGlvbiddKSkgewogICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdnY3BfcmVndWxhdGlvbicsICRwYXJhbXNbJ3JlZ3VsYXRpb24nXSk7CiAgICB9CgogICAgaWYgKGlzc2V0KCRwYXJhbXNbJ2xhbmd1YWdlJ10pKSB7CiAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2djcF9sYW5ndWFnZScsICRwYXJhbXNbJ2xhbmd1YWdlJ10pOwogICAgfQoKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdnY3BfaW5qZWN0X2pxdWVyeScsIGlzc2V0KCRwYXJhbXNbJ2luamVjdF9qcXVlcnknXSkgPyAxIDogMCk7CgogICAgJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ3NldHRpbmdzX3NhdmVkJykpOwogICAgJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYigpOwp9CgokdHBsID0gJHNtYXJ0eS0+Q3JlYXRlVGVtcGxhdGUoJHRoaXMtPkdldFRlbXBsYXRlUmVzb3VyY2UoJ2FkbWluX29wdGlvbnN0YWIudHBsJyksIG51bGwsIG51bGwsICRzbWFydHkpOwokdHBsLT5hc3NpZ24oJ3ByZWZzJywgWwogICAgJ2VuYWJsZWQnICAgICAgICA9PiAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZ2NwX2VuYWJsZWQnLCAxKSwKICAgICdnb29nbGVfdGFnX2lkJyAgPT4gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2djcF9nb29nbGVfdGFnX2lkJywgJycpLAogICAgJ3JlZ3VsYXRpb24nICAgICA9PiAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZ2NwX3JlZ3VsYXRpb24nLCAnR0RQUicpLAogICAgJ2xhbmd1YWdlJyAgICAgICA9PiAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZ2NwX2xhbmd1YWdlJywgJ2VuX1VTJyksCiAgICAnaW5qZWN0X2pxdWVyeScgID0+ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdnY3BfaW5qZWN0X2pxdWVyeScsIDApLApdKTsKJHRwbC0+ZGlzcGxheSgpOwo=]]></data>
	</file>
	<file>
	  <filename>/function.admin_settingstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgU2VlIExJQ0VOU0UgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmlmICghZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSkgZXhpdDsKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKEdvb2dsZUNvbnNlbnRQbGF0Zm9ybTo6TUFOQUdFX1BFUk0pKSByZXR1cm47CgppZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0X3NldHRpbmdzJ10pKSB7CiAgICBpZiAoY2xhc3NfZXhpc3RzKCdcXHh0X3V0aWxzJykpIFx4dF91dGlsczo6dmFsaWRfZm9ybV9jc3JmKCk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZ2NwX2NvbG9yX3NjaGVtZScsIGlzc2V0KCRwYXJhbXNbJ2NvbG9yX3NjaGVtZSddKSA/ICRwYXJhbXNbJ2NvbG9yX3NjaGVtZSddIDogJ2xpZ2h0Jyk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZ2NwX3Bvc2l0aW9uJywgaXNzZXQoJHBhcmFtc1sncG9zaXRpb24nXSkgPyAkcGFyYW1zWydwb3NpdGlvbiddIDogJ2NlbnRlcicpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2djcF9zaXplJywgaXNzZXQoJHBhcmFtc1snc2l6ZSddKSA/ICRwYXJhbXNbJ3NpemUnXSA6ICdub3JtYWwnKTsKCiAgICAkY3VycmVudF9sYW5nID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2djcF9sYW5ndWFnZScsICdlbl9VUycpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2djcF9jdXN0b21fdGl0bGVfJyAuICRjdXJyZW50X2xhbmcsIGlzc2V0KCRwYXJhbXNbJ2N1c3RvbV90aXRsZSddKSA/ICRwYXJhbXNbJ2N1c3RvbV90aXRsZSddIDogJycpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2djcF9jdXN0b21fdGV4dF8nIC4gJGN1cnJlbnRfbGFuZywgaXNzZXQoJHBhcmFtc1snY3VzdG9tX3RleHQnXSkgPyAkcGFyYW1zWydjdXN0b21fdGV4dCddIDogJycpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2djcF9wcmltYXJ5X2NvbG9yJywgaXNzZXQoJHBhcmFtc1sncHJpbWFyeV9jb2xvciddKSA/ICRwYXJhbXNbJ3ByaW1hcnlfY29sb3InXSA6ICcjMDA3YmZmJyk7CgogICAgLy8gUmVnZW5lcmF0ZSBDU1MKICAgICR0cGxfY3NzID0gJHNtYXJ0eS0+Q3JlYXRlVGVtcGxhdGUoJHRoaXMtPkdldFRlbXBsYXRlUmVzb3VyY2UoJ29yaWdfY29va2llbW9kYWxfY3NzLnRwbCcpKTsKICAgICR0cGxfY3NzLT5hc3NpZ24oJ3ByaW1hcnlfY29sb3InLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZ2NwX3ByaW1hcnlfY29sb3InKSk7CiAgICAkZGVmYXVsdF9jc3MgPSAkdHBsX2Nzcy0+ZmV0Y2goKTsKICAgICRtaW5pZmllZF9jc3MgPSAkdGhpcy0+bWluaWZ5Q1NTKCRkZWZhdWx0X2Nzcyk7CgogICAgJGNzc19wYXRoID0gX19ESVJfXyAuICcvYXNzZXRzL2dvb2dsZWNvbnNlbnRwbGF0Zm9ybS5jc3MnOwogICAgaWYgKGlzX3dyaXRhYmxlKGRpcm5hbWUoJGNzc19wYXRoKSkpIHsKICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkY3NzX3BhdGgsICRtaW5pZmllZF9jc3MpOwogICAgfQoKICAgICR0aGlzLT5TZXRNZXNzYWdlKCR0aGlzLT5MYW5nKCdtc2dfc2V0dGluZ3Nfc2F2ZWQnKSk7CiAgICAkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdzZXR0aW5ncycpOwp9CgokdHBsID0gJHNtYXJ0eS0+Q3JlYXRlVGVtcGxhdGUoJHRoaXMtPkdldFRlbXBsYXRlUmVzb3VyY2UoJ2FkbWluX3NldHRpbmdzdGFiLnRwbCcpLCBudWxsLCBudWxsLCAkc21hcnR5KTsKJHRwbC0+YXNzaWduKCdjb2xvcl9zY2hlbWUnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZ2NwX2NvbG9yX3NjaGVtZScsICdsaWdodCcpKTsKJHRwbC0+YXNzaWduKCdwb3NpdGlvbicsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdnY3BfcG9zaXRpb24nLCAnY2VudGVyJykpOwokdHBsLT5hc3NpZ24oJ3NpemUnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZ2NwX3NpemUnLCAnbm9ybWFsJykpOwoKJGN1cnJlbnRfbGFuZyA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdnY3BfbGFuZ3VhZ2UnLCAnZW5fVVMnKTsKJHRwbC0+YXNzaWduKCdjdXN0b21fdGl0bGUnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZ2NwX2N1c3RvbV90aXRsZV8nIC4gJGN1cnJlbnRfbGFuZywgJycpKTsKJHRwbC0+YXNzaWduKCdjdXN0b21fdGV4dCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdnY3BfY3VzdG9tX3RleHRfJyAuICRjdXJyZW50X2xhbmcsICcnKSk7CiR0cGwtPmFzc2lnbigncHJpbWFyeV9jb2xvcicsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdnY3BfcHJpbWFyeV9jb2xvcicsICcjMDA3YmZmJykpOwokdHBsLT5kaXNwbGF5KCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/GoogleConsentPlatform.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgU2VlIExJQ0VOU0UgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmlmICghZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSkgZXhpdDsKCmNsYXNzIEdvb2dsZUNvbnNlbnRQbGF0Zm9ybSBleHRlbmRzIENNU01vZHVsZQp7CiAgICBjb25zdCBNQU5BR0VfUEVSTSA9ICdtYW5hZ2VfZ29vZ2xlY29uc2VudHBsYXRmb3JtJzsKCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0TmFtZSgpIHsgcmV0dXJuICdHb29nbGVDb25zZW50UGxhdGZvcm0nOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0VmVyc2lvbigpIHsgcmV0dXJuICcxLjEuMCc7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKSB7IHJldHVybiAnR29vZ2xlIENvbnNlbnQgUGxhdGZvcm0nOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdkZXNjcmlwdGlvbicpOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKSB7IHJldHVybiB0cnVlOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gSGFzQWRtaW4oKSB7IHJldHVybiB0cnVlOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yKCkgeyByZXR1cm4gJ01hZ2FsIEhlemknOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKSB7IHJldHVybiAnbWFnYWxAcGl4ZWxzb2x1dGlvbnMuYml6JzsgfQogICAgcHVibGljIGZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpIHsgcmV0dXJuICdleHRlbnNpb25zJzsgfQogICAgcHVibGljIGZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkgeyByZXR1cm4gJzIuMi40JzsgfQogICAgcHVibGljIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpIHsgcmV0dXJuIFtdOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gTGF6eUxvYWRBZG1pbigpIHsgcmV0dXJuIHRydWU7IH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gVW5pbnN0YWxsUHJlTWVzc2FnZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5MYW5nKCdhc2tfdW5pbnN0YWxsJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oc2VsZjo6TUFOQUdFX1BFUk0pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBJbml0aWFsaXplRnJvbnRlbmQoKQogICAgewogICAgICAgICR0aGlzLT5SZWdpc3Rlck1vZHVsZVBsdWdpbih0cnVlKTsKICAgICAgICAkdGhpcy0+UmVzdHJpY3RVbmtub3duUGFyYW1zKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldEhlbHAoKQogICAgewogICAgICAgICRmbiA9IF9fRElSX18gLiAnL1JFQURNRS5tZCc7CiAgICAgICAgcmV0dXJuIChpc19maWxlKCRmbikgJiYgaXNfcmVhZGFibGUoJGZuKSkgPyBmaWxlX2dldF9jb250ZW50cygkZm4pIDogJyc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpCiAgICB7CiAgICAgICAgJGZuID0gX19ESVJfXyAuICcvZG9jL2NoYW5nZWxvZy5pbmMnOwogICAgICAgIHJldHVybiAoaXNfZmlsZSgkZm4pICYmIGlzX3JlYWRhYmxlKCRmbikpID8gZmlsZV9nZXRfY29udGVudHMoJGZuKSA6ICcnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBEb0V2ZW50KCRvcmlnaW5hdG9yLCAkZXZlbnRuYW1lLCAmJHBhcmFtcykKICAgIHsKICAgICAgICBpZiAoJG9yaWdpbmF0b3IgIT09ICdDb3JlJyB8fCAkZXZlbnRuYW1lICE9PSAnQ29udGVudFBvc3RSZW5kZXInKSByZXR1cm47CgogICAgICAgIGlmIChwcm9wZXJ0eV9leGlzdHMoJHRoaXMsICdoZWFkJykgJiYgIWVtcHR5KCR0aGlzLT5oZWFkKSkgewogICAgICAgICAgICAkcG9zID0gc3RyaXBvcygkcGFyYW1zWydjb250ZW50J10sICc8L2hlYWQnKTsKICAgICAgICAgICAgaWYgKCRwb3MgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkcGFyYW1zWydjb250ZW50J10gPSBzdWJzdHIoJHBhcmFtc1snY29udGVudCddLCAwLCAkcG9zKSAuICR0aGlzLT5oZWFkIC4gc3Vic3RyKCRwYXJhbXNbJ2NvbnRlbnQnXSwgJHBvcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChwcm9wZXJ0eV9leGlzdHMoJHRoaXMsICdib2R5JykgJiYgIWVtcHR5KCR0aGlzLT5ib2R5KSkgewogICAgICAgICAgICAkcG9zID0gc3RyaXBvcygkcGFyYW1zWydjb250ZW50J10sICc8Ym9keScpOwogICAgICAgICAgICBpZiAoJHBvcyAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICRlbmQgPSBzdHJwb3MoJHBhcmFtc1snY29udGVudCddLCAnPicsICRwb3MpOwogICAgICAgICAgICAgICAgaWYgKCRlbmQgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgJGVuZCsrOwogICAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ2NvbnRlbnQnXSA9IHN1YnN0cigkcGFyYW1zWydjb250ZW50J10sIDAsICRlbmQpIC4gJHRoaXMtPmJvZHkgLiBzdWJzdHIoJHBhcmFtc1snY29udGVudCddLCAkZW5kKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHByb3BlcnR5X2V4aXN0cygkdGhpcywgJ2JvZHlidG0nKSAmJiAhZW1wdHkoJHRoaXMtPmJvZHlidG0pKSB7CiAgICAgICAgICAgICRwb3MgPSBzdHJyaXBvcygkcGFyYW1zWydjb250ZW50J10sICc8L2JvZHknKTsKICAgICAgICAgICAgaWYgKCRwb3MgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkcGFyYW1zWydjb250ZW50J10gPSBzdWJzdHIoJHBhcmFtc1snY29udGVudCddLCAwLCAkcG9zKSAuICR0aGlzLT5ib2R5YnRtIC4gc3Vic3RyKCRwYXJhbXNbJ2NvbnRlbnQnXSwgJHBvcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGJ1aWxkQ29uc2VudE9iamVjdCgpCiAgICB7CiAgICAgICAgJHJlZ3VsYXRpb24gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZ2NwX3JlZ3VsYXRpb24nLCAnR0RQUicpOwogICAgICAgICRrZXlzID0gWydhZF91c2VyX2RhdGEnLCAnYWRfcGVyc29uYWxpemF0aW9uJywgJ2FkX3N0b3JhZ2UnLCAnYW5hbHl0aWNzX3N0b3JhZ2UnLCAncGVyc29uYWxpemF0aW9uX3N0b3JhZ2UnLCAnZnVuY3Rpb25hbGl0eV9zdG9yYWdlJywgJ3NlY3VyaXR5X3N0b3JhZ2UnXTsKCiAgICAgICAgJGNvbnNlbnRzID0gW107CiAgICAgICAgZm9yZWFjaCAoJGtleXMgYXMgJGtleSkgewogICAgICAgICAgICBpZiAoJGtleSA9PT0gJ3NlY3VyaXR5X3N0b3JhZ2UnKSB7CiAgICAgICAgICAgICAgICAkY29uc2VudHNbJGtleV0gPSAnZ3JhbnRlZCc7CiAgICAgICAgICAgIH0gZWxzZWlmICgka2V5ID09PSAnZnVuY3Rpb25hbGl0eV9zdG9yYWdlJykgewogICAgICAgICAgICAgICAgJGNvbnNlbnRzWyRrZXldID0gKCRyZWd1bGF0aW9uID09PSAnR0RQUicpID8gJ2RlbmllZCcgOiAnZ3JhbnRlZCc7CiAgICAgICAgICAgIH0gZWxzZWlmICgkcmVndWxhdGlvbiA9PT0gJ0dEUFInKSB7CiAgICAgICAgICAgICAgICAkY29uc2VudHNbJGtleV0gPSAnZGVuaWVkJzsKICAgICAgICAgICAgfSBlbHNlaWYgKGluX2FycmF5KCRyZWd1bGF0aW9uLCBbJ1VDUEEnLCAnQ0NQQScsICdDUEEnLCAnQ1REUEEnLCAnVkNEUEEnXSkgJiYgaW5fYXJyYXkoJGtleSwgWydhZF9wZXJzb25hbGl6YXRpb24nLCAnYWRfdXNlcl9kYXRhJ10pKSB7CiAgICAgICAgICAgICAgICAkY29uc2VudHNbJGtleV0gPSAnZGVuaWVkJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRjb25zZW50c1ska2V5XSA9ICdncmFudGVkJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkY29uc2VudHNbJ3dhaXRfZm9yX3VwZGF0ZSddID0gNTAwOwogICAgICAgIHJldHVybiAkY29uc2VudHM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGJ1aWxkSW5saW5lSmF2YVNjcmlwdCgkZ3RhZ19pZCwgJGNvbnNlbnRzKQogICAgewogICAgICAgICRndGFnX2lkID0gaHRtbHNwZWNpYWxjaGFycyh0cmltKCRndGFnX2lkKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7CiAgICAgICAgJGNvbnNlbnRzX2pzb24gPSBqc29uX2VuY29kZSgkY29uc2VudHMpOwoKICAgICAgICAkcmVndWxhdGlvbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdnY3BfcmVndWxhdGlvbicsICdHRFBSJyk7CiAgICAgICAgJGFkc19yZWRhY3Rpb24gPSAoJHJlZ3VsYXRpb24gPT09ICdHRFBSJykgPyAiZ3RhZygnc2V0JywgJ2Fkc19kYXRhX3JlZGFjdGlvbicsIHRydWUpO1xuIiA6ICcnOwoKICAgICAgICAkanMgPSAid2luZG93LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW107XG4iCiAgICAgICAgICAgIC4gImZ1bmN0aW9uIGd0YWcoKSB7IGRhdGFMYXllci5wdXNoKGFyZ3VtZW50cyk7IH1cbiIKICAgICAgICAgICAgLiAkYWRzX3JlZGFjdGlvbgogICAgICAgICAgICAuICJpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY29uc2VudE1vZGUnKSA9PT0gbnVsbCl7XG4iCiAgICAgICAgICAgIC4gIiAgZ3RhZygnY29uc2VudCcsICdkZWZhdWx0JywgeyRjb25zZW50c19qc29ufSk7XG4iCiAgICAgICAgICAgIC4gIn0gZWxzZSB7XG4iCiAgICAgICAgICAgIC4gIiAgZ3RhZygnY29uc2VudCcsICdkZWZhdWx0JywgSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY29uc2VudE1vZGUnKSkpO1xuIgogICAgICAgICAgICAuICJ9XG4iOwoKICAgICAgICBpZiAocHJlZ19tYXRjaCgnL15HLVtBLVowLTldKyQvaScsICRndGFnX2lkKSkgewogICAgICAgICAgICAkanMgLj0gInZhciBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOyBzLmFzeW5jPXRydWU7XG4iCiAgICAgICAgICAgICAgICAuICJzLnNyYz0naHR0cHM6Ly93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vZ3RhZy9qcz9pZD17JGd0YWdfaWR9JztcbiIKICAgICAgICAgICAgICAgIC4gImRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocyk7XG4iCiAgICAgICAgICAgICAgICAuICJndGFnKCdqcycsIG5ldyBEYXRlKCkpO1xuIgogICAgICAgICAgICAgICAgLiAiZ3RhZygnY29uZmlnJywneyRndGFnX2lkfScpO1xuIjsKICAgICAgICB9IGVsc2VpZiAocHJlZ19tYXRjaCgnL15HVE0tW0EtWjAtOV0rJC9pJywgJGd0YWdfaWQpKSB7CiAgICAgICAgICAgICRqcyAuPSAiKGZ1bmN0aW9uKHcsZCxzLGwsaSl7d1tsXT13W2xdfHxbXTt3W2xdLnB1c2goeydndG0uc3RhcnQnOlxuIgogICAgICAgICAgICAgICAgLiAibmV3IERhdGUoKS5nZXRUaW1lKCksZXZlbnQ6J2d0bS5qcyd9KTt2YXIgZj1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKHMpWzBdLFxuIgogICAgICAgICAgICAgICAgLiAiaj1kLmNyZWF0ZUVsZW1lbnQocyksZGw9bCE9J2RhdGFMYXllcic/JyZsPScrbDonJztqLmFzeW5jPXRydWU7ai5zcmM9XG4iCiAgICAgICAgICAgICAgICAuICInaHR0cHM6Ly93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vZ3RtLmpzP2lkPScraStkbDtmLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGosZik7XG4iCiAgICAgICAgICAgICAgICAuICJ9KSh3aW5kb3csZG9jdW1lbnQsJ3NjcmlwdCcsJ2RhdGFMYXllcicsJ3skZ3RhZ19pZH0nKTtcbiI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGpzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBtaW5pZnlDU1MoJGNzcykKICAgIHsKICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCcvXC9cKi4qP1wqXC8vcycsICcnLCAkY3NzKTsKICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCcvXHMrLycsICcgJywgJGNzcyk7CiAgICAgICAgJGNzcyA9IHN0cl9yZXBsYWNlKFsnOyAnLCAnIHsnLCAneyAnLCAnIH0nLCAnfSAnLCAnOiAnLCAnLCAnXSwgWyc7JywgJ3snLCAneycsICd9JywgJ30nLCAnOicsICcsJ10sICRjc3MpOwogICAgICAgIHJldHVybiB0cmltKCRjc3MpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMYW5nKCRrZXksICRsYW5ndWFnZSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCRsYW5ndWFnZSA9PT0gbnVsbCkgewogICAgICAgICAgICAkbGFuZ3VhZ2UgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZ2NwX2xhbmd1YWdlJywgJ2VuX1VTJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGxhbmd1YWdlICE9PSAnZW5fVVMnKSB7CiAgICAgICAgICAgICRsYW5nX2ZpbGUgPSBfX0RJUl9fIC4gJy9sYW5nL2V4dC8nIC4gYmFzZW5hbWUoJGxhbmd1YWdlKSAuICcucGhwJzsKICAgICAgICAgICAgaWYgKGlzX2ZpbGUoJGxhbmdfZmlsZSkpIHsKICAgICAgICAgICAgICAgICRsYW5nID0gW107CiAgICAgICAgICAgICAgICBpbmNsdWRlICRsYW5nX2ZpbGU7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGxhbmdbJGtleV0pKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRsYW5nWyRrZXldOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPkxhbmcoJGtleSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgU2VlIExJQ0VOU0UgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdHb29nbGUgQ29uc2VudCBQbGF0Zm9ybSc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ01vZHVsZSBpbnN0YWxsZWQnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01vZHVsZSByZW1vdmVkJzsKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnR29vZ2xlIENvbnNlbnQgUGxhdGZvcm0gZm9yIEdEUFIgY29tcGxpYW5jZSB3aXRoIEdBNC9HVE0gaW50ZWdyYXRpb24uJzsKJGxhbmdbJ2FkbWluX3RpdGxlJ10gPSAnR29vZ2xlIENvbnNlbnQgUGxhdGZvcm0gU2V0dGluZ3MnOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQWNjZXNzIERlbmllZC4gUGxlYXNlIGNoZWNrIHlvdXIgcGVybWlzc2lvbnMuJzsKCiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9qcyddID0gJ0phdmFTY3JpcHQgQmxvY2snOwokbGFuZ1snbGFiZWxfdGVtcGxhdGVfaHRtbCddID0gJ0NvbnNlbnQgQmFubmVyIFRlbXBsYXRlJzsKJGxhbmdbJ2xhYmVsX3RlbXBsYXRlX2NzcyddID0gJ0NvbnNlbnQgQ1NTJzsKJGxhbmdbJ2xhYmVsX3RlbXBsYXRlJ10gPSAnVGVtcGxhdGUnOwokbGFuZ1snbGFiZWxfanNfcG9zaXRpb24nXSA9ICdKYXZhU2NyaXB0IEluc2VydGlvbiBMb2NhdGlvbic7CgokbGFuZ1snanNfaGVhZCddID0gJ0luc2VydCBpbiAmbHQ7aGVhZCZndDsnOwokbGFuZ1snanNfYm9keSddID0gJ0luc2VydCBhdCBlbmQgb2YgJmx0O2JvZHkmZ3Q7JzsKCiRsYW5nWydzdWJtaXQnXSA9ICdTYXZlJzsKJGxhbmdbJ2NhbmNlbCddID0gJ0NhbmNlbCc7CiRsYW5nWydzZXR0aW5nc19zYXZlZCddID0gJ1NldHRpbmdzIHNhdmVkJzsKCiRsYW5nWydjb25zZW50X2FuYWx5dGljc19zdG9yYWdlJ10gPSAnQW5hbHl0aWNzIFN0b3JhZ2UnOwokbGFuZ1snY29uc2VudF9hZF9zdG9yYWdlJ10gPSAnQWQgU3RvcmFnZSc7CiRsYW5nWydjb25zZW50X2FkX3BlcnNvbmFsaXphdGlvbiddID0gJ0FkIFBlcnNvbmFsaXphdGlvbic7CiRsYW5nWydjb25zZW50X2FkX3VzZXJfZGF0YSddID0gJ0FkIFVzZXIgRGF0YSc7CiRsYW5nWydjb25zZW50X3BlcnNvbmFsaXphdGlvbiddID0gJ1BlcnNvbmFsaXphdGlvbic7CgokbGFuZ1snaW5qZWN0aW9uX2xvY2F0aW9uJ10gPSAnSmF2YVNjcmlwdCBJbmplY3Rpb24gTG9jYXRpb24nOwokbGFuZ1snbGFiZWxfZW5hYmxlZCddID0gJ0VuYWJsZSBHb29nbGUgQ29uc2VudCBQbGF0Zm9ybSc7CiRsYW5nWydhc2tfdW5pbnN0YWxsJ10gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuaW5zdGFsbCB0aGUgR29vZ2xlQ29uc2VudFBsYXRmb3JtIG1vZHVsZT8nOwokbGFuZ1snbGFiZWxfZ29vZ2xlX3RhZ19pZCddID0gJ0dvb2dsZSBUYWcgSUQgKEdBNDogRy1YWFhYWFhYIG9yIEdUTTogR1RNLVhYWFhYWFgpJzsKJGxhbmdbJ2hlbHBfZ29vZ2xlX3RhZ19pZCddID0gJ0F1dG8tZGV0ZWN0ZWQuIEdBNCBsb2FkcyBndGFnLmpzOyBHVE0gbG9hZHMgdGhlIGNvbnRhaW5lci4nOwokbGFuZ1snbGFiZWxfcmVndWxhdGlvbiddID0gJ1ByaXZhY3kgUmVndWxhdGlvbiBDb21wbGlhbmNlJzsKCiRsYW5nWydjb29raWVfdGl0bGUnXSA9ICdDb29raWUgUHJlZmVyZW5jZXMnOwokbGFuZ1snY29va2llX2NvbnNlbnRfdGV4dCddID0gJ1dlIHVzZSBjb29raWVzIHRvIHBlcnNvbmFsaXNlIGNvbnRlbnQgYW5kIGFkcywgdG8gcHJvdmlkZSBzb2NpYWwgbWVkaWEgZmVhdHVyZXMgYW5kIHRvIGFuYWx5c2Ugb3VyIHRyYWZmaWMuIFdlIGFsc28gc2hhcmUgaW5mb3JtYXRpb24gYWJvdXQgeW91ciB1c2Ugb2Ygb3VyIHNpdGUgd2l0aCBvdXIgc29jaWFsIG1lZGlhLCBhZHZlcnRpc2luZyBhbmQgYW5hbHl0aWNzIHBhcnRuZXJzIHdobyBtYXkgY29tYmluZSBpdCB3aXRoIG90aGVyIGluZm9ybWF0aW9uIHRoYXQgeW91XCd2ZSBwcm92aWRlZCB0byB0aGVtIG9yIHRoYXQgdGhleVwndmUgY29sbGVjdGVkIGZyb20geW91ciB1c2Ugb2YgdGhlaXIgc2VydmljZXMuJzsKJGxhbmdbJ2Nvb2tpZV9uZWNlc3NhcnknXSA9ICdOZWNlc3NhcnknOwokbGFuZ1snY29va2llX3ByZWZlcmVuY2VzJ10gPSAnUHJlZmVyZW5jZXMnOwokbGFuZ1snY29va2llX3N0YXRpc3RpY3MnXSA9ICdTdGF0aXN0aWNzJzsKJGxhbmdbJ2Nvb2tpZV9tYXJrZXRpbmcnXSA9ICdNYXJrZXRpbmcnOwokbGFuZ1snY29va2llX25lY2Vzc2FyeV9kZXNjJ10gPSAnUmVxdWlyZWQgZm9yIGJhc2ljIHNpdGUgZnVuY3Rpb25hbGl0eSc7CiRsYW5nWydjb29raWVfcHJlZmVyZW5jZXNfZGVzYyddID0gJ1JlbWVtYmVyIHlvdXIgc2V0dGluZ3MgYW5kIGNob2ljZXMnOwokbGFuZ1snY29va2llX3N0YXRpc3RpY3NfZGVzYyddID0gJ0hlbHAgdXMgdW5kZXJzdGFuZCBob3cgeW91IHVzZSBvdXIgc2l0ZSc7CiRsYW5nWydjb29raWVfbWFya2V0aW5nX2Rlc2MnXSA9ICdQZXJzb25hbGl6ZWQgYWRzIGFuZCBjb250ZW50JzsKJGxhbmdbJ2Nvb2tpZV9hYm91dF90ZXh0J10gPSAnQ29va2llcyBhcmUgZGlnaXRhbCBmaWxlcyB0aGF0IHdlYnNpdGVzIHBsYWNlIG9uIHlvdXIgZGV2aWNlIHRvIHJlbWVtYmVyIHlvdXIgcHJlZmVyZW5jZXMgYW5kIGFjdGlvbnMsIHNvIHlvdSBkb25cJ3QgaGF2ZSB0byByZS1lbnRlciBpbmZvcm1hdGlvbiBvbiByZXR1cm4gdmlzaXRzLjxicj48YnI+V2UgdXNlIGNvb2tpZXMgdG8gZW5oYW5jZSB5b3VyIGV4cGVyaWVuY2UsIGRlbGl2ZXIgcGVyc29uYWxpemVkIGNvbnRlbnQsIGFuZCBhbmFseXplIHdlYnNpdGUgdHJhZmZpYy4gRXNzZW50aWFsIGNvb2tpZXMgYXJlIHJlcXVpcmVkIGZvciBmdW5jdGlvbmFsaXR5LCB3aGlsZSBvdGhlcnMgaGVscCB1cyBpbXByb3ZlIHRoZSBzaXRlLjxicj48YnI+VGhpcmQtcGFydHkgY29va2llcyBmcm9tIHNvY2lhbCBtZWRpYSwgYW5hbHl0aWNzLCBhbmQgYWR2ZXJ0aXNpbmcgcGFydG5lcnMgbWF5IGFsc28gYmUgdXNlZCB0byBwcm92aWRlIHRhcmdldGVkIGNvbnRlbnQgb24gb3RoZXIgd2Vic2l0ZXMuPGJyPjxicj5Zb3UgY2FuIGFjY2VwdCBvciBkZWNsaW5lIGNvb2tpZXMgdGhyb3VnaCB5b3VyIGJyb3dzZXIgc2V0dGluZ3Mgb3IgdGhpcyBiYW5uZXIuIENvbnNlbnQgY2FuIGJlIHdpdGhkcmF3biBhdCBhbnkgdGltZSBieSBhZGp1c3RpbmcgeW91ciBwcmVmZXJlbmNlcyBoZXJlLjxicj48YnI+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZGF0YSBoYW5kbGluZyBhbmQgcHJpdmFjeSByaWdodHMsIHBsZWFzZSBzZWUgb3VyIFByaXZhY3kgUG9saWN5Lic7CiRsYW5nWydjb29raWVfZGVueSddID0gJ0RlbnknOwokbGFuZ1snY29va2llX2N1c3RvbWl6ZSddID0gJ0N1c3RvbWl6ZSc7CiRsYW5nWydjb29raWVfYWxsb3dfYWxsJ10gPSAnQWxsb3cgQWxsJzsKJGxhbmdbJ2Nvb2tpZV9zYXZlX3NlbGVjdGlvbiddID0gJ1NhdmUgU2VsZWN0aW9uJzsKJGxhbmdbJ2Nvb2tpZV9hY2tub3dsZWRnZSddID0gJ0Fja25vd2xlZGdlJzsKJGxhbmdbJ2Nvb2tpZV90YWJfY29uc2VudCddID0gJ0NvbnNlbnQnOwokbGFuZ1snY29va2llX3RhYl9kZXRhaWxzJ10gPSAnRGV0YWlscyc7CiRsYW5nWydjb29raWVfdGFiX2Fib3V0J10gPSAnQWJvdXQnOwokbGFuZ1snY29va2llX3dlYnNpdGVfdXNlcyddID0gJ1RoaXMgd2Vic2l0ZSB1c2VzIGNvb2tpZXMnOwoKJGxhbmdbJ3NldHRpbmdzX2FwcGVhcmFuY2UnXSA9ICdBcHBlYXJhbmNlIFNldHRpbmdzJzsKJGxhbmdbJ2xhYmVsX2NvbG9yX3NjaGVtZSddID0gJ0NvbG9yIFNjaGVtZSc7CiRsYW5nWydjb2xvcl9zY2hlbWVfbGlnaHQnXSA9ICdMaWdodCc7CiRsYW5nWydjb2xvcl9zY2hlbWVfZGFyayddID0gJ0RhcmsnOwokbGFuZ1snbGFiZWxfcG9zaXRpb24nXSA9ICdQb3NpdGlvbic7CiRsYW5nWydwb3NpdGlvbl9ib3R0b20nXSA9ICdCb3R0b20nOwokbGFuZ1sncG9zaXRpb25fY2VudGVyJ10gPSAnQ2VudGVyJzsKJGxhbmdbJ3Bvc2l0aW9uX3RvcCddID0gJ1RvcCc7CiRsYW5nWydsYWJlbF9zaXplJ10gPSAnU2l6ZSc7CiRsYW5nWydzaXplX2NvbXBhY3QnXSA9ICdDb21wYWN0JzsKJGxhbmdbJ3NpemVfbm9ybWFsJ10gPSAnTm9ybWFsJzsKJGxhbmdbJ3NpemVfbGFyZ2UnXSA9ICdMYXJnZSc7CiRsYW5nWydzaXplX3dpZGUnXSA9ICdXaWRlJzsKJGxhbmdbJ21zZ19zZXR0aW5nc19zYXZlZCddID0gJ1NldHRpbmdzIHNhdmVkIHN1Y2Nlc3NmdWxseSc7CgokbGFuZ1snc2V0dGluZ3NfY3VzdG9tX3RleHQnXSA9ICdDdXN0b20gVGV4dCc7CiRsYW5nWydsYWJlbF9jdXN0b21fdGl0bGUnXSA9ICdDdXN0b20gVGl0bGUnOwokbGFuZ1snbGFiZWxfY3VzdG9tX3RleHQnXSA9ICdDdXN0b20gRGVzY3JpcHRpb24gVGV4dCc7CiRsYW5nWydsYWJlbF9wcmltYXJ5X2NvbG9yJ10gPSAnUHJpbWFyeSBCdXR0b24gQ29sb3InOwokbGFuZ1snaGVscF9wcmltYXJ5X2NvbG9yJ10gPSAnQ2hvb3NlIGEgY29sb3IgdGhhdCBtYXRjaGVzIHlvdXIgd2Vic2l0ZSB0aGVtZSc7CiRsYW5nWydlcnJvcl9pbnZhbGlkX2dvb2dsZV90YWdfaWQnXSA9ICdJbnZhbGlkIEdvb2dsZSBUYWcgSUQgZm9ybWF0LiBVc2UgR0E0IGZvcm1hdCAoRy1YWFhYWFhYWFhYKSBvciBHVE0gZm9ybWF0IChHVE0tWFhYWFhYWCknOwokbGFuZ1snbGFiZWxfaW5qZWN0X2pxdWVyeSddID0gJ0luamVjdCBqUXVlcnkgTGlicmFyeSc7CiRsYW5nWydoZWxwX2luamVjdF9qcXVlcnknXSA9ICdFbmFibGUgaWYgeW91ciB0aGVtZSBkb2VzIG5vdCBpbmNsdWRlIGpRdWVyeSAocmVxdWlyZWQgZm9yIGNvbnNlbnQgYmFubmVyIGZ1bmN0aW9uYWxpdHkpJzsK]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/cs_CZ.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnTW9kdWwgbmFpbnN0YWxvdsOhbic7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnTW9kdWwgb2RzdHJhbsSbbic7CiRsYW5nWydkZXNjcmlwdGlvbiddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtIHBybyBzb3VsYWQgcyBHRFBSIHMgaW50ZWdyYWPDrSBHQTQvR1RNLic7CiRsYW5nWydhZG1pbl90aXRsZSddID0gJ05hc3RhdmVuw60gR29vZ2xlIENvbnNlbnQgUGxhdGZvcm0nOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnUMWZw61zdHVwIG9kZXDFmWVuLiBaa29udHJvbHVqdGUgc3bDoSBvcHLDoXZuxJtuw60uJzsKCiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9qcyddID0gJ0phdmFTY3JpcHQgQmxvayc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9odG1sJ10gPSAnxaBhYmxvbmEgQmFubmVydSBTb3VobGFzdSc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9jc3MnXSA9ICdDU1MgU291aGxhc3UnOwokbGFuZ1snbGFiZWxfdGVtcGxhdGUnXSA9ICfFoGFibG9uYSc7CiRsYW5nWydsYWJlbF9qc19wb3NpdGlvbiddID0gJ1BvemljZSBWbG/FvmVuw60gSmF2YVNjcmlwdCc7CgokbGFuZ1snanNfaGVhZCddID0gJ1Zsb8W+aXQgZG8gJmx0O2hlYWQmZ3Q7JzsKJGxhbmdbJ2pzX2JvZHknXSA9ICdWbG/Fvml0IG5hIGtvbmVjICZsdDtib2R5Jmd0Oyc7CgokbGFuZ1snc3VibWl0J10gPSAnVWxvxb5pdCc7CiRsYW5nWydjYW5jZWwnXSA9ICdacnXFoWl0JzsKJGxhbmdbJ3NldHRpbmdzX3NhdmVkJ10gPSAnTmFzdGF2ZW7DrSB1bG/FvmVubyc7CgokbGFuZ1snY29uc2VudF9hbmFseXRpY3Nfc3RvcmFnZSddID0gJ8OabG/FvmnFoXTEmyBBbmFseXRpY3MnOwokbGFuZ1snY29uc2VudF9hZF9zdG9yYWdlJ10gPSAnw5psb8W+acWhdMSbIFJla2xhbSc7CiRsYW5nWydjb25zZW50X2FkX3BlcnNvbmFsaXphdGlvbiddID0gJ1BlcnNvbmFsaXphY2UgUmVrbGFtJzsKJGxhbmdbJ2NvbnNlbnRfYWRfdXNlcl9kYXRhJ10gPSAnVcW+aXZhdGVsc2vDoSBEYXRhIFJla2xhbSc7CiRsYW5nWydjb25zZW50X3BlcnNvbmFsaXphdGlvbiddID0gJ1BlcnNvbmFsaXphY2UnOwoKJGxhbmdbJ2luamVjdGlvbl9sb2NhdGlvbiddID0gJ1Vtw61zdMSbbsOtIFZsb8W+ZW7DrSBKYXZhU2NyaXB0JzsKJGxhbmdbJ2xhYmVsX2VuYWJsZWQnXSA9ICdQb3ZvbGl0IEdvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ2Fza191bmluc3RhbGwnXSA9ICdKc3RlIHNpIGppc3RpLCDFvmUgY2hjZXRlIG9kaW5zdGFsb3ZhdCBtb2R1bCBHb29nbGVDb25zZW50UGxhdGZvcm0/JzsKJGxhbmdbJ2xhYmVsX2dvb2dsZV90YWdfaWQnXSA9ICdHb29nbGUgVGFnIElEIChHQTQ6IEctWFhYWFhYWCBuZWJvIEdUTTogR1RNLVhYWFhYWFgpJzsKJGxhbmdbJ2hlbHBfZ29vZ2xlX3RhZ19pZCddICA9ICdBdXRvbWF0aWNreSBkZXRla292w6Fuby4gR0E0IG5hxI3DrXTDoSBndGFnLmpzOyBHVE0gbmHEjcOtdMOhIGtvbnRlam5lci4nOwokbGFuZ1snbGFiZWxfcmVndWxhdGlvbiddID0gJ1NvdWxhZCBzIE5hxZnDrXplbsOtbSBvIE9jaHJhbsSbIFNvdWtyb23DrSc7CgovLyBDb29raWUgY29uc2VudCB0cmFuc2xhdGlvbnMKJGxhbmdbJ2Nvb2tpZV90aXRsZSddID0gJ1DFmWVkdm9sYnkgQ29va2llcyc7CiRsYW5nWydjb29raWVfY29uc2VudF90ZXh0J10gPSAnUG91xb7DrXbDoW1lIGNvb2tpZXMgayBwZXJzb25hbGl6YWNpIG9ic2FodSBhIHJla2xhbSwgcG9za3l0b3bDoW7DrSBmdW5rY8OtIHNvY2nDoWxuw61jaCBtw6lkacOtIGEgYW5hbMO9emUgbmHFoWVobyBwcm92b3p1LiBUYWvDqSBzZMOtbMOtbWUgaW5mb3JtYWNlIG8gdmHFoWVtIHBvdcW+w612w6Fuw60gbmHFoWljaCBzdHLDoW5layBzIG5hxaFpbWkgcGFydG5lcnkgcHJvIHNvY2nDoWxuw60gbcOpZGlhLCByZWtsYW11IGEgYW5hbMO9enUuJzsKJGxhbmdbJ2Nvb2tpZV9uZWNlc3NhcnknXSA9ICdOZXpieXRuw6knOwokbGFuZ1snY29va2llX3ByZWZlcmVuY2VzJ10gPSAnUMWZZWR2b2xieSc7CiRsYW5nWydjb29raWVfc3RhdGlzdGljcyddID0gJ1N0YXRpc3Rpa3knOwokbGFuZ1snY29va2llX21hcmtldGluZyddID0gJ01hcmtldGluZyc7CiRsYW5nWydjb29raWVfbmVjZXNzYXJ5X2Rlc2MnXSA9ICdWecW+YWRvdsOhbm8gcHJvIHrDoWtsYWRuw60gZnVua2Npb25hbGl0dSB3ZWJ1JzsKJGxhbmdbJ2Nvb2tpZV9wcmVmZXJlbmNlc19kZXNjJ10gPSAnWmFwYW1hdHVqw60gc2kgdmHFoWUgbmFzdGF2ZW7DrSBhIHZvbGJ5JzsKJGxhbmdbJ2Nvb2tpZV9zdGF0aXN0aWNzX2Rlc2MnXSA9ICdQb23DoWhhasOtIG7DoW0gcG9jaG9waXQsIGphayBwb3XFvsOtdsOhdGUgbmHFoWUgc3Ryw6Fua3knOwokbGFuZ1snY29va2llX21hcmtldGluZ19kZXNjJ10gPSAnUGVyc29uYWxpem92YW7DqSByZWtsYW15IGEgb2JzYWgnOwoKJGxhbmdbJ2Nvb2tpZV9kZW55J10gPSAnT2Rtw610bm91dCc7CiRsYW5nWydjb29raWVfY3VzdG9taXplJ10gPSAnUMWZaXpwxa9zb2JpdCc7CiRsYW5nWydjb29raWVfYWxsb3dfYWxsJ10gPSAnUG92b2xpdCBWxaFlJzsKJGxhbmdbJ2Nvb2tpZV9zYXZlX3NlbGVjdGlvbiddID0gJ1Vsb8W+aXQgVsO9YsSbcic7CiRsYW5nWydjb29raWVfYWNrbm93bGVkZ2UnXSA9ICdQb3R2cmRpdCc7CiRsYW5nWydjb29raWVfdGFiX2NvbnNlbnQnXSA9ICdTb3VobGFzJzsKJGxhbmdbJ2Nvb2tpZV90YWJfZGV0YWlscyddID0gJ1BvZHJvYm5vc3RpJzsKJGxhbmdbJ2Nvb2tpZV90YWJfYWJvdXQnXSA9ICdPIG7DoXMnOwokbGFuZ1snY29va2llX3dlYnNpdGVfdXNlcyddID0gJ1RhdG8gd2Vib3bDoSBzdHLDoW5rYSBwb3XFvsOtdsOhIGNvb2tpZXMnOwoKLy8gU2V0dGluZ3MgdGFiCiRsYW5nWydzZXR0aW5nc19hcHBlYXJhbmNlJ10gPSAnTmFzdGF2ZW7DrSBWemhsZWR1JzsKJGxhbmdbJ2xhYmVsX2NvbG9yX3NjaGVtZSddID0gJ0JhcmV2bsOpIFNjaMOpbWEnOwokbGFuZ1snY29sb3Jfc2NoZW1lX2xpZ2h0J10gPSAnU3bEm3Rsw6knOwokbGFuZ1snY29sb3Jfc2NoZW1lX2RhcmsnXSA9ICdUbWF2w6knOwokbGFuZ1snbGFiZWxfcG9zaXRpb24nXSA9ICdQb3ppY2UnOwokbGFuZ1sncG9zaXRpb25fYm90dG9tJ10gPSAnRG9sZSc7CiRsYW5nWydwb3NpdGlvbl9jZW50ZXInXSA9ICdTdMWZZWQnOwokbGFuZ1sncG9zaXRpb25fdG9wJ10gPSAnTmFob8WZZSc7CiRsYW5nWydsYWJlbF9zaXplJ10gPSAnVmVsaWtvc3QnOwokbGFuZ1snc2l6ZV9jb21wYWN0J10gPSAnS29tcGFrdG7DrSc7CiRsYW5nWydzaXplX25vcm1hbCddID0gJ05vcm3DoWxuw60nOwokbGFuZ1snc2l6ZV9sYXJnZSddID0gJ1ZlbGvDqSc7CiRsYW5nWydzaXplX3dpZGUnXSA9ICfFoGlyb2vDqSc7CiRsYW5nWydtc2dfc2V0dGluZ3Nfc2F2ZWQnXSA9ICdOYXN0YXZlbsOtIMO6c3DEm8WhbsSbIHVsb8W+ZW5vJzsKCi8vIEN1c3RvbSB0ZXh0IHNldHRpbmdzCiRsYW5nWydzZXR0aW5nc19jdXN0b21fdGV4dCddID0gJ1ZsYXN0bsOtIFRleHQnOwokbGFuZ1snbGFiZWxfY3VzdG9tX3RpdGxlJ10gPSAnVmxhc3Ruw60gVGl0dWxlayc7CiRsYW5nWydsYWJlbF9jdXN0b21fdGV4dCddID0gJ1ZsYXN0bsOtIFBvcGlzbsO9IFRleHQnOwokbGFuZ1snbGFiZWxfcHJpbWFyeV9jb2xvciddID0gJ0JhcnZhIEhsYXZuw61obyBUbGHEjcOtdGthJzsKJGxhbmdbJ2hlbHBfcHJpbWFyeV9jb2xvciddID0gJ1Z5YmVydGUgYmFydnUsIGt0ZXLDoSBvZHBvdsOtZMOhIHTDqW1hdHUgdmHFoWljaCBzdHLDoW5layc7CiRsYW5nWydlcnJvcl9pbnZhbGlkX2dvb2dsZV90YWdfaWQnXSA9ICdOZXBsYXRuw70gZm9ybcOhdCBHb29nbGUgVGFnIElELiBQb3XFvmlqdGUgZm9ybcOhdCBHQTQgKEctWFhYWFhYWFhYWCkgbmVibyBHVE0gKEdUTS1YWFhYWFhYKSc7CiRsYW5nWydsYWJlbF9pbmplY3RfanF1ZXJ5J10gPSAnVmxvxb5pdCBqUXVlcnkga25paG92bnUnOwokbGFuZ1snaGVscF9pbmplY3RfanF1ZXJ5J10gPSAnWmFwbsSbdGUsIHBva3VkIHZhxaFlIHTDqW1hIG5lb2JzYWh1amUgalF1ZXJ5ICh2ecW+YWRvdsOhbm8gcHJvIGZ1bmvEjW5vc3Qgc291aGxhc27DqWhvIGJhbm5lcnUpJzsKCiRsYW5nWydjb29raWVfYWJvdXRfdGV4dCddID0gJ0Nvb2tpZXMganNvdSBkaWdpdMOhbG7DrSBzb3Vib3J5LCBrdGVyw6kgd2Vib3bDqSBzdHLDoW5reSB1bcOtc8WldWrDrSBkbyB2YcWhZWhvIHphxZnDrXplbsOtLCBhYnkgc2kgemFwYW1hdG92YWx5IHZhxaFlIHByZWZlcmVuY2UgYSBha2NlLCB0YWvFvmUgbmVtdXPDrXRlIHpub3Z1IHphZMOhdmF0IGluZm9ybWFjZSBwxZlpIGJ1ZG91Y8OtY2ggbsOhdsWhdMSbdsOhY2guPGJyPjxicj5Qb3XFvsOtdsOhbWUgY29va2llcyBrZSB6bGVwxaFlbsOtIHZhxaFlaG8gesOhxb5pdGt1LCBwb3NreXRvdsOhbsOtIHBlcnNvbmFsaXpvdmFuw6lobyBvYnNhaHUgYSBhbmFsw716ZSB3ZWJvdsOpaG8gcHJvdm96dS4gWsOha2xhZG7DrSBjb29raWVzIGpzb3UgbnV0bsOpIHBybyBmdW5rxI1ub3N0LCB6YXTDrW1jbyBqaW7DqSBuw6FtIHBvbcOhaGFqw60gdnlsZXDFoW92YXQgc3Ryw6Fua3kuPGJyPjxicj5Db29raWVzIHTFmWV0w61jaCBzdHJhbiB6ZSBzb2Npw6FsbsOtY2ggbcOpZGnDrSwgcG9za3l0b3ZhdGVsxa8gYW5hbMO9eiBhIHJla2xhbW7DrWNoIHBhcnRuZXLFryBtb2hvdSBiw710IHRha8OpIHBvdcW+aXR5IGsgcG9za3l0b3bDoW7DrSBjw61sZW7DqWhvIG9ic2FodSBuYSBqaW7DvWNoIHdlYm92w71jaCBzdHLDoW5rw6FjaC48YnI+PGJyPkNvb2tpZXMgbcWvxb5ldGUgcMWZaWptb3V0IG5lYm8gb2Rtw610bm91dCBwcm9zdMWZZWRuaWN0dsOtbSBuYXN0YXZlbsOtIHByb2hsw63FvmXEjWUgbmVibyB0b2hvdG8gYmFubmVydS4gU291aGxhcyBsemUga2R5a29saSBvZHZvbGF0IMO6cHJhdm91IHZhxaFpY2ggcHJlZmVyZW5jw60gemRlLjxicj48YnI+UHJvIHbDrWNlIGluZm9ybWFjw60gbyB6cHJhY292w6Fuw60gZGF0IGEgcHLDoXZlY2ggbmEgc291a3JvbcOtIHNpIHByb3PDrW0gcMWZZcSNdMSbdGUgbmHFoWUgWsOhc2FkeSBvY2hyYW55IG9zb2Juw61jaCDDumRhasWvLic7Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/da_DK.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnTW9kdWwgaW5zdGFsbGVyZXQnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01vZHVsIGZqZXJuZXQnOwokbGFuZ1snZGVzY3JpcHRpb24nXSA9ICdHb29nbGUgQ29uc2VudCBQbGF0Zm9ybSB0aWwgR0RQUi1vdmVyaG9sZGVsc2UgbWVkIEdBNC9HVE0taW50ZWdyYXRpb24uJzsKJGxhbmdbJ2FkbWluX3RpdGxlJ10gPSAnR29vZ2xlIENvbnNlbnQgUGxhdGZvcm0gSW5kc3RpbGxpbmdlcic7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdBZGdhbmcgbsOmZ3RldC4gVGplayBkaW5lIHRpbGxhZGVsc2VyLic7CgokbGFuZ1snbGFiZWxfdGVtcGxhdGVfanMnXSA9ICdKYXZhU2NyaXB0IEJsb2snOwokbGFuZ1snbGFiZWxfdGVtcGxhdGVfaHRtbCddID0gJ1NhbXR5a2tlIEJhbm5lciBTa2FiZWxvbic7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9jc3MnXSA9ICdTYW10eWtrZSBDU1MnOwokbGFuZ1snbGFiZWxfdGVtcGxhdGUnXSA9ICdTa2FiZWxvbic7CiRsYW5nWydsYWJlbF9qc19wb3NpdGlvbiddID0gJ0phdmFTY3JpcHQgSW5kc8OmdHRlbHNlc3Bvc2l0aW9uJzsKCiRsYW5nWydqc19oZWFkJ10gPSAnSW5kc8OmdCBpICZsdDtoZWFkJmd0Oyc7CiRsYW5nWydqc19ib2R5J10gPSAnSW5kc8OmdCBpIHNsdXRuaW5nZW4gYWYgJmx0O2JvZHkmZ3Q7JzsKCiRsYW5nWydzdWJtaXQnXSA9ICdHZW0nOwokbGFuZ1snY2FuY2VsJ10gPSAnQW5udWxsZXInOwokbGFuZ1snc2V0dGluZ3Nfc2F2ZWQnXSA9ICdJbmRzdGlsbGluZ2VyIGdlbXQnOwoKJGxhbmdbJ2NvbnNlbnRfYW5hbHl0aWNzX3N0b3JhZ2UnXSA9ICdBbmFseXRpY3MgTGFncmluZyc7CiRsYW5nWydjb25zZW50X2FkX3N0b3JhZ2UnXSA9ICdBbm5vbmNlIExhZ3JpbmcnOwokbGFuZ1snY29uc2VudF9hZF9wZXJzb25hbGl6YXRpb24nXSA9ICdBbm5vbmNlIFBlcnNvbmFsaXNlcmluZyc7CiRsYW5nWydjb25zZW50X2FkX3VzZXJfZGF0YSddID0gJ0Fubm9uY2UgQnJ1Z2VyZGF0YSc7CiRsYW5nWydjb25zZW50X3BlcnNvbmFsaXphdGlvbiddID0gJ1BlcnNvbmFsaXNlcmluZyc7CgokbGFuZ1snaW5qZWN0aW9uX2xvY2F0aW9uJ10gPSAnSmF2YVNjcmlwdCBJbmpla3Rpb25zcGxhY2VyaW5nJzsKJGxhbmdbJ2xhYmVsX2VuYWJsZWQnXSA9ICdBa3RpdmVyIEdvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ2Fza191bmluc3RhbGwnXSA9ICdFciBkdSBzaWtrZXIgcMOlLCBhdCBkdSB2aWwgYWZpbnN0YWxsZXJlIEdvb2dsZUNvbnNlbnRQbGF0Zm9ybSBtb2R1bGV0Pyc7CiRsYW5nWydsYWJlbF9nb29nbGVfdGFnX2lkJ10gPSAnR29vZ2xlIFRhZyBJRCAoR0E0OiBHLVhYWFhYWFggZWxsZXIgR1RNOiBHVE0tWFhYWFhYWCknOwokbGFuZ1snaGVscF9nb29nbGVfdGFnX2lkJ10gID0gJ0F1dG9tYXRpc2sgZGV0ZWt0ZXJldC4gR0E0IGluZGzDpnNlciBndGFnLmpzOyBHVE0gaW5kbMOmc2VyIGNvbnRhaW5lcmVuLic7CiRsYW5nWydsYWJlbF9yZWd1bGF0aW9uJ10gPSAnUHJpdmF0bGl2c3JlZ3VsZXJpbmcgT3ZlcmhvbGRlbHNlJzsKCi8vIENvb2tpZSBjb25zZW50IHRyYW5zbGF0aW9ucwokbGFuZ1snY29va2llX3RpdGxlJ10gPSAnQ29va2llIFByw6ZmZXJlbmNlcic7CiRsYW5nWydjb29raWVfY29uc2VudF90ZXh0J10gPSAnVmkgYnJ1Z2VyIGNvb2tpZXMgdGlsIGF0IHBlcnNvbmFsaXNlcmUgaW5kaG9sZCBvZyBhbm5vbmNlciwgbGV2ZXJlIHNvY2lhbGUgbWVkaWVmdW5rdGlvbmVyIG9nIGFuYWx5c2VyZSB2b3JlcyB0cmFmaWsuIFZpIGRlbGVyIG9nc8OlIG9wbHlzbmluZ2VyIG9tIGRpbiBicnVnIGFmIHZvcmVzIHdlYnN0ZWQgbWVkIHZvcmVzIHNvY2lhbGUgbWVkaWVyLCByZWtsYW1lLSBvZyBhbmFseXNlcGFydG5lcmUuJzsKJGxhbmdbJ2Nvb2tpZV9uZWNlc3NhcnknXSA9ICdOw7hkdmVuZGlnZSc7CiRsYW5nWydjb29raWVfcHJlZmVyZW5jZXMnXSA9ICdQcsOmZmVyZW5jZXInOwokbGFuZ1snY29va2llX3N0YXRpc3RpY3MnXSA9ICdTdGF0aXN0aWtrZXInOwokbGFuZ1snY29va2llX21hcmtldGluZyddID0gJ01hcmtldGluZyc7CiRsYW5nWydjb29raWVfbmVjZXNzYXJ5X2Rlc2MnXSA9ICdQw6VrcsOmdmV0IGZvciBncnVuZGzDpmdnZW5kZSB3ZWJzdGVkc2Z1bmt0aW9uYWxpdGV0JzsKJGxhbmdbJ2Nvb2tpZV9wcmVmZXJlbmNlc19kZXNjJ10gPSAnSHVza2VyIGRpbmUgaW5kc3RpbGxpbmdlciBvZyB2YWxnJzsKJGxhbmdbJ2Nvb2tpZV9zdGF0aXN0aWNzX2Rlc2MnXSA9ICdIasOmbHBlciBvcyBtZWQgYXQgZm9yc3TDpSwgaHZvcmRhbiBkdSBicnVnZXIgdm9yZXMgd2Vic3RlZCc7CiRsYW5nWydjb29raWVfbWFya2V0aW5nX2Rlc2MnXSA9ICdQZXJzb25hbGlzZXJlZGUgYW5ub25jZXIgb2cgaW5kaG9sZCc7CgokbGFuZ1snY29va2llX2RlbnknXSA9ICdBZnZpcyc7CiRsYW5nWydjb29raWVfY3VzdG9taXplJ10gPSAnVGlscGFzJzsKJGxhbmdbJ2Nvb2tpZV9hbGxvd19hbGwnXSA9ICdUaWxsYWQgQWxsZSc7CiRsYW5nWydjb29raWVfc2F2ZV9zZWxlY3Rpb24nXSA9ICdHZW0gVmFsZyc7CiRsYW5nWydjb29raWVfYWNrbm93bGVkZ2UnXSA9ICdBbmVya2VuZGUnOwokbGFuZ1snY29va2llX3RhYl9jb25zZW50J10gPSAnU2FtdHlra2UnOwokbGFuZ1snY29va2llX3RhYl9kZXRhaWxzJ10gPSAnRGV0YWxqZXInOwokbGFuZ1snY29va2llX3RhYl9hYm91dCddID0gJ09tJzsKJGxhbmdbJ2Nvb2tpZV93ZWJzaXRlX3VzZXMnXSA9ICdEZXR0ZSB3ZWJzdGVkIGJydWdlciBjb29raWVzJzsKCi8vIFNldHRpbmdzIHRhYgokbGFuZ1snc2V0dGluZ3NfYXBwZWFyYW5jZSddID0gJ1Vkc2VlbmRlIEluZHN0aWxsaW5nZXInOwokbGFuZ1snbGFiZWxfY29sb3Jfc2NoZW1lJ10gPSAnRmFydmVza2VtYSc7CiRsYW5nWydjb2xvcl9zY2hlbWVfbGlnaHQnXSA9ICdMeXMnOwokbGFuZ1snY29sb3Jfc2NoZW1lX2RhcmsnXSA9ICdNw7hyayc7CiRsYW5nWydsYWJlbF9wb3NpdGlvbiddID0gJ1Bvc2l0aW9uJzsKJGxhbmdbJ3Bvc2l0aW9uX2JvdHRvbSddID0gJ0J1bmQnOwokbGFuZ1sncG9zaXRpb25fY2VudGVyJ10gPSAnTWlkdCc7CiRsYW5nWydwb3NpdGlvbl90b3AnXSA9ICdUb3AnOwokbGFuZ1snbGFiZWxfc2l6ZSddID0gJ1N0w7hycmVsc2UnOwokbGFuZ1snc2l6ZV9jb21wYWN0J10gPSAnS29tcGFrdCc7CiRsYW5nWydzaXplX25vcm1hbCddID0gJ05vcm1hbCc7CiRsYW5nWydzaXplX2xhcmdlJ10gPSAnU3Rvcic7CiRsYW5nWydzaXplX3dpZGUnXSA9ICdCcmVkJzsKJGxhbmdbJ21zZ19zZXR0aW5nc19zYXZlZCddID0gJ0luZHN0aWxsaW5nZXIgZ2VtdCBzdWNjZXNmdWxkdCc7CgovLyBDdXN0b20gdGV4dCBzZXR0aW5ncwokbGFuZ1snc2V0dGluZ3NfY3VzdG9tX3RleHQnXSA9ICdCcnVnZXJkZWZpbmVyZXQgVGVrc3QnOwokbGFuZ1snbGFiZWxfY3VzdG9tX3RpdGxlJ10gPSAnQnJ1Z2VyZGVmaW5lcmV0IFRpdGVsJzsKJGxhbmdbJ2xhYmVsX2N1c3RvbV90ZXh0J10gPSAnQnJ1Z2VyZGVmaW5lcmV0IEJlc2tyaXZlbHNlc3Rla3N0JzsKJGxhbmdbJ2xhYmVsX3ByaW1hcnlfY29sb3InXSA9ICdQcmltw6ZyIEtuYXAgRmFydmUnOwokbGFuZ1snaGVscF9wcmltYXJ5X2NvbG9yJ10gPSAnVsOmbGcgZW4gZmFydmUsIGRlciBtYXRjaGVyIGRpdCB3ZWJzdGVkcyB0ZW1hJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfZ29vZ2xlX3RhZ19pZCddID0gJ1VneWxkaWd0IEdvb2dsZSBUYWcgSUQgZm9ybWF0LiBCcnVnIEdBNCBmb3JtYXQgKEctWFhYWFhYWFhYWCkgZWxsZXIgR1RNIGZvcm1hdCAoR1RNLVhYWFhYWFgpJzsKJGxhbmdbJ2xhYmVsX2luamVjdF9qcXVlcnknXSA9ICdJbmppY2VyIGpRdWVyeSBiaWJsaW90ZWsnOwokbGFuZ1snaGVscF9pbmplY3RfanF1ZXJ5J10gPSAnQWt0aXZlciBodmlzIGRpdCB0ZW1hIGlra2UgaW5rbHVkZXJlciBqUXVlcnkgKGtyw6Z2ZXQgZm9yIHNhbXR5a2tlIGJhbm5lciBmdW5rdGlvbmFsaXRldCknOwoKJGxhbmdbJ2Nvb2tpZV9hYm91dF90ZXh0J10gPSAnQ29va2llcyBlciBkaWdpdGFsZSBmaWxlciwgc29tIHdlYnN0ZWRlciBwbGFjZXJlciBww6UgZGluIGVuaGVkIGZvciBhdCBodXNrZSBkaW5lIHByw6ZmZXJlbmNlciBvZyBoYW5kbGluZ2VyLCBzw6UgZHUgaWtrZSBiZWjDuHZlciBhdCBpbmR0YXN0ZSBvcGx5c25pbmdlciBpZ2VuIHZlZCBmcmVtdGlkaWdlIGJlc8O4Zy48YnI+PGJyPlZpIGJydWdlciBjb29raWVzIHRpbCBhdCBmb3JiZWRyZSBkaW4gb3BsZXZlbHNlLCBsZXZlcmUgcGVyc29uYWxpc2VyZXQgaW5kaG9sZCBvZyBhbmFseXNlcmUgd2Vic3RlZHN0cmFmaWsuIEVzc2VudGllbGxlIGNvb2tpZXMgZXIgbsO4ZHZlbmRpZ2UgZm9yIGZ1bmt0aW9uYWxpdGV0LCBtZW5zIGFuZHJlIGhqw6ZscGVyIG9zIG1lZCBhdCBmb3JiZWRyZSB3ZWJzdGVkZXQuPGJyPjxicj5UcmVkamVwYXJ0c2Nvb2tpZXMgZnJhIHNvY2lhbGUgbWVkaWVyLCBhbmFseXNldWRieWRlcmUgb2cgcmVrbGFtZXBhcnRuZXJlIGthbiBvZ3PDpSBicnVnZXMgdGlsIGF0IGxldmVyZSBtw6VscmV0dGV0IGluZGhvbGQgcMOlIGFuZHJlIHdlYnN0ZWRlci48YnI+PGJyPkR1IGthbiBhY2NlcHRlcmUgZWxsZXIgYWZ2aXNlIGNvb2tpZXMgZ2VubmVtIGRpbmUgYnJvd3NlcmluZHN0aWxsaW5nZXIgZWxsZXIgZGV0dGUgYmFubmVyLiBTYW10eWtrZSBrYW4gdHLDpmtrZXMgdGlsYmFnZSB0aWwgZW5odmVyIHRpZCB2ZWQgYXQganVzdGVyZSBkaW5lIHByw6ZmZXJlbmNlciBoZXIuPGJyPjxicj5Gb3IgbWVyZSBpbmZvcm1hdGlvbiBvbSBkYXRhYmVoYW5kbGluZyBvZyBwcml2YXRsaXZzcmV0dGlnaGVkZXIsIHNlIHZlbmxpZ3N0IHZvcmVzIFByaXZhdGxpdnNwb2xpdGlrLic7Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/de_DE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnTW9kdWwgaW5zdGFsbGllcnQnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01vZHVsIGVudGZlcm50JzsKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnR29vZ2xlIENvbnNlbnQgUGxhdGZvcm0gZsO8ciBEU0dWTy1Lb25mb3JtaXTDpHQgbWl0IEdBNC9HVE0tSW50ZWdyYXRpb24uJzsKJGxhbmdbJ2FkbWluX3RpdGxlJ10gPSAnR29vZ2xlIENvbnNlbnQgUGxhdGZvcm0gRWluc3RlbGx1bmdlbic7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdadWdyaWZmIHZlcndlaWdlcnQuIMOcYmVycHLDvGZlbiBTaWUgSWhyZSBCZXJlY2h0aWd1bmdlbi4nOwoKJGxhbmdbJ2xhYmVsX3RlbXBsYXRlX2pzJ10gPSAnSmF2YVNjcmlwdCBCbG9jayc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9odG1sJ10gPSAnWnVzdGltbXVuZ3MtQmFubmVyIFZvcmxhZ2UnOwokbGFuZ1snbGFiZWxfdGVtcGxhdGVfY3NzJ10gPSAnWnVzdGltbXVuZ3MgQ1NTJzsKJGxhbmdbJ2xhYmVsX3RlbXBsYXRlJ10gPSAnVm9ybGFnZSc7CiRsYW5nWydsYWJlbF9qc19wb3NpdGlvbiddID0gJ0phdmFTY3JpcHQgRWluZsO8Z2Vwb3NpdGlvbic7CgokbGFuZ1snanNfaGVhZCddID0gJ0luICZsdDtoZWFkJmd0OyBlaW5mw7xnZW4nOwokbGFuZ1snanNfYm9keSddID0gJ0FtIEVuZGUgdm9uICZsdDtib2R5Jmd0OyBlaW5mw7xnZW4nOwoKJGxhbmdbJ3N1Ym1pdCddID0gJ1NwZWljaGVybic7CiRsYW5nWydjYW5jZWwnXSA9ICdBYmJyZWNoZW4nOwokbGFuZ1snc2V0dGluZ3Nfc2F2ZWQnXSA9ICdFaW5zdGVsbHVuZ2VuIGdlc3BlaWNoZXJ0JzsKCiRsYW5nWydjb25zZW50X2FuYWx5dGljc19zdG9yYWdlJ10gPSAnQW5hbHl0aWNzIFNwZWljaGVydW5nJzsKJGxhbmdbJ2NvbnNlbnRfYWRfc3RvcmFnZSddID0gJ0FuemVpZ2VuIFNwZWljaGVydW5nJzsKJGxhbmdbJ2NvbnNlbnRfYWRfcGVyc29uYWxpemF0aW9uJ10gPSAnQW56ZWlnZW4gUGVyc29uYWxpc2llcnVuZyc7CiRsYW5nWydjb25zZW50X2FkX3VzZXJfZGF0YSddID0gJ0FuemVpZ2VuIEJlbnV0emVyZGF0ZW4nOwokbGFuZ1snY29uc2VudF9wZXJzb25hbGl6YXRpb24nXSA9ICdQZXJzb25hbGlzaWVydW5nJzsKCiRsYW5nWydpbmplY3Rpb25fbG9jYXRpb24nXSA9ICdKYXZhU2NyaXB0IEluamVrdGlvbnNvcnQnOwokbGFuZ1snbGFiZWxfZW5hYmxlZCddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtIGFrdGl2aWVyZW4nOwokbGFuZ1snYXNrX3VuaW5zdGFsbCddID0gJ1NpbmQgU2llIHNpY2hlciwgZGFzcyBTaWUgZGFzIEdvb2dsZUNvbnNlbnRQbGF0Zm9ybSBNb2R1bCBkZWluc3RhbGxpZXJlbiBtw7ZjaHRlbj8nOwokbGFuZ1snbGFiZWxfZ29vZ2xlX3RhZ19pZCddID0gJ0dvb2dsZSBUYWcgSUQgKEdBNDogRy1YWFhYWFhYIG9kZXIgR1RNOiBHVE0tWFhYWFhYWCknOwokbGFuZ1snaGVscF9nb29nbGVfdGFnX2lkJ10gID0gJ0F1dG9tYXRpc2NoIGVya2FubnQuIEdBNCBsw6RkdCBndGFnLmpzOyBHVE0gbMOkZHQgZGVuIENvbnRhaW5lci4nOwokbGFuZ1snbGFiZWxfcmVndWxhdGlvbiddID0gJ0RhdGVuc2NodXR6YmVzdGltbXVuZ2VuIEtvbmZvcm1pdMOkdCc7CgovLyBDb29raWUgY29uc2VudCB0cmFuc2xhdGlvbnMKJGxhbmdbJ2Nvb2tpZV90aXRsZSddID0gJ0Nvb2tpZS1FaW5zdGVsbHVuZ2VuJzsKJGxhbmdbJ2Nvb2tpZV9jb25zZW50X3RleHQnXSA9ICdXaXIgdmVyd2VuZGVuIENvb2tpZXMsIHVtIEluaGFsdGUgdW5kIEFuemVpZ2VuIHp1IHBlcnNvbmFsaXNpZXJlbiwgU29jaWFsLU1lZGlhLUZ1bmt0aW9uZW4gYmVyZWl0enVzdGVsbGVuIHVuZCB1bnNlcmVuIFRyYWZmaWMgenUgYW5hbHlzaWVyZW4uIFdpciB0ZWlsZW4gYXVjaCBJbmZvcm1hdGlvbmVuIMO8YmVyIElocmUgTnV0enVuZyB1bnNlcmVyIFdlYnNpdGUgbWl0IHVuc2VyZW4gU29jaWFsLU1lZGlhLSwgV2VyYmUtIHVuZCBBbmFseXNlcGFydG5lcm4uJzsKJGxhbmdbJ2Nvb2tpZV9uZWNlc3NhcnknXSA9ICdOb3R3ZW5kaWcnOwokbGFuZ1snY29va2llX3ByZWZlcmVuY2VzJ10gPSAnUHLDpGZlcmVuemVuJzsKJGxhbmdbJ2Nvb2tpZV9zdGF0aXN0aWNzJ10gPSAnU3RhdGlzdGlrZW4nOwokbGFuZ1snY29va2llX21hcmtldGluZyddID0gJ01hcmtldGluZyc7CiRsYW5nWydjb29raWVfbmVjZXNzYXJ5X2Rlc2MnXSA9ICdFcmZvcmRlcmxpY2ggZsO8ciBncnVuZGxlZ2VuZGUgV2Vic2l0ZS1GdW5rdGlvbmVuJzsKJGxhbmdbJ2Nvb2tpZV9wcmVmZXJlbmNlc19kZXNjJ10gPSAnTWVya2VuIHNpY2ggSWhyZSBFaW5zdGVsbHVuZ2VuIHVuZCBBdXN3YWhsZW4nOwokbGFuZ1snY29va2llX3N0YXRpc3RpY3NfZGVzYyddID0gJ0hlbGZlbiB1bnMgenUgdmVyc3RlaGVuLCB3aWUgU2llIHVuc2VyZSBXZWJzaXRlIG51dHplbic7CiRsYW5nWydjb29raWVfbWFya2V0aW5nX2Rlc2MnXSA9ICdQZXJzb25hbGlzaWVydGUgQW56ZWlnZW4gdW5kIEluaGFsdGUnOwoKJGxhbmdbJ2Nvb2tpZV9kZW55J10gPSAnQWJsZWhuZW4nOwokbGFuZ1snY29va2llX2N1c3RvbWl6ZSddID0gJ0FucGFzc2VuJzsKJGxhbmdbJ2Nvb2tpZV9hbGxvd19hbGwnXSA9ICdBbGxlIEFremVwdGllcmVuJzsKJGxhbmdbJ2Nvb2tpZV9zYXZlX3NlbGVjdGlvbiddID0gJ0F1c3dhaGwgU3BlaWNoZXJuJzsKJGxhbmdbJ2Nvb2tpZV9hY2tub3dsZWRnZSddID0gJ0Jlc3TDpHRpZ2VuJzsKJGxhbmdbJ2Nvb2tpZV90YWJfY29uc2VudCddID0gJ1p1c3RpbW11bmcnOwokbGFuZ1snY29va2llX3RhYl9kZXRhaWxzJ10gPSAnRGV0YWlscyc7CiRsYW5nWydjb29raWVfdGFiX2Fib3V0J10gPSAnw5xiZXInOwokbGFuZ1snY29va2llX3dlYnNpdGVfdXNlcyddID0gJ0RpZXNlIFdlYnNpdGUgdmVyd2VuZGV0IENvb2tpZXMnOwoKLy8gU2V0dGluZ3MgdGFiCiRsYW5nWydzZXR0aW5nc19hcHBlYXJhbmNlJ10gPSAnRXJzY2hlaW51bmdzYmlsZC1FaW5zdGVsbHVuZ2VuJzsKJGxhbmdbJ2xhYmVsX2NvbG9yX3NjaGVtZSddID0gJ0ZhcmJzY2hlbWEnOwokbGFuZ1snY29sb3Jfc2NoZW1lX2xpZ2h0J10gPSAnSGVsbCc7CiRsYW5nWydjb2xvcl9zY2hlbWVfZGFyayddID0gJ0R1bmtlbCc7CiRsYW5nWydsYWJlbF9wb3NpdGlvbiddID0gJ1Bvc2l0aW9uJzsKJGxhbmdbJ3Bvc2l0aW9uX2JvdHRvbSddID0gJ1VudGVuJzsKJGxhbmdbJ3Bvc2l0aW9uX2NlbnRlciddID0gJ01pdHRlJzsKJGxhbmdbJ3Bvc2l0aW9uX3RvcCddID0gJ09iZW4nOwokbGFuZ1snbGFiZWxfc2l6ZSddID0gJ0dyw7bDn2UnOwokbGFuZ1snc2l6ZV9jb21wYWN0J10gPSAnS29tcGFrdCc7CiRsYW5nWydzaXplX25vcm1hbCddID0gJ05vcm1hbCc7CiRsYW5nWydzaXplX2xhcmdlJ10gPSAnR3Jvw58nOwokbGFuZ1snc2l6ZV93aWRlJ10gPSAnQnJlaXQnOwokbGFuZ1snbXNnX3NldHRpbmdzX3NhdmVkJ10gPSAnRWluc3RlbGx1bmdlbiBlcmZvbGdyZWljaCBnZXNwZWljaGVydCc7CgovLyBDdXN0b20gdGV4dCBzZXR0aW5ncwokbGFuZ1snc2V0dGluZ3NfY3VzdG9tX3RleHQnXSA9ICdCZW51dHplcmRlZmluaWVydGVyIFRleHQnOwokbGFuZ1snbGFiZWxfY3VzdG9tX3RpdGxlJ10gPSAnQmVudXR6ZXJkZWZpbmllcnRlciBUaXRlbCc7CiRsYW5nWydsYWJlbF9jdXN0b21fdGV4dCddID0gJ0JlbnV0emVyZGVmaW5pZXJ0ZXIgQmVzY2hyZWlidW5nc3RleHQnOwokbGFuZ1snbGFiZWxfcHJpbWFyeV9jb2xvciddID0gJ1ByaW3DpHJlIFNjaGFsdGZsw6RjaGVuZmFyYmUnOwokbGFuZ1snaGVscF9wcmltYXJ5X2NvbG9yJ10gPSAnV8OkaGxlbiBTaWUgZWluZSBGYXJiZSwgZGllIHp1IElocmVtIFdlYnNpdGUtVGhlbWUgcGFzc3QnOwokbGFuZ1snZXJyb3JfaW52YWxpZF9nb29nbGVfdGFnX2lkJ10gPSAnVW5nw7xsdGlnZXMgR29vZ2xlIFRhZyBJRCBGb3JtYXQuIFZlcndlbmRlbiBTaWUgR0E0IEZvcm1hdCAoRy1YWFhYWFhYWFhYKSBvZGVyIEdUTSBGb3JtYXQgKEdUTS1YWFhYWFhYKSc7CiRsYW5nWydsYWJlbF9pbmplY3RfanF1ZXJ5J10gPSAnalF1ZXJ5IEJpYmxpb3RoZWsgZWluYmluZGVuJzsKJGxhbmdbJ2hlbHBfaW5qZWN0X2pxdWVyeSddID0gJ0FrdGl2aWVyZW4gU2llIGRpZXNlIE9wdGlvbiwgd2VubiBJaHIgVGhlbWUga2VpbiBqUXVlcnkgZW50aMOkbHQgKGVyZm9yZGVybGljaCBmw7xyIGRpZSBGdW5rdGlvbmFsaXTDpHQgZGVzIFp1c3RpbW11bmdzYmFubmVycyknOwoKJGxhbmdbJ2Nvb2tpZV9hYm91dF90ZXh0J10gPSAnQ29va2llcyBzaW5kIGRpZ2l0YWxlIERhdGVpZW4sIGRpZSBXZWJzaXRlcyBhdWYgSWhyZW0gR2Vyw6R0IHBsYXR6aWVyZW4sIHVtIHNpY2ggYW4gSWhyZSBQcsOkZmVyZW56ZW4gdW5kIEFrdGlvbmVuIHp1IGVyaW5uZXJuLCBkYW1pdCBTaWUgYmVpIHp1a8O8bmZ0aWdlbiBCZXN1Y2hlbiBrZWluZSBJbmZvcm1hdGlvbmVuIGVybmV1dCBlaW5nZWJlbiBtw7xzc2VuLjxicj48YnI+V2lyIHZlcndlbmRlbiBDb29raWVzLCB1bSBJaHJlIEVyZmFocnVuZyB6dSB2ZXJiZXNzZXJuLCBwZXJzb25hbGlzaWVydGVuIEluaGFsdCB6dSBsaWVmZXJuIHVuZCBXZWJzaXRlLVRyYWZmaWMgenUgYW5hbHlzaWVyZW4uIFdlc2VudGxpY2hlIENvb2tpZXMgc2luZCBmw7xyIGRpZSBGdW5rdGlvbmFsaXTDpHQgZXJmb3JkZXJsaWNoLCB3w6RocmVuZCBhbmRlcmUgdW5zIGhlbGZlbiwgZGllIFdlYnNpdGUgenUgdmVyYmVzc2Vybi48YnI+PGJyPkRyaXR0YW5iaWV0ZXItQ29va2llcyB2b24gc296aWFsZW4gTWVkaWVuLCBBbmFseXNlLUFuYmlldGVybiB1bmQgV2VyYmVwYXJ0bmVybiBrw7ZubmVuIGF1Y2ggdmVyd2VuZGV0IHdlcmRlbiwgdW0gZ2V6aWVsdGVuIEluaGFsdCBhdWYgYW5kZXJlbiBXZWJzaXRlcyBiZXJlaXR6dXN0ZWxsZW4uPGJyPjxicj5TaWUga8O2bm5lbiBDb29raWVzIMO8YmVyIElocmUgQnJvd3Nlci1FaW5zdGVsbHVuZ2VuIG9kZXIgZGllc2VzIEJhbm5lciBha3plcHRpZXJlbiBvZGVyIGFibGVobmVuLiBEaWUgWnVzdGltbXVuZyBrYW5uIGplZGVyemVpdCBkdXJjaCBBbnBhc3N1bmcgSWhyZXIgUHLDpGZlcmVuemVuIGhpZXIgenVyw7xja2dlem9nZW4gd2VyZGVuLjxicj48YnI+RsO8ciB3ZWl0ZXJlIEluZm9ybWF0aW9uZW4gw7xiZXIgRGF0ZW52ZXJhcmJlaXR1bmcgdW5kIERhdGVuc2NodXR6cmVjaHRlIGxlc2VuIFNpZSBiaXR0ZSB1bnNlcmUgRGF0ZW5zY2h1dHpyaWNodGxpbmllLic7Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/el_GR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnzpcgzrzOv869zqzOtM6xIM61zrPOus6xz4TOsc+Dz4TOrM64zrfOus61JzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICfOlyDOvM6/zr3OrM60zrEgzrHPhs6xzrnPgc6tzrjOt866zrUnOwokbGFuZ1snZGVzY3JpcHRpb24nXSA9ICdHb29nbGUgQ29uc2VudCBQbGF0Zm9ybSDOs865zrEgz4PPhc68zrzPjM+Bz4bPic+DzrcgR0RQUiDOvM61IM61zr3Pg8+JzrzOrM+Ez4nPg863IEdBNC9HVE0uJzsKJGxhbmdbJ2FkbWluX3RpdGxlJ10gPSAnzqHPhc64zrzOr8+DzrXOuc+CIEdvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ86Gz4HOvc63z4POtyDPgM+Bz4zPg86yzrHPg863z4IuIM6VzrvOrc6zzr7PhM61IM+EzrEgzrTOuc66zrHOuc+OzrzOsc+Ezqwgz4POsc+CLic7CgokbGFuZ1snbGFiZWxfdGVtcGxhdGVfanMnXSA9ICfOnM+AzrvOv866IEphdmFTY3JpcHQnOwokbGFuZ1snbGFiZWxfdGVtcGxhdGVfaHRtbCddID0gJ86gz4HPjM+Ez4XPgM6/IEJhbm5lciDOo8+Fzr3Osc6vzr3Otc+DzrfPgic7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9jc3MnXSA9ICdDU1MgzqPPhc69zrHOr869zrXPg863z4InOwokbGFuZ1snbGFiZWxfdGVtcGxhdGUnXSA9ICfOoM+Bz4zPhM+Fz4DOvyc7CiRsYW5nWydsYWJlbF9qc19wb3NpdGlvbiddID0gJ86Yzq3Pg863IM6VzrnPg86xzrPPic6zzq7PgiBKYXZhU2NyaXB0JzsKCiRsYW5nWydqc19oZWFkJ10gPSAnzpXOuc+DzrHOs8+JzrPOriDPg8+Ezr8gJmx0O2hlYWQmZ3Q7JzsKJGxhbmdbJ2pzX2JvZHknXSA9ICfOlc65z4POsc6zz4nOs86uIM+Dz4TOvyDPhM6tzrvOv8+CIM+Ezr/PhSAmbHQ7Ym9keSZndDsnOwoKJGxhbmdbJ3N1Ym1pdCddID0gJ86Rz4DOv864zq7Ous61z4XPg863JzsKJGxhbmdbJ2NhbmNlbCddID0gJ86RzrrPjc+Bz4nPg863JzsKJGxhbmdbJ3NldHRpbmdzX3NhdmVkJ10gPSAnzp/OuSDPgc+FzrjOvM6vz4POtc65z4IgzrHPgM6/zrjOt866zrXPjc+EzrfOus6xzr0nOwoKJGxhbmdbJ2NvbnNlbnRfYW5hbHl0aWNzX3N0b3JhZ2UnXSA9ICfOkc+Azr/OuM6uzrrOtc+Fz4POtyBBbmFseXRpY3MnOwokbGFuZ1snY29uc2VudF9hZF9zdG9yYWdlJ10gPSAnzpHPgM6/zrjOrs66zrXPhc+DzrcgzpTOuc6xz4bOt868zq/Pg861z4nOvSc7CiRsYW5nWydjb25zZW50X2FkX3BlcnNvbmFsaXphdGlvbiddID0gJ86Vzr7Osc+Ezr/OvM6vzrrOtc+Fz4POtyDOlM65zrHPhs63zrzOr8+DzrXPic69JzsKJGxhbmdbJ2NvbnNlbnRfYWRfdXNlcl9kYXRhJ10gPSAnzpTOtc60zr/OvM6tzr3OsSDOp8+Bzq7Pg8+EzrcgzpTOuc6xz4bOt868zq/Pg861z4nOvSc7CiRsYW5nWydjb25zZW50X3BlcnNvbmFsaXphdGlvbiddID0gJ86Vzr7Osc+Ezr/OvM6vzrrOtc+Fz4POtyc7CgokbGFuZ1snaW5qZWN0aW9uX2xvY2F0aW9uJ10gPSAnzqTOv8+Azr/OuM61z4POr86xIM6IzrPPh8+Fz4POt8+CIEphdmFTY3JpcHQnOwokbGFuZ1snbGFiZWxfZW5hYmxlZCddID0gJ86Vzr3Otc+BzrPOv8+Azr/Or863z4POtyBHb29nbGUgQ29uc2VudCBQbGF0Zm9ybSc7CiRsYW5nWydhc2tfdW5pbnN0YWxsJ10gPSAnzpXOr8+Dz4TOtSDPg86vzrPOv8+Fz4HOv865IM+Mz4TOuSDOuM6tzrvOtc+EzrUgzr3OsSDOsc+AzrXOs866zrHPhM6xz4PPhM6uz4POtc+EzrUgz4TOtyDOvM6/zr3OrM60zrEgR29vZ2xlQ29uc2VudFBsYXRmb3JtOyc7CiRsYW5nWydsYWJlbF9nb29nbGVfdGFnX2lkJ10gPSAnR29vZ2xlIFRhZyBJRCAoR0E0OiBHLVhYWFhYWFggzq4gR1RNOiBHVE0tWFhYWFhYWCknOwokbGFuZ1snaGVscF9nb29nbGVfdGFnX2lkJ10gID0gJ86Rz4XPhM+MzrzOsc+EzrEgzrHOvc65z4fOvc61z4XOvM6tzr3Ovy4gzqTOvyBHQTQgz4bOv8+Bz4TPjs69zrXOuSDPhM6/IGd0YWcuanPCtyDPhM6/IEdUTSDPhs6/z4HPhM+Ozr3Otc65IM+Ezr8gY29udGFpbmVyLic7CiRsYW5nWydsYWJlbF9yZWd1bGF0aW9uJ10gPSAnzqPPhc68zrzPjM+Bz4bPic+DzrcgzprOsc69zr/Ovc65z4POvM6/z40gzpHPgM6/z4HPgc6uz4TOv8+FJzsKCi8vIENvb2tpZSBjb25zZW50IHRyYW5zbGF0aW9ucwokbGFuZ1snY29va2llX3RpdGxlJ10gPSAnzqDPgc6/z4TOuc68zq7Pg861zrnPgiBDb29raWVzJzsKJGxhbmdbJ2Nvb2tpZV9jb25zZW50X3RleHQnXSA9ICfOp8+BzrfPg865zrzOv8+Azr/Ouc6/z43OvM61IGNvb2tpZXMgzrPOuc6xIM69zrEgzrXOvs6xz4TOv868zrnOus61z43Pg86/z4XOvM61IM+AzrXPgc65zrXPh8+MzrzOtc69zr8gzrrOsc65IM60zrnOsc+GzrfOvM6vz4POtc65z4IsIM69zrEgz4DOsc+Bzq3Ph86/z4XOvM61IM67zrXOuc+Ezr/Phc+BzrPOr861z4IgzrrOv865zr3Pic69zrnOus+Ozr0gzrzOrc+Dz4nOvSDOus6xzrkgzr3OsSDOsc69zrHOu8+Nz4POv8+FzrzOtSDPhM63zr0gzrrOr869zrfPg86uIM68zrHPgi4gzpXPgM6vz4POt8+CIM68zr/Ouc+BzrHOts+MzrzOsc+Dz4TOtSDPgM67zrfPgc6/z4bOv8+Bzq/Otc+CIM+Dz4fOtc+EzrnOus6sIM68zrUgz4TOtyDPh8+Bzq7Pg863IM+Ezr/PhSDOuc+Dz4TPjM+Ezr/PgM6/z40gzrzOsc+CIM68zrUgz4TOv8+Fz4IgzrXPhM6xzq/Pgc6/z4XPgiDOvM6xz4IgzrrOv865zr3Pic69zrnOus+Ozr0gzrzOrc+Dz4nOvSwgzrTOuc6xz4bOrs68zrnPg863z4IgzrrOsc65IM6xzr3OrM67z4XPg863z4IuJzsKJGxhbmdbJ2Nvb2tpZV9uZWNlc3NhcnknXSA9ICfOkc+AzrHPgc6xzq/PhM63z4TOsSc7CiRsYW5nWydjb29raWVfcHJlZmVyZW5jZXMnXSA9ICfOoM+Bzr/PhM65zrzOrs+DzrXOuc+CJzsKJGxhbmdbJ2Nvb2tpZV9zdGF0aXN0aWNzJ10gPSAnzqPPhM6xz4TOuc+Dz4TOuc66zqwnOwokbGFuZ1snY29va2llX21hcmtldGluZyddID0gJ86czqzPgc66zrXPhM65zr3Os866JzsKJGxhbmdbJ2Nvb2tpZV9uZWNlc3NhcnlfZGVzYyddID0gJ86Rz4DOsc65z4TOv8+Nzr3PhM6xzrkgzrPOuc6xIM6yzrHPg865zrrOriDOu861zrnPhM6/z4XPgc6zzrnOus+Mz4TOt8+EzrEgzrnPg8+Ez4zPhM6/z4DOv8+FJzsKJGxhbmdbJ2Nvb2tpZV9wcmVmZXJlbmNlc19kZXNjJ10gPSAnzpjPhc68zr/Pjc69z4TOsc65IM+EzrnPgiDPgc+FzrjOvM6vz4POtc65z4IgzrrOsc65IM61z4DOuc67zr/Os86tz4Igz4POsc+CJzsKJGxhbmdbJ2Nvb2tpZV9zdGF0aXN0aWNzX2Rlc2MnXSA9ICfOnM6xz4IgzrLOv863zrjOv8+Nzr0gzr3OsSDOus6xz4TOsc69zr/Ors+Dzr/Phc68zrUgz4DPjs+CIM+Hz4HOt8+DzrnOvM6/z4DOv865zrXOr8+EzrUgz4TOv869IM65z4PPhM+Mz4TOv8+Az4wgzrzOsc+CJzsKJGxhbmdbJ2Nvb2tpZV9tYXJrZXRpbmdfZGVzYyddID0gJ86Vzr7Osc+Ezr/OvM65zrrOtc+FzrzOrc69zrXPgiDOtM65zrHPhs63zrzOr8+DzrXOuc+CIM66zrHOuSDPgM61z4HOuc61z4fPjM68zrXOvc6/JzsKCiRsYW5nWydjb29raWVfZGVueSddID0gJ86Gz4HOvc63z4POtyc7CiRsYW5nWydjb29raWVfY3VzdG9taXplJ10gPSAnzpXOvs6xz4TOv868zq/Ous61z4XPg863JzsKJGxhbmdbJ2Nvb2tpZV9hbGxvd19hbGwnXSA9ICfOkc+Azr/OtM6/z4fOriDOjM67z4nOvSc7CiRsYW5nWydjb29raWVfc2F2ZV9zZWxlY3Rpb24nXSA9ICfOkc+Azr/OuM6uzrrOtc+Fz4POtyDOlc+AzrnOu86/zrPOrs+CJzsKJGxhbmdbJ2Nvb2tpZV9hY2tub3dsZWRnZSddID0gJ86Rzr3Osc6zzr3Pic+Bzq/Ots+JJzsKJGxhbmdbJ2Nvb2tpZV90YWJfY29uc2VudCddID0gJ86jz4XOvc6xzq/Ovc61z4POtyc7CiRsYW5nWydjb29raWVfdGFiX2RldGFpbHMnXSA9ICfOm861z4DPhM6/zrzOrc+BzrXOuc61z4InOwokbGFuZ1snY29va2llX3RhYl9hYm91dCddID0gJ86jz4fOtc+EzrnOus6sJzsKJGxhbmdbJ2Nvb2tpZV93ZWJzaXRlX3VzZXMnXSA9ICfOkc+Fz4TPjM+CIM6/IM65z4PPhM+Mz4TOv8+Azr/PgiDPh8+BzrfPg865zrzOv8+Azr/Ouc61zq8gY29va2llcyc7CgovLyBTZXR0aW5ncyB0YWIKJGxhbmdbJ3NldHRpbmdzX2FwcGVhcmFuY2UnXSA9ICfOoc+FzrjOvM6vz4POtc65z4IgzpXOvM+GzqzOvc65z4POt8+CJzsKJGxhbmdbJ2xhYmVsX2NvbG9yX3NjaGVtZSddID0gJ86nz4HPic68zrHPhM65zrrPjCDOo8+Hzq7OvM6xJzsKJGxhbmdbJ2NvbG9yX3NjaGVtZV9saWdodCddID0gJ86Rzr3Ov865z4fPhM+MJzsKJGxhbmdbJ2NvbG9yX3NjaGVtZV9kYXJrJ10gPSAnzqPOus6/z43Pgc6/JzsKJGxhbmdbJ2xhYmVsX3Bvc2l0aW9uJ10gPSAnzpjOrc+DzrcnOwokbGFuZ1sncG9zaXRpb25fYm90dG9tJ10gPSAnzprOrM+Ez4knOwokbGFuZ1sncG9zaXRpb25fY2VudGVyJ10gPSAnzprOrc69z4TPgc6/JzsKJGxhbmdbJ3Bvc2l0aW9uX3RvcCddID0gJ86gzqzOvc+JJzsKJGxhbmdbJ2xhYmVsX3NpemUnXSA9ICfOnM6tzrPOtc64zr/Pgic7CiRsYW5nWydzaXplX2NvbXBhY3QnXSA9ICfOo8+FzrzPgM6xzrPOrc+CJzsKJGxhbmdbJ3NpemVfbm9ybWFsJ10gPSAnzprOsc69zr/Ovc65zrrPjCc7CiRsYW5nWydzaXplX2xhcmdlJ10gPSAnzpzOtc6zzqzOu86/JzsKJGxhbmdbJ3NpemVfd2lkZSddID0gJ86mzrHPgc60z40nOwokbGFuZ1snbXNnX3NldHRpbmdzX3NhdmVkJ10gPSAnzp/OuSDPgc+FzrjOvM6vz4POtc65z4IgzrHPgM6/zrjOt866zrXPjc+EzrfOus6xzr0gzrXPgM65z4TPhc+Hz47Pgic7CgovLyBDdXN0b20gdGV4dCBzZXR0aW5ncwokbGFuZ1snc2V0dGluZ3NfY3VzdG9tX3RleHQnXSA9ICfOoM+Bzr/Pg86xz4HOvM6/z4POvM6tzr3OvyDOms61zq/OvM61zr3Ovyc7CiRsYW5nWydsYWJlbF9jdXN0b21fdGl0bGUnXSA9ICfOoM+Bzr/Pg86xz4HOvM6/z4POvM6tzr3Ov8+CIM6kzq/PhM67zr/Pgic7CiRsYW5nWydsYWJlbF9jdXN0b21fdGV4dCddID0gJ86gz4HOv8+DzrHPgc68zr/Pg868zq3Ovc6/IM6azrXOr868zrXOvc6/IM6gzrXPgc65zrPPgc6xz4bOrs+CJzsKJGxhbmdbJ2xhYmVsX3ByaW1hcnlfY29sb3InXSA9ICfOp8+Bz47OvM6xIM6az43Pgc65zr/PhSDOms6/z4XOvM+AzrnOv8+NJzsKJGxhbmdbJ2hlbHBfcHJpbWFyeV9jb2xvciddID0gJ86Vz4DOuc67zq3Ovs+EzrUgzq3Ovc6xIM+Hz4HPjs68zrEgz4DOv8+FIM+EzrHOuc+BzrnOrM62zrXOuSDOvM61IM+Ezr8gzrjOrc68zrEgz4TOv8+FIM65z4PPhM+Mz4TOv8+Azr/PjSDPg86xz4InOwokbGFuZ1snZXJyb3JfaW52YWxpZF9nb29nbGVfdGFnX2lkJ10gPSAnzpzOtyDOrc6zzrrPhc+BzrcgzrzOv8+Bz4bOriBHb29nbGUgVGFnIElELiDOp8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61IM68zr/Pgc+Gzq4gR0E0IChHLVhYWFhYWFhYWFgpIM6uIEdUTSAoR1RNLVhYWFhYWFgpJzsKJGxhbmdbJ2xhYmVsX2luamVjdF9qcXVlcnknXSA9ICfOlc65z4POsc6zz4nOs86uIM6yzrnOss67zrnOv864zq7Ous63z4IgalF1ZXJ5JzsKJGxhbmdbJ2hlbHBfaW5qZWN0X2pxdWVyeSddID0gJ86Vzr3Otc+BzrPOv8+Azr/Ouc6uz4PPhM61IM61zqzOvSDPhM6/IM64zq3OvM6xIM+DzrHPgiDOtM61zr0gz4DOtc+BzrnOu86xzrzOss6szr3Otc65IGpRdWVyeSAozrHPgM6xzrnPhM61zq/PhM6xzrkgzrPOuc6xIM+EzrcgzrvOtc65z4TOv8+Fz4HOs865zrrPjM+EzrfPhM6xIM+Ezr/PhSBiYW5uZXIgz4PPhc69zrHOr869zrXPg863z4IpJzsKCiRsYW5nWydjb29raWVfYWJvdXRfdGV4dCddID0gJ86kzrEgY29va2llcyDOtc6vzr3Osc65IM+IzrfPhs65zrHOus6sIM6xz4HPh861zq/OsSDPgM6/z4Ugzr/OuSDOuc+Dz4TPjM+Ezr/PgM6/zrkgz4TOv8+Azr/OuM61z4TOv8+Nzr0gz4PPhM63IM+Dz4XPg866zrXPhc6uIM+DzrHPgiDOs865zrEgzr3OsSDOuM+FzrzOv8+Nzr3PhM6xzrkgz4TOuc+CIM+Az4HOv8+EzrnOvM6uz4POtc65z4IgzrrOsc65IM61zr3Orc+BzrPOtc65zq3PgiDPg86xz4IsIM+Oz4PPhM61IM69zrEgzrzOt869IM+Hz4HOtc65zqzOts61z4TOsc65IM69zrEgzrXOuc+DzqzOs861z4TOtSDOvs6xzr3OrCDPgM67zrfPgc6/z4bOv8+Bzq/Otc+CIM+DzrUgzrzOtc67zrvOv869z4TOuc66zq3PgiDOtc+AzrnPg866zq3PiM61zrnPgi48YnI+PGJyPs6nz4HOt8+DzrnOvM6/z4DOv865zr/Pjc68zrUgY29va2llcyDOs865zrEgzr3OsSDOss61zrvPhM65z47Pg86/z4XOvM61IM+EzrfOvSDOtc68z4DOtc65z4HOr86xIM+DzrHPgiwgzr3OsSDPgM6xz4HOrc+Hzr/Phc68zrUgzrXOvs6xz4TOv868zrnOus61z4XOvM6tzr3OvyDPgM61z4HOuc61z4fPjM68zrXOvc6/IM66zrHOuSDOvc6xIM6xzr3Osc67z43Pg86/z4XOvM61IM+EzrfOvSDOus6vzr3Ot8+Dzrcgz4TOv8+FIM65z4PPhM+Mz4TOv8+Azr/PhS4gzqTOsSDOss6xz4POuc66zqwgY29va2llcyDOtc6vzr3Osc65IM6xz4DOsc+BzrHOr8+EzrfPhM6xIM6zzrnOsSDPhM63IM67zrXOuc+Ezr/Phc+BzrPOuc66z4zPhM63z4TOsSwgzrXOvc+OIM6szrvOu86xIM68zrHPgiDOss6/zrfOuM6/z43OvSDOvc6xIM6yzrXOu8+EzrnPjs+Dzr/Phc68zrUgz4TOv869IM65z4PPhM+Mz4TOv8+Azr8uPGJyPjxicj5Db29raWVzIM+Ez4HOr8+Ez4nOvSDOsc+Az4wgzrrOv865zr3Pic69zrnOus6sIM68zq3Pg86xLCDPgM6xz4HPjM+Hzr/Phc+CIM6xzr3OrM67z4XPg863z4IgzrrOsc65IM60zrnOsc+GzrfOvM65z4PPhM65zrrOv8+Nz4IgzrXPhM6xzq/Pgc6/z4XPgiDOvM+Azr/Pgc61zq8gzrXPgM6vz4POt8+CIM69zrEgz4fPgc63z4POuc68zr/PgM6/zrnOt864zr/Pjc69IM6zzrnOsSDPhM63zr0gz4DOsc+Bzr/Ph86uIM+Dz4TOv8+HzrXPhc68zq3Ovc6/z4Ugz4DOtc+BzrnOtc+Hzr/OvM6tzr3Ov8+FIM+DzrUgzqzOu867zr/Phc+CIM65z4PPhM+Mz4TOv8+Azr/Phc+CLjxicj48YnI+zpzPgM6/z4HOtc6vz4TOtSDOvc6xIM6xz4DOv860zrXPh8+EzrXOr8+EzrUgzq4gzr3OsSDOsc+Azr/Pgc+Bzq/PiM61z4TOtSBjb29raWVzIM68zq3Pg8+JIM+Ez4nOvSDPgc+FzrjOvM6vz4POtc+Jzr0gz4TOv8+FIM+Az4HOv86zz4HOrM68zrzOsc+Ezr/PgiDPgM61z4HOuc6uzrPOt8+Dzq7PgiDPg86xz4Igzq4gzrHPhc+Ezr/PjSDPhM6/z4UgYmFubmVyLiDOlyDPg8+Fzr3Osc6vzr3Otc+DzrcgzrzPgM6/z4HOtc6vIM69zrEgzrHOvc6xzrrOu863zrjOtc6vIM6xzr3OrCDPgM6sz4POsSDPg8+EzrnOs868zq4gz4DPgc6/z4POsc+BzrzPjM62zr/Ovc+EzrHPgiDPhM65z4Igz4DPgc6/z4TOuc68zq7Pg861zrnPgiDPg86xz4IgzrXOtM+OLjxicj48YnI+zpPOuc6xIM+AzrXPgc65z4PPg8+Mz4TOtc+BzrXPgiDPgM67zrfPgc6/z4bOv8+Bzq/Otc+CIM+Dz4fOtc+EzrnOus6sIM68zrUgz4TOv869IM+HzrXOuc+BzrnPg868z4wgzrTOtc60zr/OvM6tzr3Pic69IM66zrHOuSDPhM6xIM60zrnOus6xzrnPjs68zrHPhM6xIM6xz4DOv8+Bz4HOrs+Ezr/PhSwgz4DOsc+BzrHOus6xzrvOv8+NzrzOtSDOtM61zq/PhM61IM+EzrfOvSDOoM6/zrvOuc+EzrnOus6uIM6Rz4DOv8+Bz4HOrs+Ezr/PhSDOvM6xz4IuJzsK]]></data>
	</file>
	<file>
	  <filename>/lang/ext/es_ES.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnTcOzZHVsbyBpbnN0YWxhZG8nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ03Ds2R1bG8gZWxpbWluYWRvJzsKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnR29vZ2xlIENvbnNlbnQgUGxhdGZvcm0gcGFyYSBjdW1wbGltaWVudG8gR0RQUiBjb24gaW50ZWdyYWNpw7NuIEdBNC9HVE0uJzsKJGxhbmdbJ2FkbWluX3RpdGxlJ10gPSAnQ29uZmlndXJhY2nDs24gR29vZ2xlIENvbnNlbnQgUGxhdGZvcm0nOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQWNjZXNvIGRlbmVnYWRvLiBWZXJpZmljYSB0dXMgcGVybWlzb3MuJzsKCiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9qcyddID0gJ0Jsb3F1ZSBKYXZhU2NyaXB0JzsKJGxhbmdbJ2xhYmVsX3RlbXBsYXRlX2h0bWwnXSA9ICdQbGFudGlsbGEgQmFubmVyIENvbnNlbnRpbWllbnRvJzsKJGxhbmdbJ2xhYmVsX3RlbXBsYXRlX2NzcyddID0gJ0NTUyBDb25zZW50aW1pZW50byc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZSddID0gJ1BsYW50aWxsYSc7CiRsYW5nWydsYWJlbF9qc19wb3NpdGlvbiddID0gJ1Bvc2ljacOzbiBJbnNlcmNpw7NuIEphdmFTY3JpcHQnOwoKJGxhbmdbJ2pzX2hlYWQnXSA9ICdJbnNlcnRhciBlbiAmbHQ7aGVhZCZndDsnOwokbGFuZ1snanNfYm9keSddID0gJ0luc2VydGFyIGFsIGZpbmFsIGRlICZsdDtib2R5Jmd0Oyc7CgokbGFuZ1snc3VibWl0J10gPSAnR3VhcmRhcic7CiRsYW5nWydjYW5jZWwnXSA9ICdDYW5jZWxhcic7CiRsYW5nWydzZXR0aW5nc19zYXZlZCddID0gJ0NvbmZpZ3VyYWNpw7NuIGd1YXJkYWRhJzsKCiRsYW5nWydjb25zZW50X2FuYWx5dGljc19zdG9yYWdlJ10gPSAnQWxtYWNlbmFtaWVudG8gQW5hbHl0aWNzJzsKJGxhbmdbJ2NvbnNlbnRfYWRfc3RvcmFnZSddID0gJ0FsbWFjZW5hbWllbnRvIEFudW5jaW9zJzsKJGxhbmdbJ2NvbnNlbnRfYWRfcGVyc29uYWxpemF0aW9uJ10gPSAnUGVyc29uYWxpemFjacOzbiBBbnVuY2lvcyc7CiRsYW5nWydjb25zZW50X2FkX3VzZXJfZGF0YSddID0gJ0RhdG9zIFVzdWFyaW8gQW51bmNpb3MnOwokbGFuZ1snY29uc2VudF9wZXJzb25hbGl6YXRpb24nXSA9ICdQZXJzb25hbGl6YWNpw7NuJzsKCiRsYW5nWydpbmplY3Rpb25fbG9jYXRpb24nXSA9ICdVYmljYWNpw7NuIElueWVjY2nDs24gSmF2YVNjcmlwdCc7CiRsYW5nWydsYWJlbF9lbmFibGVkJ10gPSAnSGFiaWxpdGFyIEdvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ2Fza191bmluc3RhbGwnXSA9ICfCv0VzdMOhcyBzZWd1cm8gZGUgcXVlIHF1aWVyZXMgZGVzaW5zdGFsYXIgZWwgbcOzZHVsbyBHb29nbGVDb25zZW50UGxhdGZvcm0/JzsKJGxhbmdbJ2xhYmVsX2dvb2dsZV90YWdfaWQnXSA9ICdJRCBUYWcgR29vZ2xlIChHQTQ6IEctWFhYWFhYWCBvIEdUTTogR1RNLVhYWFhYWFgpJzsKJGxhbmdbJ2hlbHBfZ29vZ2xlX3RhZ19pZCddICA9ICdEZXRlY3RhZG8gYXV0b23DoXRpY2FtZW50ZS4gR0E0IGNhcmdhIGd0YWcuanM7IEdUTSBjYXJnYSBlbCBjb250ZW5lZG9yLic7CiRsYW5nWydsYWJlbF9yZWd1bGF0aW9uJ10gPSAnQ3VtcGxpbWllbnRvIFJlZ3VsYWNpw7NuIFByaXZhY2lkYWQnOwoKLy8gQ29va2llIGNvbnNlbnQgdHJhbnNsYXRpb25zCiRsYW5nWydjb29raWVfdGl0bGUnXSA9ICdQcmVmZXJlbmNpYXMgZGUgQ29va2llcyc7CiRsYW5nWydjb29raWVfY29uc2VudF90ZXh0J10gPSAnVXRpbGl6YW1vcyBjb29raWVzIHBhcmEgcGVyc29uYWxpemFyIGNvbnRlbmlkbyB5IGFudW5jaW9zLCBwcm9wb3JjaW9uYXIgZnVuY2lvbmVzIGRlIHJlZGVzIHNvY2lhbGVzIHkgYW5hbGl6YXIgbnVlc3RybyB0csOhZmljby4gVGFtYmnDqW4gY29tcGFydGltb3MgaW5mb3JtYWNpw7NuIHNvYnJlIHR1IHVzbyBkZSBudWVzdHJvIHNpdGlvIGNvbiBudWVzdHJvcyBzb2Npb3MgZGUgcmVkZXMgc29jaWFsZXMsIHB1YmxpY2lkYWQgeSBhbsOhbGlzaXMuJzsKJGxhbmdbJ2Nvb2tpZV9uZWNlc3NhcnknXSA9ICdOZWNlc2FyaWFzJzsKJGxhbmdbJ2Nvb2tpZV9wcmVmZXJlbmNlcyddID0gJ1ByZWZlcmVuY2lhcyc7CiRsYW5nWydjb29raWVfc3RhdGlzdGljcyddID0gJ0VzdGFkw61zdGljYXMnOwokbGFuZ1snY29va2llX21hcmtldGluZyddID0gJ01hcmtldGluZyc7CiRsYW5nWydjb29raWVfbmVjZXNzYXJ5X2Rlc2MnXSA9ICdSZXF1ZXJpZGFzIHBhcmEgZnVuY2lvbmFsaWRhZCBiw6FzaWNhIGRlbCBzaXRpbyc7CiRsYW5nWydjb29raWVfcHJlZmVyZW5jZXNfZGVzYyddID0gJ1JlY3VlcmRhbiB0dXMgY29uZmlndXJhY2lvbmVzIHkgZWxlY2Npb25lcyc7CiRsYW5nWydjb29raWVfc3RhdGlzdGljc19kZXNjJ10gPSAnTm9zIGF5dWRhbiBhIGVudGVuZGVyIGPDs21vIHVzYXMgbnVlc3RybyBzaXRpbyc7CiRsYW5nWydjb29raWVfbWFya2V0aW5nX2Rlc2MnXSA9ICdBbnVuY2lvcyB5IGNvbnRlbmlkbyBwZXJzb25hbGl6YWRvJzsKCiRsYW5nWydjb29raWVfZGVueSddID0gJ1JlY2hhemFyJzsKJGxhbmdbJ2Nvb2tpZV9jdXN0b21pemUnXSA9ICdQZXJzb25hbGl6YXInOwokbGFuZ1snY29va2llX2FsbG93X2FsbCddID0gJ1Blcm1pdGlyIFRvZG8nOwokbGFuZ1snY29va2llX3NhdmVfc2VsZWN0aW9uJ10gPSAnR3VhcmRhciBTZWxlY2Npw7NuJzsKJGxhbmdbJ2Nvb2tpZV9hY2tub3dsZWRnZSddID0gJ1JlY29ub2Nlcic7CiRsYW5nWydjb29raWVfdGFiX2NvbnNlbnQnXSA9ICdDb25zZW50aW1pZW50byc7CiRsYW5nWydjb29raWVfdGFiX2RldGFpbHMnXSA9ICdEZXRhbGxlcyc7CiRsYW5nWydjb29raWVfdGFiX2Fib3V0J10gPSAnQWNlcmNhIGRlJzsKJGxhbmdbJ2Nvb2tpZV93ZWJzaXRlX3VzZXMnXSA9ICdFc3RlIHNpdGlvIHdlYiB1dGlsaXphIGNvb2tpZXMnOwoKLy8gU2V0dGluZ3MgdGFiCiRsYW5nWydzZXR0aW5nc19hcHBlYXJhbmNlJ10gPSAnQ29uZmlndXJhY2nDs24gZGUgQXBhcmllbmNpYSc7CiRsYW5nWydsYWJlbF9jb2xvcl9zY2hlbWUnXSA9ICdFc3F1ZW1hIGRlIENvbG9yJzsKJGxhbmdbJ2NvbG9yX3NjaGVtZV9saWdodCddID0gJ0NsYXJvJzsKJGxhbmdbJ2NvbG9yX3NjaGVtZV9kYXJrJ10gPSAnT3NjdXJvJzsKJGxhbmdbJ2xhYmVsX3Bvc2l0aW9uJ10gPSAnUG9zaWNpw7NuJzsKJGxhbmdbJ3Bvc2l0aW9uX2JvdHRvbSddID0gJ0FiYWpvJzsKJGxhbmdbJ3Bvc2l0aW9uX2NlbnRlciddID0gJ0NlbnRybyc7CiRsYW5nWydwb3NpdGlvbl90b3AnXSA9ICdBcnJpYmEnOwokbGFuZ1snbGFiZWxfc2l6ZSddID0gJ1RhbWHDsW8nOwokbGFuZ1snc2l6ZV9jb21wYWN0J10gPSAnQ29tcGFjdG8nOwokbGFuZ1snc2l6ZV9ub3JtYWwnXSA9ICdOb3JtYWwnOwokbGFuZ1snc2l6ZV9sYXJnZSddID0gJ0dyYW5kZSc7CiRsYW5nWydzaXplX3dpZGUnXSA9ICdBbmNobyc7CiRsYW5nWydtc2dfc2V0dGluZ3Nfc2F2ZWQnXSA9ICdDb25maWd1cmFjacOzbiBndWFyZGFkYSBleGl0b3NhbWVudGUnOwoKLy8gQ3VzdG9tIHRleHQgc2V0dGluZ3MKJGxhbmdbJ3NldHRpbmdzX2N1c3RvbV90ZXh0J10gPSAnVGV4dG8gUGVyc29uYWxpemFkbyc7CiRsYW5nWydsYWJlbF9jdXN0b21fdGl0bGUnXSA9ICdUw610dWxvIFBlcnNvbmFsaXphZG8nOwokbGFuZ1snbGFiZWxfY3VzdG9tX3RleHQnXSA9ICdUZXh0byBkZSBEZXNjcmlwY2nDs24gUGVyc29uYWxpemFkbyc7CiRsYW5nWydsYWJlbF9wcmltYXJ5X2NvbG9yJ10gPSAnQ29sb3IgZGVsIEJvdMOzbiBQcmluY2lwYWwnOwokbGFuZ1snaGVscF9wcmltYXJ5X2NvbG9yJ10gPSAnRWxpZ2UgdW4gY29sb3IgcXVlIGNvaW5jaWRhIGNvbiBlbCB0ZW1hIGRlIHR1IHNpdGlvIHdlYic7CiRsYW5nWydlcnJvcl9pbnZhbGlkX2dvb2dsZV90YWdfaWQnXSA9ICdGb3JtYXRvIGRlIEdvb2dsZSBUYWcgSUQgaW52w6FsaWRvLiBVc2UgZm9ybWF0byBHQTQgKEctWFhYWFhYWFhYWCkgbyBHVE0gKEdUTS1YWFhYWFhYKSc7CiRsYW5nWydsYWJlbF9pbmplY3RfanF1ZXJ5J10gPSAnSW55ZWN0YXIgYmlibGlvdGVjYSBqUXVlcnknOwokbGFuZ1snaGVscF9pbmplY3RfanF1ZXJ5J10gPSAnQWN0aXZlIHNpIHN1IHRlbWEgbm8gaW5jbHV5ZSBqUXVlcnkgKHJlcXVlcmlkbyBwYXJhIGxhIGZ1bmNpb25hbGlkYWQgZGVsIGJhbm5lciBkZSBjb25zZW50aW1pZW50byknOwoKJGxhbmdbJ2Nvb2tpZV9hYm91dF90ZXh0J10gPSAnTGFzIGNvb2tpZXMgc29uIGFyY2hpdm9zIGRpZ2l0YWxlcyBxdWUgbG9zIHNpdGlvcyB3ZWIgY29sb2NhbiBlbiB0dSBkaXNwb3NpdGl2byBwYXJhIHJlY29yZGFyIHR1cyBwcmVmZXJlbmNpYXMgeSBhY2Npb25lcywgcGFyYSBxdWUgbm8gdGVuZ2FzIHF1ZSB2b2x2ZXIgYSBpbmdyZXNhciBpbmZvcm1hY2nDs24gZW4gdmlzaXRhcyBwb3N0ZXJpb3Jlcy48YnI+PGJyPlV0aWxpemFtb3MgY29va2llcyBwYXJhIG1lam9yYXIgdHUgZXhwZXJpZW5jaWEsIGVudHJlZ2FyIGNvbnRlbmlkbyBwZXJzb25hbGl6YWRvIHkgYW5hbGl6YXIgZWwgdHLDoWZpY28gZGVsIHNpdGlvIHdlYi4gTGFzIGNvb2tpZXMgZXNlbmNpYWxlcyBzb24gbmVjZXNhcmlhcyBwYXJhIGVsIGZ1bmNpb25hbWllbnRvLCBtaWVudHJhcyBxdWUgb3RyYXMgbm9zIGF5dWRhbiBhIG1lam9yYXIgZWwgc2l0aW8uPGJyPjxicj5UYW1iacOpbiBzZSBwdWVkZW4gdXRpbGl6YXIgY29va2llcyBkZSB0ZXJjZXJvcyBkZSByZWRlcyBzb2NpYWxlcywgcHJvdmVlZG9yZXMgZGUgYW7DoWxpc2lzIHkgc29jaW9zIHB1YmxpY2l0YXJpb3MgcGFyYSBwcm9wb3JjaW9uYXIgY29udGVuaWRvIGRpcmlnaWRvIGVuIG90cm9zIHNpdGlvcyB3ZWIuPGJyPjxicj5QdWVkZXMgYWNlcHRhciBvIHJlY2hhemFyIGNvb2tpZXMgYSB0cmF2w6lzIGRlIGxhIGNvbmZpZ3VyYWNpw7NuIGRlIHR1IG5hdmVnYWRvciBvIGVzdGUgYmFubmVyLiBFbCBjb25zZW50aW1pZW50byBzZSBwdWVkZSByZXRpcmFyIGVuIGN1YWxxdWllciBtb21lbnRvIGFqdXN0YW5kbyB0dXMgcHJlZmVyZW5jaWFzIGFxdcOtLjxicj48YnI+UGFyYSBtw6FzIGluZm9ybWFjacOzbiBzb2JyZSBlbCBtYW5lam8gZGUgZGF0b3MgeSBkZXJlY2hvcyBkZSBwcml2YWNpZGFkLCBjb25zdWx0YSBudWVzdHJhIFBvbMOtdGljYSBkZSBQcml2YWNpZGFkLic7Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/fi_FI.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnTW9kdXVsaSBhc2VubmV0dHUnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01vZHV1bGkgcG9pc3RldHR1JzsKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnR29vZ2xlIENvbnNlbnQgUGxhdGZvcm0gR0RQUi15aHRlZW5zb3BpdnV1ZGVsbGUgR0E0L0dUTS1pbnRlZ3JhYXRpb2xsYS4nOwokbGFuZ1snYWRtaW5fdGl0bGUnXSA9ICdHb29nbGUgQ29uc2VudCBQbGF0Zm9ybSBBc2V0dWtzZXQnOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnUMOkw6RzeSBldsOkdHR5LiBUYXJraXN0YSBrw6R5dHTDtm9pa2V1dGVzaS4nOwoKJGxhbmdbJ2xhYmVsX3RlbXBsYXRlX2pzJ10gPSAnSmF2YVNjcmlwdCBMb2hrbyc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9odG1sJ10gPSAnU3Vvc3R1bXVzIEJhbm5lcmkgTWFsbGknOwokbGFuZ1snbGFiZWxfdGVtcGxhdGVfY3NzJ10gPSAnU3Vvc3R1bXVzIENTUyc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZSddID0gJ01hbGxpJzsKJGxhbmdbJ2xhYmVsX2pzX3Bvc2l0aW9uJ10gPSAnSmF2YVNjcmlwdCBMaXPDpHlzcGFpa2thJzsKCiRsYW5nWydqc19oZWFkJ10gPSAnTGlzw6TDpCAmbHQ7aGVhZCZndDs6aWluJzsKJGxhbmdbJ2pzX2JvZHknXSA9ICdMaXPDpMOkICZsdDtib2R5Jmd0OzpuIGxvcHB1dW4nOwoKJGxhbmdbJ3N1Ym1pdCddID0gJ1RhbGxlbm5hJzsKJGxhbmdbJ2NhbmNlbCddID0gJ1BlcnV1dGEnOwokbGFuZ1snc2V0dGluZ3Nfc2F2ZWQnXSA9ICdBc2V0dWtzZXQgdGFsbGVubmV0dHUnOwoKJGxhbmdbJ2NvbnNlbnRfYW5hbHl0aWNzX3N0b3JhZ2UnXSA9ICdBbmFseXRpY3MgVGFsbGVubnVzJzsKJGxhbmdbJ2NvbnNlbnRfYWRfc3RvcmFnZSddID0gJ01haW5vcyBUYWxsZW5udXMnOwokbGFuZ1snY29uc2VudF9hZF9wZXJzb25hbGl6YXRpb24nXSA9ICdNYWlub3MgUGVyc29ub2ludGknOwokbGFuZ1snY29uc2VudF9hZF91c2VyX2RhdGEnXSA9ICdNYWlub3MgS8OkeXR0w6Rqw6R0aWVkb3QnOwokbGFuZ1snY29uc2VudF9wZXJzb25hbGl6YXRpb24nXSA9ICdQZXJzb25vaW50aSc7CgokbGFuZ1snaW5qZWN0aW9uX2xvY2F0aW9uJ10gPSAnSmF2YVNjcmlwdCBJbmpla3Rpb3BhaWtrYSc7CiRsYW5nWydsYWJlbF9lbmFibGVkJ10gPSAnT3RhIGvDpHl0dMO2w7ZuIEdvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ2Fza191bmluc3RhbGwnXSA9ICdPbGV0a28gdmFybWEsIGV0dMOkIGhhbHVhdCBwb2lzdGFhIEdvb2dsZUNvbnNlbnRQbGF0Zm9ybSBtb2R1dWxpbj8nOwokbGFuZ1snbGFiZWxfZ29vZ2xlX3RhZ19pZCddID0gJ0dvb2dsZSBUYWcgSUQgKEdBNDogRy1YWFhYWFhYIHRhaSBHVE06IEdUTS1YWFhYWFhYKSc7CiRsYW5nWydoZWxwX2dvb2dsZV90YWdfaWQnXSAgPSAnQXV0b21hYXR0aXNlc3RpIHR1bm5pc3RldHR1LiBHQTQgbGF0YWEgZ3RhZy5qczpuOyBHVE0gbGF0YWEgc8OkaWxpw7ZuLic7CiRsYW5nWydsYWJlbF9yZWd1bGF0aW9uJ10gPSAnVGlldG9zdW9qYS1hc2V0dWtzZW4gTm91ZGF0dGFtaW5lbic7CgovLyBDb29raWUgY29uc2VudCB0cmFuc2xhdGlvbnMKJGxhbmdbJ2Nvb2tpZV90aXRsZSddID0gJ0V2w6RzdGVhc2V0dWtzZXQnOwokbGFuZ1snY29va2llX2NvbnNlbnRfdGV4dCddID0gJ0vDpHl0w6RtbWUgZXbDpHN0ZWl0w6Qgc2lzw6RsbMO2biBqYSBtYWlub3N0ZW4gcGVyc29ub2ludGlpbiwgc29zaWFhbGlzZW4gbWVkaWFuIG9taW5haXN1dWtzaWVuIHRhcmpvYW1pc2VlbiBqYSBsaWlrZW50ZWVuIGFuYWx5c29pbnRpaW4uIEphYW1tZSBtecO2cyB0aWV0b2phIHNpdnVzdG9tbWUga8OkeXTDtnN0w6RzaSBzb3NpYWFsaXNlbiBtZWRpYW4sIG1haW5vbm5hbiBqYSBhbmFseXRpaWthbiBrdW1wcGFuZWlsbGVtbWUuJzsKJGxhbmdbJ2Nvb2tpZV9uZWNlc3NhcnknXSA9ICdWw6RsdHTDpG3DpHR0w7Ztw6R0JzsKJGxhbmdbJ2Nvb2tpZV9wcmVmZXJlbmNlcyddID0gJ0FzZXR1a3NldCc7CiRsYW5nWydjb29raWVfc3RhdGlzdGljcyddID0gJ1RpbGFzdG90JzsKJGxhbmdbJ2Nvb2tpZV9tYXJrZXRpbmcnXSA9ICdNYXJra2lub2ludGknOwokbGFuZ1snY29va2llX25lY2Vzc2FyeV9kZXNjJ10gPSAnVmFhZGl0YWFuIHNpdnVzdG9uIHBlcnVzdG9pbWlubmFsbGlzdXVkZWxsZSc7CiRsYW5nWydjb29raWVfcHJlZmVyZW5jZXNfZGVzYyddID0gJ011aXN0YXZhdCBhc2V0dWtzZXNpIGphIHZhbGludGFzaSc7CiRsYW5nWydjb29raWVfc3RhdGlzdGljc19kZXNjJ10gPSAnQXV0dGF2YXQgbWVpdMOkIHltbcOkcnTDpG3DpMOkbiBzaXZ1c3RvbW1lIGvDpHl0dMO2w6QnOwokbGFuZ1snY29va2llX21hcmtldGluZ19kZXNjJ10gPSAnUGVyc29ub2lkdXQgbWFpbm9rc2V0IGphIHNpc8OkbHTDtic7CiRsYW5nWydjb29raWVfYWJvdXRfdGV4dCddID0gJ0V2w6RzdGVldCBvdmF0IGRpZ2l0YWFsaXNpYSB0aWVkb3N0b2phLCBqb2l0YSB2ZXJra29zaXZ1c3RvdCBzaWpvaXR0YXZhdCBsYWl0dGVlbGxlc2kgbXVpc3RhYWtzZWVuIG1pZWx0eW15a3Nlc2kgamEgdG9pbWludGFzaSwgam90dGEgc2ludW4gZWkgdGFydml0c2Ugc3nDtnR0w6TDpCB0aWV0b2phIHV1ZGVsbGVlbiB0dWxldmlsbGEgdmllcmFpbHVpbGxhLjxicj48YnI+S8OkeXTDpG1tZSBldsOkc3RlaXTDpCBwYXJhbnRhYWtzZW1tZSBrb2tlbXVzdGFzaSwgdG9pbWl0dGFha3NlbW1lIHBlcnNvbm9pdHVhIHNpc8OkbHTDtsOkIGphIGFuYWx5c29pZGFrc2VtbWUgdmVya2tvc2l2dXN0b24gbGlpa2VubmV0dMOkLiBPbGVubmFpc2V0IGV2w6RzdGVldCBvdmF0IHbDpGx0dMOkbcOkdHTDtm1pw6QgdG9pbWlubmFsbGlzdXVkZWxsZSwga3VuIHRhYXMgbXV1dCBhdXR0YXZhdCBtZWl0w6QgcGFyYW50YW1hYW4gc2l2dXN0b2EuPGJyPjxicj5Lb2xtYW5uZW4gb3NhcHVvbGVuIGV2w6RzdGVpdMOkIHNvc2lhYWxpc2VzdGEgbWVkaWFzdGEsIGFuYWx5dGlpa2thcGFsdmVsdW50YXJqb2FqaWx0YSBqYSBtYWlub3NrdW1wcGFuZWlsdGEgdm9pZGFhbiBtecO2cyBrw6R5dHTDpMOkIGtvaGRpc3RldHVuIHNpc8OkbGzDtm4gdG9pbWl0dGFtaXNlZW4gbXVpbGxhIHZlcmtrb3NpdnVzdG9pbGxhLjxicj48YnI+Vm9pdCBoeXbDpGtzecOkIHRhaSBoeWzDpHTDpCBldsOkc3RlZXQgc2VsYWltZXNpIGFzZXR1c3RlbiB0YWkgdMOkbcOkbiBiYW5uZXJpbiBrYXV0dGEuIFN1b3N0dW11cyB2b2lkYWFuIHBlcnV1dHRhYSBtaWxsb2luIHRhaGFuc2Egc8Okw6R0w6Rtw6RsbMOkIG1pZWx0eW15a3Npw6RzaSB0w6TDpGxsw6QuPGJyPjxicj5MaXPDpHRpZXRvamEgdGlldG9qZW4ga8Okc2l0dGVseXN0w6QgamEgeWtzaXR5aXN5eWRlbiBzdW9qYXN0YSBsw7Z5ZMOkdCBUaWV0b3N1b2pha8OkeXTDpG5uw7ZzdMOkbW1lLic7CiRsYW5nWydjb29raWVfZGVueSddID0gJ0h5bGvDpMOkJzsKJGxhbmdbJ2Nvb2tpZV9jdXN0b21pemUnXSA9ICdNdWthdXRhJzsKJGxhbmdbJ2Nvb2tpZV9hbGxvd19hbGwnXSA9ICdTYWxsaSBLYWlra2knOwokbGFuZ1snY29va2llX3NhdmVfc2VsZWN0aW9uJ10gPSAnVGFsbGVubmEgVmFsaW50YSc7CiRsYW5nWydjb29raWVfYWNrbm93bGVkZ2UnXSA9ICdIeXbDpGtzeXR0eSc7CiRsYW5nWydjb29raWVfdGFiX2NvbnNlbnQnXSA9ICdTdW9zdHVtdXMnOwokbGFuZ1snY29va2llX3RhYl9kZXRhaWxzJ10gPSAnWWtzaXR5aXNrb2hkYXQnOwokbGFuZ1snY29va2llX3RhYl9hYm91dCddID0gJ1RpZXRvamEnOwokbGFuZ1snY29va2llX3dlYnNpdGVfdXNlcyddID0gJ1TDpG3DpCB2ZXJra29zaXZ1c3RvIGvDpHl0dMOkw6QgZXbDpHN0ZWl0w6QnOwoKLy8gU2V0dGluZ3MgdGFiCiRsYW5nWydzZXR0aW5nc19hcHBlYXJhbmNlJ10gPSAnVWxrb2FzdW4gQXNldHVrc2V0JzsKJGxhbmdbJ2xhYmVsX2NvbG9yX3NjaGVtZSddID0gJ1bDpHJpdGVlbWEnOwokbGFuZ1snY29sb3Jfc2NoZW1lX2xpZ2h0J10gPSAnVmFhbGVhJzsKJGxhbmdbJ2NvbG9yX3NjaGVtZV9kYXJrJ10gPSAnVHVtbWEnOwokbGFuZ1snbGFiZWxfcG9zaXRpb24nXSA9ICdTaWphaW50aSc7CiRsYW5nWydwb3NpdGlvbl9ib3R0b20nXSA9ICdBbGhhYWxsYSc7CiRsYW5nWydwb3NpdGlvbl9jZW50ZXInXSA9ICdLZXNrZWxsw6QnOwokbGFuZ1sncG9zaXRpb25fdG9wJ10gPSAnWWzDpHB1b2xlbGxhJzsKJGxhbmdbJ2xhYmVsX3NpemUnXSA9ICdLb2tvJzsKJGxhbmdbJ3NpemVfY29tcGFjdCddID0gJ1RpaXZpcyc7CiRsYW5nWydzaXplX25vcm1hbCddID0gJ05vcm1hYWxpJzsKJGxhbmdbJ3NpemVfbGFyZ2UnXSA9ICdTdXVyaSc7CiRsYW5nWydzaXplX3dpZGUnXSA9ICdMZXZlw6QnOwokbGFuZ1snbXNnX3NldHRpbmdzX3NhdmVkJ10gPSAnQXNldHVrc2V0IHRhbGxlbm5ldHR1IG9ubmlzdHVuZWVzdGknOwoKLy8gQ3VzdG9tIHRleHQgc2V0dGluZ3MKJGxhbmdbJ3NldHRpbmdzX2N1c3RvbV90ZXh0J10gPSAnTXVrYXV0ZXR0dSBUZWtzdGknOwokbGFuZ1snbGFiZWxfY3VzdG9tX3RpdGxlJ10gPSAnTXVrYXV0ZXR0dSBPdHNpa2tvJzsKJGxhbmdbJ2xhYmVsX2N1c3RvbV90ZXh0J10gPSAnTXVrYXV0ZXR0dSBLdXZhdXN0ZWtzdGknOwokbGFuZ1snbGFiZWxfcHJpbWFyeV9jb2xvciddID0gJ1DDpMOkcGFpbmlra2VlbiBWw6RyaSc7CiRsYW5nWydoZWxwX3ByaW1hcnlfY29sb3InXSA9ICdWYWxpdHNlIHbDpHJpLCBqb2thIHNvcGlpIHZlcmtrb3NpdnVzdG9zaSB0ZWVtYWFuJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfZ29vZ2xlX3RhZ19pZCddID0gJ1ZpcmhlZWxsaW5lbiBHb29nbGUgVGFnIElEIC1tdW90by4gS8OkeXTDpCBHQTQtbXVvdG9hIChHLVhYWFhYWFhYWFgpIHRhaSBHVE0tbXVvdG9hIChHVE0tWFhYWFhYWCknOwokbGFuZ1snbGFiZWxfaW5qZWN0X2pxdWVyeSddID0gJ0xpc8Okw6QgalF1ZXJ5LWtpcmphc3RvJzsKJGxhbmdbJ2hlbHBfaW5qZWN0X2pxdWVyeSddID0gJ090YSBrw6R5dHTDtsO2biwgam9zIHRlZW1hc2kgZWkgc2lzw6RsbMOkIGpRdWVyecOkICh2YWFkaXRhYW4gc3Vvc3R1bXVzYmFubmVyaW4gdG9pbWlubmFsbGUpJzsK]]></data>
	</file>
	<file>
	  <filename>/lang/ext/fr_FR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnTW9kdWxlIGluc3RhbGzDqSc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnTW9kdWxlIHN1cHByaW3DqSc7CiRsYW5nWydkZXNjcmlwdGlvbiddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtIHBvdXIgbGEgY29uZm9ybWl0w6kgUkdQRCBhdmVjIGludMOpZ3JhdGlvbiBHQTQvR1RNLic7CiRsYW5nWydhZG1pbl90aXRsZSddID0gJ1BhcmFtw6h0cmVzIEdvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY8OocyByZWZ1c8OpLiBWw6lyaWZpZXogdm9zIHBlcm1pc3Npb25zLic7CgokbGFuZ1snbGFiZWxfdGVtcGxhdGVfanMnXSA9ICdCbG9jIEphdmFTY3JpcHQnOwokbGFuZ1snbGFiZWxfdGVtcGxhdGVfaHRtbCddID0gJ01vZMOobGUgQmFubmnDqHJlIENvbnNlbnRlbWVudCc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9jc3MnXSA9ICdDU1MgQ29uc2VudGVtZW50JzsKJGxhbmdbJ2xhYmVsX3RlbXBsYXRlJ10gPSAnTW9kw6hsZSc7CiRsYW5nWydsYWJlbF9qc19wb3NpdGlvbiddID0gJ1Bvc2l0aW9uIEluc2VydGlvbiBKYXZhU2NyaXB0JzsKCiRsYW5nWydqc19oZWFkJ10gPSAnSW5zw6lyZXIgZGFucyAmbHQ7aGVhZCZndDsnOwokbGFuZ1snanNfYm9keSddID0gJ0luc8OpcmVyIMOgIGxhIGZpbiBkZSAmbHQ7Ym9keSZndDsnOwoKJGxhbmdbJ3N1Ym1pdCddID0gJ0VucmVnaXN0cmVyJzsKJGxhbmdbJ2NhbmNlbCddID0gJ0FubnVsZXInOwokbGFuZ1snc2V0dGluZ3Nfc2F2ZWQnXSA9ICdQYXJhbcOodHJlcyBlbnJlZ2lzdHLDqXMnOwoKJGxhbmdbJ2NvbnNlbnRfYW5hbHl0aWNzX3N0b3JhZ2UnXSA9ICdTdG9ja2FnZSBBbmFseXRpY3MnOwokbGFuZ1snY29uc2VudF9hZF9zdG9yYWdlJ10gPSAnU3RvY2thZ2UgUHVibGljaXTDqXMnOwokbGFuZ1snY29uc2VudF9hZF9wZXJzb25hbGl6YXRpb24nXSA9ICdQZXJzb25uYWxpc2F0aW9uIFB1YmxpY2l0w6lzJzsKJGxhbmdbJ2NvbnNlbnRfYWRfdXNlcl9kYXRhJ10gPSAnRG9ubsOpZXMgVXRpbGlzYXRldXIgUHVibGljaXTDqXMnOwokbGFuZ1snY29uc2VudF9wZXJzb25hbGl6YXRpb24nXSA9ICdQZXJzb25uYWxpc2F0aW9uJzsKCiRsYW5nWydpbmplY3Rpb25fbG9jYXRpb24nXSA9ICdFbXBsYWNlbWVudCBJbmplY3Rpb24gSmF2YVNjcmlwdCc7CiRsYW5nWydsYWJlbF9lbmFibGVkJ10gPSAnQWN0aXZlciBHb29nbGUgQ29uc2VudCBQbGF0Zm9ybSc7CiRsYW5nWydhc2tfdW5pbnN0YWxsJ10gPSAnw4p0ZXMtdm91cyBzw7tyIGRlIHZvdWxvaXIgZMOpc2luc3RhbGxlciBsZSBtb2R1bGUgR29vZ2xlQ29uc2VudFBsYXRmb3JtPyc7CiRsYW5nWydsYWJlbF9nb29nbGVfdGFnX2lkJ10gPSAnSUQgVGFnIEdvb2dsZSAoR0E0OiBHLVhYWFhYWFggb3UgR1RNOiBHVE0tWFhYWFhYWCknOwokbGFuZ1snaGVscF9nb29nbGVfdGFnX2lkJ10gID0gJ0TDqXRlY3TDqSBhdXRvbWF0aXF1ZW1lbnQuIEdBNCBjaGFyZ2UgZ3RhZy5qczsgR1RNIGNoYXJnZSBsZSBjb250ZW5ldXIuJzsKJGxhbmdbJ2xhYmVsX3JlZ3VsYXRpb24nXSA9ICdDb25mb3JtaXTDqSBSw6lnbGVtZW50YXRpb24gQ29uZmlkZW50aWFsaXTDqSc7CgovLyBDb29raWUgY29uc2VudCB0cmFuc2xhdGlvbnMKJGxhbmdbJ2Nvb2tpZV90aXRsZSddID0gJ1Byw6lmw6lyZW5jZXMgZGVzIENvb2tpZXMnOwokbGFuZ1snY29va2llX2NvbnNlbnRfdGV4dCddID0gJ05vdXMgdXRpbGlzb25zIGRlcyBjb29raWVzIHBvdXIgcGVyc29ubmFsaXNlciBsZSBjb250ZW51IGV0IGxlcyBwdWJsaWNpdMOpcywgZm91cm5pciBkZXMgZm9uY3Rpb25uYWxpdMOpcyBkZSBtw6lkaWFzIHNvY2lhdXggZXQgYW5hbHlzZXIgbm90cmUgdHJhZmljLiBOb3VzIHBhcnRhZ2VvbnMgw6lnYWxlbWVudCBkZXMgaW5mb3JtYXRpb25zIHN1ciB2b3RyZSB1dGlsaXNhdGlvbiBkZSBub3RyZSBzaXRlIGF2ZWMgbm9zIHBhcnRlbmFpcmVzIGRlIG3DqWRpYXMgc29jaWF1eCwgZGUgcHVibGljaXTDqSBldCBkXCdhbmFseXNlLic7CiRsYW5nWydjb29raWVfbmVjZXNzYXJ5J10gPSAnTsOpY2Vzc2FpcmVzJzsKJGxhbmdbJ2Nvb2tpZV9wcmVmZXJlbmNlcyddID0gJ1Byw6lmw6lyZW5jZXMnOwokbGFuZ1snY29va2llX3N0YXRpc3RpY3MnXSA9ICdTdGF0aXN0aXF1ZXMnOwokbGFuZ1snY29va2llX21hcmtldGluZyddID0gJ01hcmtldGluZyc7CiRsYW5nWydjb29raWVfbmVjZXNzYXJ5X2Rlc2MnXSA9ICdSZXF1aXMgcG91ciBsZXMgZm9uY3Rpb25uYWxpdMOpcyBkZSBiYXNlIGR1IHNpdGUnOwokbGFuZ1snY29va2llX3ByZWZlcmVuY2VzX2Rlc2MnXSA9ICdTZSBzb3V2aWVubmVudCBkZSB2b3MgcGFyYW3DqHRyZXMgZXQgY2hvaXgnOwokbGFuZ1snY29va2llX3N0YXRpc3RpY3NfZGVzYyddID0gJ05vdXMgYWlkZW50IMOgIGNvbXByZW5kcmUgY29tbWVudCB2b3VzIHV0aWxpc2V6IG5vdHJlIHNpdGUnOwokbGFuZ1snY29va2llX21hcmtldGluZ19kZXNjJ10gPSAnUHVibGljaXTDqXMgZXQgY29udGVudSBwZXJzb25uYWxpc8Opcyc7CgokbGFuZ1snY29va2llX2RlbnknXSA9ICdSZWZ1c2VyJzsKJGxhbmdbJ2Nvb2tpZV9jdXN0b21pemUnXSA9ICdQZXJzb25uYWxpc2VyJzsKJGxhbmdbJ2Nvb2tpZV9hbGxvd19hbGwnXSA9ICdUb3V0IEFjY2VwdGVyJzsKJGxhbmdbJ2Nvb2tpZV9zYXZlX3NlbGVjdGlvbiddID0gJ1NhdXZlZ2FyZGVyIGxhIFPDqWxlY3Rpb24nOwokbGFuZ1snY29va2llX2Fja25vd2xlZGdlJ10gPSAnQWNjdXNlciByw6ljZXB0aW9uJzsKJGxhbmdbJ2Nvb2tpZV90YWJfY29uc2VudCddID0gJ0NvbnNlbnRlbWVudCc7CiRsYW5nWydjb29raWVfdGFiX2RldGFpbHMnXSA9ICdEw6l0YWlscyc7CiRsYW5nWydjb29raWVfdGFiX2Fib3V0J10gPSAnw4AgcHJvcG9zJzsKJGxhbmdbJ2Nvb2tpZV93ZWJzaXRlX3VzZXMnXSA9ICdDZSBzaXRlIHdlYiB1dGlsaXNlIGRlcyBjb29raWVzJzsKCi8vIFNldHRpbmdzIHRhYgokbGFuZ1snc2V0dGluZ3NfYXBwZWFyYW5jZSddID0gJ1BhcmFtw6h0cmVzIGRcJ0FwcGFyZW5jZSc7CiRsYW5nWydsYWJlbF9jb2xvcl9zY2hlbWUnXSA9ICdTY2jDqW1hIGRlIENvdWxldXJzJzsKJGxhbmdbJ2NvbG9yX3NjaGVtZV9saWdodCddID0gJ0NsYWlyJzsKJGxhbmdbJ2NvbG9yX3NjaGVtZV9kYXJrJ10gPSAnU29tYnJlJzsKJGxhbmdbJ2xhYmVsX3Bvc2l0aW9uJ10gPSAnUG9zaXRpb24nOwokbGFuZ1sncG9zaXRpb25fYm90dG9tJ10gPSAnRW4gQmFzJzsKJGxhbmdbJ3Bvc2l0aW9uX2NlbnRlciddID0gJ0NlbnRyZSc7CiRsYW5nWydwb3NpdGlvbl90b3AnXSA9ICdFbiBIYXV0JzsKJGxhbmdbJ2xhYmVsX3NpemUnXSA9ICdUYWlsbGUnOwokbGFuZ1snc2l6ZV9jb21wYWN0J10gPSAnQ29tcGFjdCc7CiRsYW5nWydzaXplX25vcm1hbCddID0gJ05vcm1hbCc7CiRsYW5nWydzaXplX2xhcmdlJ10gPSAnR3JhbmQnOwokbGFuZ1snc2l6ZV93aWRlJ10gPSAnTGFyZ2UnOwokbGFuZ1snbXNnX3NldHRpbmdzX3NhdmVkJ10gPSAnUGFyYW3DqHRyZXMgZW5yZWdpc3Ryw6lzIGF2ZWMgc3VjY8Oocyc7CgovLyBDdXN0b20gdGV4dCBzZXR0aW5ncwokbGFuZ1snc2V0dGluZ3NfY3VzdG9tX3RleHQnXSA9ICdUZXh0ZSBQZXJzb25uYWxpc8OpJzsKJGxhbmdbJ2xhYmVsX2N1c3RvbV90aXRsZSddID0gJ1RpdHJlIFBlcnNvbm5hbGlzw6knOwokbGFuZ1snbGFiZWxfY3VzdG9tX3RleHQnXSA9ICdUZXh0ZSBkZSBEZXNjcmlwdGlvbiBQZXJzb25uYWxpc8OpJzsKJGxhbmdbJ2xhYmVsX3ByaW1hcnlfY29sb3InXSA9ICdDb3VsZXVyIGR1IEJvdXRvbiBQcmluY2lwYWwnOwokbGFuZ1snaGVscF9wcmltYXJ5X2NvbG9yJ10gPSAnQ2hvaXNpc3NleiB1bmUgY291bGV1ciBxdWkgY29ycmVzcG9uZCBhdSB0aMOobWUgZGUgdm90cmUgc2l0ZSB3ZWInOwokbGFuZ1snZXJyb3JfaW52YWxpZF9nb29nbGVfdGFnX2lkJ10gPSAnRm9ybWF0IEdvb2dsZSBUYWcgSUQgaW52YWxpZGUuIFV0aWxpc2V6IGxlIGZvcm1hdCBHQTQgKEctWFhYWFhYWFhYWCkgb3UgR1RNIChHVE0tWFhYWFhYWCknOwokbGFuZ1snbGFiZWxfaW5qZWN0X2pxdWVyeSddID0gJ0luamVjdGVyIGxhIGJpYmxpb3Row6hxdWUgalF1ZXJ5JzsKJGxhbmdbJ2hlbHBfaW5qZWN0X2pxdWVyeSddID0gJ0FjdGl2ZXogc2kgdm90cmUgdGjDqG1lIG5cJ2luY2x1dCBwYXMgalF1ZXJ5IChyZXF1aXMgcG91ciBsYSBmb25jdGlvbm5hbGl0w6kgZGUgbGEgYmFubmnDqHJlIGRlIGNvbnNlbnRlbWVudCknOwoKJGxhbmdbJ2Nvb2tpZV9hYm91dF90ZXh0J10gPSAnTGVzIGNvb2tpZXMgc29udCBkZXMgZmljaGllcnMgbnVtw6lyaXF1ZXMgcXVlIGxlcyBzaXRlcyB3ZWIgcGxhY2VudCBzdXIgdm90cmUgYXBwYXJlaWwgcG91ciBzZSBzb3V2ZW5pciBkZSB2b3MgcHLDqWbDqXJlbmNlcyBldCBhY3Rpb25zLCBhZmluIHF1ZSB2b3VzIG5cJ2F5ZXogcGFzIMOgIHJlc3NhaXNpciBsZXMgaW5mb3JtYXRpb25zIGxvcnMgZGUgdmlzaXRlcyB1bHTDqXJpZXVyZXMuPGJyPjxicj5Ob3VzIHV0aWxpc29ucyBkZXMgY29va2llcyBwb3VyIGFtw6lsaW9yZXIgdm90cmUgZXhww6lyaWVuY2UsIGZvdXJuaXIgZHUgY29udGVudSBwZXJzb25uYWxpc8OpIGV0IGFuYWx5c2VyIGxlIHRyYWZpYyBkdSBzaXRlIHdlYi4gTGVzIGNvb2tpZXMgZXNzZW50aWVscyBzb250IG7DqWNlc3NhaXJlcyBhdSBmb25jdGlvbm5lbWVudCwgdGFuZGlzIHF1ZSBkXCdhdXRyZXMgbm91cyBhaWRlbnQgw6AgYW3DqWxpb3JlciBsZSBzaXRlLjxicj48YnI+RGVzIGNvb2tpZXMgdGllcnMgcHJvdmVuYW50IGRlIHLDqXNlYXV4IHNvY2lhdXgsIGRlIGZvdXJuaXNzZXVycyBkXCdhbmFseXNlIGV0IGRlIHBhcnRlbmFpcmVzIHB1YmxpY2l0YWlyZXMgcGV1dmVudCDDqWdhbGVtZW50IMOqdHJlIHV0aWxpc8OpcyBwb3VyIGZvdXJuaXIgZHUgY29udGVudSBjaWJsw6kgc3VyIGRcJ2F1dHJlcyBzaXRlcyB3ZWIuPGJyPjxicj5Wb3VzIHBvdXZleiBhY2NlcHRlciBvdSByZWZ1c2VyIGxlcyBjb29raWVzIHZpYSBsZXMgcGFyYW3DqHRyZXMgZGUgdm90cmUgbmF2aWdhdGV1ciBvdSBjZXR0ZSBiYW5uacOocmUuIExlIGNvbnNlbnRlbWVudCBwZXV0IMOqdHJlIHJldGlyw6kgw6AgdG91dCBtb21lbnQgZW4gYWp1c3RhbnQgdm9zIHByw6lmw6lyZW5jZXMgaWNpLjxicj48YnI+UG91ciBwbHVzIGRcJ2luZm9ybWF0aW9ucyBzdXIgbGUgdHJhaXRlbWVudCBkZXMgZG9ubsOpZXMgZXQgbGVzIGRyb2l0cyDDoCBsYSB2aWUgcHJpdsOpZSwgdmV1aWxsZXogY29uc3VsdGVyIG5vdHJlIFBvbGl0aXF1ZSBkZSBDb25maWRlbnRpYWxpdMOpLic7Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/he_IL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAn15TXnteV15PXldecINeU15XXqten158nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ9eU157XldeT15XXnCDXlNeV16HXqCc7CiRsYW5nWydkZXNjcmlwdGlvbiddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtINec16bXmdeV16ogR0RQUiDXotedINeQ15nXoNeY15LXqNem15nXmdeqIEdBNC9HVE0uJzsKJGxhbmdbJ2FkbWluX3RpdGxlJ10gPSAn15TXkteT16jXldeqIEdvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ9eU15LXmdep15Qg16DXk9eX16rXlC4g15HXk9eV16cg15DXqiDXlNeU16jXqdeQ15XXqiDXqdec15ouJzsKCiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9qcyddID0gJ9eR15zXldenIEphdmFTY3JpcHQnOwokbGFuZ1snbGFiZWxfdGVtcGxhdGVfaHRtbCddID0gJ9eq15HXoNeZ16og15HXkNeg16gg15TXodeb157XlCc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9jc3MnXSA9ICdDU1Mg15TXodeb157XlCc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZSddID0gJ9eq15HXoNeZ16onOwokbGFuZ1snbGFiZWxfanNfcG9zaXRpb24nXSA9ICfXnteZ16fXldedINeU15vXoNeh16ogSmF2YVNjcmlwdCc7CgokbGFuZ1snanNfaGVhZCddID0gJ9eU15vXoNehINeRLSZsdDtoZWFkJmd0Oyc7CiRsYW5nWydqc19ib2R5J10gPSAn15TXm9eg16Eg15HXodeV16MgJmx0O2JvZHkmZ3Q7JzsKCiRsYW5nWydzdWJtaXQnXSA9ICfXqdee15XXqCc7CiRsYW5nWydjYW5jZWwnXSA9ICfXkdeY15wnOwokbGFuZ1snc2V0dGluZ3Nfc2F2ZWQnXSA9ICfXlNeU15LXk9eo15XXqiDXoNep157XqNeVJzsKCiRsYW5nWydjb25zZW50X2FuYWx5dGljc19zdG9yYWdlJ10gPSAn15DXl9eh15XXnyDXkNeg15zXmdeY15nXp9ehJzsKJGxhbmdbJ2NvbnNlbnRfYWRfc3RvcmFnZSddID0gJ9eQ15fXodeV158g16TXqNeh15XXnteV16onOwokbGFuZ1snY29uc2VudF9hZF9wZXJzb25hbGl6YXRpb24nXSA9ICfXlNeq15DXnteUINeQ15nXqdeZ16og16TXqNeh15XXnteV16onOwokbGFuZ1snY29uc2VudF9hZF91c2VyX2RhdGEnXSA9ICfXoNeq15XXoNeZINee16nXqtee16kg16TXqNeh15XXnteV16onOwokbGFuZ1snY29uc2VudF9wZXJzb25hbGl6YXRpb24nXSA9ICfXlNeq15DXnteUINeQ15nXqdeZ16onOwoKJGxhbmdbJ2luamVjdGlvbl9sb2NhdGlvbiddID0gJ9ee15nXp9eV150g15TXlteo16fXqiBKYXZhU2NyaXB0JzsKJGxhbmdbJ2xhYmVsX2VuYWJsZWQnXSA9ICfXlNek16LXnCBHb29nbGUgQ29uc2VudCBQbGF0Zm9ybSc7CiRsYW5nWydhc2tfdW5pbnN0YWxsJ10gPSAn15TXkNedINeQ16rXlCDXkdeY15XXlyDXqdeR16jXpteV16DXmiDXnNeU16HXmdeoINeQ16og157XldeT15XXnCBHb29nbGVDb25zZW50UGxhdGZvcm0/JzsKJGxhbmdbJ2xhYmVsX2dvb2dsZV90YWdfaWQnXSA9ICdHb29nbGUgVGFnIElEIChHQTQ6IEctWFhYWFhYWCDXkNeVIEdUTTogR1RNLVhYWFhYWFgpJzsKJGxhbmdbJ2hlbHBfZ29vZ2xlX3RhZ19pZCddICA9ICfXnteW15XXlNeUINeQ15XXmNeV157XmNeZ16ouIEdBNCDXmNeV16LXnyBndGFnLmpzOyBHVE0g15jXldei158g15DXqiDXlNen15XXoNeY15nXmdeg16guJzsKJGxhbmdbJ2xhYmVsX3JlZ3VsYXRpb24nXSA9ICfXpteZ15XXqiDXnNeq16fXoNeV16og16TXqNeY15nXldeqJzsKCi8vIENvb2tpZSBjb25zZW50IHRyYW5zbGF0aW9ucwokbGFuZ1snY29va2llX3RpdGxlJ10gPSAn15TXoteT16TXldeqINei15XXkteZ15XXqic7CiRsYW5nWydjb29raWVfY29uc2VudF90ZXh0J10gPSAn15DXoNeVINee16nXqtee16nXmdedINeR16LXldeS15nXldeqINeb15PXmSDXnNeU16rXkNeZ150g15DXmdep15nXqiDXqteV15vXnyDXldek16jXodeV157XldeqLCDXnNeh16TXpyDXqteb15XXoNeV16og157Xk9eZ15Qg15fXkdeo16rXmdeqINeV15zXoNeq15cg15DXqiDXlNeq16DXldei15Qg16nXnNeg15UuINeQ16DXlSDXktedINeX15XXnNen15nXnSDXnteZ15PXoiDXotecINeU16nXmdee15XXqSDXqdec15og15HXkNeq16gg16nXnNeg15Ug16LXnSDXqdeV16rXpNeZINeU157Xk9eZ15Qg15TXl9eR16jXqteZ16osINeU16TXqNeh15XXnSDXldeU15DXoNec15nXmNeZ16fXoSDXqdec16DXlS4nOwokbGFuZ1snY29va2llX25lY2Vzc2FyeSddID0gJ9eg15fXldem15XXqic7CiRsYW5nWydjb29raWVfcHJlZmVyZW5jZXMnXSA9ICfXlNei15PXpNeV16onOwokbGFuZ1snY29va2llX3N0YXRpc3RpY3MnXSA9ICfXodeY15jXmdeh15jXmden15XXqic7CiRsYW5nWydjb29raWVfbWFya2V0aW5nJ10gPSAn16nXmdeV15XXpyc7CiRsYW5nWydjb29raWVfbmVjZXNzYXJ5X2Rlc2MnXSA9ICfXoNeT16jXqdeV16og15zXpNeV16DXp9em15nXldeg15zXmdeV16og15HXodeZ16HXmdeqINep15wg15TXkNeq16gnOwokbGFuZ1snY29va2llX3ByZWZlcmVuY2VzX2Rlc2MnXSA9ICfXlteV15vXqNeV16og15DXqiDXlNeU15LXk9eo15XXqiDXldeU15HXl9eZ16jXldeqINep15zXmic7CiRsYW5nWydjb29raWVfc3RhdGlzdGljc19kZXNjJ10gPSAn16LXldeW16jXldeqINec16DXlSDXnNeU15HXmdefINeQ15nXmiDXkNeq15Qg157Xqdeq157XqSDXkdeQ16rXqCDXqdec16DXlSc7CiRsYW5nWydjb29raWVfbWFya2V0aW5nX2Rlc2MnXSA9ICfXpNeo16HXldee15XXqiDXldeq15XXm9efINee15XXqteQ157XmdedINeQ15nXqdeZ16onOwoKJGxhbmdbJ2Nvb2tpZV9kZW55J10gPSAn15PXl9eUJzsKJGxhbmdbJ2Nvb2tpZV9jdXN0b21pemUnXSA9ICfXlNeq15DXnSDXkNeZ16nXmdeqJzsKJGxhbmdbJ2Nvb2tpZV9hbGxvd19hbGwnXSA9ICfXkNek16nXqCDXlNeb15wnOwokbGFuZ1snY29va2llX3NhdmVfc2VsZWN0aW9uJ10gPSAn16nXnteV16gg15HXl9eZ16jXlCc7CiRsYW5nWydjb29raWVfYWNrbm93bGVkZ2UnXSA9ICfXnNeU15vXmdeoJzsKJGxhbmdbJ2Nvb2tpZV90YWJfY29uc2VudCddID0gJ9eU16HXm9ee15QnOwokbGFuZ1snY29va2llX3RhYl9kZXRhaWxzJ10gPSAn16TXqNeY15nXnSc7CiRsYW5nWydjb29raWVfdGFiX2Fib3V0J10gPSAn15DXldeT15XXqic7CiRsYW5nWydjb29raWVfd2Vic2l0ZV91c2VzJ10gPSAn15DXqteoINeW15Qg157Xqdeq157XqSDXkdei15XXkteZ15XXqic7CgovLyBTZXR0aW5ncyB0YWIKJGxhbmdbJ3NldHRpbmdzX2FwcGVhcmFuY2UnXSA9ICfXlNeS15PXqNeV16og157XqNeQ15QnOwokbGFuZ1snbGFiZWxfY29sb3Jfc2NoZW1lJ10gPSAn16LXqNeb16og16bXkdei15nXnSc7CiRsYW5nWydjb2xvcl9zY2hlbWVfbGlnaHQnXSA9ICfXkdeU15nXqCc7CiRsYW5nWydjb2xvcl9zY2hlbWVfZGFyayddID0gJ9eb15TXlCc7CiRsYW5nWydsYWJlbF9wb3NpdGlvbiddID0gJ9ee15nXp9eV150nOwokbGFuZ1sncG9zaXRpb25fYm90dG9tJ10gPSAn15zXnteY15QnOwokbGFuZ1sncG9zaXRpb25fY2VudGVyJ10gPSAn15HXnteo15vXlic7CiRsYW5nWydwb3NpdGlvbl90b3AnXSA9ICfXnNee16LXnNeUJzsKJGxhbmdbJ2xhYmVsX3NpemUnXSA9ICfXkteV15PXnCc7CiRsYW5nWydzaXplX2NvbXBhY3QnXSA9ICfXp9eV157XpNen15jXmSc7CiRsYW5nWydzaXplX25vcm1hbCddID0gJ9eo15LXmdecJzsKJGxhbmdbJ3NpemVfbGFyZ2UnXSA9ICfXkteT15XXnCc7CiRsYW5nWydzaXplX3dpZGUnXSA9ICfXqNeX15EnOwokbGFuZ1snbXNnX3NldHRpbmdzX3NhdmVkJ10gPSAn15TXlNeS15PXqNeV16og16DXqdee16jXlSDXkdeU16bXnNeX15QnOwoKLy8gQ3VzdG9tIHRleHQgc2V0dGluZ3MKJGxhbmdbJ3NldHRpbmdzX2N1c3RvbV90ZXh0J10gPSAn15jXp9eh15gg157Xldeq15DXnSDXkNeZ16nXmdeqJzsKJGxhbmdbJ2xhYmVsX2N1c3RvbV90aXRsZSddID0gJ9eb15XXqteo16og157Xldeq15DXnteqINeQ15nXqdeZ16onOwokbGFuZ1snbGFiZWxfY3VzdG9tX3RleHQnXSA9ICfXmNen16HXmCDXqteZ15DXldeoINee15XXqteQ150g15DXmdep15nXqic7CiRsYW5nWydsYWJlbF9wcmltYXJ5X2NvbG9yJ10gPSAn16bXkdeiINeb16TXqteV16gg16jXkNep15knOwokbGFuZ1snaGVscF9wcmltYXJ5X2NvbG9yJ10gPSAn15HXl9eoINem15HXoiDXlNee16rXkNeZ150g15zXoteZ16bXldeRINeU15DXqteoINep15zXmic7CiRsYW5nWydlcnJvcl9pbnZhbGlkX2dvb2dsZV90YWdfaWQnXSA9ICfXpNeV16jXnteYIEdvb2dsZSBUYWcgSUQg15zXkCDXl9eV16fXmS4g15TXqdeq157XqSDXkdek15XXqNee15ggR0E0IChHLVhYWFhYWFhYWFgpINeQ15UgR1RNIChHVE0tWFhYWFhYWCknOwokbGFuZ1snbGFiZWxfaW5qZWN0X2pxdWVyeSddID0gJ9eU15bXqNenINeh16TXqNeZ15nXqiBqUXVlcnknOwokbGFuZ1snaGVscF9pbmplY3RfanF1ZXJ5J10gPSAn15TXpNei15wg15DXnSDXlNei15nXpteV15Eg16nXnNeaINec15Ag15vXldec15wgalF1ZXJ5ICjXoNeT16jXqSDXnNek15XXoNen16bXmdeV16DXnNeZ15XXqiDXkdeQ16DXqCDXlNeh15vXnteUKSc7CgokbGFuZ1snY29va2llX2Fib3V0X3RleHQnXSA9ICfXoteV15LXmdeV16og15TXnyDXp9eR16bXmdedINeT15nXkteZ15jXnNeZ15nXnSDXqdeQ16rXqNeZ150g157XpteZ15HXmdedINeR157Xm9ep15nXqCDXqdec15og15vXk9eZINec15bXm9eV16gg15DXqiDXlNeU16LXk9ek15XXqiDXldeU16TXoteV15zXldeqINep15zXmiwg15vXmiDXqdec15Ag16rXpteY16jXmiDXnNeU15bXmdefINee15nXk9eiINep15XXkSDXkdeR15nXp9eV16jXmdedINei16rXmdeT15nXnS48YnI+PGJyPteQ16DXlSDXntep16rXntep15nXnSDXkdei15XXkteZ15XXqiDXm9eT15kg15zXqdek16gg15DXqiDXlNeX15XXldeZ15Qg16nXnNeaLCDXnNeh16TXpyDXqteV15vXnyDXnteV16rXkNedINeQ15nXqdeZ16og15XXnNeg16rXlyDXqteg15XXoteUINeR15DXqteoLiDXoteV15LXmdeV16og15fXmdeV16DXmdeV16og16DXk9eo16nXldeqINec16rXpNen15XXkywg15HXoteV15Mg15DXl9eo15XXqiDXoteV15bXqNeV16og15zXoNeVINec16nXpNeoINeQ16og15TXkNeq16guPGJyPjxicj7XoteV15LXmdeV16og16bXkyDXqdec15nXqdeZINee16jXqdeq15XXqiDXl9eR16jXqteZ15XXqiwg16HXpNen15kg15DXoNec15nXmNeZ16fXlCDXldep15XXqtek15kg16TXqNeh15XXnSDXotep15XXmdeV16og15zXlNeZ15XXqiDXkdep15nXnteV16kg15vXk9eZINec16HXpNenINeq15XXm9efINee157Xlden15Mg15HXkNeq16jXmdedINeQ15fXqNeZ150uPGJyPjxicj7XkNeq15Qg15nXm9eV15wg15zXp9eR15wg15DXlSDXnNeT15fXldeqINei15XXkteZ15XXqiDXk9eo15og15TXkteT16jXldeqINeU15PXpNeT16TXnyDXqdec15og15DXlSDXkdeQ16DXqCDXlteULiDXlNeh15vXnteUINeg15nXqteg16og15zXkdeZ15jXldecINeR15vXnCDXoteqINei15wg15nXk9eZINeU16rXkNee16og15TXlNei15PXpNeV16og16nXnNeaINeb15DXny48YnI+PGJyPtec157XmdeT16Ig16DXldeh16Mg16LXnCDXmNeZ16TXldecINeR16DXqteV16DXmdedINeV15bXm9eV15nXldeqINek16jXmNeZ15XXqiwg15DXoNeQINeo15DXlCDXkNeqINee15PXmdeg15nXldeqINeU16TXqNeY15nXldeqINep15zXoNeVLic7Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/hu_HU.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnTW9kdWwgdGVsZXDDrXR2ZSc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnTW9kdWwgZWx0w6F2b2zDrXR2YSc7CiRsYW5nWydkZXNjcmlwdGlvbiddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtIEdEUFIgbWVnZmVsZWzFkXPDqWdoZXogR0E0L0dUTSBpbnRlZ3LDoWNpw7N2YWwuJzsKJGxhbmdbJ2FkbWluX3RpdGxlJ10gPSAnR29vZ2xlIENvbnNlbnQgUGxhdGZvcm0gQmXDoWxsw610w6Fzb2snOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnSG96esOhZsOpcsOpcyBtZWd0YWdhZHZhLiBFbGxlbsWRcml6emUgam9nb3N1bHRzw6FnYWl0Lic7CgokbGFuZ1snbGFiZWxfdGVtcGxhdGVfanMnXSA9ICdKYXZhU2NyaXB0IEJsb2trJzsKJGxhbmdbJ2xhYmVsX3RlbXBsYXRlX2h0bWwnXSA9ICdIb3p6w6Fqw6FydWzDoXMgQmFubmVyIFNhYmxvbic7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9jc3MnXSA9ICdIb3p6w6Fqw6FydWzDoXMgQ1NTJzsKJGxhbmdbJ2xhYmVsX3RlbXBsYXRlJ10gPSAnU2FibG9uJzsKJGxhbmdbJ2xhYmVsX2pzX3Bvc2l0aW9uJ10gPSAnSmF2YVNjcmlwdCBCZXN6w7pyw6FzaSBQb3rDrWNpw7MnOwoKJGxhbmdbJ2pzX2hlYWQnXSA9ICdCZXN6w7pyw6FzICZsdDtoZWFkJmd0Oy1iZSc7CiRsYW5nWydqc19ib2R5J10gPSAnQmVzesO6csOhcyAmbHQ7Ym9keSZndDsgdsOpZ8OpcmUnOwoKJGxhbmdbJ3N1Ym1pdCddID0gJ01lbnTDqXMnOwokbGFuZ1snY2FuY2VsJ10gPSAnTcOpZ3NlJzsKJGxhbmdbJ3NldHRpbmdzX3NhdmVkJ10gPSAnQmXDoWxsw610w6Fzb2sgbWVudHZlJzsKCiRsYW5nWydjb25zZW50X2FuYWx5dGljc19zdG9yYWdlJ10gPSAnQW5hbHl0aWNzIFTDoXJvbMOhcyc7CiRsYW5nWydjb25zZW50X2FkX3N0b3JhZ2UnXSA9ICdIaXJkZXTDqXMgVMOhcm9sw6FzJzsKJGxhbmdbJ2NvbnNlbnRfYWRfcGVyc29uYWxpemF0aW9uJ10gPSAnSGlyZGV0w6lzIFN6ZW3DqWx5cmUgU3phYsOhcyc7CiRsYW5nWydjb25zZW50X2FkX3VzZXJfZGF0YSddID0gJ0hpcmRldMOpcyBGZWxoYXN6bsOhbMOzaSBBZGF0b2snOwokbGFuZ1snY29uc2VudF9wZXJzb25hbGl6YXRpb24nXSA9ICdTemVtw6lseXJlIFN6YWLDoXMnOwoKJGxhbmdbJ2luamVjdGlvbl9sb2NhdGlvbiddID0gJ0phdmFTY3JpcHQgSW5qZWt0w6Fsw6FzaSBIZWx5JzsKJGxhbmdbJ2xhYmVsX2VuYWJsZWQnXSA9ICdHb29nbGUgQ29uc2VudCBQbGF0Zm9ybSBlbmdlZMOpbHllesOpc2UnOwokbGFuZ1snYXNrX3VuaW5zdGFsbCddID0gJ0JpenRvcywgaG9neSBlbCBzemVyZXRuw6kgdMOhdm9sw610YW5pIGEgR29vZ2xlQ29uc2VudFBsYXRmb3JtIG1vZHVsdD8nOwokbGFuZ1snbGFiZWxfZ29vZ2xlX3RhZ19pZCddID0gJ0dvb2dsZSBUYWcgSUQgKEdBNDogRy1YWFhYWFhYIHZhZ3kgR1RNOiBHVE0tWFhYWFhYWCknOwokbGFuZ1snaGVscF9nb29nbGVfdGFnX2lkJ10gID0gJ0F1dG9tYXRpa3VzYW4gw6lzemxlbHQuIEdBNCBiZXTDtmx0aSBhIGd0YWcuanMtdDsgR1RNIGJldMO2bHRpIGEga29udMOpbmVydC4nOwokbGFuZ1snbGFiZWxfcmVndWxhdGlvbiddID0gJ0FkYXR2w6lkZWxtaSBTemFiw6FseW96w6FzIE1lZ2ZlbGVsxZFzw6lnJzsKCi8vIENvb2tpZSBjb25zZW50IHRyYW5zbGF0aW9ucwokbGFuZ1snY29va2llX3RpdGxlJ10gPSAnQ29va2llIEJlw6FsbMOtdMOhc29rJzsKJGxhbmdbJ2Nvb2tpZV9jb25zZW50X3RleHQnXSA9ICdDb29raWUta2F0IGhhc3puw6FsdW5rIGEgdGFydGFsb20gw6lzIGhpcmRldMOpc2VrIHN6ZW3DqWx5cmUgc3phYsOhc8OhaG96LCBrw7Z6w7Zzc8OpZ2kgbcOpZGlhIGZ1bmtjacOzayBiaXp0b3PDrXTDoXPDoWhveiDDqXMgZm9yZ2FsbXVuayBlbGVtesOpc8OpaGV6LiBJbmZvcm3DoWNpw7NrYXQgb3N6dHVuayBtZWcgd2Vib2xkYWx1bmsgaGFzem7DoWxhdMOhcsOzbCBrw7Z6w7Zzc8OpZ2kgbcOpZGlhLCBoaXJkZXTDqXNpIMOpcyBlbGVtesOpc2kgcGFydG5lcmVpbmtrZWwgaXMuJzsKJGxhbmdbJ2Nvb2tpZV9uZWNlc3NhcnknXSA9ICdTesO8a3PDqWdlcyc7CiRsYW5nWydjb29raWVfcHJlZmVyZW5jZXMnXSA9ICdCZcOhbGzDrXTDoXNvayc7CiRsYW5nWydjb29raWVfc3RhdGlzdGljcyddID0gJ1N0YXRpc3p0aWvDoWsnOwokbGFuZ1snY29va2llX21hcmtldGluZyddID0gJ01hcmtldGluZyc7CiRsYW5nWydjb29raWVfbmVjZXNzYXJ5X2Rlc2MnXSA9ICdBeiBhbGFwdmV0xZEgd2Vib2xkYWwgZnVua2Npb25hbGl0w6FzaG96IHN6w7xrc8OpZ2VzJzsKJGxhbmdbJ2Nvb2tpZV9wcmVmZXJlbmNlc19kZXNjJ10gPSAnTWVnamVneXppayBiZcOhbGzDrXTDoXNhaXQgw6lzIHbDoWxhc3p0w6FzYWl0JzsKJGxhbmdbJ2Nvb2tpZV9zdGF0aXN0aWNzX2Rlc2MnXSA9ICdTZWfDrXRlbmVrIG1lZ8OpcnRlbmksIGhvZ3lhbiBoYXN6bsOhbGphIHdlYm9sZGFsdW5rYXQnOwokbGFuZ1snY29va2llX21hcmtldGluZ19kZXNjJ10gPSAnU3plbcOpbHlyZSBzemFib3R0IGhpcmRldMOpc2VrIMOpcyB0YXJ0YWxvbSc7CgokbGFuZ1snY29va2llX2RlbnknXSA9ICdFbHV0YXPDrXTDoXMnOwokbGFuZ1snY29va2llX2N1c3RvbWl6ZSddID0gJ1Rlc3RyZXN6YWLDoXMnOwokbGFuZ1snY29va2llX2FsbG93X2FsbCddID0gJ8OWc3N6ZXMgRW5nZWTDqWx5ZXrDqXNlJzsKJGxhbmdbJ2Nvb2tpZV9zYXZlX3NlbGVjdGlvbiddID0gJ1bDoWxhc3p0w6FzIE1lbnTDqXNlJzsKJGxhbmdbJ2Nvb2tpZV9hY2tub3dsZWRnZSddID0gJ0VsaXNtZXInOwokbGFuZ1snY29va2llX3RhYl9jb25zZW50J10gPSAnSG96esOhasOhcnVsw6FzJzsKJGxhbmdbJ2Nvb2tpZV90YWJfZGV0YWlscyddID0gJ1LDqXN6bGV0ZWsnOwokbGFuZ1snY29va2llX3RhYl9hYm91dCddID0gJ1LDs2x1bmsnOwokbGFuZ1snY29va2llX3dlYnNpdGVfdXNlcyddID0gJ0V6IGEgd2Vib2xkYWwgY29va2llLWthdCBoYXN6bsOhbCc7CgovLyBTZXR0aW5ncyB0YWIKJGxhbmdbJ3NldHRpbmdzX2FwcGVhcmFuY2UnXSA9ICdNZWdqZWxlbsOpcyBCZcOhbGzDrXTDoXNvayc7CiRsYW5nWydsYWJlbF9jb2xvcl9zY2hlbWUnXSA9ICdTesOtbnPDqW1hJzsKJGxhbmdbJ2NvbG9yX3NjaGVtZV9saWdodCddID0gJ1ZpbMOhZ29zJzsKJGxhbmdbJ2NvbG9yX3NjaGVtZV9kYXJrJ10gPSAnU8O2dMOpdCc7CiRsYW5nWydsYWJlbF9wb3NpdGlvbiddID0gJ1BvesOtY2nDsyc7CiRsYW5nWydwb3NpdGlvbl9ib3R0b20nXSA9ICdBbHVsJzsKJGxhbmdbJ3Bvc2l0aW9uX2NlbnRlciddID0gJ0vDtnrDqXBlbic7CiRsYW5nWydwb3NpdGlvbl90b3AnXSA9ICdGZWzDvGwnOwokbGFuZ1snbGFiZWxfc2l6ZSddID0gJ03DqXJldCc7CiRsYW5nWydzaXplX2NvbXBhY3QnXSA9ICdLb21wYWt0JzsKJGxhbmdbJ3NpemVfbm9ybWFsJ10gPSAnTm9ybcOhbCc7CiRsYW5nWydzaXplX2xhcmdlJ10gPSAnTmFneSc7CiRsYW5nWydzaXplX3dpZGUnXSA9ICdTesOpbGVzJzsKJGxhbmdbJ21zZ19zZXR0aW5nc19zYXZlZCddID0gJ0Jlw6FsbMOtdMOhc29rIHNpa2VyZXNlbiBtZW50dmUnOwoKLy8gQ3VzdG9tIHRleHQgc2V0dGluZ3MKJGxhbmdbJ3NldHRpbmdzX2N1c3RvbV90ZXh0J10gPSAnRWd5w6luaSBTesO2dmVnJzsKJGxhbmdbJ2xhYmVsX2N1c3RvbV90aXRsZSddID0gJ0VnecOpbmkgQ8OtbSc7CiRsYW5nWydsYWJlbF9jdXN0b21fdGV4dCddID0gJ0VnecOpbmkgTGXDrXLDsyBTesO2dmVnJzsKJGxhbmdbJ2xhYmVsX3ByaW1hcnlfY29sb3InXSA9ICdFbHPFkWRsZWdlcyBHb21iIFN6w61uJzsKJGxhbmdbJ2hlbHBfcHJpbWFyeV9jb2xvciddID0gJ1bDoWxhc3N6b24gZWd5IHN6w61udCwgYW1lbHkgaWxsZXN6a2VkaWsgYSB3ZWJvbGRhbCB0w6ltw6Fqw6Fob3onOwokbGFuZ1snZXJyb3JfaW52YWxpZF9nb29nbGVfdGFnX2lkJ10gPSAnw4lydsOpbnl0ZWxlbiBHb29nbGUgVGFnIElEIGZvcm3DoXR1bS4gSGFzem7DoWxqYSBhIEdBNCBmb3Jtw6F0dW1vdCAoRy1YWFhYWFhYWFhYKSB2YWd5IEdUTSBmb3Jtw6F0dW1vdCAoR1RNLVhYWFhYWFgpJzsKJGxhbmdbJ2xhYmVsX2luamVjdF9qcXVlcnknXSA9ICdqUXVlcnkga8O2bnl2dMOhciBiZXN6w7pyw6FzYSc7CiRsYW5nWydoZWxwX2luamVjdF9qcXVlcnknXSA9ICdFbmdlZMOpbHllenplLCBoYSBhIHTDqW3DoWphIG5lbSB0YXJ0YWxtYXp6YSBhIGpRdWVyeS10IChzesO8a3PDqWdlcyBhIGhvenrDoWrDoXJ1bMOhc2kgYmFubmVyIGZ1bmtjaW9uYWxpdMOhc8OhaG96KSc7CgokbGFuZ1snY29va2llX2Fib3V0X3RleHQnXSA9ICdBIGNvb2tpZS1rIGRpZ2l0w6FsaXMgZsOhamxvaywgYW1lbHlla2V0IGEgd2Vib2xkYWxhayBheiBlc3prw7Z6w6luIGhlbHllem5layBlbCwgaG9neSBlbWzDqWtlenplbmVrIGEgcHJlZmVyZW5jacOhaXJhIMOpcyB0ZXbDqWtlbnlzw6lnZWlyZSwgw61neSBuZW0ga2VsbCDDumpyYSBtZWdhZG5pYSBheiBpbmZvcm3DoWNpw7NrYXQgYSBqw7Z2xZFiZWxpIGzDoXRvZ2F0w6Fzb2sgc29yw6FuLjxicj48YnI+Q29va2llLWthdCBoYXN6bsOhbHVuayBheiDDqWxtw6luecOpbmVrIGphdsOtdMOhc8OhcmEsIHN6ZW3DqWx5cmUgc3phYm90dCB0YXJ0YWxvbSBzesOhbGzDrXTDoXPDoXJhIMOpcyBhIHdlYm9sZGFsIGZvcmdhbG3DoW5hayBlbGVtesOpc8OpcmUuIEF6IGFsYXB2ZXTFkSBjb29raWUtayBzesO8a3PDqWdlc2VrIGEgZnVua2Npb25hbGl0w6FzaG96LCBtw61nIG3DoXNvayBzZWfDrXRlbmVrIG5la8O8bmsgYSB3ZWJvbGRhbCBmZWpsZXN6dMOpc8OpYmVuLjxicj48YnI+SGFybWFkaWsgZsOpbCBjb29raWUtamFpIGEga8O2esO2c3PDqWdpIG3DqWRpw6F0w7NsLCBlbGVtesOpc2kgc3pvbGfDoWx0YXTDs2t0w7NsIMOpcyByZWtsw6FtcGFydCBuZXJla3TFkWwgc3ppbnTDqW4gZmVsaGFzem7DoWxoYXTDs2sgY8OpbHpvdHQgdGFydGFsb20gbnnDump0w6Fzw6FyYSBtw6FzIHdlYm9sZGFsYWtvbi48YnI+PGJyPkVsZm9nYWRoYXRqYSB2YWd5IGVsdXRhc8OtdGhhdGphIGEgY29va2llLWthdCBhIGLDtm5nw6lzesWRIGJlw6FsbMOtdMOhc2FpbiB2YWd5IGV6ZW4gYSBiYW5uZXJlbiBrZXJlc3p0w7xsLiBBIGhvenrDoWrDoXJ1bMOhcyBiw6FybWlrb3Igdmlzc3phdm9uaGF0w7MgYSBwcmVmZXJlbmNpw6FrIGl0dCB0w7ZydMOpbsWRIGJlw6FsbMOtdMOhc8OhdmFsLjxicj48YnI+QXogYWRhdGtlemVsw6lzc2VsIMOpcyBheiBhZGF0dsOpZGVsbWkgam9nb2trYWwga2FwY3NvbGF0b3MgdG92w6FiYmkgaW5mb3Jtw6FjacOza8OpcnQgbMOhc2QgYXogQWRhdHbDqWRlbG1pIElyw6FueWVsdmVpbmtldC4nOwo=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/it_IT.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnTW9kdWxvIGluc3RhbGxhdG8nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01vZHVsbyByaW1vc3NvJzsKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnR29vZ2xlIENvbnNlbnQgUGxhdGZvcm0gcGVyIGxhIGNvbmZvcm1pdMOgIEdEUFIgY29uIGludGVncmF6aW9uZSBHQTQvR1RNLic7CiRsYW5nWydhZG1pbl90aXRsZSddID0gJ0ltcG9zdGF6aW9uaSBHb29nbGUgQ29uc2VudCBQbGF0Zm9ybSc7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdBY2Nlc3NvIG5lZ2F0by4gQ29udHJvbGxhIGkgdHVvaSBwZXJtZXNzaS4nOwoKJGxhbmdbJ2xhYmVsX3RlbXBsYXRlX2pzJ10gPSAnQmxvY2NvIEphdmFTY3JpcHQnOwokbGFuZ1snbGFiZWxfdGVtcGxhdGVfaHRtbCddID0gJ1RlbXBsYXRlIEJhbm5lciBDb25zZW5zbyc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9jc3MnXSA9ICdDU1MgQ29uc2Vuc28nOwokbGFuZ1snbGFiZWxfdGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSc7CiRsYW5nWydsYWJlbF9qc19wb3NpdGlvbiddID0gJ1Bvc2l6aW9uZSBJbnNlcmltZW50byBKYXZhU2NyaXB0JzsKCiRsYW5nWydqc19oZWFkJ10gPSAnSW5zZXJpc2NpIGluICZsdDtoZWFkJmd0Oyc7CiRsYW5nWydqc19ib2R5J10gPSAnSW5zZXJpc2NpIGFsbGEgZmluZSBkaSAmbHQ7Ym9keSZndDsnOwoKJGxhbmdbJ3N1Ym1pdCddID0gJ1NhbHZhJzsKJGxhbmdbJ2NhbmNlbCddID0gJ0FubnVsbGEnOwokbGFuZ1snc2V0dGluZ3Nfc2F2ZWQnXSA9ICdJbXBvc3Rhemlvbmkgc2FsdmF0ZSc7CgokbGFuZ1snY29uc2VudF9hbmFseXRpY3Nfc3RvcmFnZSddID0gJ0FyY2hpdmlhemlvbmUgQW5hbHl0aWNzJzsKJGxhbmdbJ2NvbnNlbnRfYWRfc3RvcmFnZSddID0gJ0FyY2hpdmlhemlvbmUgQW5udW5jaSc7CiRsYW5nWydjb25zZW50X2FkX3BlcnNvbmFsaXphdGlvbiddID0gJ1BlcnNvbmFsaXp6YXppb25lIEFubnVuY2knOwokbGFuZ1snY29uc2VudF9hZF91c2VyX2RhdGEnXSA9ICdEYXRpIFV0ZW50ZSBBbm51bmNpJzsKJGxhbmdbJ2NvbnNlbnRfcGVyc29uYWxpemF0aW9uJ10gPSAnUGVyc29uYWxpenphemlvbmUnOwoKJGxhbmdbJ2luamVjdGlvbl9sb2NhdGlvbiddID0gJ1Bvc2l6aW9uZSBJbmllemlvbmUgSmF2YVNjcmlwdCc7CiRsYW5nWydsYWJlbF9lbmFibGVkJ10gPSAnQWJpbGl0YSBHb29nbGUgQ29uc2VudCBQbGF0Zm9ybSc7CiRsYW5nWydhc2tfdW5pbnN0YWxsJ10gPSAnU2VpIHNpY3VybyBkaSB2b2xlciBkaXNpbnN0YWxsYXJlIGlsIG1vZHVsbyBHb29nbGVDb25zZW50UGxhdGZvcm0/JzsKJGxhbmdbJ2xhYmVsX2dvb2dsZV90YWdfaWQnXSA9ICdJRCBUYWcgR29vZ2xlIChHQTQ6IEctWFhYWFhYWCBvIEdUTTogR1RNLVhYWFhYWFgpJzsKJGxhbmdbJ2hlbHBfZ29vZ2xlX3RhZ19pZCddICA9ICdSaWxldmF0byBhdXRvbWF0aWNhbWVudGUuIEdBNCBjYXJpY2EgZ3RhZy5qczsgR1RNIGNhcmljYSBpbCBjb250YWluZXIuJzsKJGxhbmdbJ2xhYmVsX3JlZ3VsYXRpb24nXSA9ICdDb25mb3JtaXTDoCBSZWdvbGFtZW50byBQcml2YWN5JzsKCi8vIENvb2tpZSBjb25zZW50IHRyYW5zbGF0aW9ucwokbGFuZ1snY29va2llX3RpdGxlJ10gPSAnUHJlZmVyZW56ZSBDb29raWUnOwokbGFuZ1snY29va2llX2NvbnNlbnRfdGV4dCddID0gJ1V0aWxpenppYW1vIGkgY29va2llIHBlciBwZXJzb25hbGl6emFyZSBjb250ZW51dGkgZSBhbm51bmNpLCBmb3JuaXJlIGZ1bnppb25hbGl0w6AgZGVpIHNvY2lhbCBtZWRpYSBlIGFuYWxpenphcmUgaWwgbm9zdHJvIHRyYWZmaWNvLiBDb25kaXZpZGlhbW8gYW5jaGUgaW5mb3JtYXppb25pIHN1bCB0dW8gdXRpbGl6em8gZGVsIG5vc3RybyBzaXRvIGNvbiBpIG5vc3RyaSBwYXJ0bmVyIGRpIHNvY2lhbCBtZWRpYSwgcHViYmxpY2l0w6AgZSBhbmFsaXNpLic7CiRsYW5nWydjb29raWVfbmVjZXNzYXJ5J10gPSAnTmVjZXNzYXJpJzsKJGxhbmdbJ2Nvb2tpZV9wcmVmZXJlbmNlcyddID0gJ1ByZWZlcmVuemUnOwokbGFuZ1snY29va2llX3N0YXRpc3RpY3MnXSA9ICdTdGF0aXN0aWNoZSc7CiRsYW5nWydjb29raWVfbWFya2V0aW5nJ10gPSAnTWFya2V0aW5nJzsKJGxhbmdbJ2Nvb2tpZV9uZWNlc3NhcnlfZGVzYyddID0gJ1JpY2hpZXN0aSBwZXIgbGUgZnVuemlvbmFsaXTDoCBkaSBiYXNlIGRlbCBzaXRvJzsKJGxhbmdbJ2Nvb2tpZV9wcmVmZXJlbmNlc19kZXNjJ10gPSAnUmljb3JkYW5vIGxlIHR1ZSBpbXBvc3RhemlvbmkgZSBzY2VsdGUnOwokbGFuZ1snY29va2llX3N0YXRpc3RpY3NfZGVzYyddID0gJ0NpIGFpdXRhbm8gYSBjYXBpcmUgY29tZSB1c2kgaWwgbm9zdHJvIHNpdG8nOwokbGFuZ1snY29va2llX21hcmtldGluZ19kZXNjJ10gPSAnQW5udW5jaSBlIGNvbnRlbnV0aSBwZXJzb25hbGl6emF0aSc7CgokbGFuZ1snY29va2llX2RlbnknXSA9ICdSaWZpdXRhJzsKJGxhbmdbJ2Nvb2tpZV9jdXN0b21pemUnXSA9ICdQZXJzb25hbGl6emEnOwokbGFuZ1snY29va2llX2FsbG93X2FsbCddID0gJ0FjY2V0dGEgVHV0dG8nOwokbGFuZ1snY29va2llX3NhdmVfc2VsZWN0aW9uJ10gPSAnU2FsdmEgU2VsZXppb25lJzsKJGxhbmdbJ2Nvb2tpZV9hY2tub3dsZWRnZSddID0gJ1JpY29ub3NjZXJlJzsKJGxhbmdbJ2Nvb2tpZV90YWJfY29uc2VudCddID0gJ0NvbnNlbnNvJzsKJGxhbmdbJ2Nvb2tpZV90YWJfZGV0YWlscyddID0gJ0RldHRhZ2xpJzsKJGxhbmdbJ2Nvb2tpZV90YWJfYWJvdXQnXSA9ICdJbmZvcm1hemlvbmknOwokbGFuZ1snY29va2llX3dlYnNpdGVfdXNlcyddID0gJ1F1ZXN0byBzaXRvIHdlYiB1dGlsaXp6YSBpIGNvb2tpZSc7CgovLyBTZXR0aW5ncyB0YWIKJGxhbmdbJ3NldHRpbmdzX2FwcGVhcmFuY2UnXSA9ICdJbXBvc3RhemlvbmkgQXNwZXR0byc7CiRsYW5nWydsYWJlbF9jb2xvcl9zY2hlbWUnXSA9ICdTY2hlbWEgQ29sb3JpJzsKJGxhbmdbJ2NvbG9yX3NjaGVtZV9saWdodCddID0gJ0NoaWFybyc7CiRsYW5nWydjb2xvcl9zY2hlbWVfZGFyayddID0gJ1NjdXJvJzsKJGxhbmdbJ2xhYmVsX3Bvc2l0aW9uJ10gPSAnUG9zaXppb25lJzsKJGxhbmdbJ3Bvc2l0aW9uX2JvdHRvbSddID0gJ0luIEJhc3NvJzsKJGxhbmdbJ3Bvc2l0aW9uX2NlbnRlciddID0gJ0NlbnRybyc7CiRsYW5nWydwb3NpdGlvbl90b3AnXSA9ICdJbiBBbHRvJzsKJGxhbmdbJ2xhYmVsX3NpemUnXSA9ICdEaW1lbnNpb25lJzsKJGxhbmdbJ3NpemVfY29tcGFjdCddID0gJ0NvbXBhdHRvJzsKJGxhbmdbJ3NpemVfbm9ybWFsJ10gPSAnTm9ybWFsZSc7CiRsYW5nWydzaXplX2xhcmdlJ10gPSAnR3JhbmRlJzsKJGxhbmdbJ3NpemVfd2lkZSddID0gJ0xhcmdvJzsKJGxhbmdbJ21zZ19zZXR0aW5nc19zYXZlZCddID0gJ0ltcG9zdGF6aW9uaSBzYWx2YXRlIGNvbiBzdWNjZXNzbyc7CgovLyBDdXN0b20gdGV4dCBzZXR0aW5ncwokbGFuZ1snc2V0dGluZ3NfY3VzdG9tX3RleHQnXSA9ICdUZXN0byBQZXJzb25hbGl6emF0byc7CiRsYW5nWydsYWJlbF9jdXN0b21fdGl0bGUnXSA9ICdUaXRvbG8gUGVyc29uYWxpenphdG8nOwokbGFuZ1snbGFiZWxfY3VzdG9tX3RleHQnXSA9ICdUZXN0byBEZXNjcml6aW9uZSBQZXJzb25hbGl6emF0byc7CiRsYW5nWydsYWJlbF9wcmltYXJ5X2NvbG9yJ10gPSAnQ29sb3JlIFB1bHNhbnRlIFByaW5jaXBhbGUnOwokbGFuZ1snaGVscF9wcmltYXJ5X2NvbG9yJ10gPSAnU2NlZ2xpIHVuIGNvbG9yZSBjaGUgc2kgYWJiaW5pIGFsIHRlbWEgZGVsIHR1byBzaXRvIHdlYic7CiRsYW5nWydlcnJvcl9pbnZhbGlkX2dvb2dsZV90YWdfaWQnXSA9ICdGb3JtYXRvIEdvb2dsZSBUYWcgSUQgbm9uIHZhbGlkby4gVXNhIGZvcm1hdG8gR0E0IChHLVhYWFhYWFhYWFgpIG8gR1RNIChHVE0tWFhYWFhYWCknOwokbGFuZ1snbGFiZWxfaW5qZWN0X2pxdWVyeSddID0gJ0luaWV0dGEgbGlicmVyaWEgalF1ZXJ5JzsKJGxhbmdbJ2hlbHBfaW5qZWN0X2pxdWVyeSddID0gJ0FiaWxpdGEgc2UgaWwgdHVvIHRlbWEgbm9uIGluY2x1ZGUgalF1ZXJ5IChyaWNoaWVzdG8gcGVyIGxhIGZ1bnppb25hbGl0w6AgZGVsIGJhbm5lciBkaSBjb25zZW5zbyknOwoKJGxhbmdbJ2Nvb2tpZV9hYm91dF90ZXh0J10gPSAnSSBjb29raWUgc29ubyBmaWxlIGRpZ2l0YWxpIGNoZSBpIHNpdGkgd2ViIHBvc2l6aW9uYW5vIHN1bCB0dW8gZGlzcG9zaXRpdm8gcGVyIHJpY29yZGFyZSBsZSB0dWUgcHJlZmVyZW56ZSBlIGF6aW9uaSwgY29zw6wgbm9uIGRldmkgcmVpbnNlcmlyZSBsZSBpbmZvcm1hemlvbmkgbmVsbGUgdmlzaXRlIHN1Y2Nlc3NpdmUuPGJyPjxicj5VdGlsaXp6aWFtbyBpIGNvb2tpZSBwZXIgbWlnbGlvcmFyZSBsYSB0dWEgZXNwZXJpZW56YSwgZm9ybmlyZSBjb250ZW51dGkgcGVyc29uYWxpenphdGkgZSBhbmFsaXp6YXJlIGlsIHRyYWZmaWNvIGRlbCBzaXRvIHdlYi4gSSBjb29raWUgZXNzZW56aWFsaSBzb25vIG5lY2Vzc2FyaSBwZXIgaWwgZnVuemlvbmFtZW50bywgbWVudHJlIGFsdHJpIGNpIGFpdXRhbm8gYSBtaWdsaW9yYXJlIGlsIHNpdG8uPGJyPjxicj5Qb3RyZWJiZXJvIGVzc2VyZSB1dGlsaXp6YXRpIGFuY2hlIGNvb2tpZSBkaSB0ZXJ6ZSBwYXJ0aSBkYSBzb2NpYWwgbWVkaWEsIGZvcm5pdG9yaSBkaSBhbmFsaXNpIGUgcGFydG5lciBwdWJibGljaXRhcmkgcGVyIGZvcm5pcmUgY29udGVudXRpIG1pcmF0aSBzdSBhbHRyaSBzaXRpIHdlYi48YnI+PGJyPlB1b2kgYWNjZXR0YXJlIG8gcmlmaXV0YXJlIGkgY29va2llIHRyYW1pdGUgbGUgaW1wb3N0YXppb25pIGRlbCBicm93c2VyIG8gcXVlc3RvIGJhbm5lci4gSWwgY29uc2Vuc28gcHXDsiBlc3NlcmUgcml0aXJhdG8gaW4gcXVhbHNpYXNpIG1vbWVudG8gcmVnb2xhbmRvIGxlIHR1ZSBwcmVmZXJlbnplIHF1aS48YnI+PGJyPlBlciBtYWdnaW9yaSBpbmZvcm1hemlvbmkgc3VsbGEgZ2VzdGlvbmUgZGVpIGRhdGkgZSBzdWkgZGlyaXR0aSBzdWxsYSBwcml2YWN5LCBjb25zdWx0YSBsYSBub3N0cmEgSW5mb3JtYXRpdmEgc3VsbGEgUHJpdmFjeS4nOwo=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/ja_JP.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAn44Oi44K444Ol44O844Or44GM44Kk44Oz44K544OI44O844Or44GV44KM44G+44GX44GfJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICfjg6Ljgrjjg6Xjg7zjg6vjgYzliYrpmaTjgZXjgozjgb7jgZfjgZ8nOwokbGFuZ1snZGVzY3JpcHRpb24nXSA9ICdHQTQvR1RN57Wx5ZCI44Gr44KI44KLR0RQUuOCs+ODs+ODl+ODqeOCpOOCouODs+OCueeUqEdvb2dsZSBDb25zZW50IFBsYXRmb3Jt44CCJzsKJGxhbmdbJ2FkbWluX3RpdGxlJ10gPSAnR29vZ2xlIENvbnNlbnQgUGxhdGZvcm3oqK3lrponOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAn44Ki44Kv44K744K544GM5ouS5ZCm44GV44KM44G+44GX44Gf44CC5qip6ZmQ44KS56K66KqN44GX44Gm44GP44Gg44GV44GE44CCJzsKCiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9qcyddID0gJ0phdmFTY3JpcHTjg5bjg63jg4Pjgq8nOwokbGFuZ1snbGFiZWxfdGVtcGxhdGVfaHRtbCddID0gJ+WQjOaEj+ODkOODiuODvOODhuODs+ODl+ODrOODvOODiCc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9jc3MnXSA9ICflkIzmhI9DU1MnOwokbGFuZ1snbGFiZWxfdGVtcGxhdGUnXSA9ICfjg4bjg7Pjg5fjg6zjg7zjg4gnOwokbGFuZ1snbGFiZWxfanNfcG9zaXRpb24nXSA9ICdKYXZhU2NyaXB05oy/5YWl5L2N572uJzsKCiRsYW5nWydqc19oZWFkJ10gPSAnJmx0O2hlYWQmZ3Q744Gr5oy/5YWlJzsKJGxhbmdbJ2pzX2JvZHknXSA9ICcmbHQ7Ym9keSZndDvjga7mnIDlvozjgavmjL/lhaUnOwoKJGxhbmdbJ3N1Ym1pdCddID0gJ+S/neWtmCc7CiRsYW5nWydjYW5jZWwnXSA9ICfjgq3jg6Pjg7Pjgrvjg6snOwokbGFuZ1snc2V0dGluZ3Nfc2F2ZWQnXSA9ICfoqK3lrprjgYzkv53lrZjjgZXjgozjgb7jgZfjgZ8nOwoKJGxhbmdbJ2NvbnNlbnRfYW5hbHl0aWNzX3N0b3JhZ2UnXSA9ICfjgqLjg4rjg6rjg4bjgqPjgq/jgrnjgrnjg4jjg6zjg7zjgrgnOwokbGFuZ1snY29uc2VudF9hZF9zdG9yYWdlJ10gPSAn5bqD5ZGK44K544OI44Os44O844K4JzsKJGxhbmdbJ2NvbnNlbnRfYWRfcGVyc29uYWxpemF0aW9uJ10gPSAn5bqD5ZGK44OR44O844K944OK44Op44Kk44K844O844K344On44OzJzsKJGxhbmdbJ2NvbnNlbnRfYWRfdXNlcl9kYXRhJ10gPSAn5bqD5ZGK44Om44O844K244O844OH44O844K/JzsKJGxhbmdbJ2NvbnNlbnRfcGVyc29uYWxpemF0aW9uJ10gPSAn44OR44O844K944OK44Op44Kk44K844O844K344On44OzJzsKCiRsYW5nWydpbmplY3Rpb25fbG9jYXRpb24nXSA9ICdKYXZhU2NyaXB05rOo5YWl5aC05omAJzsKJGxhbmdbJ2xhYmVsX2VuYWJsZWQnXSA9ICdHb29nbGUgQ29uc2VudCBQbGF0Zm9ybeOCkuacieWKueOBq+OBmeOCiyc7CiRsYW5nWydhc2tfdW5pbnN0YWxsJ10gPSAnR29vZ2xlQ29uc2VudFBsYXRmb3Jt44Oi44K444Ol44O844Or44KS44Ki44Oz44Kk44Oz44K544OI44O844Or44GX44Gm44KC44KI44KN44GX44GE44Gn44GZ44GL77yfJzsKJGxhbmdbJ2xhYmVsX2dvb2dsZV90YWdfaWQnXSA9ICdHb29nbGUgVGFnIElEIChHQTQ6IEctWFhYWFhYWCDjgb7jgZ/jga8gR1RNOiBHVE0tWFhYWFhYWCknOwokbGFuZ1snaGVscF9nb29nbGVfdGFnX2lkJ10gID0gJ+iHquWLleaknOWHuuOBleOCjOOBvuOBmeOAgkdBNOOBr2d0YWcuanPjgpLoqq3jgb/ovrzjgb/jgIFHVE3jga/jgrPjg7Pjg4bjg4rjgpLoqq3jgb/ovrzjgb/jgb7jgZnjgIInOwokbGFuZ1snbGFiZWxfcmVndWxhdGlvbiddID0gJ+ODl+ODqeOCpOODkOOCt+ODvOimj+WItuOCs+ODs+ODl+ODqeOCpOOCouODs+OCuSc7CgovLyBDb29raWUgY29uc2VudCB0cmFuc2xhdGlvbnMKJGxhbmdbJ2Nvb2tpZV90aXRsZSddID0gJ0Nvb2tpZeOBruioreWumic7CiRsYW5nWydjb29raWVfY29uc2VudF90ZXh0J10gPSAn44Kz44Oz44OG44Oz44OE44KE5bqD5ZGK44KS44OR44O844K944OK44Op44Kk44K644GX44CB44K944O844K344Oj44Or44Oh44OH44Kj44Ki5qmf6IO944KS5o+Q5L6b44GX44CB44OI44Op44OV44Kj44OD44Kv44KS5YiG5p6Q44GZ44KL44Gf44KB44GrQ29va2ll44KS5L2/55So44GX44Gm44GE44G+44GZ44CC44G+44Gf44CB5b2T44K144Kk44OI44Gu5L2/55So44Gr6Zai44GZ44KL5oOF5aCx44KS44K944O844K344Oj44Or44Oh44OH44Kj44Ki44CB5bqD5ZGK44CB5YiG5p6Q44OR44O844OI44OK44O844Go5YWx5pyJ44GX44Gm44GE44G+44GZ44CCJzsKJGxhbmdbJ2Nvb2tpZV9uZWNlc3NhcnknXSA9ICflv4XopoEnOwokbGFuZ1snY29va2llX3ByZWZlcmVuY2VzJ10gPSAn6Kit5a6aJzsKJGxhbmdbJ2Nvb2tpZV9zdGF0aXN0aWNzJ10gPSAn57Wx6KiIJzsKJGxhbmdbJ2Nvb2tpZV9tYXJrZXRpbmcnXSA9ICfjg57jg7zjgrHjg4bjgqPjg7PjgrAnOwokbGFuZ1snY29va2llX25lY2Vzc2FyeV9kZXNjJ10gPSAn44K144Kk44OI44Gu5Z+65pys5qmf6IO944Gr5b+F6KaBJzsKJGxhbmdbJ2Nvb2tpZV9wcmVmZXJlbmNlc19kZXNjJ10gPSAn44GC44Gq44Gf44Gu6Kit5a6a44Go6YG45oqe44KS6KiY5oa2JzsKJGxhbmdbJ2Nvb2tpZV9zdGF0aXN0aWNzX2Rlc2MnXSA9ICfjgrXjgqTjg4jjga7kvb/nlKjmlrnms5XjgpLnkIbop6PjgZnjgovjga7jgavlvbnnq4vjgaHjgb7jgZknOwokbGFuZ1snY29va2llX21hcmtldGluZ19kZXNjJ10gPSAn44OR44O844K944OK44Op44Kk44K644GV44KM44Gf5bqD5ZGK44Go44Kz44Oz44OG44Oz44OEJzsKCiRsYW5nWydjb29raWVfZGVueSddID0gJ+aLkuWQpic7CiRsYW5nWydjb29raWVfY3VzdG9taXplJ10gPSAn44Kr44K544K/44Oe44Kk44K6JzsKJGxhbmdbJ2Nvb2tpZV9hbGxvd19hbGwnXSA9ICfjgZnjgbnjgaboqLHlj68nOwokbGFuZ1snY29va2llX3NhdmVfc2VsZWN0aW9uJ10gPSAn6YG45oqe44KS5L+d5a2YJzsKJGxhbmdbJ2Nvb2tpZV9hY2tub3dsZWRnZSddID0gJ+aJv+iqjeOBmeOCiyc7CiRsYW5nWydjb29raWVfdGFiX2NvbnNlbnQnXSA9ICflkIzmhI8nOwokbGFuZ1snY29va2llX3RhYl9kZXRhaWxzJ10gPSAn6Kmz57SwJzsKJGxhbmdbJ2Nvb2tpZV90YWJfYWJvdXQnXSA9ICfjgavjgaTjgYTjgaYnOwokbGFuZ1snY29va2llX3dlYnNpdGVfdXNlcyddID0gJ+OBk+OBruOCpuOCp+ODluOCteOCpOODiOOBr0Nvb2tpZeOCkuS9v+eUqOOBl+OBpuOBhOOBvuOBmSc7CgovLyBTZXR0aW5ncyB0YWIKJGxhbmdbJ3NldHRpbmdzX2FwcGVhcmFuY2UnXSA9ICflpJboprPoqK3lrponOwokbGFuZ1snbGFiZWxfY29sb3Jfc2NoZW1lJ10gPSAn44Kr44Op44O844K544Kt44O844OgJzsKJGxhbmdbJ2NvbG9yX3NjaGVtZV9saWdodCddID0gJ+ODqeOCpOODiCc7CiRsYW5nWydjb2xvcl9zY2hlbWVfZGFyayddID0gJ+ODgOODvOOCryc7CiRsYW5nWydsYWJlbF9wb3NpdGlvbiddID0gJ+S9jee9ric7CiRsYW5nWydwb3NpdGlvbl9ib3R0b20nXSA9ICfkuIvpg6gnOwokbGFuZ1sncG9zaXRpb25fY2VudGVyJ10gPSAn5Lit5aSuJzsKJGxhbmdbJ3Bvc2l0aW9uX3RvcCddID0gJ+S4iumDqCc7CiRsYW5nWydsYWJlbF9zaXplJ10gPSAn44K144Kk44K6JzsKJGxhbmdbJ3NpemVfY29tcGFjdCddID0gJ+OCs+ODs+ODkeOCr+ODiCc7CiRsYW5nWydzaXplX25vcm1hbCddID0gJ+aomea6lic7CiRsYW5nWydzaXplX2xhcmdlJ10gPSAn5aSnJzsKJGxhbmdbJ3NpemVfd2lkZSddID0gJ+ODr+OCpOODiSc7CiRsYW5nWydtc2dfc2V0dGluZ3Nfc2F2ZWQnXSA9ICfoqK3lrprjgYzmraPluLjjgavkv53lrZjjgZXjgozjgb7jgZfjgZ8nOwoKLy8gQ3VzdG9tIHRleHQgc2V0dGluZ3MKJGxhbmdbJ3NldHRpbmdzX2N1c3RvbV90ZXh0J10gPSAn44Kr44K544K/44Og44OG44Kt44K544OIJzsKJGxhbmdbJ2xhYmVsX2N1c3RvbV90aXRsZSddID0gJ+OCq+OCueOCv+ODoOOCv+OCpOODiOODqyc7CiRsYW5nWydsYWJlbF9jdXN0b21fdGV4dCddID0gJ+OCq+OCueOCv+ODoOiqrOaYjuODhuOCreOCueODiCc7CiRsYW5nWydsYWJlbF9wcmltYXJ5X2NvbG9yJ10gPSAn44OX44Op44Kk44Oe44Oq44Oc44K/44Oz44Gu6ImyJzsKJGxhbmdbJ2hlbHBfcHJpbWFyeV9jb2xvciddID0gJ+OCpuOCp+ODluOCteOCpOODiOOBruODhuODvOODnuOBq+WQiOOBhuiJsuOCkumBuOaKnuOBl+OBpuOBj+OBoOOBleOBhCc7CiRsYW5nWydlcnJvcl9pbnZhbGlkX2dvb2dsZV90YWdfaWQnXSA9ICfnhKHlirnjgapHb29nbGUgVGFnIElE5b2i5byP44Gn44GZ44CCR0E05b2i5byPIChHLVhYWFhYWFhYWFgpIOOBvuOBn+OBr0dUTeW9ouW8jyAoR1RNLVhYWFhYWFgpIOOCkuS9v+eUqOOBl+OBpuOBj+OBoOOBleOBhCc7CiRsYW5nWydsYWJlbF9pbmplY3RfanF1ZXJ5J10gPSAnalF1ZXJ544Op44Kk44OW44Op44Oq44KS5rOo5YWlJzsKJGxhbmdbJ2hlbHBfaW5qZWN0X2pxdWVyeSddID0gJ+ODhuODvOODnuOBq2pRdWVyeeOBjOWQq+OBvuOCjOOBpuOBhOOBquOBhOWgtOWQiOOBr+acieWKueOBq+OBl+OBpuOBj+OBoOOBleOBhO+8iOWQjOaEj+ODkOODiuODvOOBruapn+iDveOBq+W/heimge+8iSc7CgokbGFuZ1snY29va2llX2Fib3V0X3RleHQnXSA9ICdDb29raWXjga/jgIHjgqbjgqfjg5bjgrXjgqTjg4jjgYzjgYLjgarjgZ/jga7jg4fjg5DjgqTjgrnjgavphY3nva7jgZnjgovjg4fjgrjjgr/jg6vjg5XjgqHjgqTjg6vjgafjgIHjgYLjgarjgZ/jga7oqK3lrprjgoTooYzli5XjgpLoqJjmhrbjgZfjgIHku4rlvozjga7oqKrllY/mmYLjgavmg4XloLHjgpLlho3lhaXlipvjgZnjgovlv4XopoHjgYzjgarjgYTjgojjgYbjgavjgZfjgb7jgZnjgII8YnI+PGJyPuengeOBn+OBoeOBr0Nvb2tpZeOCkuS9v+eUqOOBl+OBpuOAgeOBguOBquOBn+OBruS9k+mok+OCkuWQkeS4iuOBleOBm+OAgeODkeODvOOCveODiuODqeOCpOOCuuOBleOCjOOBn+OCs+ODs+ODhuODs+ODhOOCkuaPkOS+m+OBl+OAgeOCpuOCp+ODluOCteOCpOODiOOBruODiOODqeODleOCo+ODg+OCr+OCkuWIhuaekOOBl+OBvuOBmeOAguWfuuacrOeahOOBqkNvb2tpZeOBr+apn+iDveOBq+W/heimgeOBp+OBguOCiuOAgeOBneOBruS7luOBr+OCteOCpOODiOOBruaUueWWhOOBq+W9ueeri+OBoeOBvuOBmeOAgjxicj48YnI+44K944O844K344Oj44Or44Oh44OH44Kj44Ki44CB5YiG5p6Q44OX44Ot44OQ44Kk44OA44O844CB5bqD5ZGK44OR44O844OI44OK44O844GL44KJ44Gu44K144O844OJ44OR44O844OG44KjQ29va2ll44KC44CB5LuW44Gu44Km44Kn44OW44K144Kk44OI44Gn44K/44O844Ky44OD44OI44Kz44Oz44OG44Oz44OE44KS5o+Q5L6b44GZ44KL44Gf44KB44Gr5L2/55So44GV44KM44KL5aC05ZCI44GM44GC44KK44G+44GZ44CCPGJyPjxicj7jg5bjg6njgqbjgrbjga7oqK3lrprjgb7jgZ/jga/jgZPjga7jg5Djg4rjg7zjgpLpgJrjgZjjgaZDb29raWXjgpLlj5fjgZHlhaXjgozjgovjgYvmi5LlkKbjgZnjgovjgYvjgpLpgbjmip7jgafjgY3jgb7jgZnjgILlkIzmhI/jga/jgIHjgZPjgZPjgafoqK3lrprjgpLoqr/mlbTjgZnjgovjgZPjgajjgafjgYTjgaTjgafjgoLmkqTlm57jgafjgY3jgb7jgZnjgII8YnI+PGJyPuODh+ODvOOCv+WHpueQhuOBqOODl+ODqeOCpOODkOOCt+ODvOaoqeOBq+OBpOOBhOOBpuOBruips+e0sOOBr+OAgeODl+ODqeOCpOODkOOCt+ODvOODneODquOCt+ODvOOCkuOBlOimp+OBj+OBoOOBleOBhOOAgic7Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnTW9kdWwgaW5zdGFsbGVydCc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnTW9kdWwgZmplcm5ldCc7CiRsYW5nWydkZXNjcmlwdGlvbiddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtIGZvciBHRFBSLXNhbXN2YXIgbWVkIEdBNC9HVE0taW50ZWdyYXNqb24uJzsKJGxhbmdbJ2FkbWluX3RpdGxlJ10gPSAnR29vZ2xlIENvbnNlbnQgUGxhdGZvcm0gSW5uc3RpbGxpbmdlcic7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdUaWxnYW5nIG5la3RldC4gU2pla2sgZGluZSB0aWxsYXRlbHNlci4nOwoKJGxhbmdbJ2xhYmVsX3RlbXBsYXRlX2pzJ10gPSAnSmF2YVNjcmlwdCBCbG9rayc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9odG1sJ10gPSAnU2FtdHlra2UgQmFubmVyIE1hbCc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9jc3MnXSA9ICdTYW10eWtrZSBDU1MnOwokbGFuZ1snbGFiZWxfdGVtcGxhdGUnXSA9ICdNYWwnOwokbGFuZ1snbGFiZWxfanNfcG9zaXRpb24nXSA9ICdKYXZhU2NyaXB0IElubnNldHRpbmdzcG9zaXNqb24nOwoKJGxhbmdbJ2pzX2hlYWQnXSA9ICdTZXR0IGlubiBpICZsdDtoZWFkJmd0Oyc7CiRsYW5nWydqc19ib2R5J10gPSAnU2V0dCBpbm4gcMOlIHNsdXR0ZW4gYXYgJmx0O2JvZHkmZ3Q7JzsKCiRsYW5nWydzdWJtaXQnXSA9ICdMYWdyZSc7CiRsYW5nWydjYW5jZWwnXSA9ICdBdmJyeXQnOwokbGFuZ1snc2V0dGluZ3Nfc2F2ZWQnXSA9ICdJbm5zdGlsbGluZ2VyIGxhZ3JldCc7CgokbGFuZ1snY29uc2VudF9hbmFseXRpY3Nfc3RvcmFnZSddID0gJ0FuYWx5dGljcyBMYWdyaW5nJzsKJGxhbmdbJ2NvbnNlbnRfYWRfc3RvcmFnZSddID0gJ0Fubm9uc2UgTGFncmluZyc7CiRsYW5nWydjb25zZW50X2FkX3BlcnNvbmFsaXphdGlvbiddID0gJ0Fubm9uc2UgUGVyc29uYWxpc2VyaW5nJzsKJGxhbmdbJ2NvbnNlbnRfYWRfdXNlcl9kYXRhJ10gPSAnQW5ub25zZSBCcnVrZXJkYXRhJzsKJGxhbmdbJ2NvbnNlbnRfcGVyc29uYWxpemF0aW9uJ10gPSAnUGVyc29uYWxpc2VyaW5nJzsKCiRsYW5nWydpbmplY3Rpb25fbG9jYXRpb24nXSA9ICdKYXZhU2NyaXB0IEluamVrc2pvbnNzdGVkJzsKJGxhbmdbJ2xhYmVsX2VuYWJsZWQnXSA9ICdBa3RpdmVyIEdvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ2Fza191bmluc3RhbGwnXSA9ICdFciBkdSBzaWtrZXIgcMOlIGF0IGR1IHZpbCBhdmluc3RhbGxlcmUgR29vZ2xlQ29uc2VudFBsYXRmb3JtIG1vZHVsZW4/JzsKJGxhbmdbJ2xhYmVsX2dvb2dsZV90YWdfaWQnXSA9ICdHb29nbGUgVGFnIElEIChHQTQ6IEctWFhYWFhYWCBlbGxlciBHVE06IEdUTS1YWFhYWFhYKSc7CiRsYW5nWydoZWxwX2dvb2dsZV90YWdfaWQnXSAgPSAnQXV0b21hdGlzayBvcHBkYWdldC4gR0E0IGxhc3RlciBndGFnLmpzOyBHVE0gbGFzdGVyIGJlaG9sZGVyZW4uJzsKJGxhbmdbJ2xhYmVsX3JlZ3VsYXRpb24nXSA9ICdQZXJzb252ZXJucmVndWxlcmluZyBTYW1zdmFyJzsKCi8vIENvb2tpZSBjb25zZW50IHRyYW5zbGF0aW9ucwokbGFuZ1snY29va2llX3RpdGxlJ10gPSAnQ29va2llIFByZWZlcmFuc2VyJzsKJGxhbmdbJ2Nvb2tpZV9jb25zZW50X3RleHQnXSA9ICdWaSBicnVrZXIgaW5mb3JtYXNqb25za2Fwc2xlciBmb3Igw6UgcGVyc29uYWxpc2VyZSBpbm5ob2xkIG9nIGFubm9uc2VyLCB0aWxieSBzb3NpYWxlIG1lZGllZnVua3Nqb25lciBvZyBhbmFseXNlcmUgdHJhZmlra2VuIHbDpXIuIFZpIGRlbGVyIG9nc8OlIGluZm9ybWFzam9uIG9tIGJydWtlbiBkaW4gYXYgbmV0dHN0ZWRldCB2w6VydCBtZWQgdsOlcmUgc29zaWFsZSBtZWRpZXIsIHJla2xhbWUtIG9nIGFuYWx5c2VwYXJ0bmVyZS4nOwokbGFuZ1snY29va2llX25lY2Vzc2FyeSddID0gJ07DuGR2ZW5kaWdlJzsKJGxhbmdbJ2Nvb2tpZV9wcmVmZXJlbmNlcyddID0gJ1ByZWZlcmFuc2VyJzsKJGxhbmdbJ2Nvb2tpZV9zdGF0aXN0aWNzJ10gPSAnU3RhdGlzdGlrayc7CiRsYW5nWydjb29raWVfbWFya2V0aW5nJ10gPSAnTWFya2Vkc2bDuHJpbmcnOwokbGFuZ1snY29va2llX25lY2Vzc2FyeV9kZXNjJ10gPSAnUMOla3JldmQgZm9yIGdydW5ubGVnZ2VuZGUgbmV0dHN0ZWRzZnVua3Nqb25hbGl0ZXQnOwokbGFuZ1snY29va2llX3ByZWZlcmVuY2VzX2Rlc2MnXSA9ICdIdXNrZXIgZGluZSBpbm5zdGlsbGluZ2VyIG9nIHZhbGcnOwokbGFuZ1snY29va2llX3N0YXRpc3RpY3NfZGVzYyddID0gJ0hqZWxwZXIgb3NzIMOlIGZvcnN0w6UgaHZvcmRhbiBkdSBicnVrZXIgbmV0dHN0ZWRldCB2w6VydCc7CiRsYW5nWydjb29raWVfbWFya2V0aW5nX2Rlc2MnXSA9ICdQZXJzb25hbGlzZXJ0ZSBhbm5vbnNlciBvZyBpbm5ob2xkJzsKCiRsYW5nWydjb29raWVfZGVueSddID0gJ0F2dmlzJzsKJGxhbmdbJ2Nvb2tpZV9jdXN0b21pemUnXSA9ICdUaWxwYXNzJzsKJGxhbmdbJ2Nvb2tpZV9hbGxvd19hbGwnXSA9ICdUaWxsYXQgQWxsZSc7CiRsYW5nWydjb29raWVfc2F2ZV9zZWxlY3Rpb24nXSA9ICdMYWdyZSBWYWxnJzsKJGxhbmdbJ2Nvb2tpZV9hY2tub3dsZWRnZSddID0gJ0FuZXJramVubmUnOwokbGFuZ1snY29va2llX3RhYl9jb25zZW50J10gPSAnU2FtdHlra2UnOwokbGFuZ1snY29va2llX3RhYl9kZXRhaWxzJ10gPSAnRGV0YWxqZXInOwokbGFuZ1snY29va2llX3RhYl9hYm91dCddID0gJ09tJzsKJGxhbmdbJ2Nvb2tpZV93ZWJzaXRlX3VzZXMnXSA9ICdEZW5uZSBuZXR0c2lkZW4gYnJ1a2VyIGluZm9ybWFzam9uc2thcHNsZXInOwoKLy8gU2V0dGluZ3MgdGFiCiRsYW5nWydzZXR0aW5nc19hcHBlYXJhbmNlJ10gPSAnVXRzZWVuZGUgSW5uc3RpbGxpbmdlcic7CiRsYW5nWydsYWJlbF9jb2xvcl9zY2hlbWUnXSA9ICdGYXJnZXNramVtYSc7CiRsYW5nWydjb2xvcl9zY2hlbWVfbGlnaHQnXSA9ICdMeXMnOwokbGFuZ1snY29sb3Jfc2NoZW1lX2RhcmsnXSA9ICdNw7hyayc7CiRsYW5nWydsYWJlbF9wb3NpdGlvbiddID0gJ1Bvc2lzam9uJzsKJGxhbmdbJ3Bvc2l0aW9uX2JvdHRvbSddID0gJ0J1bm4nOwokbGFuZ1sncG9zaXRpb25fY2VudGVyJ10gPSAnTWlkdCc7CiRsYW5nWydwb3NpdGlvbl90b3AnXSA9ICdUb3BwJzsKJGxhbmdbJ2xhYmVsX3NpemUnXSA9ICdTdMO4cnJlbHNlJzsKJGxhbmdbJ3NpemVfY29tcGFjdCddID0gJ0tvbXBha3QnOwokbGFuZ1snc2l6ZV9ub3JtYWwnXSA9ICdOb3JtYWwnOwokbGFuZ1snc2l6ZV9sYXJnZSddID0gJ1N0b3InOwokbGFuZ1snc2l6ZV93aWRlJ10gPSAnQnJlZCc7CiRsYW5nWydtc2dfc2V0dGluZ3Nfc2F2ZWQnXSA9ICdJbm5zdGlsbGluZ2VyIGxhZ3JldCB2ZWxseWtrZXQnOwoKLy8gQ3VzdG9tIHRleHQgc2V0dGluZ3MKJGxhbmdbJ3NldHRpbmdzX2N1c3RvbV90ZXh0J10gPSAnVGlscGFzc2V0IFRla3N0JzsKJGxhbmdbJ2xhYmVsX2N1c3RvbV90aXRsZSddID0gJ1RpbHBhc3NldCBUaXR0ZWwnOwokbGFuZ1snbGFiZWxfY3VzdG9tX3RleHQnXSA9ICdUaWxwYXNzZXQgQmVza3JpdmVsc2VzdGVrc3QnOwokbGFuZ1snbGFiZWxfcHJpbWFyeV9jb2xvciddID0gJ1ByaW3DpnIgS25hcHAgRmFyZ2UnOwokbGFuZ1snaGVscF9wcmltYXJ5X2NvbG9yJ10gPSAnVmVsZyBlbiBmYXJnZSBzb20gbWF0Y2hlciBuZXR0c3RlZGV0cyB0ZW1hJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfZ29vZ2xlX3RhZ19pZCddID0gJ1VneWxkaWcgR29vZ2xlIFRhZyBJRCBmb3JtYXQuIEJydWsgR0E0IGZvcm1hdCAoRy1YWFhYWFhYWFhYKSBlbGxlciBHVE0gZm9ybWF0IChHVE0tWFhYWFhYWCknOwokbGFuZ1snbGFiZWxfaW5qZWN0X2pxdWVyeSddID0gJ0luamlzZXIgalF1ZXJ5IGJpYmxpb3Rlayc7CiRsYW5nWydoZWxwX2luamVjdF9qcXVlcnknXSA9ICdBa3RpdmVyIGh2aXMgdGVtYWV0IGRpdHQgaWtrZSBpbmtsdWRlcmVyIGpRdWVyeSAobsO4ZHZlbmRpZyBmb3Igc2FtdHlra2UgYmFubmVyIGZ1bmtzam9uYWxpdGV0KSc7CgokbGFuZ1snY29va2llX2Fib3V0X3RleHQnXSA9ICdJbmZvcm1hc2pvbnNrYXBzbGVyIGVyIGRpZ2l0YWxlIGZpbGVyIHNvbSBuZXR0c3RlZGVyIHBsYXNzZXJlciBww6UgZW5oZXRlbiBkaW4gZm9yIMOlIGh1c2tlIHByZWZlcmFuc2VuZSBvZyBoYW5kbGluZ2VuZSBkaW5lLCBzbGlrIGF0IGR1IGlra2UgdHJlbmdlciDDpSBza3JpdmUgaW5uIGluZm9ybWFzam9uIHDDpSBueXR0IHZlZCBmcmVtdGlkaWdlIGJlc8O4ay48YnI+PGJyPlZpIGJydWtlciBpbmZvcm1hc2pvbnNrYXBzbGVyIGZvciDDpSBmb3JiZWRyZSBvcHBsZXZlbHNlbiBkaW4sIGxldmVyZSBwZXJzb25hbGlzZXJ0IGlubmhvbGQgb2cgYW5hbHlzZXJlIG5ldHRzdGVkc3RyYWZpa2suIEVzc2Vuc2llbGxlIGluZm9ybWFzam9uc2thcHNsZXIgZXIgbsO4ZHZlbmRpZ2UgZm9yIGZ1bmtzam9uYWxpdGV0LCBtZW5zIGFuZHJlIGhqZWxwZXIgb3NzIMOlIGZvcmJlZHJlIG5ldHRzdGVkZXQuPGJyPjxicj5UcmVkamVwYXJ0cyBpbmZvcm1hc2pvbnNrYXBzbGVyIGZyYSBzb3NpYWxlIG1lZGllciwgYW5hbHlzZWxldmVyYW5kw7hyZXIgb2cgcmVrbGFtZXBhcnRuZXJlIGthbiBvZ3PDpSBicnVrZXMgZm9yIMOlIGxldmVyZSBtw6VscmV0dGV0IGlubmhvbGQgcMOlIGFuZHJlIG5ldHRzdGVkZXIuPGJyPjxicj5EdSBrYW4gZ29kdGEgZWxsZXIgYXZ2aXNlIGluZm9ybWFzam9uc2thcHNsZXIgZ2plbm5vbSBuZXR0bGVzZXJpbm5zdGlsbGluZ2VuZSBkaW5lIGVsbGVyIGRlbm5lIGJhbm5lcmVuLiBTYW10eWtrZSBrYW4gdHJla2tlcyB0aWxiYWtlIG7DpXIgc29tIGhlbHN0IHZlZCDDpSBqdXN0ZXJlIHByZWZlcmFuc2VuZSBkaW5lIGhlci48YnI+PGJyPkZvciBtZXIgaW5mb3JtYXNqb24gb20gZGF0YWJlaGFuZGxpbmcgb2cgcGVyc29udmVybnJldHRpZ2hldGVyLCBzZSB2w6VyIFBlcnNvbnZlcm5wb2xpY3kuJzsK]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnTW9kdWxlIGdlw69uc3RhbGxlZXJkJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdNb2R1bGUgdmVyd2lqZGVyZCc7CiRsYW5nWydkZXNjcmlwdGlvbiddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtIHZvb3IgR0RQUi1uYWxldmluZyBtZXQgR0E0L0dUTS1pbnRlZ3JhdGllLic7CiRsYW5nWydhZG1pbl90aXRsZSddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtIEluc3RlbGxpbmdlbic7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdUb2VnYW5nIGdld2VpZ2VyZC4gQ29udHJvbGVlciB1dyBtYWNodGlnaW5nZW4uJzsKCiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9qcyddID0gJ0phdmFTY3JpcHQgQmxvayc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9odG1sJ10gPSAnVG9lc3RlbW1pbmcgQmFubmVyIFNqYWJsb29uJzsKJGxhbmdbJ2xhYmVsX3RlbXBsYXRlX2NzcyddID0gJ1RvZXN0ZW1taW5nIENTUyc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZSddID0gJ1NqYWJsb29uJzsKJGxhbmdbJ2xhYmVsX2pzX3Bvc2l0aW9uJ10gPSAnSmF2YVNjcmlwdCBJbnZvZWdwb3NpdGllJzsKCiRsYW5nWydqc19oZWFkJ10gPSAnSW52b2VnZW4gaW4gJmx0O2hlYWQmZ3Q7JzsKJGxhbmdbJ2pzX2JvZHknXSA9ICdJbnZvZWdlbiBhYW4gZWluZGUgdmFuICZsdDtib2R5Jmd0Oyc7CgokbGFuZ1snc3VibWl0J10gPSAnT3BzbGFhbic7CiRsYW5nWydjYW5jZWwnXSA9ICdBbm51bGVyZW4nOwokbGFuZ1snc2V0dGluZ3Nfc2F2ZWQnXSA9ICdJbnN0ZWxsaW5nZW4gb3BnZXNsYWdlbic7CgokbGFuZ1snY29uc2VudF9hbmFseXRpY3Nfc3RvcmFnZSddID0gJ0FuYWx5dGljcyBPcHNsYWcnOwokbGFuZ1snY29uc2VudF9hZF9zdG9yYWdlJ10gPSAnQWR2ZXJ0ZW50aWUgT3BzbGFnJzsKJGxhbmdbJ2NvbnNlbnRfYWRfcGVyc29uYWxpemF0aW9uJ10gPSAnQWR2ZXJ0ZW50aWUgUGVyc29uYWxpc2F0aWUnOwokbGFuZ1snY29uc2VudF9hZF91c2VyX2RhdGEnXSA9ICdBZHZlcnRlbnRpZSBHZWJydWlrZXJzZ2VnZXZlbnMnOwokbGFuZ1snY29uc2VudF9wZXJzb25hbGl6YXRpb24nXSA9ICdQZXJzb25hbGlzYXRpZSc7CgokbGFuZ1snaW5qZWN0aW9uX2xvY2F0aW9uJ10gPSAnSmF2YVNjcmlwdCBJbmplY3RpZWxvY2F0aWUnOwokbGFuZ1snbGFiZWxfZW5hYmxlZCddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtIGluc2NoYWtlbGVuJzsKJGxhbmdbJ2Fza191bmluc3RhbGwnXSA9ICdXZWV0IHUgemVrZXIgZGF0IHUgZGUgR29vZ2xlQ29uc2VudFBsYXRmb3JtIG1vZHVsZSB3aWx0IHZlcndpamRlcmVuPyc7CiRsYW5nWydsYWJlbF9nb29nbGVfdGFnX2lkJ10gPSAnR29vZ2xlIFRhZyBJRCAoR0E0OiBHLVhYWFhYWFggb2YgR1RNOiBHVE0tWFhYWFhYWCknOwokbGFuZ1snaGVscF9nb29nbGVfdGFnX2lkJ10gID0gJ0F1dG9tYXRpc2NoIGdlZGV0ZWN0ZWVyZC4gR0E0IGxhYWR0IGd0YWcuanM7IEdUTSBsYWFkdCBkZSBjb250YWluZXIuJzsKJGxhbmdbJ2xhYmVsX3JlZ3VsYXRpb24nXSA9ICdQcml2YWN5IFJlZ2VsZ2V2aW5nIE5hbGV2aW5nJzsKCi8vIENvb2tpZSBjb25zZW50IHRyYW5zbGF0aW9ucwokbGFuZ1snY29va2llX3RpdGxlJ10gPSAnQ29va2llIFZvb3JrZXVyZW4nOwokbGFuZ1snY29va2llX2NvbnNlbnRfdGV4dCddID0gJ1dlIGdlYnJ1aWtlbiBjb29raWVzIG9tIGluaG91ZCBlbiBhZHZlcnRlbnRpZXMgdGUgcGVyc29uYWxpc2VyZW4sIHNvY2lhbGUgbWVkaWFmdW5jdGllcyB0ZSBiaWVkZW4gZW4gb25zIHZlcmtlZXIgdGUgYW5hbHlzZXJlbi4gV2UgZGVsZW4gb29rIGluZm9ybWF0aWUgb3ZlciB1dyBnZWJydWlrIHZhbiBvbnplIHNpdGUgbWV0IG9uemUgc29jaWFsZSBtZWRpYS0sIGFkdmVydGVudGllLSBlbiBhbmFseXNlcGFydG5lcnMuJzsKJGxhbmdbJ2Nvb2tpZV9uZWNlc3NhcnknXSA9ICdOb29kemFrZWxpamsnOwokbGFuZ1snY29va2llX3ByZWZlcmVuY2VzJ10gPSAnVm9vcmtldXJlbic7CiRsYW5nWydjb29raWVfc3RhdGlzdGljcyddID0gJ1N0YXRpc3RpZWtlbic7CiRsYW5nWydjb29raWVfbWFya2V0aW5nJ10gPSAnTWFya2V0aW5nJzsKJGxhbmdbJ2Nvb2tpZV9uZWNlc3NhcnlfZGVzYyddID0gJ1ZlcmVpc3Qgdm9vciBiYXNpc2Z1bmN0aW9uYWxpdGVpdCB2YW4gZGUgc2l0ZSc7CiRsYW5nWydjb29raWVfcHJlZmVyZW5jZXNfZGVzYyddID0gJ09udGhvdWRlbiB1dyBpbnN0ZWxsaW5nZW4gZW4ga2V1emVzJzsKJGxhbmdbJ2Nvb2tpZV9zdGF0aXN0aWNzX2Rlc2MnXSA9ICdIZWxwZW4gb25zIGJlZ3JpanBlbiBob2UgdSBvbnplIHNpdGUgZ2VicnVpa3QnOwokbGFuZ1snY29va2llX21hcmtldGluZ19kZXNjJ10gPSAnR2VwZXJzb25hbGlzZWVyZGUgYWR2ZXJ0ZW50aWVzIGVuIGluaG91ZCc7CgokbGFuZ1snY29va2llX2RlbnknXSA9ICdXZWlnZXJlbic7CiRsYW5nWydjb29raWVfY3VzdG9taXplJ10gPSAnQWFucGFzc2VuJzsKJGxhbmdbJ2Nvb2tpZV9hbGxvd19hbGwnXSA9ICdBbGxlcyBUb2VzdGFhbic7CiRsYW5nWydjb29raWVfc2F2ZV9zZWxlY3Rpb24nXSA9ICdTZWxlY3RpZSBPcHNsYWFuJzsKJGxhbmdbJ2Nvb2tpZV9hY2tub3dsZWRnZSddID0gJ0JldmVzdGlnZW4nOwokbGFuZ1snY29va2llX3RhYl9jb25zZW50J10gPSAnVG9lc3RlbW1pbmcnOwokbGFuZ1snY29va2llX3RhYl9kZXRhaWxzJ10gPSAnRGV0YWlscyc7CiRsYW5nWydjb29raWVfdGFiX2Fib3V0J10gPSAnT3Zlcic7CiRsYW5nWydjb29raWVfd2Vic2l0ZV91c2VzJ10gPSAnRGV6ZSB3ZWJzaXRlIGdlYnJ1aWt0IGNvb2tpZXMnOwoKLy8gU2V0dGluZ3MgdGFiCiRsYW5nWydzZXR0aW5nc19hcHBlYXJhbmNlJ10gPSAnVWl0ZXJsaWprIEluc3RlbGxpbmdlbic7CiRsYW5nWydsYWJlbF9jb2xvcl9zY2hlbWUnXSA9ICdLbGV1cmVuc2NoZW1hJzsKJGxhbmdbJ2NvbG9yX3NjaGVtZV9saWdodCddID0gJ0xpY2h0JzsKJGxhbmdbJ2NvbG9yX3NjaGVtZV9kYXJrJ10gPSAnRG9ua2VyJzsKJGxhbmdbJ2xhYmVsX3Bvc2l0aW9uJ10gPSAnUG9zaXRpZSc7CiRsYW5nWydwb3NpdGlvbl9ib3R0b20nXSA9ICdPbmRlcic7CiRsYW5nWydwb3NpdGlvbl9jZW50ZXInXSA9ICdNaWRkZW4nOwokbGFuZ1sncG9zaXRpb25fdG9wJ10gPSAnQm92ZW4nOwokbGFuZ1snbGFiZWxfc2l6ZSddID0gJ0dyb290dGUnOwokbGFuZ1snc2l6ZV9jb21wYWN0J10gPSAnQ29tcGFjdCc7CiRsYW5nWydzaXplX25vcm1hbCddID0gJ05vcm1hYWwnOwokbGFuZ1snc2l6ZV9sYXJnZSddID0gJ0dyb290JzsKJGxhbmdbJ3NpemVfd2lkZSddID0gJ0JyZWVkJzsKJGxhbmdbJ21zZ19zZXR0aW5nc19zYXZlZCddID0gJ0luc3RlbGxpbmdlbiBzdWNjZXN2b2wgb3BnZXNsYWdlbic7CgovLyBDdXN0b20gdGV4dCBzZXR0aW5ncwokbGFuZ1snc2V0dGluZ3NfY3VzdG9tX3RleHQnXSA9ICdBYW5nZXBhc3RlIFRla3N0JzsKJGxhbmdbJ2xhYmVsX2N1c3RvbV90aXRsZSddID0gJ0FhbmdlcGFzdGUgVGl0ZWwnOwokbGFuZ1snbGFiZWxfY3VzdG9tX3RleHQnXSA9ICdBYW5nZXBhc3RlIEJlc2NocmlqdmluZ3N0ZWtzdCc7CiRsYW5nWydsYWJlbF9wcmltYXJ5X2NvbG9yJ10gPSAnUHJpbWFpcmUgS25vcGtsZXVyJzsKJGxhbmdbJ2hlbHBfcHJpbWFyeV9jb2xvciddID0gJ0tpZXMgZWVuIGtsZXVyIGRpZSBwYXN0IGJpaiB1dyB3ZWJzaXRlIHRoZW1hJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfZ29vZ2xlX3RhZ19pZCddID0gJ09uZ2VsZGlnIEdvb2dsZSBUYWcgSUQgZm9ybWFhdC4gR2VicnVpayBHQTQgZm9ybWFhdCAoRy1YWFhYWFhYWFhYKSBvZiBHVE0gZm9ybWFhdCAoR1RNLVhYWFhYWFgpJzsKJGxhbmdbJ2xhYmVsX2luamVjdF9qcXVlcnknXSA9ICdqUXVlcnkgYmlibGlvdGhlZWsgaW5qZWN0ZXJlbic7CiRsYW5nWydoZWxwX2luamVjdF9qcXVlcnknXSA9ICdTY2hha2VsIGluIGFscyB1dyB0aGVtYSBnZWVuIGpRdWVyeSBiZXZhdCAodmVyZWlzdCB2b29yIHRvZXN0ZW1taW5nc2Jhbm5lciBmdW5jdGlvbmFsaXRlaXQpJzsKCiRsYW5nWydjb29raWVfYWJvdXRfdGV4dCddID0gJ0Nvb2tpZXMgemlqbiBkaWdpdGFsZSBiZXN0YW5kZW4gZGllIHdlYnNpdGVzIG9wIHV3IGFwcGFyYWF0IHBsYWF0c2VuIG9tIHV3IHZvb3JrZXVyZW4gZW4gYWN0aWVzIHRlIG9udGhvdWRlbiwgem9kYXQgdSBnZWVuIGluZm9ybWF0aWUgb3BuaWV1dyBob2VmdCBpbiB0ZSB2b2VyZW4gYmlqIHRvZWtvbXN0aWdlIGJlem9la2VuLjxicj48YnI+V2UgZ2VicnVpa2VuIGNvb2tpZXMgb20gdXcgZXJ2YXJpbmcgdGUgdmVyYmV0ZXJlbiwgZ2VwZXJzb25hbGlzZWVyZGUgaW5ob3VkIHRlIGxldmVyZW4gZW4gd2Vic2l0ZXZlcmtlZXIgdGUgYW5hbHlzZXJlbi4gRXNzZW50acOrbGUgY29va2llcyB6aWpuIHZlcmVpc3Qgdm9vciBmdW5jdGlvbmFsaXRlaXQsIHRlcndpamwgYW5kZXJlIG9ucyBoZWxwZW4gZGUgc2l0ZSB0ZSB2ZXJiZXRlcmVuLjxicj48YnI+Q29va2llcyB2YW4gZGVyZGVuIHZhbiBzb2NpYWxlIG1lZGlhLCBhbmFseXNlcHJvdmlkZXJzIGVuIGFkdmVydGVudGllcGFydG5lcnMga3VubmVuIG9vayB3b3JkZW4gZ2VicnVpa3Qgb20gZ2VyaWNodGUgaW5ob3VkIG9wIGFuZGVyZSB3ZWJzaXRlcyB0ZSBiaWVkZW4uPGJyPjxicj5VIGt1bnQgY29va2llcyBhY2NlcHRlcmVuIG9mIHdlaWdlcmVuIHZpYSB1dyBicm93c2VyaW5zdGVsbGluZ2VuIG9mIGRlemUgYmFubmVyLiBUb2VzdGVtbWluZyBrYW4gb3AgZWxrIG1vbWVudCB3b3JkZW4gaW5nZXRyb2trZW4gZG9vciB1dyB2b29ya2V1cmVuIGhpZXIgYWFuIHRlIHBhc3Nlbi48YnI+PGJyPlZvb3IgbWVlciBpbmZvcm1hdGllIG92ZXIgZ2VnZXZlbnN2ZXJ3ZXJraW5nIGVuIHByaXZhY3lyZWNodGVuLCB6aWUgb25zIFByaXZhY3liZWxlaWQuJzsK]]></data>
	</file>
	<file>
	  <filename>/lang/ext/pl_PL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnTW9kdcWCIHphaW5zdGFsb3dhbnknOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01vZHXFgiB1c3VuacSZdHknOwokbGFuZ1snZGVzY3JpcHRpb24nXSA9ICdHb29nbGUgQ29uc2VudCBQbGF0Zm9ybSBkbGEgemdvZG5vxZtjaSB6IEdEUFIgeiBpbnRlZ3JhY2rEhSBHQTQvR1RNLic7CiRsYW5nWydhZG1pbl90aXRsZSddID0gJ1VzdGF3aWVuaWEgR29vZ2xlIENvbnNlbnQgUGxhdGZvcm0nOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnRG9zdMSZcCB6YWJyb25pb255LiBTcHJhd2TFuiBzd29qZSB1cHJhd25pZW5pYS4nOwoKJGxhbmdbJ2xhYmVsX3RlbXBsYXRlX2pzJ10gPSAnQmxvayBKYXZhU2NyaXB0JzsKJGxhbmdbJ2xhYmVsX3RlbXBsYXRlX2h0bWwnXSA9ICdTemFibG9uIEJhbmVyYSBaZ29keSc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9jc3MnXSA9ICdDU1MgWmdvZHknOwokbGFuZ1snbGFiZWxfdGVtcGxhdGUnXSA9ICdTemFibG9uJzsKJGxhbmdbJ2xhYmVsX2pzX3Bvc2l0aW9uJ10gPSAnUG96eWNqYSBXc3Rhd2llbmlhIEphdmFTY3JpcHQnOwoKJGxhbmdbJ2pzX2hlYWQnXSA9ICdXc3RhdyB3ICZsdDtoZWFkJmd0Oyc7CiRsYW5nWydqc19ib2R5J10gPSAnV3N0YXcgbmEga2/FhGN1ICZsdDtib2R5Jmd0Oyc7CgokbGFuZ1snc3VibWl0J10gPSAnWmFwaXN6JzsKJGxhbmdbJ2NhbmNlbCddID0gJ0FudWx1aic7CiRsYW5nWydzZXR0aW5nc19zYXZlZCddID0gJ1VzdGF3aWVuaWEgemFwaXNhbmUnOwoKJGxhbmdbJ2NvbnNlbnRfYW5hbHl0aWNzX3N0b3JhZ2UnXSA9ICdQcnplY2hvd3l3YW5pZSBBbmFseXRpY3MnOwokbGFuZ1snY29uc2VudF9hZF9zdG9yYWdlJ10gPSAnUHJ6ZWNob3d5d2FuaWUgUmVrbGFtJzsKJGxhbmdbJ2NvbnNlbnRfYWRfcGVyc29uYWxpemF0aW9uJ10gPSAnUGVyc29uYWxpemFjamEgUmVrbGFtJzsKJGxhbmdbJ2NvbnNlbnRfYWRfdXNlcl9kYXRhJ10gPSAnRGFuZSBVxbx5dGtvd25pa2EgUmVrbGFtJzsKJGxhbmdbJ2NvbnNlbnRfcGVyc29uYWxpemF0aW9uJ10gPSAnUGVyc29uYWxpemFjamEnOwoKJGxhbmdbJ2luamVjdGlvbl9sb2NhdGlvbiddID0gJ0xva2FsaXphY2phIFdzdHJ6eWtuacSZY2lhIEphdmFTY3JpcHQnOwokbGFuZ1snbGFiZWxfZW5hYmxlZCddID0gJ1fFgsSFY3ogR29vZ2xlIENvbnNlbnQgUGxhdGZvcm0nOwokbGFuZ1snYXNrX3VuaW5zdGFsbCddID0gJ0N6eSBuYSBwZXdubyBjaGNlc3ogb2RpbnN0YWxvd2HEhyBtb2R1xYIgR29vZ2xlQ29uc2VudFBsYXRmb3JtPyc7CiRsYW5nWydsYWJlbF9nb29nbGVfdGFnX2lkJ10gPSAnSUQgVGFndSBHb29nbGUgKEdBNDogRy1YWFhYWFhYIGx1YiBHVE06IEdUTS1YWFhYWFhYKSc7CiRsYW5nWydoZWxwX2dvb2dsZV90YWdfaWQnXSAgPSAnV3lrcnl3YW5lIGF1dG9tYXR5Y3puaWUuIEdBNCDFgmFkdWplIGd0YWcuanM7IEdUTSDFgmFkdWplIGtvbnRlbmVyLic7CiRsYW5nWydsYWJlbF9yZWd1bGF0aW9uJ10gPSAnWmdvZG5vxZvEhyB6IFJlZ3VsYWNqYW1pIFByeXdhdG5vxZtjaSc7CgovLyBDb29raWUgY29uc2VudCB0cmFuc2xhdGlvbnMKJGxhbmdbJ2Nvb2tpZV90aXRsZSddID0gJ1ByZWZlcmVuY2plIFBsaWvDs3cgQ29va2llJzsKJGxhbmdbJ2Nvb2tpZV9jb25zZW50X3RleHQnXSA9ICdVxbx5d2FteSBwbGlrw7N3IGNvb2tpZSBkbyBwZXJzb25hbGl6YWNqaSB0cmXFm2NpIGkgcmVrbGFtLCB6YXBld25pZW5pYSBmdW5rY2ppIG1lZGnDs3cgc3BvxYJlY3pub8WbY2lvd3ljaCBpIGFuYWxpenkgbmFzemVnbyBydWNodS4gVWRvc3TEmXBuaWFteSByw7N3bmllxbwgaW5mb3JtYWNqZSBvIGtvcnp5c3Rhbml1IHogbmFzemVqIHdpdHJ5bnkgbmFzenltIHBhcnRuZXJvbSB6IG1lZGnDs3cgc3BvxYJlY3pub8WbY2lvd3ljaCwgcmVrbGFteSBpIGFuYWxpdHlraS4nOwokbGFuZ1snY29va2llX25lY2Vzc2FyeSddID0gJ05pZXpixJlkbmUnOwokbGFuZ1snY29va2llX3ByZWZlcmVuY2VzJ10gPSAnUHJlZmVyZW5jamUnOwokbGFuZ1snY29va2llX3N0YXRpc3RpY3MnXSA9ICdTdGF0eXN0eWtpJzsKJGxhbmdbJ2Nvb2tpZV9tYXJrZXRpbmcnXSA9ICdNYXJrZXRpbmcnOwokbGFuZ1snY29va2llX25lY2Vzc2FyeV9kZXNjJ10gPSAnV3ltYWdhbmUgZGxhIHBvZHN0YXdvd2VqIGZ1bmtjam9uYWxub8WbY2kgd2l0cnlueSc7CiRsYW5nWydjb29raWVfcHJlZmVyZW5jZXNfZGVzYyddID0gJ1phcGFtacSZdHVqxIUgVHdvamUgdXN0YXdpZW5pYSBpIHd5Ym9yeSc7CiRsYW5nWydjb29raWVfc3RhdGlzdGljc19kZXNjJ10gPSAnUG9tYWdhasSFIG5hbSB6cm96dW1pZcSHLCBqYWsga29yenlzdGFzeiB6IG5hc3plaiB3aXRyeW55JzsKJGxhbmdbJ2Nvb2tpZV9tYXJrZXRpbmdfZGVzYyddID0gJ1NwZXJzb25hbGl6b3dhbmUgcmVrbGFteSBpIHRyZcWbY2knOwokbGFuZ1snY29va2llX2Fib3V0X3RleHQnXSA9ICdQbGlraSBjb29raWUgdG8gcGxpa2kgY3lmcm93ZSwga3TDs3JlIHN0cm9ueSBpbnRlcm5ldG93ZSB1bWllc3pjemFqxIUgbmEgVHdvaW0gdXJ6xIVkemVuaXUsIGFieSB6YXBhbWnEmXRhxIcgVHdvamUgcHJlZmVyZW5jamUgaSBkemlhxYJhbmlhLCBkemnEmWtpIGN6ZW11IG5pZSBtdXNpc3ogcG9ub3duaWUgd3Byb3dhZHphxIcgaW5mb3JtYWNqaSBwb2RjemFzIHByenlzesWCeWNoIHdpenl0Ljxicj48YnI+VcW8eXdhbXkgcGxpa8OzdyBjb29raWUsIGFieSBwb3ByYXdpxIcgVHdvamUgZG/Fm3dpYWRjemVuaWUsIGRvc3RhcmN6ecSHIHNwZXJzb25hbGl6b3dhbsSFIHRyZcWbxIcgaSBhbmFsaXpvd2HEhyBydWNoIG5hIHN0cm9uaWUuIE5pZXpixJlkbmUgcGxpa2kgY29va2llIHPEhSB3eW1hZ2FuZSBkbyBmdW5rY2pvbm93YW5pYSwgcG9kY3phcyBnZHkgaW5uZSBwb21hZ2FqxIUgbmFtIHVsZXBzennEhyBzdHJvbsSZLjxicj48YnI+UGxpa2kgY29va2llIHN0cm9uIHRyemVjaWNoIHogbWVkacOzdyBzcG/FgmVjem5vxZtjaW93eWNoLCBkb3N0YXdjw7N3IGFuYWxpeiBpIHBhcnRuZXLDs3cgcmVrbGFtb3d5Y2ggbW9nxIUgYnnEhyByw7N3bmllxbwgdcW8eXdhbmUgZG8gZG9zdGFyY3phbmlhIHVraWVydW5rb3dhbmVqIHRyZcWbY2kgbmEgaW5ueWNoIHN0cm9uYWNoIGludGVybmV0b3d5Y2guPGJyPjxicj5Nb8W8ZXN6IHphYWtjZXB0b3dhxIcgbHViIG9kcnp1Y2nEhyBwbGlraSBjb29raWUgemEgcG9tb2PEhSB1c3Rhd2llxYQgcHJ6ZWdsxIVkYXJraSBsdWIgdGVnbyBiYW5lcmEuIFpnb2RhIG1vxbxlIHpvc3RhxIcgd3ljb2ZhbmEgdyBkb3dvbG55bSBtb21lbmNpZSBwb3ByemV6IGRvc3Rvc293YW5pZSBwcmVmZXJlbmNqaSB0dXRhai48YnI+PGJyPkFieSB1enlza2HEhyB3acSZY2VqIGluZm9ybWFjamkgbyBwcnpldHdhcnphbml1IGRhbnljaCBpIHByYXdhY2ggZG8gcHJ5d2F0bm/Fm2NpLCB6b2JhY3ogbmFzesSFIFBvbGl0eWvEmSBQcnl3YXRub8WbY2kuJzsKJGxhbmdbJ2Nvb2tpZV9kZW55J10gPSAnT2RyenXEhyc7CiRsYW5nWydjb29raWVfY3VzdG9taXplJ10gPSAnRG9zdG9zdWonOwokbGFuZ1snY29va2llX2FsbG93X2FsbCddID0gJ1plenfDs2wgbmEgd3N6eXN0a2llJzsKJGxhbmdbJ2Nvb2tpZV9zYXZlX3NlbGVjdGlvbiddID0gJ1phcGlzeiB3eWLDs3InOwokbGFuZ1snY29va2llX2Fja25vd2xlZGdlJ10gPSAnUG90d2llcmTFuic7CiRsYW5nWydjb29raWVfdGFiX2NvbnNlbnQnXSA9ICdaZ29kYSc7CiRsYW5nWydjb29raWVfdGFiX2RldGFpbHMnXSA9ICdTemN6ZWfDs8WCeSc7CiRsYW5nWydjb29raWVfdGFiX2Fib3V0J10gPSAnTyBuYXMnOwokbGFuZ1snY29va2llX3dlYnNpdGVfdXNlcyddID0gJ1RhIHN0cm9uYSBpbnRlcm5ldG93YSB1xbx5d2EgcGxpa8OzdyBjb29raWUnOwoKLy8gU2V0dGluZ3MgdGFiCiRsYW5nWydzZXR0aW5nc19hcHBlYXJhbmNlJ10gPSAnVXN0YXdpZW5pYSB3eWdsxIVkdSc7CiRsYW5nWydsYWJlbF9jb2xvcl9zY2hlbWUnXSA9ICdTY2hlbWF0IGtvbG9yw7N3JzsKJGxhbmdbJ2NvbG9yX3NjaGVtZV9saWdodCddID0gJ0phc255JzsKJGxhbmdbJ2NvbG9yX3NjaGVtZV9kYXJrJ10gPSAnQ2llbW55JzsKJGxhbmdbJ2xhYmVsX3Bvc2l0aW9uJ10gPSAnUG96eWNqYSc7CiRsYW5nWydwb3NpdGlvbl9ib3R0b20nXSA9ICdOYSBkb2xlJzsKJGxhbmdbJ3Bvc2l0aW9uX2NlbnRlciddID0gJ8Wacm9kZWsnOwokbGFuZ1sncG9zaXRpb25fdG9wJ10gPSAnTmEgZ8OzcnplJzsKJGxhbmdbJ2xhYmVsX3NpemUnXSA9ICdSb3ptaWFyJzsKJGxhbmdbJ3NpemVfY29tcGFjdCddID0gJ0tvbXBha3Rvd3knOwokbGFuZ1snc2l6ZV9ub3JtYWwnXSA9ICdOb3JtYWxueSc7CiRsYW5nWydzaXplX2xhcmdlJ10gPSAnRHXFvHknOwokbGFuZ1snc2l6ZV93aWRlJ10gPSAnU3plcm9raSc7CiRsYW5nWydtc2dfc2V0dGluZ3Nfc2F2ZWQnXSA9ICdVc3Rhd2llbmlhIHphcGlzYW5lIHBvbXnFm2xuaWUnOwoKLy8gQ3VzdG9tIHRleHQgc2V0dGluZ3MKJGxhbmdbJ3NldHRpbmdzX2N1c3RvbV90ZXh0J10gPSAnVGVrc3Qgbmllc3RhbmRhcmRvd3knOwokbGFuZ1snbGFiZWxfY3VzdG9tX3RpdGxlJ10gPSAnVHl0dcWCIG5pZXN0YW5kYXJkb3d5JzsKJGxhbmdbJ2xhYmVsX2N1c3RvbV90ZXh0J10gPSAnTmllc3RhbmRhcmRvd3kgdGVrc3Qgb3Bpc3UnOwokbGFuZ1snbGFiZWxfcHJpbWFyeV9jb2xvciddID0gJ0tvbG9yIGfFgsOzd25lZ28gcHJ6eWNpc2t1JzsKJGxhbmdbJ2hlbHBfcHJpbWFyeV9jb2xvciddID0gJ1d5Ymllcnoga29sb3IgcGFzdWrEhWN5IGRvIG1vdHl3dSBUd29qZWogc3Ryb255JzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfZ29vZ2xlX3RhZ19pZCddID0gJ05pZXByYXdpZMWCb3d5IGZvcm1hdCBHb29nbGUgVGFnIElELiBVxbx5aiBmb3JtYXR1IEdBNCAoRy1YWFhYWFhYWFhYKSBsdWIgR1RNIChHVE0tWFhYWFhYWCknOwokbGFuZ1snbGFiZWxfaW5qZWN0X2pxdWVyeSddID0gJ1dzdHJ6eWtuaWogYmlibGlvdGVrxJkgalF1ZXJ5JzsKJGxhbmdbJ2hlbHBfaW5qZWN0X2pxdWVyeSddID0gJ1fFgsSFY3osIGplxZtsaSBUd8OzaiBtb3R5dyBuaWUgemF3aWVyYSBqUXVlcnkgKHd5bWFnYW5lIGRvIGR6aWHFgmFuaWEgYmFuZXJhIHpnb2R5KSc7Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/pt_PT.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnTcOzZHVsbyBpbnN0YWxhZG8nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ03Ds2R1bG8gcmVtb3ZpZG8nOwokbGFuZ1snZGVzY3JpcHRpb24nXSA9ICdHb29nbGUgQ29uc2VudCBQbGF0Zm9ybSBwYXJhIGNvbmZvcm1pZGFkZSBHRFBSIGNvbSBpbnRlZ3Jhw6fDo28gR0E0L0dUTS4nOwokbGFuZ1snYWRtaW5fdGl0bGUnXSA9ICdDb25maWd1cmHDp8O1ZXMgR29vZ2xlIENvbnNlbnQgUGxhdGZvcm0nOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQWNlc3NvIG5lZ2Fkby4gVmVyaWZpcXVlIHN1YXMgcGVybWlzc8O1ZXMuJzsKCiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9qcyddID0gJ0Jsb2NvIEphdmFTY3JpcHQnOwokbGFuZ1snbGFiZWxfdGVtcGxhdGVfaHRtbCddID0gJ01vZGVsbyBkZSBCYW5uZXIgZGUgQ29uc2VudGltZW50byc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZV9jc3MnXSA9ICdDU1MgZGUgQ29uc2VudGltZW50byc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZSddID0gJ01vZGVsbyc7CiRsYW5nWydsYWJlbF9qc19wb3NpdGlvbiddID0gJ1Bvc2nDp8OjbyBkZSBJbnNlcsOnw6NvIGRvIEphdmFTY3JpcHQnOwoKJGxhbmdbJ2pzX2hlYWQnXSA9ICdJbnNlcmlyIGVtICZsdDtoZWFkJmd0Oyc7CiRsYW5nWydqc19ib2R5J10gPSAnSW5zZXJpciBubyBmaW5hbCBkZSAmbHQ7Ym9keSZndDsnOwoKJGxhbmdbJ3N1Ym1pdCddID0gJ1NhbHZhcic7CiRsYW5nWydjYW5jZWwnXSA9ICdDYW5jZWxhcic7CiRsYW5nWydzZXR0aW5nc19zYXZlZCddID0gJ0NvbmZpZ3VyYcOnw7VlcyBzYWx2YXMnOwoKJGxhbmdbJ2NvbnNlbnRfYW5hbHl0aWNzX3N0b3JhZ2UnXSA9ICdBcm1hemVuYW1lbnRvIGRlIEFuYWx5dGljcyc7CiRsYW5nWydjb25zZW50X2FkX3N0b3JhZ2UnXSA9ICdBcm1hemVuYW1lbnRvIGRlIEFuw7puY2lvcyc7CiRsYW5nWydjb25zZW50X2FkX3BlcnNvbmFsaXphdGlvbiddID0gJ1BlcnNvbmFsaXphw6fDo28gZGUgQW7Dum5jaW9zJzsKJGxhbmdbJ2NvbnNlbnRfYWRfdXNlcl9kYXRhJ10gPSAnRGFkb3MgZGUgVXN1w6FyaW8gcGFyYSBBbsO6bmNpb3MnOwokbGFuZ1snY29uc2VudF9wZXJzb25hbGl6YXRpb24nXSA9ICdQZXJzb25hbGl6YcOnw6NvJzsKCiRsYW5nWydpbmplY3Rpb25fbG9jYXRpb24nXSA9ICdMb2NhbCBkZSBJbmplw6fDo28gZG8gSmF2YVNjcmlwdCc7CiRsYW5nWydsYWJlbF9lbmFibGVkJ10gPSAnQXRpdmFyIEdvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ2Fza191bmluc3RhbGwnXSA9ICdUZW0gY2VydGV6YSBkZSBxdWUgZGVzZWphIGRlc2luc3RhbGFyIG8gbcOzZHVsbyBHb29nbGVDb25zZW50UGxhdGZvcm0/JzsKJGxhbmdbJ2xhYmVsX2dvb2dsZV90YWdfaWQnXSA9ICdJRCBkbyBHb29nbGUgVGFnIChHQTQ6IEctWFhYWFhYWCBvdSBHVE06IEdUTS1YWFhYWFhYKSc7CiRsYW5nWydoZWxwX2dvb2dsZV90YWdfaWQnXSAgPSAnRGV0ZWN0YWRvIGF1dG9tYXRpY2FtZW50ZS4gR0E0IGNhcnJlZ2EgZ3RhZy5qczsgR1RNIGNhcnJlZ2EgbyBjb250w6ppbmVyLic7CiRsYW5nWydsYWJlbF9yZWd1bGF0aW9uJ10gPSAnQ29uZm9ybWlkYWRlIGNvbSBSZWd1bGFtZW50YcOnw7VlcyBkZSBQcml2YWNpZGFkZSc7CgovLyBDb29raWUgY29uc2VudCB0cmFuc2xhdGlvbnMKJGxhbmdbJ2Nvb2tpZV90aXRsZSddID0gJ1ByZWZlcsOqbmNpYXMgZGUgQ29va2llcyc7CiRsYW5nWydjb29raWVfY29uc2VudF90ZXh0J10gPSAnVXRpbGl6YW1vcyBjb29raWVzIHBhcmEgcGVyc29uYWxpemFyIGNvbnRlw7pkbyBlIGFuw7puY2lvcywgZm9ybmVjZXIgcmVjdXJzb3MgZGUgbcOtZGlhIHNvY2lhbCBlIGFuYWxpc2FyIG5vc3NvIHRyw6FmZWdvLiBUYW1iw6ltIGNvbXBhcnRpbGhhbW9zIGluZm9ybWHDp8O1ZXMgc29icmUgc2V1IHVzbyBkZSBub3NzbyBzaXRlIGNvbSBub3Nzb3MgcGFyY2Vpcm9zIGRlIG3DrWRpYSBzb2NpYWwsIHB1YmxpY2lkYWRlIGUgYW7DoWxpc2UuJzsKJGxhbmdbJ2Nvb2tpZV9uZWNlc3NhcnknXSA9ICdOZWNlc3PDoXJpb3MnOwokbGFuZ1snY29va2llX3ByZWZlcmVuY2VzJ10gPSAnUHJlZmVyw6puY2lhcyc7CiRsYW5nWydjb29raWVfc3RhdGlzdGljcyddID0gJ0VzdGF0w61zdGljYXMnOwokbGFuZ1snY29va2llX21hcmtldGluZyddID0gJ01hcmtldGluZyc7CiRsYW5nWydjb29raWVfbmVjZXNzYXJ5X2Rlc2MnXSA9ICdOZWNlc3PDoXJpb3MgcGFyYSBhIGZ1bmNpb25hbGlkYWRlIGLDoXNpY2EgZG8gc2l0ZSc7CiRsYW5nWydjb29raWVfcHJlZmVyZW5jZXNfZGVzYyddID0gJ0xlbWJyYW0gc3VhcyBjb25maWd1cmHDp8O1ZXMgZSBlc2NvbGhhcyc7CiRsYW5nWydjb29raWVfc3RhdGlzdGljc19kZXNjJ10gPSAnQWp1ZGFtLW5vcyBhIGVudGVuZGVyIGNvbW8gdm9jw6ogdXRpbGl6YSBub3NzbyBzaXRlJzsKJGxhbmdbJ2Nvb2tpZV9tYXJrZXRpbmdfZGVzYyddID0gJ0Fuw7puY2lvcyBlIGNvbnRlw7pkbyBwZXJzb25hbGl6YWRvcyc7CiRsYW5nWydjb29raWVfYWJvdXRfdGV4dCddID0gJ0Nvb2tpZXMgc8OjbyBhcnF1aXZvcyBkaWdpdGFpcyBxdWUgb3Mgc2l0ZXMgY29sb2NhbSBlbSBzZXUgZGlzcG9zaXRpdm8gcGFyYSBsZW1icmFyIHN1YXMgcHJlZmVyw6puY2lhcyBlIGHDp8O1ZXMsIHBhcmEgcXVlIHZvY8OqIG7Do28gcHJlY2lzZSByZWluc2VyaXIgaW5mb3JtYcOnw7VlcyBlbSB2aXNpdGFzIGZ1dHVyYXMuPGJyPjxicj5VdGlsaXphbW9zIGNvb2tpZXMgcGFyYSBtZWxob3JhciBzdWEgZXhwZXJpw6puY2lhLCBlbnRyZWdhciBjb250ZcO6ZG8gcGVyc29uYWxpemFkbyBlIGFuYWxpc2FyIG8gdHLDoWZlZ28gZG8gc2l0ZS4gQ29va2llcyBlc3NlbmNpYWlzIHPDo28gbmVjZXNzw6FyaW9zIHBhcmEgYSBmdW5jaW9uYWxpZGFkZSwgZW5xdWFudG8gb3V0cm9zIG5vcyBhanVkYW0gYSBtZWxob3JhciBvIHNpdGUuPGJyPjxicj5Db29raWVzIGRlIHRlcmNlaXJvcyBkZSByZWRlcyBzb2NpYWlzLCBwcm92ZWRvcmVzIGRlIGFuw6FsaXNlIGUgcGFyY2Vpcm9zIHB1YmxpY2l0w6FyaW9zIHRhbWLDqW0gcG9kZW0gc2VyIHVzYWRvcyBwYXJhIGZvcm5lY2VyIGNvbnRlw7pkbyBkaXJlY2lvbmFkbyBlbSBvdXRyb3Mgc2l0ZXMuPGJyPjxicj5Wb2PDqiBwb2RlIGFjZWl0YXIgb3UgcmVjdXNhciBjb29raWVzIGF0cmF2w6lzIGRhcyBjb25maWd1cmHDp8O1ZXMgZG8gc2V1IG5hdmVnYWRvciBvdSBkZXN0ZSBiYW5uZXIuIE8gY29uc2VudGltZW50byBwb2RlIHNlciByZXRpcmFkbyBhIHF1YWxxdWVyIG1vbWVudG8gYWp1c3RhbmRvIHN1YXMgcHJlZmVyw6puY2lhcyBhcXVpLjxicj48YnI+UGFyYSBtYWlzIGluZm9ybWHDp8O1ZXMgc29icmUgbyB0cmF0YW1lbnRvIGRlIGRhZG9zIGUgZGlyZWl0b3MgZGUgcHJpdmFjaWRhZGUsIGNvbnN1bHRlIG5vc3NhIFBvbMOtdGljYSBkZSBQcml2YWNpZGFkZS4nOwokbGFuZ1snY29va2llX2RlbnknXSA9ICdSZWN1c2FyJzsKJGxhbmdbJ2Nvb2tpZV9jdXN0b21pemUnXSA9ICdQZXJzb25hbGl6YXInOwokbGFuZ1snY29va2llX2FsbG93X2FsbCddID0gJ1Blcm1pdGlyIHRvZG9zJzsKJGxhbmdbJ2Nvb2tpZV9zYXZlX3NlbGVjdGlvbiddID0gJ1NhbHZhciBzZWxlw6fDo28nOwokbGFuZ1snY29va2llX2Fja25vd2xlZGdlJ10gPSAnUmVjb25oZWNlcic7CiRsYW5nWydjb29raWVfdGFiX2NvbnNlbnQnXSA9ICdDb25zZW50aW1lbnRvJzsKJGxhbmdbJ2Nvb2tpZV90YWJfZGV0YWlscyddID0gJ0RldGFsaGVzJzsKJGxhbmdbJ2Nvb2tpZV90YWJfYWJvdXQnXSA9ICdTb2JyZSc7CiRsYW5nWydjb29raWVfd2Vic2l0ZV91c2VzJ10gPSAnRXN0ZSBzaXRlIHV0aWxpemEgY29va2llcyc7CgovLyBTZXR0aW5ncyB0YWIKJGxhbmdbJ3NldHRpbmdzX2FwcGVhcmFuY2UnXSA9ICdDb25maWd1cmHDp8O1ZXMgZGUgQXBhcsOqbmNpYSc7CiRsYW5nWydsYWJlbF9jb2xvcl9zY2hlbWUnXSA9ICdFc3F1ZW1hIGRlIGNvcmVzJzsKJGxhbmdbJ2NvbG9yX3NjaGVtZV9saWdodCddID0gJ0NsYXJvJzsKJGxhbmdbJ2NvbG9yX3NjaGVtZV9kYXJrJ10gPSAnRXNjdXJvJzsKJGxhbmdbJ2xhYmVsX3Bvc2l0aW9uJ10gPSAnUG9zacOnw6NvJzsKJGxhbmdbJ3Bvc2l0aW9uX2JvdHRvbSddID0gJ0VtYmFpeG8nOwokbGFuZ1sncG9zaXRpb25fY2VudGVyJ10gPSAnQ2VudHJvJzsKJGxhbmdbJ3Bvc2l0aW9uX3RvcCddID0gJ0VtIGNpbWEnOwokbGFuZ1snbGFiZWxfc2l6ZSddID0gJ1RhbWFuaG8nOwokbGFuZ1snc2l6ZV9jb21wYWN0J10gPSAnQ29tcGFjdG8nOwokbGFuZ1snc2l6ZV9ub3JtYWwnXSA9ICdOb3JtYWwnOwokbGFuZ1snc2l6ZV9sYXJnZSddID0gJ0dyYW5kZSc7CiRsYW5nWydzaXplX3dpZGUnXSA9ICdMYXJnbyc7CiRsYW5nWydtc2dfc2V0dGluZ3Nfc2F2ZWQnXSA9ICdDb25maWd1cmHDp8O1ZXMgc2FsdmFzIGNvbSBzdWNlc3NvJzsKCi8vIEN1c3RvbSB0ZXh0IHNldHRpbmdzCiRsYW5nWydzZXR0aW5nc19jdXN0b21fdGV4dCddID0gJ1RleHRvIHBlcnNvbmFsaXphZG8nOwokbGFuZ1snbGFiZWxfY3VzdG9tX3RpdGxlJ10gPSAnVMOtdHVsbyBwZXJzb25hbGl6YWRvJzsKJGxhbmdbJ2xhYmVsX2N1c3RvbV90ZXh0J10gPSAnVGV4dG8gZGUgZGVzY3Jpw6fDo28gcGVyc29uYWxpemFkbyc7CiRsYW5nWydsYWJlbF9wcmltYXJ5X2NvbG9yJ10gPSAnQ29yIGRvIGJvdMOjbyBwcmluY2lwYWwnOwokbGFuZ1snaGVscF9wcmltYXJ5X2NvbG9yJ10gPSAnRXNjb2xoYSB1bWEgY29yIHF1ZSBjb21iaW5lIGNvbSBvIHRlbWEgZG8gc2V1IHNpdGUnOwokbGFuZ1snZXJyb3JfaW52YWxpZF9nb29nbGVfdGFnX2lkJ10gPSAnRm9ybWF0byBpbnbDoWxpZG8gZG8gR29vZ2xlIFRhZyBJRC4gVXRpbGl6ZSBvIGZvcm1hdG8gR0E0IChHLVhYWFhYWFhYWFgpIG91IEdUTSAoR1RNLVhYWFhYWFgpJzsKJGxhbmdbJ2xhYmVsX2luamVjdF9qcXVlcnknXSA9ICdJbmpldGFyIGJpYmxpb3RlY2EgalF1ZXJ5JzsKJGxhbmdbJ2hlbHBfaW5qZWN0X2pxdWVyeSddID0gJ0F0aXZlIHNlIG8gc2V1IHRlbWEgbsOjbyBpbmNsdWlyIGpRdWVyeSAobmVjZXNzw6FyaW8gcGFyYSBvIGZ1bmNpb25hbWVudG8gZG8gYmFubmVyIGRlIGNvbnNlbnRpbWVudG8pJzsK]]></data>
	</file>
	<file>
	  <filename>/lang/ext/sv_SE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnTW9kdWwgaW5zdGFsbGVyYWQnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01vZHVsIGJvcnR0YWdlbic7CiRsYW5nWydkZXNjcmlwdGlvbiddID0gJ0dvb2dsZSBDb25zZW50IFBsYXRmb3JtIGbDtnIgR0RQUi1lZnRlcmxldm5hZCBtZWQgR0E0L0dUTS1pbnRlZ3JhdGlvbi4nOwokbGFuZ1snYWRtaW5fdGl0bGUnXSA9ICdHb29nbGUgQ29uc2VudCBQbGF0Zm9ybSBJbnN0w6RsbG5pbmdhcic7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICfDhXRrb21zdCBuZWthZC4gS29udHJvbGxlcmEgZGluYSBiZWjDtnJpZ2hldGVyLic7CgokbGFuZ1snbGFiZWxfdGVtcGxhdGVfanMnXSA9ICdKYXZhU2NyaXB0LWJsb2NrJzsKJGxhbmdbJ2xhYmVsX3RlbXBsYXRlX2h0bWwnXSA9ICdTYW10eWNrZXNiYW5uZXJtYWxsJzsKJGxhbmdbJ2xhYmVsX3RlbXBsYXRlX2NzcyddID0gJ1NhbXR5Y2tlIENTUyc7CiRsYW5nWydsYWJlbF90ZW1wbGF0ZSddID0gJ01hbGwnOwokbGFuZ1snbGFiZWxfanNfcG9zaXRpb24nXSA9ICdKYXZhU2NyaXB0IEluZm9nbmluZ3Nwb3NpdGlvbic7CgokbGFuZ1snanNfaGVhZCddID0gJ0luZm9nYSBpICZsdDtoZWFkJmd0Oyc7CiRsYW5nWydqc19ib2R5J10gPSAnSW5mb2dhIGkgc2x1dGV0IGF2ICZsdDtib2R5Jmd0Oyc7CgokbGFuZ1snc3VibWl0J10gPSAnU3BhcmEnOwokbGFuZ1snY2FuY2VsJ10gPSAnQXZicnl0JzsKJGxhbmdbJ3NldHRpbmdzX3NhdmVkJ10gPSAnSW5zdMOkbGxuaW5nYXIgc3BhcmFkZSc7CgokbGFuZ1snY29uc2VudF9hbmFseXRpY3Nfc3RvcmFnZSddID0gJ0FuYWx5dGljcy1sYWdyaW5nJzsKJGxhbmdbJ2NvbnNlbnRfYWRfc3RvcmFnZSddID0gJ0Fubm9uc2xhZ3JpbmcnOwokbGFuZ1snY29uc2VudF9hZF9wZXJzb25hbGl6YXRpb24nXSA9ICdBbm5vbnPCrXBlcnNvbmFsaXNlcmluZyc7CiRsYW5nWydjb25zZW50X2FkX3VzZXJfZGF0YSddID0gJ0Fubm9uc8KtYW52w6RuZGFyZGF0YSc7CiRsYW5nWydjb25zZW50X3BlcnNvbmFsaXphdGlvbiddID0gJ1BlcnNvbmFsaXNlcmluZyc7CgokbGFuZ1snaW5qZWN0aW9uX2xvY2F0aW9uJ10gPSAnSmF2YVNjcmlwdC1pbmpla3Rpb25zcGxhdHMnOwokbGFuZ1snbGFiZWxfZW5hYmxlZCddID0gJ0FrdGl2ZXJhIEdvb2dsZSBDb25zZW50IFBsYXRmb3JtJzsKJGxhbmdbJ2Fza191bmluc3RhbGwnXSA9ICfDhHIgZHUgc8Oka2VyIHDDpSBhdHQgZHUgdmlsbCBhdmluc3RhbGxlcmEgbW9kdWxlbiBHb29nbGVDb25zZW50UGxhdGZvcm0/JzsKJGxhbmdbJ2xhYmVsX2dvb2dsZV90YWdfaWQnXSA9ICdHb29nbGUgVGFnIElEIChHQTQ6IEctWFhYWFhYWCBlbGxlciBHVE06IEdUTS1YWFhYWFhYKSc7CiRsYW5nWydoZWxwX2dvb2dsZV90YWdfaWQnXSAgPSAnVXBwdMOkY2tzIGF1dG9tYXRpc2t0LiBHQTQgbGFkZGFyIGd0YWcuanM7IEdUTSBsYWRkYXIgYmVow6VsbGFyZW4uJzsKJGxhbmdbJ2xhYmVsX3JlZ3VsYXRpb24nXSA9ICdFZnRlcmxldm5hZCBhdiBpbnRlZ3JpdGV0c3JlZ2xlcic7CgovLyBDb29raWUgY29uc2VudCB0cmFuc2xhdGlvbnMKJGxhbmdbJ2Nvb2tpZV90aXRsZSddID0gJ0Nvb2tpZXByZWZlcmVuc2VyJzsKJGxhbmdbJ2Nvb2tpZV9jb25zZW50X3RleHQnXSA9ICdWaSBhbnbDpG5kZXIgY29va2llcyBmw7ZyIGF0dCBwZXJzb25hbGlzZXJhIGlubmVow6VsbCBvY2ggYW5ub25zZXIsIHRpbGxoYW5kYWjDpWxsYSBzb2NpYWxhIG1lZGllZnVua3Rpb25lciBvY2ggYW5hbHlzZXJhIHbDpXIgdHJhZmlrLiBWaSBkZWxhciBvY2tzw6UgaW5mb3JtYXRpb24gb20gZGluIGFudsOkbmRuaW5nIGF2IHbDpXIgd2ViYnBsYXRzIG1lZCB2w6VyYSBzb2NpYWxhIG1lZGllci0sIHJla2xhbS0gb2NoIGFuYWx5c3BhcnRuZXJzLic7CiRsYW5nWydjb29raWVfbmVjZXNzYXJ5J10gPSAnTsO2ZHbDpG5kaWdhJzsKJGxhbmdbJ2Nvb2tpZV9wcmVmZXJlbmNlcyddID0gJ1ByZWZlcmVuc2VyJzsKJGxhbmdbJ2Nvb2tpZV9zdGF0aXN0aWNzJ10gPSAnU3RhdGlzdGlrJzsKJGxhbmdbJ2Nvb2tpZV9tYXJrZXRpbmcnXSA9ICdNYXJrbmFkc2bDtnJpbmcnOwokbGFuZ1snY29va2llX25lY2Vzc2FyeV9kZXNjJ10gPSAnS3LDpHZzIGbDtnIgZ3J1bmRsw6RnZ2FuZGUgd2ViYnBsYXRzZnVua3Rpb25hbGl0ZXQnOwokbGFuZ1snY29va2llX3ByZWZlcmVuY2VzX2Rlc2MnXSA9ICdLb21tZXIgaWjDpWcgZGluYSBpbnN0w6RsbG5pbmdhciBvY2ggdmFsJzsKJGxhbmdbJ2Nvb2tpZV9zdGF0aXN0aWNzX2Rlc2MnXSA9ICdIasOkbHBlciBvc3MgZsO2cnN0w6UgaHVyIGR1IGFudsOkbmRlciB2w6VyIHdlYmJwbGF0cyc7CiRsYW5nWydjb29raWVfbWFya2V0aW5nX2Rlc2MnXSA9ICdQZXJzb25hbGlzZXJhZGUgYW5ub25zZXIgb2NoIGlubmVow6VsbCc7CiRsYW5nWydjb29raWVfYWJvdXRfdGV4dCddID0gJ0Nvb2tpZXMgw6RyIGRpZ2l0YWxhIGZpbGVyIHNvbSB3ZWJicGxhdHNlciBwbGFjZXJhciBww6UgZGluIGVuaGV0IGbDtnIgYXR0IGtvbW1hIGlow6VnIGRpbmEgcHJlZmVyZW5zZXIgb2NoIMOldGfDpHJkZXIsIHPDpSBhdHQgZHUgaW50ZSBiZWjDtnZlciBhbmdlIGluZm9ybWF0aW9uIGlnZW4gdmlkIGZyYW10aWRhIGJlc8O2ay48YnI+PGJyPlZpIGFudsOkbmRlciBjb29raWVzIGbDtnIgYXR0IGbDtnJiw6R0dHJhIGRpbiB1cHBsZXZlbHNlLCBsZXZlcmVyYSBwZXJzb25hbGlzZXJhdCBpbm5laMOlbGwgb2NoIGFuYWx5c2VyYSB3ZWJicGxhdHN0cmFmaWsuIFbDpHNlbnRsaWdhIGNvb2tpZXMga3LDpHZzIGbDtnIgZnVua3Rpb25hbGl0ZXQsIG1lZGFuIGFuZHJhIGhqw6RscGVyIG9zcyBhdHQgZsO2cmLDpHR0cmEgd2ViYnBsYXRzZW4uPGJyPjxicj5UcmVkamVwYXJ0c2Nvb2tpZXMgZnLDpW4gc29jaWFsYSBtZWRpZXIsIGFuYWx5c2xldmVyYW50w7ZyZXIgb2NoIHJla2xhbXBhcnRuZXJzIGthbiBvY2tzw6UgYW52w6RuZGFzIGbDtnIgYXR0IGxldmVyZXJhIHJpa3RhdCBpbm5laMOlbGwgcMOlIGFuZHJhIHdlYmJwbGF0c2VyLjxicj48YnI+RHUga2FuIGFjY2VwdGVyYSBlbGxlciBuZWthIGNvb2tpZXMgZ2Vub20gZGluYSB3ZWJibMOkc2FyaW5zdMOkbGxuaW5nYXIgZWxsZXIgZGVubmEgYmFubmVyLiBTYW10eWNrZSBrYW4gw6V0ZXJrYWxsYXMgbsOkciBzb20gaGVsc3QgZ2Vub20gYXR0IGp1c3RlcmEgZGluYSBwcmVmZXJlbnNlciBow6RyLjxicj48YnI+RsO2ciBtZXIgaW5mb3JtYXRpb24gb20gZGF0YWJlaGFuZGxpbmcgb2NoIGludGVncml0ZXRzcsOkdHRpZ2hldGVyLCBzZSB2w6VyIEludGVncml0ZXRzcG9saWN5Lic7CiRsYW5nWydjb29raWVfZGVueSddID0gJ05la2EnOwokbGFuZ1snY29va2llX2N1c3RvbWl6ZSddID0gJ0FucGFzc2EnOwokbGFuZ1snY29va2llX2FsbG93X2FsbCddID0gJ1RpbGzDpXQgYWxsYSc7CiRsYW5nWydjb29raWVfc2F2ZV9zZWxlY3Rpb24nXSA9ICdTcGFyYSB2YWwnOwokbGFuZ1snY29va2llX2Fja25vd2xlZGdlJ10gPSAnQmVrcsOkZnRhJzsKJGxhbmdbJ2Nvb2tpZV90YWJfY29uc2VudCddID0gJ1NhbXR5Y2tlJzsKJGxhbmdbJ2Nvb2tpZV90YWJfZGV0YWlscyddID0gJ0RldGFsamVyJzsKJGxhbmdbJ2Nvb2tpZV90YWJfYWJvdXQnXSA9ICdPbSc7CiRsYW5nWydjb29raWVfd2Vic2l0ZV91c2VzJ10gPSAnRGVubmEgd2ViYnBsYXRzIGFudsOkbmRlciBjb29raWVzJzsKCi8vIFNldHRpbmdzIHRhYgokbGFuZ1snc2V0dGluZ3NfYXBwZWFyYW5jZSddID0gJ1V0c2VlbmRlaW5zdMOkbGxuaW5nYXInOwokbGFuZ1snbGFiZWxfY29sb3Jfc2NoZW1lJ10gPSAnRsOkcmdzY2hlbWEnOwokbGFuZ1snY29sb3Jfc2NoZW1lX2xpZ2h0J10gPSAnTGp1cyc7CiRsYW5nWydjb2xvcl9zY2hlbWVfZGFyayddID0gJ03DtnJrJzsKJGxhbmdbJ2xhYmVsX3Bvc2l0aW9uJ10gPSAnUG9zaXRpb24nOwokbGFuZ1sncG9zaXRpb25fYm90dG9tJ10gPSAnQm90dGVuJzsKJGxhbmdbJ3Bvc2l0aW9uX2NlbnRlciddID0gJ01pdHRlbic7CiRsYW5nWydwb3NpdGlvbl90b3AnXSA9ICdUb3BwZW4nOwokbGFuZ1snbGFiZWxfc2l6ZSddID0gJ1N0b3JsZWsnOwokbGFuZ1snc2l6ZV9jb21wYWN0J10gPSAnS29tcGFrdCc7CiRsYW5nWydzaXplX25vcm1hbCddID0gJ05vcm1hbCc7CiRsYW5nWydzaXplX2xhcmdlJ10gPSAnU3Rvcic7CiRsYW5nWydzaXplX3dpZGUnXSA9ICdCcmVkJzsKJGxhbmdbJ21zZ19zZXR0aW5nc19zYXZlZCddID0gJ0luc3TDpGxsbmluZ2FyIHNwYXJhZGUgZnJhbWfDpW5nc3Jpa3QnOwoKLy8gQ3VzdG9tIHRleHQgc2V0dGluZ3MKJGxhbmdbJ3NldHRpbmdzX2N1c3RvbV90ZXh0J10gPSAnQW5wYXNzYWQgdGV4dCc7CiRsYW5nWydsYWJlbF9jdXN0b21fdGl0bGUnXSA9ICdBbnBhc3NhZCB0aXRlbCc7CiRsYW5nWydsYWJlbF9jdXN0b21fdGV4dCddID0gJ0FucGFzc2FkIGJlc2tyaXZuaW5nc3RleHQnOwokbGFuZ1snbGFiZWxfcHJpbWFyeV9jb2xvciddID0gJ1ByaW3DpHJrbmFwcHNmw6RyZyc7CiRsYW5nWydoZWxwX3ByaW1hcnlfY29sb3InXSA9ICdWw6RsaiBlbiBmw6RyZyBzb20gbWF0Y2hhciBkaW4gd2ViYnBsYXRzcyB0ZW1hJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfZ29vZ2xlX3RhZ19pZCddID0gJ09naWx0aWd0IGZvcm1hdCBmw7ZyIEdvb2dsZSBUYWcgSUQuIEFudsOkbmQgR0E0LWZvcm1hdCAoRy1YWFhYWFhYWFhYKSBlbGxlciBHVE0tZm9ybWF0IChHVE0tWFhYWFhYWCknOwokbGFuZ1snbGFiZWxfaW5qZWN0X2pxdWVyeSddID0gJ0luamljZXJhIGpRdWVyeS1iaWJsaW90ZWsnOwokbGFuZ1snaGVscF9pbmplY3RfanF1ZXJ5J10gPSAnQWt0aXZlcmEgb20gZGl0dCB0ZW1hIGludGUgaW5rbHVkZXJhciBqUXVlcnkgKGtyw6R2cyBmw7ZyIGF0dCBzYW10eWNrZXNiYW5uZXJuIHNrYSBmdW5nZXJhKSc7Cg==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgU2VlIExJQ0VOU0UgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmlmICghZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSkgZXhpdDsKCiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKEdvb2dsZUNvbnNlbnRQbGF0Zm9ybTo6TUFOQUdFX1BFUk0sICdNYW5hZ2UgR29vZ2xlQ29uc2VudFBsYXRmb3JtIFNldHRpbmdzJyk7CgovLyBEZWZhdWx0IHByZWZlcmVuY2VzIChhbGwgcHJlZml4ZWQpCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdnY3BfZW5hYmxlZCcsIDApOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZ2NwX2dvb2dsZV90YWdfaWQnLCAnJyk7CgokY21zX2xhbmcgPSBnZXRfc2l0ZV9wcmVmZXJlbmNlKCdkZWZhdWx0X2Ntc19sYW5ndWFnZScsICdlbl9VUycpOwokc3VwcG9ydGVkID0gWydlbl9VUycsICdpdF9JVCcsICdmcl9GUicsICdkZV9ERScsICdlc19FUycsICdwdF9QVCcsICdubF9OTCcsICdwbF9QTCcsICdjc19DWicsICdkYV9ESycsICdzdl9TRScsICduYl9OTycsICdmaV9GSScsICdodV9IVScsICdlbF9HUicsICdoZV9JTCcsICdqYV9KUCddOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZ2NwX2xhbmd1YWdlJywgaW5fYXJyYXkoJGNtc19sYW5nLCAkc3VwcG9ydGVkKSA/ICRjbXNfbGFuZyA6ICdlbl9VUycpOwoKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2djcF9yZWd1bGF0aW9uJywgJ0dEUFInKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2djcF9jb2xvcl9zY2hlbWUnLCAnbGlnaHQnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2djcF9wb3NpdGlvbicsICdjZW50ZXInKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2djcF9zaXplJywgJ25vcm1hbCcpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZ2NwX3ByaW1hcnlfY29sb3InLCAnIzAwN2JmZicpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZ2NwX2luamVjdF9qcXVlcnknLCAwKTsKCi8vIEV2ZW50IGhhbmRsZXIKJHRoaXMtPkFkZEV2ZW50SGFuZGxlcignQ29yZScsICdDb250ZW50UG9zdFJlbmRlcicsIGZhbHNlKTs=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgU2VlIExJQ0VOU0UgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmlmICghZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSkgZXhpdDsKCiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKEdvb2dsZUNvbnNlbnRQbGF0Zm9ybTo6TUFOQUdFX1BFUk0pOwokdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgpOwokdGhpcy0+UmVtb3ZlRXZlbnRIYW5kbGVyKCdDb3JlJywgJ0NvbnRlbnRQb3N0UmVuZGVyJyk7]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgU2VlIExJQ0VOU0UgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmlmICghZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSkgZXhpdDsKCmlmICh2ZXJzaW9uX2NvbXBhcmUoJG9sZHZlcnNpb24sICcxLjEnLCAnPCcpKSB7CiAgICAvLyBNaWdyYXRlIHVuLXByZWZpeGVkIHByZWZlcmVuY2VzIHRvIGdjcF8gcHJlZml4CiAgICAkbWlncmF0ZSA9IFsKICAgICAgICAnZW5hYmxlZCcgICAgICAgPT4gJ2djcF9lbmFibGVkJywKICAgICAgICAnZ29vZ2xlX3RhZ19pZCcgPT4gJ2djcF9nb29nbGVfdGFnX2lkJywKICAgICAgICAncmVndWxhdGlvbicgICAgPT4gJ2djcF9yZWd1bGF0aW9uJywKICAgICAgICAnbGFuZ3VhZ2UnICAgICAgPT4gJ2djcF9sYW5ndWFnZScsCiAgICAgICAgJ2NvbG9yX3NjaGVtZScgID0+ICdnY3BfY29sb3Jfc2NoZW1lJywKICAgICAgICAncG9zaXRpb24nICAgICAgPT4gJ2djcF9wb3NpdGlvbicsCiAgICAgICAgJ3NpemUnICAgICAgICAgID0+ICdnY3Bfc2l6ZScsCiAgICAgICAgJ3ByaW1hcnlfY29sb3InID0+ICdnY3BfcHJpbWFyeV9jb2xvcicsCiAgICAgICAgJ2luamVjdF9qcXVlcnknID0+ICdnY3BfaW5qZWN0X2pxdWVyeScsCiAgICBdOwoKICAgIGZvcmVhY2ggKCRtaWdyYXRlIGFzICRvbGRfa2V5ID0+ICRuZXdfa2V5KSB7CiAgICAgICAgJHZhbCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCRvbGRfa2V5KTsKICAgICAgICBpZiAoJHZhbCAhPT0gbnVsbCAmJiAkdmFsICE9PSAnJykgewogICAgICAgICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgkbmV3X2tleSwgJHZhbCk7CiAgICAgICAgICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCRvbGRfa2V5KTsKICAgICAgICB9CiAgICB9CgogICAgLy8gTWlncmF0ZSBsYW5ndWFnZS1zcGVjaWZpYyBjdXN0b20gdGV4dCBwcmVmcwogICAgJHN1cHBvcnRlZCA9IFsnZW5fVVMnLCAnaXRfSVQnLCAnZnJfRlInLCAnZGVfREUnLCAnZXNfRVMnLCAncHRfUFQnLCAnbmxfTkwnLCAncGxfUEwnLCAnY3NfQ1onLCAnZGFfREsnLCAnc3ZfU0UnLCAnbmJfTk8nLCAnZmlfRkknLCAnaHVfSFUnLCAnZWxfR1InLCAnaGVfSUwnLCAnamFfSlAnXTsKICAgIGZvcmVhY2ggKCRzdXBwb3J0ZWQgYXMgJGxhbmcpIHsKICAgICAgICBmb3JlYWNoIChbJ2N1c3RvbV90aXRsZV8nLCAnY3VzdG9tX3RleHRfJ10gYXMgJHByZWZpeCkgewogICAgICAgICAgICAkb2xkX2tleSA9ICRwcmVmaXggLiAkbGFuZzsKICAgICAgICAgICAgJG5ld19rZXkgPSAnZ2NwXycgLiAkb2xkX2tleTsKICAgICAgICAgICAgJHZhbCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCRvbGRfa2V5KTsKICAgICAgICAgICAgaWYgKCR2YWwgIT09IG51bGwgJiYgJHZhbCAhPT0gJycpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCRuZXdfa2V5LCAkdmFsKTsKICAgICAgICAgICAgICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCRvbGRfa2V5KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvLyBDbGVhbiB1cCBsZWdhY3kgcHJlZnMKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdkZWZhdWx0X2pzJyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnZGVmYXVsdF90ZW1wbGF0ZScpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgyPkludHJvZHVjdGlvbjwvaDI+CjxwPlRoZSBHb29nbGVDb25zZW50UGxhdGZvcm0gbW9kdWxlIHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSBHRFBSLWNvbXBsaWFudCBjb29raWUgY29uc2VudCBtYW5hZ2VtZW50IHN5c3RlbSBmb3IgQ01TIE1hZGUgU2ltcGxlIHdlYnNpdGVzLiBUaGlzIG1vZHVsZSBpbnRlZ3JhdGVzIHNlYW1sZXNzbHkgd2l0aCBHb29nbGUgQW5hbHl0aWNzIDQgKEdBNCkgYW5kIEdvb2dsZSBUYWcgTWFuYWdlciAoR1RNKSB1c2luZyBHb29nbGUgQ29uc2VudCBNb2RlIHYyLCBlbnN1cmluZyB5b3VyIHdlYnNpdGUgbWVldHMgcHJpdmFjeSByZWd1bGF0aW9ucyB3aGlsZSBtYWludGFpbmluZyBhbmFseXRpY3MgZnVuY3Rpb25hbGl0eS48L3A+Cgo8aDM+RmVhdHVyZXM8L2gzPgo8dWw+CiAgICA8bGk+R0RQUi1jb21wbGlhbnQgY29va2llIGNvbnNlbnQgYmFubmVyIHdpdGggZGVueS1ieS1kZWZhdWx0IGFwcHJvYWNoPC9saT4KICAgIDxsaT5Hb29nbGUgQ29uc2VudCBNb2RlIHYyIGludGVncmF0aW9uIHdpdGggbGF0ZXN0IHBhcmFtZXRlcnM8L2xpPgogICAgPGxpPkdBNCBhbmQgR1RNIHN1cHBvcnQgd2l0aCBhdXRvbWF0aWMgZGV0ZWN0aW9uIGJhc2VkIG9uIFRhZyBJRCBmb3JtYXQ8L2xpPgogICAgPGxpPkxvY2FsU3RvcmFnZS1iYXNlZCBjb25zZW50IHBlcnNpc3RlbmNlIGFjcm9zcyBzZXNzaW9uczwvbGk+CiAgICA8bGk+TXVsdGlsaW5ndWFsIHN1cHBvcnQgZm9yIDE3IGxhbmd1YWdlcyB3aXRoIGF1dG9tYXRpYyBDTVMgbGFuZ3VhZ2UgZGV0ZWN0aW9uPC9saT4KICAgIDxsaT5UYWJiZWQgbW9kYWwgaW50ZXJmYWNlIHdpdGggQ29uc2VudCwgRGV0YWlscywgYW5kIEFib3V0IHNlY3Rpb25zPC9saT4KICAgIDxsaT5HcmFudWxhciBjb29raWUgY29udHJvbHMgZm9yIE5lY2Vzc2FyeSwgUHJlZmVyZW5jZXMsIFN0YXRpc3RpY3MsIGFuZCBNYXJrZXRpbmcgY29va2llczwvbGk+CiAgICA8bGk+Qm9vdHN0cmFwLXN0eWxlIGRlc2lnbiB3aXRoIHNtb290aCB0cmFuc2l0aW9ucyBhbmQgaG92ZXIgZWZmZWN0czwvbGk+CiAgICA8bGk+Q3VzdG9taXphYmxlIGFwcGVhcmFuY2U6IExpZ2h0L0RhcmsgdGhlbWVzLCBwb3NpdGlvbmluZywgc2l6aW5nLCBhbmQgY3VzdG9tIGNvbG9yczwvbGk+CiAgICA8bGk+VW5pcXVlIENTUyBjbGFzc2VzIChnY3AtcHJlZml4ZWQpIHRvIHByZXZlbnQgY29uZmxpY3RzIHdpdGggZXhpc3Rpbmcgd2Vic2l0ZSBzdHlsZXM8L2xpPgogICAgPGxpPk1pbmlmaWVkIGFzc2V0cyBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZTwvbGk+CjwvdWw+Cgo8aDM+U2NyZWVuc2hvdHM8L2gzPgo8cD48aW1nIHNyYz0iaHR0cHM6Ly9jbXNtcy1kb3dubG9hZHMuczMuZXUtc291dGgtMS5hbWF6b25hd3MuY29tL0dvb2dsZUNvbnNlbnRQbGF0Zm9ybS90aHVtYm5haWwuanBnIiBhbHQ9Ikdvb2dsZUNvbnNlbnRQbGF0Zm9ybSBtb2R1bGUiIHdpZHRoPSI5MDAiPjwvcD4KCjxoMz5JbnN0YWxsYXRpb248L2gzPgo8b2w+CiAgICA8bGk+VXBsb2FkIHRoZSBtb2R1bGUgZmlsZXMgdG8gPGNvZGU+L21vZHVsZXMvR29vZ2xlQ29uc2VudFBsYXRmb3JtLzwvY29kZT4gb3I8L2xpPgogICAgPGxpPkdvIHRvIDxzdHJvbmc+TW9kdWxlIE1hbmFnZXI8L3N0cm9uZz4gaW4gQ01TIGFkbWluIGFuZCBpbnN0YWxsIHRoZSBHb29nbGVDb25zZW50UGxhdGZvcm0gbW9kdWxlPC9saT4KICAgIDxsaT48c3Ryb25nPkltcG9ydGFudDo8L3N0cm9uZz4gQWRkIHRoZSA8Y29kZT57R29vZ2xlQ29uc2VudFBsYXRmb3JtfTwvY29kZT4gdGFnIHRvIHRoZSA8Y29kZT4mbHQ7aGVhZCZndDs8L2NvZGU+IHNlY3Rpb24gb2YgeW91ciB3ZWJzaXRlIHRlbXBsYXRlKHMpPC9saT4KICAgIDxsaT5Db25maWd1cmUgdGhlIG1vZHVsZSBhdCA8c3Ryb25nPkV4dGVuc2lvbnMgPiBHb29nbGUgQ29uc2VudCBQbGF0Zm9ybTwvc3Ryb25nPjwvbGk+Cjwvb2w+Cgo8aDM+Q29uZmlndXJhdGlvbjwvaDM+CjxwPlRoZSBtb2R1bGUgcHJvdmlkZXMgdHdvIG1haW4gY29uZmlndXJhdGlvbiB0YWJzOjwvcD4KPHVsPgogICAgPGxpPjxzdHJvbmc+T3B0aW9ucyBUYWI6PC9zdHJvbmc+IENvbmZpZ3VyZSBHb29nbGUgVGFnIElEIChHQTQ6IEctWFhYWFhYWCBvciBHVE06IEdUTS1YWFhYWFhYKSwgcHJpdmFjeSByZWd1bGF0aW9uIGNvbXBsaWFuY2UsIGxhbmd1YWdlIHNlbGVjdGlvbiwgYW5kIGVuYWJsZS9kaXNhYmxlIHRoZSBtb2R1bGU8L2xpPgogICAgPGxpPjxzdHJvbmc+U2V0dGluZ3MgVGFiOjwvc3Ryb25nPiBDdXN0b21pemUgYXBwZWFyYW5jZSBpbmNsdWRpbmcgY29sb3Igc2NoZW1lIChMaWdodC9EYXJrKSwgcG9zaXRpb24gKEJvdHRvbS9DZW50ZXIvVG9wKSwgc2l6ZSAoQ29tcGFjdC9Ob3JtYWwvTGFyZ2UvV2lkZSksIGN1c3RvbSBwcmltYXJ5IGNvbG9yLCBhbmQgb3ZlcnJpZGUgZGVmYXVsdCB0ZXh0PC9saT4KPC91bD4KCjxoMz5Vc2FnZTwvaDM+CjxwPkFmdGVyIGluc3RhbGxhdGlvbiBhbmQgY29uZmlndXJhdGlvbiwgdGhlIGNvb2tpZSBjb25zZW50IGJhbm5lciB3aWxsIGF1dG9tYXRpY2FsbHkgYXBwZWFyIHRvIGZpcnN0LXRpbWUgdmlzaXRvcnMuIFVzZXJzIGNhbjo8L3A+Cjx1bD4KICAgIDxsaT48c3Ryb25nPkRlbnk6PC9zdHJvbmc+IFJlamVjdCBhbGwgbm9uLWVzc2VudGlhbCBjb29raWVzPC9saT4KICAgIDxsaT48c3Ryb25nPkN1c3RvbWl6ZTo8L3N0cm9uZz4gQ2hvb3NlIHNwZWNpZmljIGNvb2tpZSBjYXRlZ29yaWVzIHRocm91Z2ggZGV0YWlsZWQgY29udHJvbHM8L2xpPgogICAgPGxpPjxzdHJvbmc+QWxsb3cgQWxsOjwvc3Ryb25nPiBBY2NlcHQgYWxsIGNvb2tpZXM8L2xpPgo8L3VsPgo8cD5QcmVmZXJlbmNlcyBhcmUgc2F2ZWQgaW4gYnJvd3NlciBsb2NhbFN0b3JhZ2UgYW5kIHBlcnNpc3QgYWNyb3NzIHNlc3Npb25zLiBVc2VycyBjYW4gY2hhbmdlIHRoZWlyIHByZWZlcmVuY2VzIGFueXRpbWUgYnkgcmV2aXNpdGluZyB0aGUgYmFubmVyLjwvcD4KCjxoMz5Qcml2YWN5IFJlZ3VsYXRpb25zPC9oMz4KPHVsPgogICAgPGxpPjxzdHJvbmc+R0RQUjo8L3N0cm9uZz4gU3RyaWN0IGNvbnNlbnQgcmVxdWlyZWQsIGFkcyBkYXRhIHJlZGFjdGlvbiBlbmFibGVkPC9saT4KICAgIDxsaT48c3Ryb25nPkNDUEEvVUNQQS9DUEEvQ1REUEEvVkNEUEE6PC9zdHJvbmc+IFRhcmdldGVkIGFkdmVydGlzaW5nIHJlcXVpcmVzIG9wdC1pbjwvbGk+CiAgICA8bGk+PHN0cm9uZz5PdGhlcjo8L3N0cm9uZz4gT3B0LW91dCBtb2RlbCBmb3IgbW9zdCBjb29raWUgY2F0ZWdvcmllczwvbGk+CjwvdWw+Cgo8aDM+UmVxdWlyZW1lbnRzPC9oMz4KPHVsPgogICAgPGxpPkNNUyBNYWRlIFNpbXBsZSB2ZXJzaW9uIDIuMS42IG9yIGhpZ2hlcjwvbGk+CiAgICA8bGk+alF1ZXJ5ICh0eXBpY2FsbHkgaW5jbHVkZWQgaW4gbW9zdCBDTVMgdGhlbWVzKTwvbGk+CiAgICA8bGk+TW9kZXJuIGJyb3dzZXIgd2l0aCBsb2NhbFN0b3JhZ2UgYW5kIENTUzMgc3VwcG9ydDwvbGk+CjwvdWw+Cgo8aDM+VGVzdGluZzwvaDM+CjxwPlRvIHRlc3QgdGhlIGNvbnNlbnQgYmFubmVyIGZ1bmN0aW9uYWxpdHkgZHVyaW5nIGRldmVsb3BtZW50OjwvcD4KPG9sPgogICAgPGxpPk9wZW4geW91ciBicm93c2VyJ3MgRGV2ZWxvcGVyIENvbnNvbGUgKEYxMik8L2xpPgogICAgPGxpPlJ1bjogPGNvZGU+d2luZG93Lkdvb2dsZUNvbnNlbnRQbGF0Zm9ybVJlc2V0KCk8L2NvZGU+PC9saT4KICAgIDxsaT5SZWZyZXNoIHRoZSBwYWdlIHRvIHNlZSB0aGUgY29uc2VudCBiYW5uZXIgYWdhaW48L2xpPgo8L29sPgo8cD5UaGlzIGZ1bmN0aW9uIGNsZWFycyBzdG9yZWQgY29uc2VudCBwcmVmZXJlbmNlcyBhbmQgcmVzZXRzIGFsbCBjb29raWUgdG9nZ2xlcywgYWxsb3dpbmcgeW91IHRvIHRlc3QgZGlmZmVyZW50IGNvbnNlbnQgc2NlbmFyaW9zIHdpdGhvdXQgY2xlYXJpbmcgYnJvd3NlciBkYXRhLjwvcD4KCjxoMz5Ucm91Ymxlc2hvb3Rpbmc8L2gzPgo8dWw+CiAgICA8bGk+PHN0cm9uZz5CYW5uZXIgbm90IGFwcGVhcmluZzo8L3N0cm9uZz4gRW5zdXJlIHRoZSA8Y29kZT57R29vZ2xlQ29uc2VudFBsYXRmb3JtfTwvY29kZT4gdGFnIGlzIHBsYWNlZCBpbiB0aGUgPGNvZGU+Jmx0O2hlYWQmZ3Q7PC9jb2RlPiBzZWN0aW9uPC9saT4KICAgIDxsaT48c3Ryb25nPlN0eWxlcyBub3QgbG9hZGluZzo8L3N0cm9uZz4gVmVyaWZ5IHRoZSBhc3NldHMgZGlyZWN0b3J5IGlzIHdyaXRhYmxlIGFuZCBDU1MgZmlsZSB3YXMgZ2VuZXJhdGVkPC9saT4KICAgIDxsaT48c3Ryb25nPkdvb2dsZSBUYWcgbm90IHdvcmtpbmc6PC9zdHJvbmc+IENoZWNrIGNvcnJlY3QgVGFnIElEIGZvcm1hdCBhbmQgbW9kdWxlIGlzIGVuYWJsZWQ8L2xpPgo8L3VsPgoKPGgzPlByaXZhY3kgTm90aWNlPC9oMz4KPHA+VGhpcyBtb2R1bGUgYW5vbnltb3VzbHkgdHJhY2tzIGluc3RhbGxhdGlvbiBhbmQgdW5pbnN0YWxsYXRpb24gZXZlbnRzIGZvciB1c2FnZSBzdGF0aXN0aWNzIG9ubHkuIE5vIHBlcnNvbmFsIGRhdGEsIHdlYnNpdGUgaW5mb3JtYXRpb24sIG9yIGNvbmZpZ3VyYXRpb24gZGV0YWlscyBhcmUgY29sbGVjdGVkIG9yIHRyYW5zbWl0dGVkLjwvcD4KCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMjUsIFBpeGVsIFNvbHV0aW9ucyA8YSBocmVmPSJtYWlsdG86bWFnYWxAcGl4ZWxzb2x1dGlvbnMuYml6Ij4mbHQ7bWFnYWxAcGl4ZWxzb2x1dGlvbnMuYml6Jmd0OzwvYT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuPC9wPgo8cD5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczo8L3A+CjxwPlRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLjwvcD4KPHA+VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLjwvcD4KPGhyPgo8cD48ZW0+R29vZ2xlIGlzIGEgdHJhZGVtYXJrIG9mIEdvb2dsZSBMTEMgb3IgaXRzIGFmZmlsaWF0ZXMuIFRoaXMgbW9kdWxlIGlzIG5vdCBhZmZpbGlhdGVkIHdpdGggb3IgZW5kb3JzZWQgYnkgR29vZ2xlLjwvZW0+PC9wPg==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin_optionstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZWNvbnRhaW5lciI+DQp7Zm9ybV9zdGFydH0NCiAgICB7eHRfZm9ybV9jc3JmfQ0KICAgIDxmaWVsZHNldD4NCiAgICA8bGVnZW5kPnskbW9kLT5MYW5nKCdhZG1pbl90aXRsZScpfTwvbGVnZW5kPg0KDQogICAge2lmIGlzc2V0KCRzbWFydHkuZ2V0Lm1lc3NhZ2UpfQ0KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlbWNvbnRhaW5lciI+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZW1lc3NhZ2UiPnskc21hcnR5LmdldC5tZXNzYWdlfTwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgey9pZn0NCg0KICAgIDxkaXYgY2xhc3M9InBhZ2Vjb250ZW50Ij4NCiAgICAgICAgDQoNCiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2xhYmVsX2VuYWJsZWQnKX06PC9wPg0KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ7JGFjdGlvbmlkfWVuYWJsZWQiIHZhbHVlPSIxIiB7aWYgJHByZWZzLmVuYWJsZWR9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfSAvPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygnbGFiZWxfZ29vZ2xlX3RhZ19pZCcpfTo8L3A+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1nb29nbGVfdGFnX2lkIiB2YWx1ZT0ieyRwcmVmcy5nb29nbGVfdGFnX2lkfSIvPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygnbGFiZWxfcmVndWxhdGlvbicpfTo8L3A+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9cmVndWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IkdEUFIiIHtpZiAkcHJlZnMucmVndWxhdGlvbiA9PSAnR0RQUid9c2VsZWN0ZWR7L2lmfT5HRFBSIC0gR2VuZXJhbCBEYXRhIFByb3RlY3Rpb24gUmVndWxhdGlvbiAoRVUpPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IkNDUEEiIHtpZiAkcHJlZnMucmVndWxhdGlvbiA9PSAnQ0NQQSd9c2VsZWN0ZWR7L2lmfT5DQ1BBL0NQUkEgLSBDYWxpZm9ybmlhIENvbnN1bWVyIFByaXZhY3kgQWN0IChVUyk8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iQ1BBIiB7aWYgJHByZWZzLnJlZ3VsYXRpb24gPT0gJ0NQQSd9c2VsZWN0ZWR7L2lmfT5DUEEgLSBDb2xvcmFkbyBQcml2YWN5IEFjdCAoVVMpPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IkNURFBBIiB7aWYgJHByZWZzLnJlZ3VsYXRpb24gPT0gJ0NURFBBJ31zZWxlY3RlZHsvaWZ9PkNURFBBIC0gQ29ubmVjdGljdXQgRGF0YSBQcml2YWN5IEFjdCAoVVMpPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IlVDUEEiIHtpZiAkcHJlZnMucmVndWxhdGlvbiA9PSAnVUNQQSd9c2VsZWN0ZWR7L2lmfT5VQ1BBIC0gVXRhaCBDb25zdW1lciBQcml2YWN5IEFjdCAoVVMpPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IlZDRFBBIiB7aWYgJHByZWZzLnJlZ3VsYXRpb24gPT0gJ1ZDRFBBJ31zZWxlY3RlZHsvaWZ9PlZDRFBBIC0gVmlyZ2luaWEgQ29uc3VtZXIgRGF0YSBQcm90ZWN0aW9uIEFjdCAoVVMpPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pg0KDQogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdsYWJlbF9pbmplY3RfanF1ZXJ5Jyl9OjwvcD4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH1pbmplY3RfanF1ZXJ5IiB2YWx1ZT0iMSIge2lmICRwcmVmcy5pbmplY3RfanF1ZXJ5fWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0gLz4NCiAgICAgICAgICAgICAgICA8YnI+PHNtYWxsPnskbW9kLT5MYW5nKCdoZWxwX2luamVjdF9qcXVlcnknKX08L3NtYWxsPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5MYW5ndWFnZTo8L3A+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9bGFuZ3VhZ2UiPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJlbl9VUyIge2lmICRwcmVmcy5sYW5ndWFnZSA9PSAnZW5fVVMnfXNlbGVjdGVkey9pZn0+RW5nbGlzaDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJjc19DWiIge2lmICRwcmVmcy5sYW5ndWFnZSA9PSAnY3NfQ1onfXNlbGVjdGVkey9pZn0+Q3plY2g8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZGFfREsiIHtpZiAkcHJlZnMubGFuZ3VhZ2UgPT0gJ2RhX0RLJ31zZWxlY3RlZHsvaWZ9PkRhbmlzaDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkZV9ERSIge2lmICRwcmVmcy5sYW5ndWFnZSA9PSAnZGVfREUnfXNlbGVjdGVkey9pZn0+R2VybWFuPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImVsX0dSIiB7aWYgJHByZWZzLmxhbmd1YWdlID09ICdlbF9HUid9c2VsZWN0ZWR7L2lmfT5HcmVlazwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJlc19FUyIge2lmICRwcmVmcy5sYW5ndWFnZSA9PSAnZXNfRVMnfXNlbGVjdGVkey9pZn0+U3BhbmlzaDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJmaV9GSSIge2lmICRwcmVmcy5sYW5ndWFnZSA9PSAnZmlfRkknfXNlbGVjdGVkey9pZn0+RmlubmlzaDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJmcl9GUiIge2lmICRwcmVmcy5sYW5ndWFnZSA9PSAnZnJfRlInfXNlbGVjdGVkey9pZn0+RnJlbmNoPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImhlX0lMIiB7aWYgJHByZWZzLmxhbmd1YWdlID09ICdoZV9JTCd9c2VsZWN0ZWR7L2lmfT5IZWJyZXc8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHVfSFUiIHtpZiAkcHJlZnMubGFuZ3VhZ2UgPT0gJ2h1X0hVJ31zZWxlY3RlZHsvaWZ9Pkh1bmdhcmlhbjwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJpdF9JVCIge2lmICRwcmVmcy5sYW5ndWFnZSA9PSAnaXRfSVQnfXNlbGVjdGVkey9pZn0+SXRhbGlhbjwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJqYV9KUCIge2lmICRwcmVmcy5sYW5ndWFnZSA9PSAnamFfSlAnfXNlbGVjdGVkey9pZn0+SmFwYW5lc2U8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibmJfTk8iIHtpZiAkcHJlZnMubGFuZ3VhZ2UgPT0gJ25iX05PJ31zZWxlY3RlZHsvaWZ9Pk5vcndlZ2lhbjwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJubF9OTCIge2lmICRwcmVmcy5sYW5ndWFnZSA9PSAnbmxfTkwnfXNlbGVjdGVkey9pZn0+RHV0Y2g8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icGxfUEwiIHtpZiAkcHJlZnMubGFuZ3VhZ2UgPT0gJ3BsX1BMJ31zZWxlY3RlZHsvaWZ9PlBvbGlzaDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdF9QVCIge2lmICRwcmVmcy5sYW5ndWFnZSA9PSAncHRfUFQnfXNlbGVjdGVkey9pZn0+UG9ydHVndWVzZTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJzdl9TRSIge2lmICRwcmVmcy5sYW5ndWFnZSA9PSAnc3ZfU0UnfXNlbGVjdGVkey9pZn0+U3dlZGlzaDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj4NCg0KICAgIDwvZGl2Pg0KDQogICAgPC9maWVsZHNldD4NCiAgICAgICAgDQogICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0X29wdGlvbnMiIHZhbHVlPSJ7JG1vZC0+TGFuZygnc3VibWl0Jyl9IiBjbGFzcz0icGFnZWJ1dHRvbiIgLz4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfWNhbmNlbCIgdmFsdWU9InskbW9kLT5MYW5nKCdjYW5jZWwnKX0iIGNsYXNzPSJwYWdlYnV0dG9uIiAvPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj4NCg0KICAgIHtmb3JtX2VuZH0NCjwvZGl2Pg0K]]></data>
	</file>
	<file>
	  <filename>/templates/admin_settingstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZWNvbnRhaW5lciI+DQogICAge2Zvcm1fc3RhcnR9DQogICAgICAgIHt4dF9mb3JtX2NzcmZ9DQogICAgICAgIDxmaWVsZHNldD4NCiAgICAgICAgICAgIDxsZWdlbmQ+eyRtb2QtPkxhbmcoJ3NldHRpbmdzX2FwcGVhcmFuY2UnKX08L2xlZ2VuZD4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFnZXRleHQiPg0KICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImNvbG9yX3NjaGVtZSI+eyRtb2QtPkxhbmcoJ2xhYmVsX2NvbG9yX3NjaGVtZScpfTo8L2xhYmVsPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiPg0KICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1jb2xvcl9zY2hlbWUiIGlkPSJjb2xvcl9zY2hlbWUiPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsaWdodCJ7aWYgJGNvbG9yX3NjaGVtZSA9PSAnbGlnaHQnfSBzZWxlY3RlZD0ic2VsZWN0ZWQiey9pZn0+eyRtb2QtPkxhbmcoJ2NvbG9yX3NjaGVtZV9saWdodCcpfTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkYXJrIntpZiAkY29sb3Jfc2NoZW1lID09ICdkYXJrJ30gc2VsZWN0ZWQ9InNlbGVjdGVkInsvaWZ9PnskbW9kLT5MYW5nKCdjb2xvcl9zY2hlbWVfZGFyaycpfTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2V0ZXh0Ij4NCiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJwb3NpdGlvbiI+eyRtb2QtPkxhbmcoJ2xhYmVsX3Bvc2l0aW9uJyl9OjwvbGFiZWw+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ7JGFjdGlvbmlkfXBvc2l0aW9uIiBpZD0icG9zaXRpb24iPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJib3R0b20ie2lmICRwb3NpdGlvbiA9PSAnYm90dG9tJ30gc2VsZWN0ZWQ9InNlbGVjdGVkInsvaWZ9PnskbW9kLT5MYW5nKCdwb3NpdGlvbl9ib3R0b20nKX08L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iY2VudGVyIntpZiAkcG9zaXRpb24gPT0gJ2NlbnRlcid9IHNlbGVjdGVkPSJzZWxlY3RlZCJ7L2lmfT57JG1vZC0+TGFuZygncG9zaXRpb25fY2VudGVyJyl9PC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InRvcCJ7aWYgJHBvc2l0aW9uID09ICd0b3AnfSBzZWxlY3RlZD0ic2VsZWN0ZWQiey9pZn0+eyRtb2QtPkxhbmcoJ3Bvc2l0aW9uX3RvcCcpfTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2V0ZXh0Ij4NCiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXplIj57JG1vZC0+TGFuZygnbGFiZWxfc2l6ZScpfTo8L2xhYmVsPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiPg0KICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1zaXplIiBpZD0ic2l6ZSI+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImNvbXBhY3Qie2lmICRzaXplID09ICdjb21wYWN0J30gc2VsZWN0ZWQ9InNlbGVjdGVkInsvaWZ9PnskbW9kLT5MYW5nKCdzaXplX2NvbXBhY3QnKX08L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibm9ybWFsIntpZiAkc2l6ZSA9PSAnbm9ybWFsJ30gc2VsZWN0ZWQ9InNlbGVjdGVkInsvaWZ9PnskbW9kLT5MYW5nKCdzaXplX25vcm1hbCcpfTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsYXJnZSJ7aWYgJHNpemUgPT0gJ2xhcmdlJ30gc2VsZWN0ZWQ9InNlbGVjdGVkInsvaWZ9PnskbW9kLT5MYW5nKCdzaXplX2xhcmdlJyl9PC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IndpZGUie2lmICRzaXplID09ICd3aWRlJ30gc2VsZWN0ZWQ9InNlbGVjdGVkInsvaWZ9PnskbW9kLT5MYW5nKCdzaXplX3dpZGUnKX08L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdldGV4dCI+DQogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0icHJpbWFyeV9jb2xvciI+eyRtb2QtPkxhbmcoJ2xhYmVsX3ByaW1hcnlfY29sb3InKX06PC9sYWJlbD4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY29sb3IiIG5hbWU9InskYWN0aW9uaWR9cHJpbWFyeV9jb2xvciIgaWQ9InByaW1hcnlfY29sb3IiIHZhbHVlPSJ7JHByaW1hcnlfY29sb3J8ZGVmYXVsdDonIzAwN2JmZid9IiAvPg0KICAgICAgICAgICAgICAgIDxzbWFsbD57JG1vZC0+TGFuZygnaGVscF9wcmltYXJ5X2NvbG9yJyl9PC9zbWFsbD4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2ZpZWxkc2V0Pg0KDQogICAgICAgIDxmaWVsZHNldD4NCiAgICAgICAgICAgIDxsZWdlbmQ+eyRtb2QtPkxhbmcoJ3NldHRpbmdzX2N1c3RvbV90ZXh0Jyl9PC9sZWdlbmQ+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2V0ZXh0Ij4NCiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJjdXN0b21fdGl0bGUiPnskbW9kLT5MYW5nKCdsYWJlbF9jdXN0b21fdGl0bGUnKX06PC9sYWJlbD4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1jdXN0b21fdGl0bGUiIGlkPSJjdXN0b21fdGl0bGUiIHZhbHVlPSJ7JGN1c3RvbV90aXRsZXxkZWZhdWx0OiRtb2QtPmdldExhbmcoJ2Nvb2tpZV93ZWJzaXRlX3VzZXMnKXxlc2NhcGV9IiBzaXplPSI1MCIvPg0KICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2V0ZXh0Ij4NCiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJjdXN0b21fdGV4dCI+eyRtb2QtPkxhbmcoJ2xhYmVsX2N1c3RvbV90ZXh0Jyl9OjwvbGFiZWw+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9InskYWN0aW9uaWR9Y3VzdG9tX3RleHQiIGlkPSJjdXN0b21fdGV4dCIgcm93cz0iNCIgY29scz0iNjAiPnskY3VzdG9tX3RleHR8ZGVmYXVsdDokbW9kLT5nZXRMYW5nKCdjb29raWVfY29uc2VudF90ZXh0Jyl8ZXNjYXBlfTwvdGV4dGFyZWE+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9maWVsZHNldD4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1zdWJtaXRfc2V0dGluZ3MiIHZhbHVlPSJ7JG1vZC0+TGFuZygnc3VibWl0Jyl9IiBjbGFzcz0icGFnZWJ1dHRvbiIgLz4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfWNhbmNlbCIgdmFsdWU9InskbW9kLT5MYW5nKCdjYW5jZWwnKX0iIGNsYXNzPSJwYWdlYnV0dG9uIiAvPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj4NCg0KICAgIHtmb3JtX2VuZH0NCjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/orig_cookiemodal_css.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9Ci5jb29raWUtbW9kYWx7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuNSk7ei1pbmRleDo5OTk5O2Rpc3BsYXk6bm9uZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0KLmNvb2tpZS1tb2RhbC5yZXZlYWwtbW9kYWx7ZGlzcGxheTpmbGV4fQouY29va2llLWRpYWxvZ3tiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czo4cHg7bWF4LXdpZHRoOjUwMHB4O21hcmdpbjoyMHB4O2JveC1zaGFkb3c6MCA0cHggMjBweCByZ2JhKDAsMCwwLDAuMyl9Ci5jb29raWUtaGVhZGVye3BhZGRpbmc6MTVweCAyMHB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RlZTJlNn0KLmNvb2tpZS10YWJze2Rpc3BsYXk6ZmxleDttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfQouY29va2llLXRhYnMgbGl7ZmxleDoxO3RleHQtYWxpZ246Y2VudGVyfQouY29va2llLXRhYnMgYXtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MTBweDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojNjY2O2JvcmRlci1ib3R0b206MnB4IHNvbGlkIHRyYW5zcGFyZW50O3RyYW5zaXRpb246YWxsIDAuM3MgZWFzZX0KLmNvb2tpZS10YWJzIGE6aG92ZXJ7Y29sb3I6ey9saXRlcmFsfXskcHJpbWFyeV9jb2xvcn17bGl0ZXJhbH19Ci5jb29raWUtdGFicyBhLmdjcC1hY3RpdmV7Y29sb3I6ey9saXRlcmFsfXskcHJpbWFyeV9jb2xvcn17bGl0ZXJhbH07Ym9yZGVyLWJvdHRvbS1jb2xvcjp7L2xpdGVyYWx9eyRwcmltYXJ5X2NvbG9yfXtsaXRlcmFsfX0KLmNvb2tpZS1ib2R5e3BhZGRpbmc6MjBweDttaW4taGVpZ2h0OjIwMHB4fQouZ2NwLXRhYi1jb250ZW50e2Rpc3BsYXk6bm9uZTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDAuMTVzIGxpbmVhcn0KLmdjcC10YWItY29udGVudC5nY3AtYWN0aXZle2Rpc3BsYXk6YmxvY2s7b3BhY2l0eToxfQouZ2NwLXRvZ2dsZS1pdGVte2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzoxMHB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2VlZX0KLmdjcC10b2dnbGUtc3dpdGNoe3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjUwcHg7aGVpZ2h0OjI0cHh9Ci5nY3AtdG9nZ2xlLXN3aXRjaCBpbnB1dHtvcGFjaXR5OjA7d2lkdGg6MDtoZWlnaHQ6MH0KLmdjcC10b2dnbGUtc2xpZGVye3Bvc2l0aW9uOmFic29sdXRlO2N1cnNvcjpwb2ludGVyO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO2JhY2tncm91bmQ6I2NjYztib3JkZXItcmFkaXVzOjI0cHg7dHJhbnNpdGlvbjowLjNzfQouZ2NwLXRvZ2dsZS1zbGlkZXI6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7aGVpZ2h0OjE4cHg7d2lkdGg6MThweDtsZWZ0OjNweDtib3R0b206M3B4O2JhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNpdGlvbjowLjNzfQppbnB1dDpjaGVja2VkICsgLmdjcC10b2dnbGUtc2xpZGVye2JhY2tncm91bmQ6ey9saXRlcmFsfXskcHJpbWFyeV9jb2xvcn17bGl0ZXJhbH19CmlucHV0OmNoZWNrZWQgKyAuZ2NwLXRvZ2dsZS1zbGlkZXI6YmVmb3Jle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDI2cHgpfQouY29va2llLWZvb3RlcntwYWRkaW5nOjE1cHggMjBweDt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXItdG9wOjFweCBzb2xpZCAjZGVlMmU2fQouY29va2llLWZvb3RlciAuZ2NwLWJ0bnttYXJnaW46MCA1cHg7cGFkZGluZzo4cHggMjBweDtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjRweDtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTtkaXNwbGF5OmlubGluZS1ibG9ja30KLmdjcC1idG4tcHJpbWFyeXtiYWNrZ3JvdW5kOnsvbGl0ZXJhbH17JHByaW1hcnlfY29sb3J9e2xpdGVyYWx9O2NvbG9yOiNmZmZ9Ci5nY3AtYnRuLXNlY29uZGFyeXtiYWNrZ3JvdW5kOiM2Yzc1N2Q7Y29sb3I6I2ZmZn0KLmdjcC1idG4tb3V0bGluZXtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOnsvbGl0ZXJhbH17JHByaW1hcnlfY29sb3J9e2xpdGVyYWx9O2JvcmRlcjoxcHggc29saWQgey9saXRlcmFsfXskcHJpbWFyeV9jb2xvcn17bGl0ZXJhbH19Ci5jb29raWUtZm9vdGVyIC5nY3AtYnRuOmhvdmVye29wYWNpdHk6MC45fQouZ2NwLXRpdGxle2ZvbnQtc2l6ZToxOHB4O2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW46MCAwIDE1cHggMDtjb2xvcjojMzMzfQouZ2NwLXN1YnRpdGxle2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjUwMDttYXJnaW46MCAwIDEwcHggMDtjb2xvcjojMzMzfQouZ2NwLXRleHR7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS41O21hcmdpbjowIDAgMTVweCAwO2NvbG9yOiM2NjZ9CgovKiBEYXJrIFRoZW1lICovCi5jb29raWUtbW9kYWwuZGFyay10aGVtZSAuY29va2llLWRpYWxvZ3tiYWNrZ3JvdW5kOiMyZDM3NDg7Y29sb3I6I2UyZThmMH0KLmNvb2tpZS1tb2RhbC5kYXJrLXRoZW1lIC5jb29raWUtaGVhZGVye2JvcmRlci1ib3R0b20tY29sb3I6IzRhNTU2OH0KLmNvb2tpZS1tb2RhbC5kYXJrLXRoZW1lIC5jb29raWUtdGFicyBhe2NvbG9yOiNhMGFlYzB9Ci5jb29raWUtbW9kYWwuZGFyay10aGVtZSAuY29va2llLXRhYnMgYTpob3Zlcntjb2xvcjojNjNiM2VkfQouY29va2llLW1vZGFsLmRhcmstdGhlbWUgLmNvb2tpZS10YWJzIGEuZ2NwLWFjdGl2ZXtjb2xvcjojNjNiM2VkO2JvcmRlci1ib3R0b20tY29sb3I6IzYzYjNlZDtiYWNrZ3JvdW5kOnJnYmEoOTksMTc5LDIzNywwLjEpfQouY29va2llLW1vZGFsLmRhcmstdGhlbWUgLmdjcC10b2dnbGUtaXRlbXtib3JkZXItYm90dG9tLWNvbG9yOiM0YTU1Njh9Ci5jb29raWUtbW9kYWwuZGFyay10aGVtZSAuY29va2llLWZvb3Rlcntib3JkZXItdG9wLWNvbG9yOiM0YTU1Njh9Ci5jb29raWUtbW9kYWwuZGFyay10aGVtZSAuZ2NwLWJ0bi1wcmltYXJ5e2JhY2tncm91bmQ6ey9saXRlcmFsfXskcHJpbWFyeV9jb2xvcn17bGl0ZXJhbH19Ci5jb29raWUtbW9kYWwuZGFyay10aGVtZSAuZ2NwLWJ0bi1zZWNvbmRhcnl7YmFja2dyb3VuZDojNGE1NTY4fQouY29va2llLW1vZGFsLmRhcmstdGhlbWUgLmdjcC1idG4tb3V0bGluZXtjb2xvcjojNjNiM2VkO2JvcmRlci1jb2xvcjojNjNiM2VkfQouY29va2llLW1vZGFsLmRhcmstdGhlbWUgLmdjcC10aXRsZXtjb2xvcjojZTJlOGYwfQouY29va2llLW1vZGFsLmRhcmstdGhlbWUgLmdjcC1zdWJ0aXRsZXtjb2xvcjojZTJlOGYwfQouY29va2llLW1vZGFsLmRhcmstdGhlbWUgLmdjcC10ZXh0e2NvbG9yOiNjYmQ1ZTB9CgovKiBQb3NpdGlvbiBDbGFzc2VzICovCi5jb29raWUtbW9kYWwucG9zaXRpb24tYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kfQouY29va2llLW1vZGFsLnBvc2l0aW9uLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fQouY29va2llLW1vZGFsLnBvc2l0aW9uLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9CgovKiBTaXplIENsYXNzZXMgKi8KLmNvb2tpZS1tb2RhbC5zaXplLWNvbXBhY3QgLmNvb2tpZS1kaWFsb2d7bWF4LXdpZHRoOjQwMHB4O2ZvbnQtc2l6ZToxNHB4fQouY29va2llLW1vZGFsLnNpemUtY29tcGFjdCAuY29va2llLWJvZHl7cGFkZGluZzoxNXB4O21pbi1oZWlnaHQ6MTUwcHh9Ci5jb29raWUtbW9kYWwuc2l6ZS1jb21wYWN0IC5jb29raWUtaGVhZGVye3BhZGRpbmc6MTBweCAxNXB4IDB9Ci5jb29raWUtbW9kYWwuc2l6ZS1jb21wYWN0IC5jb29raWUtZm9vdGVye3BhZGRpbmc6MTBweCAxNXB4fQouY29va2llLW1vZGFsLnNpemUtY29tcGFjdCAuZ2NwLWJ0bntwYWRkaW5nOjhweCAxNXB4OyBmb250LXNpemU6IDEycHghaW1wb3J0YW50O30KLmNvb2tpZS1tb2RhbC5zaXplLWxhcmdlIC5jb29raWUtZGlhbG9ne21heC13aWR0aDo2MDBweDtmb250LXNpemU6MTZweH0KLmNvb2tpZS1tb2RhbC5zaXplLWxhcmdlIC5jb29raWUtYm9keXtwYWRkaW5nOjI1cHg7bWluLWhlaWdodDoyNTBweH0KLmNvb2tpZS1tb2RhbC5zaXplLWxhcmdlIC5jb29raWUtaGVhZGVye3BhZGRpbmc6MjBweCAyNXB4IDB9Ci5jb29raWUtbW9kYWwuc2l6ZS1sYXJnZSAuY29va2llLWZvb3RlcntwYWRkaW5nOjIwcHggMjVweH0KLmNvb2tpZS1tb2RhbC5zaXplLXdpZGUgLmNvb2tpZS1kaWFsb2d7bWF4LXdpZHRoOjgwMHB4fQp7L2xpdGVyYWx9]]></data>
	</file>
	<file>
	  <filename>/templates/orig_cookiemodal_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBiZWdpbiBjb29raWUgY29uc2VudCAtLT4KPGRpdiBjbGFzcz0iY29va2llLW1vZGFse2lmICRjb2xvcl9zY2hlbWUgPT0gJ2RhcmsnfSBkYXJrLXRoZW1ley9pZn17aWYgJHBvc2l0aW9ufSBwb3NpdGlvbi17JHBvc2l0aW9ufXsvaWZ9e2lmICRzaXplfSBzaXplLXskc2l6ZX17L2lmfSIgaWQ9ImNvb2tpZS1ub3RpY2UiPgogIDxkaXYgY2xhc3M9ImNvb2tpZS1kaWFsb2ciPgogICAgPGRpdiBjbGFzcz0iY29va2llLWhlYWRlciI+CiAgICAgIDxkaXYgY2xhc3M9ImdjcC10aXRsZSI+eyRtb2QtPmdldExhbmcoJ2Nvb2tpZV90aXRsZScpfTwvZGl2PgogICAgICA8dWwgY2xhc3M9ImNvb2tpZS10YWJzIj4KICAgICAgICA8bGk+PGEgaHJlZj0iIyIgY2xhc3M9ImdjcC10YWItbGluayBnY3AtYWN0aXZlIiBkYXRhLXRhYj0iY29uc2VudCI+eyRtb2QtPmdldExhbmcoJ2Nvb2tpZV90YWJfY29uc2VudCcpfTwvYT48L2xpPgogICAgICAgIHtpZiAkZ29vZ2xlX3RhZ190eXBlICE9ICdub25lJ308bGk+PGEgaHJlZj0iIyIgY2xhc3M9ImdjcC10YWItbGluayIgZGF0YS10YWI9ImRldGFpbHMiPnskbW9kLT5nZXRMYW5nKCdjb29raWVfdGFiX2RldGFpbHMnKX08L2E+PC9saT57L2lmfQogICAgICAgIDxsaT48YSBocmVmPSIjIiBjbGFzcz0iZ2NwLXRhYi1saW5rIiBkYXRhLXRhYj0iYWJvdXQiPnskbW9kLT5nZXRMYW5nKCdjb29raWVfdGFiX2Fib3V0Jyl9PC9hPjwvbGk+CiAgICAgIDwvdWw+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvb2tpZS1ib2R5Ij4KICAgICAgPGRpdiBjbGFzcz0iZ2NwLXRhYi1jb250ZW50IGdjcC1hY3RpdmUiIGlkPSJ0YWItY29uc2VudCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZ2NwLXN1YnRpdGxlIj57aWYgJGN1c3RvbV90aXRsZX17JGN1c3RvbV90aXRsZX17ZWxzZX17JG1vZC0+Z2V0TGFuZygnY29va2llX3dlYnNpdGVfdXNlcycpfXsvaWZ9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZ2NwLXRleHQiPntpZiAkY3VzdG9tX3RleHR9eyRjdXN0b21fdGV4dH17ZWxzZX17JG1vZC0+Z2V0TGFuZygnY29va2llX2NvbnNlbnRfdGV4dCcpfXsvaWZ9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICB7aWYgJGdvb2dsZV90YWdfdHlwZSAhPSAnbm9uZSd9PGRpdiBjbGFzcz0iZ2NwLXRhYi1jb250ZW50IiBpZD0idGFiLWRldGFpbHMiPgogICAgICAgIDxkaXYgY2xhc3M9ImdjcC10b2dnbGUtaXRlbSI+CiAgICAgICAgICA8ZGl2PjxzdHJvbmc+eyRtb2QtPmdldExhbmcoJ2Nvb2tpZV9uZWNlc3NhcnknKX08L3N0cm9uZz48YnI+PHNtYWxsPnskbW9kLT5nZXRMYW5nKCdjb29raWVfbmVjZXNzYXJ5X2Rlc2MnKX08L3NtYWxsPjwvZGl2PgogICAgICAgICAgPGxhYmVsIGNsYXNzPSJnY3AtdG9nZ2xlLXN3aXRjaCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InRvZ2dsZS1uZWNlc3NhcnktZGV0YWlsIiBjaGVja2VkIGRpc2FibGVkPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2NwLXRvZ2dsZS1zbGlkZXIiPjwvc3Bhbj4KICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZ2NwLXRvZ2dsZS1pdGVtIj4KICAgICAgICAgIDxkaXY+PHN0cm9uZz57JG1vZC0+Z2V0TGFuZygnY29va2llX3ByZWZlcmVuY2VzJyl9PC9zdHJvbmc+PGJyPjxzbWFsbD57JG1vZC0+Z2V0TGFuZygnY29va2llX3ByZWZlcmVuY2VzX2Rlc2MnKX08L3NtYWxsPjwvZGl2PgogICAgICAgICAgPGxhYmVsIGNsYXNzPSJnY3AtdG9nZ2xlLXN3aXRjaCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InRvZ2dsZS1wcmVmZXJlbmNlcy1kZXRhaWwie2lmICRjb25zZW50cy5wZXJzb25hbGl6YXRpb25fc3RvcmFnZSA9PSAnZ3JhbnRlZCd9IGNoZWNrZWR7L2lmfT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdjcC10b2dnbGUtc2xpZGVyIj48L3NwYW4+CiAgICAgICAgICA8L2xhYmVsPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImdjcC10b2dnbGUtaXRlbSI+CiAgICAgICAgICA8ZGl2PjxzdHJvbmc+eyRtb2QtPmdldExhbmcoJ2Nvb2tpZV9zdGF0aXN0aWNzJyl9PC9zdHJvbmc+PGJyPjxzbWFsbD57JG1vZC0+Z2V0TGFuZygnY29va2llX3N0YXRpc3RpY3NfZGVzYycpfTwvc21hbGw+PC9kaXY+CiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImdjcC10b2dnbGUtc3dpdGNoIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0idG9nZ2xlLXN0YXRpc3RpY3MtZGV0YWlsIntpZiAkY29uc2VudHMuYW5hbHl0aWNzX3N0b3JhZ2UgPT0gJ2dyYW50ZWQnfSBjaGVja2Vkey9pZn0+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnY3AtdG9nZ2xlLXNsaWRlciI+PC9zcGFuPgogICAgICAgICAgPC9sYWJlbD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJnY3AtdG9nZ2xlLWl0ZW0iPgogICAgICAgICAgPGRpdj48c3Ryb25nPnskbW9kLT5nZXRMYW5nKCdjb29raWVfbWFya2V0aW5nJyl9PC9zdHJvbmc+PGJyPjxzbWFsbD57JG1vZC0+Z2V0TGFuZygnY29va2llX21hcmtldGluZ19kZXNjJyl9PC9zbWFsbD48L2Rpdj4KICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZ2NwLXRvZ2dsZS1zd2l0Y2giPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ0b2dnbGUtbWFya2V0aW5nLWRldGFpbCJ7aWYgJGNvbnNlbnRzLmFkX3N0b3JhZ2UgPT0gJ2dyYW50ZWQnICYmICRjb25zZW50cy5hZF9wZXJzb25hbGl6YXRpb24gPT0gJ2dyYW50ZWQnfSBjaGVja2Vkey9pZn0+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnY3AtdG9nZ2xlLXNsaWRlciI+PC9zcGFuPgogICAgICAgICAgPC9sYWJlbD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+ey9pZn0KICAgICAgPGRpdiBjbGFzcz0iZ2NwLXRhYi1jb250ZW50IiBpZD0idGFiLWFib3V0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJnY3AtdGV4dCI+PHN0cm9uZz5BYm91dCBDb29raWVzPC9zdHJvbmc+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZ2NwLXRleHQiPnskbW9kLT5nZXRMYW5nKCdjb29raWVfYWJvdXRfdGV4dCcpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImdjcC10ZXh0Ij57Y21zX3NlbGZsaW5rIHBhZ2U9InByaXZhY3ktcG9saWN5In08L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvb2tpZS1mb290ZXIiPgogICAgICB7aWYgJGdvb2dsZV90YWdfdHlwZSA9PSAnbm9uZSd9CiAgICAgICAgPGEgY2xhc3M9ImdjcC1idG4gZ2NwLWJ0bi1wcmltYXJ5IiBocmVmPSIjIiBpZD0iYnRuLWFja25vd2xlZGdlIj57JG1vZC0+Z2V0TGFuZygnY29va2llX2Fja25vd2xlZGdlJyl9PC9hPgogICAgICB7ZWxzZX0KICAgICAgICA8YSBjbGFzcz0iZ2NwLWJ0biBnY3AtYnRuLXByaW1hcnkiIGhyZWY9IiMiIGlkPSJidG4tZGVueSI+eyRtb2QtPmdldExhbmcoJ2Nvb2tpZV9kZW55Jyl9PC9hPgogICAgICAgIDxhIGNsYXNzPSJnY3AtYnRuIGdjcC1idG4tcHJpbWFyeSIgaHJlZj0iIyIgaWQ9ImJ0bi1jdXN0b21pemUiIGRhdGEtY3VzdG9taXplLXRleHQ9InskbW9kLT5nZXRMYW5nKCdjb29raWVfY3VzdG9taXplJyl9IiBkYXRhLXNhdmUtdGV4dD0ieyRtb2QtPmdldExhbmcoJ2Nvb2tpZV9zYXZlX3NlbGVjdGlvbicpfSI+eyRtb2QtPmdldExhbmcoJ2Nvb2tpZV9jdXN0b21pemUnKX08L2E+CiAgICAgICAgPGEgY2xhc3M9ImdjcC1idG4gZ2NwLWJ0bi1wcmltYXJ5IiBocmVmPSIjIiBpZD0iYnRuLWFsbG93LWFsbCI+eyRtb2QtPmdldExhbmcoJ2Nvb2tpZV9hbGxvd19hbGwnKX08L2E+CiAgICAgIHsvaWZ9CiAgICA8L2Rpdj4KICA8L2Rpdj4KPC9kaXY+CjwhLS0gZW5kIGNvb2tpZSBjb25zZW50IC0tPg==]]></data>
	</file>
</module>
