<?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>Markdown</name>
	<version>1.0</version>
  <mincmsversion>1.11.13</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPkZvcmtlZCBmcm9tIFBhcnNlciBtb2R1bGUgYXQ6IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9iZXNzdGlvbGxlL21hcmtkb3duIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvbWFya2Rvd248L2E+PC9wPgo=]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBKZWZmIEJvc2NoIChhanByb2cpIGZvcmtlZCBmcm9tIEtldmluIERhbmV6aXMgKGFrYTJCZXNzKSAmbHQ7amVmZiBhdCBhanByb2dyYW1taW5nIGRvdCBjb20mZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMS4wPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+Rm9ya2VkIGZyb20gUGFyc2VyIG1vZHVsZSBhdDogPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvbWFya2Rvd24iIHRhcmdldD0iX2JsYW5rIj5odHRwczovL2dpdGh1Yi5jb20vYmVzc3Rpb2xsZS9tYXJrZG93bjwvYT48YnIgLz4=]]></about>
	<description><![CDATA[This module is a Markdown Markdown for CmsMadeSimple]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_save.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwppZihpc3NldCgkcGFyYW1zWydkZWZhdWx0X2VuZ2luZSddKSl7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGVmYXVsdF9lbmdpbmUnLCRwYXJhbXNbJ2RlZmF1bHRfZW5naW5lJ10pOwp9CmlmKGlzc2V0KCRwYXJhbXNbJ3Byb2Nlc3Nfc21hcnR5X3NlY3VyaXR5J10pKXsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwcm9jZXNzX3NtYXJ0eV9zZWN1cml0eScsJHBhcmFtc1sncHJvY2Vzc19zbWFydHlfc2VjdXJpdHknXSk7Cn0KaWYoaXNzZXQoJHBhcmFtc1sncHJvY2Vzc19xdW90ZSddKSl7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgncHJvY2Vzc19xdW90ZScsJHBhcmFtc1sncHJvY2Vzc19xdW90ZSddKTsKfQppZihpc3NldCgkcGFyYW1zWydwcm9jZXNzX2ltZyddKSl7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgncHJvY2Vzc19pbWcnLCRwYXJhbXNbJ3Byb2Nlc3NfaW1nJ10pOwp9CmlmKGlzc2V0KCRwYXJhbXNbJ3Byb2Nlc3Nfc2VjdXJpdHknXSkpewoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3Byb2Nlc3Nfc2VjdXJpdHknLCRwYXJhbXNbJ3Byb2Nlc3Nfc2VjdXJpdHknXSk7Cn0KaWYoaXNzZXQoJHBhcmFtc1sncHJvY2Vzc19jb2RlcHJlJ10pKXsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwcm9jZXNzX2NvZGVwcmUnLCRwYXJhbXNbJ3Byb2Nlc3NfY29kZXByZSddKTsKfQppZihpc3NldCgkcGFyYW1zWydwcm9jZXNzX2NvbnRlbnQnXSkpewoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3Byb2Nlc3NfY29udGVudCcsJHBhcmFtc1sncHJvY2Vzc19jb250ZW50J10pOwp9CgoKJHRoaXMtPnJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluJyk7]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIGV4aXQ7CgokaXRlbXNFbmdpbmUgPSBhcnJheSgiTUlDSEVMRiI9PkVuZ2luZTo6JE1JQ0hFTEYsICJNSUNIRUxGX0VYVFJBIj0+RW5naW5lOjokTUlDSEVMRl9FWFRSQSwgIlBBUlNET1dOIj0+RW5naW5lOjokUEFSU0RPV04pOwoKCiRkZWZhdWx0X2VuZ2luZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZWZhdWx0X2VuZ2luZScsRW5naW5lOjokUEFSU0RPV04pOwovLyRwcm9jZXNzX3NtYXJ0eV9zZWN1cml0eSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwcm9jZXNzX3NtYXJ0eV9zZWN1cml0eScsdHJ1ZSk7CiRwcm9jZXNzX3F1b3RlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3Byb2Nlc3NfcXVvdGUnLHRydWUpOwokcHJvY2Vzc19pbWcgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncHJvY2Vzc19pbWcnLHRydWUpOwokcHJvY2Vzc19zZWN1cml0eSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwcm9jZXNzX3NlY3VyaXR5Jyx0cnVlKTsKJHByb2Nlc3NfY29kZXByZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwcm9jZXNzX2NvZGVwcmUnLHRydWUpOwokcHJvY2Vzc19jb250ZW50ID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3Byb2Nlc3NfY29udGVudCcsdHJ1ZSk7Cgokc21hcnR5LT5hc3NpZ24oIml0ZW1zRW5naW5lIiwgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24gKCRpZCwgJ2RlZmF1bHRfZW5naW5lJywgJGl0ZW1zRW5naW5lLCAtMSwgJGRlZmF1bHRfZW5naW5lKSk7Ci8vJHNtYXJ0eS0+YXNzaWduKCdwcm9jZXNzX3NtYXJ0eV9zZWN1cml0eScsJHByb2Nlc3Nfc21hcnR5X3NlY3VyaXR5KTsKJHNtYXJ0eS0+YXNzaWduKCdwcm9jZXNzX3F1b3RlJywkcHJvY2Vzc19xdW90ZSk7CiRzbWFydHktPmFzc2lnbigncHJvY2Vzc19pbWcnLCRwcm9jZXNzX2ltZyk7CiRzbWFydHktPmFzc2lnbigncHJvY2Vzc19zZWN1cml0eScsJHByb2Nlc3Nfc2VjdXJpdHkpOwokc21hcnR5LT5hc3NpZ24oJ3Byb2Nlc3NfY29kZXByZScsJHByb2Nlc3NfY29kZXByZSk7CiRzbWFydHktPmFzc2lnbigncHJvY2Vzc19jb250ZW50JywkcHJvY2Vzc19jb250ZW50KTsKCgokc21hcnR5LT5hc3NpZ24oJ2Zvcm1fc2F2ZScsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ2FkbWluX3NhdmUnKSk7CgoKJHRleHQgPSBmaWxlX2dldF9jb250ZW50cyhkaXJuYW1lKF9fRklMRV9fKS4nL2RlZmF1bHQubWQnKTsKLy9lY2hvICR0aGlzLT5HZXRNYXJrZG93bkluc3RhbmNlKCktPnByb2Nlc3MoJHRleHQsIHRydWUpOwokdGV4dCA9IEVuZ2luZTo6aW5pdEluc3RhbmNlKCktPnByb2Nlc3MoJHRleHQsIHRydWUpOyAvL0FjdGl2YXRlIGRlYnVnIGluIGFkbWluIHBhcnQKJHNtYXJ0eS0+YXNzaWduKCd0ZXh0JywkdGV4dCk7CgoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbi50cGwnKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/default.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyMgU29tZSBFeGFtcGxlcyBvZiB0aGUgTWFya2Rvd24gUmVzdWx0LgoKV2VsY29tZSBvbiB0aGlzIGxpdHRsZSBwcmVzZW50YXRpb24uIFtZb3UgY2FuIHJlYWQgdGhlIG9yaWdpbmFsIHRleHQgaGVyZV0oLi4vbW9kdWxlcy9NYXJrZG93bi9kZWZhdWx0Lm1kKS4KClNvbWUgdGlwcyA6IAoKKiAgIFRoZSBkZWZhdWx0IGxhbmd1YWdlIGlzICJNYXJrRG93biIuIElmIGl0J3MgdGhlIGZpcnN0IHRpbWUgZm9yIHlvdSB0byB3cml0ZSBpbiAiTWFya2Rvd24iIG1vZGUsIHRha2UgYSBmZXcgbW9tZW50IFt0byByZWFkIHRoaXNdKGh0dHA6Ly9kYXJpbmdmaXJlYmFsbC5uZXQvcHJvamVjdHMvbWFya2Rvd24vc3ludGF4KQoqICAgSFRNTCB0YWdzIGxpa2UgYDxiPmJvbGQ8L2I+YCBvciBgPGEgaHJlZj0nIyc+bGlua3M8L2E+YGNvdWxkIGJlIHByb2Nlc3NlZCBieSB0aGUgZW5naW5lICJNYXJrRG93biIgaW4gYSBub3JtYWwgY2FzZSBidXQgYXJlIGRpc2FibGVkIGluIHRoZSBtb2R1bGUgTUFSS0RPV04gYnkgZGVmYXVsdCBmb3Igc2VjdXJpdHkgcmVhc29ucyAoZXggOiA8c2NyaXB0PmFsZXJ0KCd0aGlzIGphdmFzY3JpcHQgc2hvdWxkblwndCBiZSBleGVjdXRlZCcpOzwvc2NyaXB0PikuCiogICBJdCdzIHByZXR0eSBlYXN5IHRvIGVtYmVkZGVkIHNvbWUgY29kZSBpbnNpZGUgdGhlIHRleHQuLiB5b3UgY2FuIGRvIGl0IGlubGluZSBgYGBwaHAgPD9waHAgZWNobyAiaGVsbG8gd29ybGQiID8+IGBgYCBvciB3aXRoIGEgYmxvY2sgb2YgY29kZSA6IAoKYGBgcGhwIAo8P3BocCAKICBlY2hvICJoZWxsbyB3b3JsZCIgCj8+IApgYGAKCiogICBTbWFydHkgdGFncyBhbmQgQ21zTWFkZVNpbXBsZSB0YWdzIGxpa2UgYHsiaGVsbG8ifGNhcGl0YWxpemV9YCBvciBge05ld3N9YCBhcmUgbm90IHByb2Nlc3NlZCBieSB0aGUgZW5naW5lICJNYXJrRG93biIuIEl0J3MgeW91ciBqb2IgdG8gZG8gaXQgISAKCgpJbiBmYWN0LCB0aGUgIk1hcmtEb3duIiBsYW5ndWFnZSBpcyBhICoqZWRpdG9yaWFsIGxhbmd1YWdlKiogYW5kIG5vdCBhICoqcHJvZ3JhbW1hdGljIGxhbmd1YWdlKiogKGxpa2UgU21hcnR5IGlzKQogCkFuZCBmaW5hbGx5LCBoZXJlIHNvbWUgYWR2aWNlIGJ5ICJEdWt5IiwgdGhlIGxveWFsIER1Y2suCgohW3F1YWNrXShodHRwOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvdGh1bWIvZC9kNS9HcmF2ZV9lZW5kX21hYXNtdXVyLmpwZy8yNTZweC1HcmF2ZV9lZW5kX21hYXNtdXVyLmpwZykKCj4gUXVhY2ssIHF1YWNrIHF1YWNrIHF1YWNrLi4uICAKCj4gPiBPJyByZWFsbHkgPwoKPiA+IE15IEdvZCAhCgoqKlRoZSBFTkQgISoqCgpQUyA6IFlvdSBjYW4gY2FsbCB0aGUgbWFya2Rvd24gbGlrZSB0aGlzIAoKYGBgcGhwIAo8P3BocCAKICBlY2hvIE1hcmtkb3duOjpwYXJzZSgkdGV4dCk7Cj8+IApgYGAKb3IgaW4geW91ciBTbWFydHkgdGVtcGxhdGVzIDogCgpgYGBzbWFydHkKeyR1bnRydXN0ZWRUZXh0fG1hcmtkb3dufQpgYGAKClRoZXJlIGlzIGFsc28gbW9yZSBvcHRpb25zIDogCmBgYHBocCAKPD9waHAgCiAgZWNobyBNYXJrZG93bjo6cGFyc2UoJHRleHQsRW5naW5lOjokUEFSU0RPV04pOwo/PiAKYGBgCioqVGhlIEVORCAoMikgISoq]]></data>
	</file>
	<file>
	  <filename>/event.Core.ContentPreCompile.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNU01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBWaXNpdCB0aGUgQ01TTVMgSG9tZXBhZ2UgYXQ6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCgppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY21zbXMnKSkgZXhpdDsKCi8vZGVidWdfZGlzcGxheSgkcGFyYW1zKTtkaWUoKTsKaWYoJHRoaXMtPkdldFByZWZlcmVuY2UoJ3Byb2Nlc3NfY29udGVudCcsdHJ1ZSkpCnsKICAgICRvdXQgPSBNYXJrZG93bjo6cGFyc2UoJHBhcmFtc1snY29udGVudCddKTsKICAgICRwYXJhbXNbJ2NvbnRlbnQnXSA9IHN0cl9yZXBsYWNlKGFycmF5KCc8Y29kZScsJzwvY29kZT4nKSxhcnJheSgne2xpdGVyYWx9PGNvZGUnLCc8L2NvZGU+ey9saXRlcmFsfScpLCRvdXQpOwogICAgLy9kZWJ1Z19kaXNwbGF5KCRwYXJhbXNbJ2NvbnRlbnQnXSk7ZGllKCk7Cn0KIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhaABAAIABAAAAAP///yH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEKAAEALAAAAABoAEAAAAL+jA2py+0Po5xUnRuq3rx37IXi+CHkiaZWprYuxy7YTNf2jec6Lu3+DwzuIsKi8ZgjIpdMo7IJjfIg0qr18rxqm9mt10n9iovdsTkZrpWHafYDuD704HFbXd2eTX57fh79ZtcHeEdTqPeHNTg153MIkihHQfioGOgYaTIpuIl56eZws4FXQfepcwcDqWEa6ne6WhrbCdrQasvJKjn66urpa1jicctALJP7gvurXFuMnHy87CwdHQzNjJpJCoz49lG5y005bR36rV2OPV7d7coLrinOKB+uLBtD75JO3s68WKdimzpLwP5pQ/GM3Sx+XQqREHXwD6xDIuYNrMcvXoKYfQr76YIIi+DFjvguLqQlMKNIlfhSkvTYCCQ9jSxZJFyRDeXNjTsBkEF30iRMnByJ9hJa1KjFmiWZykSa1JjSlS+XVk0YJBVQl1Nz8pT6NalPIfBW/QyJ8WrPI2PJRkS7ruuXsmfE0K3r5S5eLXr3WunrVwrgwFAGE2Zi+DCSxIrBbG1cxda1yZRpUr6M0DLmzSXScv48qAAAOw==]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ01hcmtkb3duJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdNb2R1bGUgdW5pbnN0YWxsZWQsIGJ5ZSAhIic7CiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnUmVhbGx5PyBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdW5pbnN0YWxsIHRoaXMgZmluZSBtb2R1bGU/JzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWxlIFVuaW5zdGFsbGVkLic7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bGUgdmVyc2lvbiAlcyBpbnN0YWxsZWQuJzsKJGxhbmdbJ3Jlc2V0ZWQgJ10gPSAnTW9kdWxlIHZlcnNpb24gJXMgcmVzZXRlZCB3aXRoIHN1Y2Nlc3MgJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnVGhpcyBtb2R1bGUgaXMgYSBNYXJrZG93biBNYXJrZG93biBmb3IgQ21zTWFkZVNpbXBsZSc7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICdGb3JrZWQgZnJvbSBQYXJzZXIgbW9kdWxlIGF0OiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYmVzc3Rpb2xsZS9tYXJrZG93biIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vZ2l0aHViLmNvbS9iZXNzdGlvbGxlL21hcmtkb3duPC9hPic7CiRsYW5nWydoZWxwJ10gPSAnPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPkZvcmtlZCBmcm9tIFBhcnNlciBtb2R1bGUgYXQ6IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9iZXNzdGlvbGxlL21hcmtkb3duIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvbWFya2Rvd248L2E+PC9wPgonOwoKCiRsYW5nWydzYXZlX3N1Y2Nlc3MnXSA9ICdQYXJhbWV0ZXJzIHNhdmVkIHdpdGggc3VjY2Vzcy4nOwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.Engine.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgpjbGFzcyBFbmdpbmV7CgoKCXB1YmxpYyBzdGF0aWMgJE1JQ0hFTEYgPSAxOwoJcHVibGljIHN0YXRpYyAkTUlDSEVMRl9FWFRSQSA9IDI7CglwdWJsaWMgc3RhdGljICRQQVJTRE9XTiA9IDM7CgoJcHJvdGVjdGVkIHN0YXRpYyAkZW5naW5lOwoKCXByb3RlY3RlZCBzdGF0aWMgJHByb2Nlc3Nfc2VjdXJpdHkgPSBmYWxzZTsKCXByb3RlY3RlZCBzdGF0aWMgJHByb2Nlc3Nfc21hcnR5X3NlY3VyaXR5ID0gZmFsc2U7Cglwcm90ZWN0ZWQgc3RhdGljICRwcm9jZXNzX3F1b3RlID0gZmFsc2U7Cglwcm90ZWN0ZWQgc3RhdGljICRwcm9jZXNzX2ltZyA9IGZhbHNlOwoJcHJvdGVjdGVkIHN0YXRpYyAkcHJvY2Vzc19jb2RlcHJlID0gZmFsc2U7CgoKCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGluaXRJbnN0YW5jZSgkZW5naW5lVHlwZSA9IG51bGwpewoKCQlpZihzZWxmOjokZW5naW5lICE9IG51bGwpewoJCQlyZXR1cm4gc2VsZjo6JGVuZ2luZTsKCQl9CgoJCSRtYXJrZG93biA9IE1vZHVsZU9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpLT5nZXRfbW9kdWxlX2luc3RhbmNlKCdNYXJrZG93bicpOwoJCWlmKCRlbmdpbmVUeXBlID09IG51bGwpewoJCQkkZW5naW5lVHlwZSA9ICRtYXJrZG93bi0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdF9lbmdpbmUnLEVuZ2luZTo6JFBBUlNET1dOKTsKCQl9CgkJCgkJc2VsZjo6JHByb2Nlc3Nfc21hcnR5X3NlY3VyaXR5ID0gJG1hcmtkb3duLT5HZXRQcmVmZXJlbmNlKCdwcm9jZXNzX3NtYXJ0eV9zZWN1cml0eScsdHJ1ZSk7CgkJc2VsZjo6JHByb2Nlc3Nfc2VjdXJpdHkgPSAkbWFya2Rvd24tPkdldFByZWZlcmVuY2UoJ3Byb2Nlc3Nfc2VjdXJpdHknLHRydWUpOwoJCXNlbGY6OiRwcm9jZXNzX3F1b3RlID0gJG1hcmtkb3duLT5HZXRQcmVmZXJlbmNlKCdwcm9jZXNzX3F1b3RlJyx0cnVlKTsKCQlzZWxmOjokcHJvY2Vzc19pbWcgPSAkbWFya2Rvd24tPkdldFByZWZlcmVuY2UoJ3Byb2Nlc3NfaW1nJyx0cnVlKTsKCQlzZWxmOjokcHJvY2Vzc19jb2RlcHJlID0gJG1hcmtkb3duLT5HZXRQcmVmZXJlbmNlKCdwcm9jZXNzX2NvZGVwcmUnLHRydWUpOwoJCQoKCQlpZihFbmdpbmU6OiRNSUNIRUxGID09ICRlbmdpbmVUeXBlKSB7CgkJCWluY2x1ZGVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL0VuZ2luZXMvY2xhc3MuTWljaGVsZkVuZ2luZS5waHAnKTsKCQkJc2VsZjo6JGVuZ2luZSA9IG5ldyBNaWNoZWxmRW5naW5lKCk7CgkJCgkJfSBlbHNlIGlmKEVuZ2luZTo6JE1JQ0hFTEZfRVhUUkEgPT0gJGVuZ2luZVR5cGUpIHsKCQkJaW5jbHVkZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvRW5naW5lcy9jbGFzcy5NaWNoZWxmRXh0cmFFbmdpbmUucGhwJyk7CgkJCXNlbGY6OiRlbmdpbmUgPSBuZXcgTWljaGVsZkV4dHJhRW5naW5lKCk7CgkJCgkJfSBlbHNlIGlmKEVuZ2luZTo6JFBBUlNET1dOID09ICRlbmdpbmVUeXBlKSB7CgkJCWluY2x1ZGVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL0VuZ2luZXMvY2xhc3MuUGFyc2Vkb3duRW5naW5lLnBocCcpOwoJCQlzZWxmOjokZW5naW5lID0gbmV3IFBhcnNlZG93bkVuZ2luZSgpOwoJCX0gCgoJCXJldHVybiBzZWxmOjokZW5naW5lOwoKCX0KCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKXsKCX0KCglwdWJsaWMgZnVuY3Rpb24gcHJvY2VzcygkdGV4dCwgJGRlYnVnID0gZmFsc2UpewoKCQkkc3RhcnQgPSBtaWNyb3RpbWUodHJ1ZSk7CgoJCS8vIE1haW4gc2VjdXJpdHkgZW50cnkKCQlpZihzZWxmOjokcHJvY2Vzc19zZWN1cml0eSl7CgkJCSR0ZXh0ID0gaHRtbGVudGl0aWVzKCR0ZXh0KTsKCQl9CgoJCS8vV2lsbCByZXBsYWNlID4gPiA+IGludG8gIHRhYiB0YWIgdGFiCgkJaWYoc2VsZjo6JHByb2Nlc3NfcXVvdGUpewoJCQkkdGV4dCA9IHNlbGY6OmZpeFF1b3RlQmxvYygkdGV4dCk7CgkJfQoKCQkvL1dpbGwgZml4ICEgc3ltYm9sIGZvciBpbWcvbGluawoJCWlmKHNlbGY6OiRwcm9jZXNzX2ltZyl7CgkJCSR0ZXh0ID0gc2VsZjo6Zml4SW1hZ2VVcmwoJHRleHQpOwoJCX0JCQoKCQkkc3RhcnRQID0gbWljcm90aW1lKHRydWUpOwoJCSR0ZXh0ID0gc2VsZjo6JGVuZ2luZS0+cGFyc2luZygkdGV4dCk7CgkJJGVuZFAgPSBtaWNyb3RpbWUodHJ1ZSk7CgoJCS8vV2lsbCBmaXggSFRNTCBzeW1ib2wgaW5zaWRlIDxjb2RlPiAmIDxwcmU+CgkJaWYoc2VsZjo6JHByb2Nlc3NfY29kZXByZSl7CgkJCSR0ZXh0ID0gc2VsZjo6Zml4Q29kZVByZUJsb2MoJHRleHQpOwoJCX0KCgkJLy9XaWxsIGVuYWJsZSBTTUFSVFkgdGFncwoJCS8qaWYoc2VsZjo6JHByb2Nlc3Nfc21hcnR5X3NlY3VyaXR5KXsKCQkJJHRleHQgPSBzZWxmOjpmaXhTbWFydHkoJHRleHQpOwoJCX0qLwoJCQoJCSRlbmQgPSBtaWNyb3RpbWUodHJ1ZSk7CgkJCgoJCWlmKCRkZWJ1Zyl7CgkJCSR0ZXh0IC49ICI8aDE+IERFQlVHIDogVGltZSBvZiBleGVjdXRpb24gOiAiLnJvdW5kKCgkZW5kLSRzdGFydCkgKiAxMDAwLDIpLiJtcyAoIi5yb3VuZCgoJGVuZFAtJHN0YXJ0UCkgKiAxMDAwLDIpLiJtcyBmb3IgcGFyc2luZyk8L2gxPiI7CgkJfQoKCQlyZXR1cm4gJHRleHQ7Cgl9CgoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBmaXhRdW90ZUJsb2MoJHRleHQpewoJCS8vIGJsb2NxdW90ZQoJCSRzZWFyY2ggPSBhcnJheSgnYFxuID8mZ3Q7ICZndDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyBgJywnYFxuID8mZ3Q7ICZndDsgJmd0OyAmZ3Q7ICZndDsgYCcsJ2BcbiA/Jmd0OyAmZ3Q7ICZndDsgJmd0OyBgJywnYFxuID8mZ3Q7ICZndDsgJmd0OyBgJywnYFxuID8mZ3Q7ICZndDsgYCcsJ2BcbiA/Jmd0OyBgJyk7CgkJJHJlcGxhY2UgPSBhcnJheSgnPiA+ID4gPiA+ID4nLCAnPiA+ID4gPiA+ICcsJz4gPiA+ID4gJywnPiA+ID4gJywnPiA+ICcsJz4gJyk7CgkJJHRleHQgPSBwcmVnX3JlcGxhY2UoJHNlYXJjaCwgJHJlcGxhY2UsICR0ZXh0KTsKCQkkc2VhcmNoID0gYXJyYXkoJ2BeID8mZ3Q7ICZndDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyBgJywnYF4gPyZndDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyBgJywnYF4gPyZndDsgJmd0OyAmZ3Q7ICZndDsgYCcsJ2BeID8mZ3Q7ICZndDsgJmd0OyBgJywnYF4gPyZndDsgJmd0OyBgJywnYF4gPyZndDsgYCcpOwoJCSR0ZXh0ID0gcHJlZ19yZXBsYWNlKCRzZWFyY2gsICRyZXBsYWNlLCAkdGV4dCk7CgoJCS8vJHNlYXJjaCA9IGFycmF5KCIjID8oJmd0OyApPygmZ3Q7ICk/KCZndDsgKT8oJmd0OyApPygmZ3Q7ICk/I21zaSIpOyAgLy8gIzIgLT4gNSBsZXZlbCBvZiBxdW90ZQoJCS8vICRzZWFyY2ggPSBhcnJheSgiIyA/KCZndDsgKT8oJmd0OyApPygmZ3Q7ICk/KCZndDsgKT8oJmd0OyApPyNtc2kiKTsgIC8vICMyIC0+IDUgbGV2ZWwgb2YgcXVvdGUKCQkvLyAkcmVwbGFjZSA9IGFycmF5KCc+Jyk7CgkJLy8gJHRleHQgPSBwcmVnX3JlcGxhY2UoJHNlYXJjaCwgJHJlcGxhY2UsICR0ZXh0KTsKCQlyZXR1cm4gJHRleHQ7Cgl9CgoJLypwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGZpeFNtYXJ0eSgkdGV4dCl7CgkJLy9UcmFuc2Zvcm0gc21hcnR5IHRhZ3MKCQkkc2VhcmNoID0gYXJyYXkoJ3tyb290X3VybH0nKTsgCgkJJHJlcGxhY2UgPSBhcnJheShzZWxmOjokY29uZmlnWydyb290X3VybCddKTsgCgkJJHRleHQgPSBzdHJfcmVwbGFjZSgkc2VhcmNoLCAkcmVwbGFjZSwgJHRleHQpOwoJCXJldHVybiAkdGV4dDsKCX0qLwoKCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZml4SW1hZ2VVcmwoJHRleHQpewoJCS8vVHJhbnNmb3JtIHNwZWNpZmljIHRhZ3MKCQkkc2VhcmNoID0gYXJyYXkoJyYjMzM7Jyk7IAoJCSRyZXBsYWNlID0gYXJyYXkoJyEnKTsgCgkJJHRleHQgPSBzdHJfcmVwbGFjZSgkc2VhcmNoLCAkcmVwbGFjZSwgJHRleHQpOwoJCXJldHVybiAkdGV4dDsKCX0KCgoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBmaXhDb2RlUHJlQmxvYygkdGV4dCl7CgkJLy9GaXggaW5saW5lL2Jsb2MgPGNvZGU+PC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9J3h4eCc+PC9jb2RlPiBieSBkZWNvZGluZyBIVE1MIGVudGl0eQoJCSRwYXR0ZXJuUyA9ICdgPGNvZGUoPzpbXj5dKik+KFtePF0qKTxcL2NvZGU+YGknOwoJCXByZWdfbWF0Y2hfYWxsKCAkcGF0dGVyblMsICR0ZXh0LCAkbWF0Y2hlcywgUFJFR19TRVRfT1JERVIpOwoJCSRzZWFyY2ggPSBhcnJheSgpOwoJCSRyZXBsYWNlID0gYXJyYXkoKTsKCQlmb3JlYWNoKCRtYXRjaGVzIGFzICRtYXRjaCkgewoJCQkkc2VhcmNoW10gPSAkbWF0Y2hbMF07CgkJCSRyZXBsYWNlW10gPSBodG1sX2VudGl0eV9kZWNvZGUoJG1hdGNoWzBdKTsKCQl9CgkJJHRleHQgPSBzdHJfcmVwbGFjZSgkc2VhcmNoLCRyZXBsYWNlLCR0ZXh0KTsKCQlyZXR1cm4gJHRleHQ7Cgl9Cn0KPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/class.Markdown.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGNsYXNzIGlzIGEgc3RhdGljIHdyYXBwZXIgZm9yIHRoZSBNYXJrZG93biBtb2R1bGUuCiAqLwpjbGFzcyBNYXIKewogICAgCiAgICAvKioKICAgICAqIAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJndW1lbnQpCiAgICB7CiAgICAgICAgLy8gY29kZS4uLgogICAgfQp9]]></data>
	</file>
	<file>
	  <filename>/lib/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/css/codemirror.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogQkFTSUNTICovCgouQ29kZU1pcnJvciB7CiAgLyogU2V0IGhlaWdodCwgd2lkdGgsIGJvcmRlcnMsIGFuZCBnbG9iYWwgZm9udCBwcm9wZXJ0aWVzIGhlcmUgKi8KICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogIGhlaWdodDogMzAwcHg7CiAgY29sb3I6IGJsYWNrOwp9CgovKiBQQURESU5HICovCgouQ29kZU1pcnJvci1saW5lcyB7CiAgcGFkZGluZzogNHB4IDA7IC8qIFZlcnRpY2FsIHBhZGRpbmcgYXJvdW5kIGNvbnRlbnQgKi8KfQouQ29kZU1pcnJvciBwcmUgewogIHBhZGRpbmc6IDAgNHB4OyAvKiBIb3Jpem9udGFsIHBhZGRpbmcgb2YgY29udGVudCAqLwp9CgouQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgLyogVGhlIGxpdHRsZSBzcXVhcmUgYmV0d2VlbiBIIGFuZCBWIHNjcm9sbGJhcnMgKi8KfQoKLyogR1VUVEVSICovCgouQ29kZU1pcnJvci1ndXR0ZXJzIHsKICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZGRkOwogIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQouQ29kZU1pcnJvci1saW5lbnVtYmVycyB7fQouQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKICBwYWRkaW5nOiAwIDNweCAwIDVweDsKICBtaW4td2lkdGg6IDIwcHg7CiAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgY29sb3I6ICM5OTk7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVybWFya2VyIHsgY29sb3I6IGJsYWNrOyB9Ci5Db2RlTWlycm9yLWd1dHRlcm1hcmtlci1zdWJ0bGUgeyBjb2xvcjogIzk5OTsgfQoKLyogQ1VSU09SICovCgouQ29kZU1pcnJvci1jdXJzb3IgewogIGJvcmRlci1sZWZ0OiAxcHggc29saWQgYmxhY2s7CiAgYm9yZGVyLXJpZ2h0OiBub25lOwogIHdpZHRoOiAwOwp9Ci8qIFNob3duIHdoZW4gbW92aW5nIGluIGJpLWRpcmVjdGlvbmFsIHRleHQgKi8KLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yIHsKICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHNpbHZlcjsKfQouY20tZmF0LWN1cnNvciAuQ29kZU1pcnJvci1jdXJzb3IgewogIHdpZHRoOiBhdXRvOwogIGJvcmRlcjogMDsKICBiYWNrZ3JvdW5kOiAjN2U3Owp9Ci5jbS1mYXQtY3Vyc29yIGRpdi5Db2RlTWlycm9yLWN1cnNvcnMgewogIHotaW5kZXg6IDE7Cn0KCi5jbS1hbmltYXRlLWZhdC1jdXJzb3IgewogIHdpZHRoOiBhdXRvOwogIGJvcmRlcjogMDsKICAtd2Via2l0LWFuaW1hdGlvbjogYmxpbmsgMS4wNnMgc3RlcHMoMSkgaW5maW5pdGU7CiAgLW1vei1hbmltYXRpb246IGJsaW5rIDEuMDZzIHN0ZXBzKDEpIGluZmluaXRlOwogIGFuaW1hdGlvbjogYmxpbmsgMS4wNnMgc3RlcHMoMSkgaW5maW5pdGU7CiAgYmFja2dyb3VuZC1jb2xvcjogIzdlNzsKfQpALW1vei1rZXlmcmFtZXMgYmxpbmsgewogIDAlIHt9CiAgNTAlIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0KICAxMDAlIHt9Cn0KQC13ZWJraXQta2V5ZnJhbWVzIGJsaW5rIHsKICAwJSB7fQogIDUwJSB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9CiAgMTAwJSB7fQp9CkBrZXlmcmFtZXMgYmxpbmsgewogIDAlIHt9CiAgNTAlIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0KICAxMDAlIHt9Cn0KCi8qIENhbiBzdHlsZSBjdXJzb3IgZGlmZmVyZW50IGluIG92ZXJ3cml0ZSAobm9uLWluc2VydCkgbW9kZSAqLwouQ29kZU1pcnJvci1vdmVyd3JpdGUgLkNvZGVNaXJyb3ItY3Vyc29yIHt9CgouY20tdGFiIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IGluaGVyaXQ7IH0KCi5Db2RlTWlycm9yLXJ1bGVyIHsKICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNjY2M7CiAgcG9zaXRpb246IGFic29sdXRlOwp9CgovKiBERUZBVUxUIFRIRU1FICovCgouY20tcy1kZWZhdWx0IC5jbS1oZWFkZXIge2NvbG9yOiBibHVlO30KLmNtLXMtZGVmYXVsdCAuY20tcXVvdGUge2NvbG9yOiAjMDkwO30KLmNtLW5lZ2F0aXZlIHtjb2xvcjogI2Q0NDt9Ci5jbS1wb3NpdGl2ZSB7Y29sb3I6ICMyOTI7fQouY20taGVhZGVyLCAuY20tc3Ryb25nIHtmb250LXdlaWdodDogYm9sZDt9Ci5jbS1lbSB7Zm9udC1zdHlsZTogaXRhbGljO30KLmNtLWxpbmsge3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO30KLmNtLXN0cmlrZXRocm91Z2gge3RleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO30KCi5jbS1zLWRlZmF1bHQgLmNtLWtleXdvcmQge2NvbG9yOiAjNzA4O30KLmNtLXMtZGVmYXVsdCAuY20tYXRvbSB7Y29sb3I6ICMyMTk7fQouY20tcy1kZWZhdWx0IC5jbS1udW1iZXIge2NvbG9yOiAjMTY0O30KLmNtLXMtZGVmYXVsdCAuY20tZGVmIHtjb2xvcjogIzAwZjt9Ci5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLAouY20tcy1kZWZhdWx0IC5jbS1wdW5jdHVhdGlvbiwKLmNtLXMtZGVmYXVsdCAuY20tcHJvcGVydHksCi5jbS1zLWRlZmF1bHQgLmNtLW9wZXJhdG9yIHt9Ci5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTIge2NvbG9yOiAjMDVhO30KLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMyB7Y29sb3I6ICMwODU7fQouY20tcy1kZWZhdWx0IC5jbS1jb21tZW50IHtjb2xvcjogI2E1MDt9Ci5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZyB7Y29sb3I6ICNhMTE7fQouY20tcy1kZWZhdWx0IC5jbS1zdHJpbmctMiB7Y29sb3I6ICNmNTA7fQouY20tcy1kZWZhdWx0IC5jbS1tZXRhIHtjb2xvcjogIzU1NTt9Ci5jbS1zLWRlZmF1bHQgLmNtLXF1YWxpZmllciB7Y29sb3I6ICM1NTU7fQouY20tcy1kZWZhdWx0IC5jbS1idWlsdGluIHtjb2xvcjogIzMwYTt9Ci5jbS1zLWRlZmF1bHQgLmNtLWJyYWNrZXQge2NvbG9yOiAjOTk3O30KLmNtLXMtZGVmYXVsdCAuY20tdGFnIHtjb2xvcjogIzE3MDt9Ci5jbS1zLWRlZmF1bHQgLmNtLWF0dHJpYnV0ZSB7Y29sb3I6ICMwMGM7fQouY20tcy1kZWZhdWx0IC5jbS1ociB7Y29sb3I6ICM5OTk7fQouY20tcy1kZWZhdWx0IC5jbS1saW5rIHtjb2xvcjogIzAwYzt9CgouY20tcy1kZWZhdWx0IC5jbS1lcnJvciB7Y29sb3I6ICNmMDA7fQouY20taW52YWxpZGNoYXIge2NvbG9yOiAjZjAwO30KCi5Db2RlTWlycm9yLWNvbXBvc2luZyB7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZDsgfQoKLyogRGVmYXVsdCBzdHlsZXMgZm9yIGNvbW1vbiBhZGRvbnMgKi8KCmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjMGYwO30KZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQouQ29kZU1pcnJvci1tYXRjaGluZ3RhZyB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LCAxNTAsIDAsIC4zKTsgfQouQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQge2JhY2tncm91bmQ6ICNlOGYyZmY7fQoKLyogU1RPUCAqLwoKLyogVGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGNvbnRhaW5zIHN0eWxlcyByZWxhdGVkIHRvIHRoZSBtZWNoYW5pY3Mgb2YKICAgdGhlIGVkaXRvci4gWW91IHByb2JhYmx5IHNob3VsZG4ndCB0b3VjaCB0aGVtLiAqLwoKLkNvZGVNaXJyb3IgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBvdmVyZmxvdzogaGlkZGVuOwogIGJhY2tncm91bmQ6IHdoaXRlOwp9CgouQ29kZU1pcnJvci1zY3JvbGwgewogIG92ZXJmbG93OiBzY3JvbGwgIWltcG9ydGFudDsgLyogVGhpbmdzIHdpbGwgYnJlYWsgaWYgdGhpcyBpcyBvdmVycmlkZGVuICovCiAgLyogMzBweCBpcyB0aGUgbWFnaWMgbWFyZ2luIHVzZWQgdG8gaGlkZSB0aGUgZWxlbWVudCdzIHJlYWwgc2Nyb2xsYmFycyAqLwogIC8qIFNlZSBvdmVyZmxvdzogaGlkZGVuIGluIC5Db2RlTWlycm9yICovCiAgbWFyZ2luLWJvdHRvbTogLTMwcHg7IG1hcmdpbi1yaWdodDogLTMwcHg7CiAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgaGVpZ2h0OiAxMDAlOwogIG91dGxpbmU6IG5vbmU7IC8qIFByZXZlbnQgZHJhZ2dpbmcgZnJvbSBoaWdobGlnaHRpbmcgdGhlIGVsZW1lbnQgKi8KICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KLkNvZGVNaXJyb3Itc2l6ZXIgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBib3JkZXItcmlnaHQ6IDMwcHggc29saWQgdHJhbnNwYXJlbnQ7Cn0KCi8qIFRoZSBmYWtlLCB2aXNpYmxlIHNjcm9sbGJhcnMuIFVzZWQgdG8gZm9yY2UgcmVkcmF3IGR1cmluZyBzY3JvbGxpbmcKICAgYmVmb3JlIGFjdHVhbGwgc2Nyb2xsaW5nIGhhcHBlbnMsIHRodXMgcHJldmVudGluZyBzaGFraW5nIGFuZAogICBmbGlja2VyaW5nIGFydGlmYWN0cy4gKi8KLkNvZGVNaXJyb3ItdnNjcm9sbGJhciwgLkNvZGVNaXJyb3ItaHNjcm9sbGJhciwgLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHotaW5kZXg6IDY7CiAgZGlzcGxheTogbm9uZTsKfQouQ29kZU1pcnJvci12c2Nyb2xsYmFyIHsKICByaWdodDogMDsgdG9wOiAwOwogIG92ZXJmbG93LXg6IGhpZGRlbjsKICBvdmVyZmxvdy15OiBzY3JvbGw7Cn0KLkNvZGVNaXJyb3ItaHNjcm9sbGJhciB7CiAgYm90dG9tOiAwOyBsZWZ0OiAwOwogIG92ZXJmbG93LXk6IGhpZGRlbjsKICBvdmVyZmxvdy14OiBzY3JvbGw7Cn0KLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciB7CiAgcmlnaHQ6IDA7IGJvdHRvbTogMDsKfQouQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICBsZWZ0OiAwOyBib3R0b206IDA7Cn0KCi5Db2RlTWlycm9yLWd1dHRlcnMgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgdG9wOiAwOwogIHotaW5kZXg6IDM7Cn0KLkNvZGVNaXJyb3ItZ3V0dGVyIHsKICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogIGhlaWdodDogMTAwJTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luLWJvdHRvbTogLTMwcHg7CiAgLyogSGFjayB0byBtYWtlIElFNyBiZWhhdmUgKi8KICAqem9vbToxOwogICpkaXNwbGF5OmlubGluZTsKfQouQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlciB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHotaW5kZXg6IDQ7CiAgYmFja2dyb3VuZDogbm9uZSAhaW1wb3J0YW50OwogIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50Owp9Ci5Db2RlTWlycm9yLWd1dHRlci1iYWNrZ3JvdW5kIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOyBib3R0b206IDA7CiAgei1pbmRleDogNDsKfQouQ29kZU1pcnJvci1ndXR0ZXItZWx0IHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgY3Vyc29yOiBkZWZhdWx0OwogIHotaW5kZXg6IDQ7Cn0KLkNvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXIgewogIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLkNvZGVNaXJyb3ItbGluZXMgewogIGN1cnNvcjogdGV4dDsKICBtaW4taGVpZ2h0OiAxcHg7IC8qIHByZXZlbnRzIGNvbGxhcHNpbmcgYmVmb3JlIGZpcnN0IGRyYXcgKi8KfQouQ29kZU1pcnJvciBwcmUgewogIC8qIFJlc2V0IHNvbWUgc3R5bGVzIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UgbWlnaHQgaGF2ZSBzZXQgKi8KICAtbW96LWJvcmRlci1yYWRpdXM6IDA7IC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsgYm9yZGVyLXJhZGl1czogMDsKICBib3JkZXItd2lkdGg6IDA7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgZm9udC1zaXplOiBpbmhlcml0OwogIG1hcmdpbjogMDsKICB3aGl0ZS1zcGFjZTogcHJlOwogIHdvcmQtd3JhcDogbm9ybWFsOwogIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogIGNvbG9yOiBpbmhlcml0OwogIHotaW5kZXg6IDI7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG92ZXJmbG93OiB2aXNpYmxlOwogIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7Cn0KLkNvZGVNaXJyb3Itd3JhcCBwcmUgewogIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgd29yZC1icmVhazogbm9ybWFsOwp9CgouQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZCB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGxlZnQ6IDA7IHJpZ2h0OiAwOyB0b3A6IDA7IGJvdHRvbTogMDsKICB6LWluZGV4OiAwOwp9CgouQ29kZU1pcnJvci1saW5ld2lkZ2V0IHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgei1pbmRleDogMjsKICBvdmVyZmxvdzogYXV0bzsKfQoKLkNvZGVNaXJyb3Itd2lkZ2V0IHt9CgouQ29kZU1pcnJvci1jb2RlIHsKICBvdXRsaW5lOiBub25lOwp9CgovKiBGb3JjZSBjb250ZW50LWJveCBzaXppbmcgZm9yIHRoZSBlbGVtZW50cyB3aGVyZSB3ZSBleHBlY3QgaXQgKi8KLkNvZGVNaXJyb3Itc2Nyb2xsLAouQ29kZU1pcnJvci1zaXplciwKLkNvZGVNaXJyb3ItZ3V0dGVyLAouQ29kZU1pcnJvci1ndXR0ZXJzLAouQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogIGJveC1zaXppbmc6IGNvbnRlbnQtYm94Owp9CgouQ29kZU1pcnJvci1tZWFzdXJlIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAwOwogIG92ZXJmbG93OiBoaWRkZW47CiAgdmlzaWJpbGl0eTogaGlkZGVuOwp9CgouQ29kZU1pcnJvci1jdXJzb3IgeyBwb3NpdGlvbjogYWJzb2x1dGU7IH0KLkNvZGVNaXJyb3ItbWVhc3VyZSBwcmUgeyBwb3NpdGlvbjogc3RhdGljOyB9CgpkaXYuQ29kZU1pcnJvci1jdXJzb3JzIHsKICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHotaW5kZXg6IDM7Cn0KZGl2LkNvZGVNaXJyb3ItZHJhZ2N1cnNvcnMgewogIHZpc2liaWxpdHk6IHZpc2libGU7Cn0KCi5Db2RlTWlycm9yLWZvY3VzZWQgZGl2LkNvZGVNaXJyb3ItY3Vyc29ycyB7CiAgdmlzaWJpbGl0eTogdmlzaWJsZTsKfQoKLkNvZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjZDlkOWQ5OyB9Ci5Db2RlTWlycm9yLWZvY3VzZWQgLkNvZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjZDdkNGYwOyB9Ci5Db2RlTWlycm9yLWNyb3NzaGFpciB7IGN1cnNvcjogY3Jvc3NoYWlyOyB9Ci5Db2RlTWlycm9yLWxpbmU6OnNlbGVjdGlvbiwgLkNvZGVNaXJyb3ItbGluZSA+IHNwYW46OnNlbGVjdGlvbiwgLkNvZGVNaXJyb3ItbGluZSA+IHNwYW4gPiBzcGFuOjpzZWxlY3Rpb24geyBiYWNrZ3JvdW5kOiAjZDdkNGYwOyB9Ci5Db2RlTWlycm9yLWxpbmU6Oi1tb3otc2VsZWN0aW9uLCAuQ29kZU1pcnJvci1saW5lID4gc3Bhbjo6LW1vei1zZWxlY3Rpb24sIC5Db2RlTWlycm9yLWxpbmUgPiBzcGFuID4gc3Bhbjo6LW1vei1zZWxlY3Rpb24geyBiYWNrZ3JvdW5kOiAjZDdkNGYwOyB9CgouY20tc2VhcmNoaW5nIHsKICBiYWNrZ3JvdW5kOiAjZmZhOwogIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDAsIC40KTsKfQoKLyogSUU3IGhhY2sgdG8gcHJldmVudCBpdCBmcm9tIHJldHVybmluZyBmdW5ueSBvZmZzZXRUb3BzIG9uIHRoZSBzcGFucyAqLwouQ29kZU1pcnJvciBzcGFuIHsgKnZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTsgfQoKLyogVXNlZCB0byBmb3JjZSBhIGJvcmRlciBtb2RlbCBmb3IgYSBub2RlICovCi5jbS1mb3JjZS1ib3JkZXIgeyBwYWRkaW5nLXJpZ2h0OiAuMXB4OyB9CgpAbWVkaWEgcHJpbnQgewogIC8qIEhpZGUgdGhlIGN1cnNvciB3aGVuIHByaW50aW5nICovCiAgLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29ycyB7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgfQp9CgovKiBTZWUgaXNzdWUgIzI5MDEgKi8KLmNtLXRhYi13cmFwLWhhY2s6YWZ0ZXIgeyBjb250ZW50OiAnJzsgfQoKLyogSGVscCB1c2VycyB1c2UgbWFya3NlbGVjdGlvbiB0byBzYWZlbHkgc3R5bGUgdGV4dCBiYWNrZ3JvdW5kICovCnNwYW4uQ29kZU1pcnJvci1zZWxlY3RlZHRleHQgeyBiYWNrZ3JvdW5kOiBub25lOyB9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/css/htmleditor.gradient.min.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIFVJa2l0IDIuMjQuMiB8IGh0dHA6Ly93d3cuZ2V0dWlraXQuY29tIHwgKGMpIDIwMTQgWU9PdGhlbWUgfCBNSVQgTGljZW5zZSAqLwoudWstaHRtbGVkaXRvci1uYXZiYXJ7YmFja2dyb3VuZDojZjdmN2Y3O2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuMSk7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsMCwwLC4yKTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7YmFja2dyb3VuZC1vcmlnaW46Ym9yZGVyLWJveDtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNlZWUpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZmZmLCNlZWUpfS51ay1odG1sZWRpdG9yLW5hdmJhcjphZnRlciwudWstaHRtbGVkaXRvci1uYXZiYXI6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTp0YWJsZX0udWstaHRtbGVkaXRvci1uYXZiYXI6YWZ0ZXJ7Y2xlYXI6Ym90aH0udWstaHRtbGVkaXRvci1uYXZiYXItbmF2e21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmU7ZmxvYXQ6bGVmdH0udWstaHRtbGVkaXRvci1uYXZiYXItbmF2Pmxpe2Zsb2F0OmxlZnR9LnVrLWh0bWxlZGl0b3ItbmF2YmFyLW5hdj5saT5he2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O3RleHQtZGVjb3JhdGlvbjpub25lO2hlaWdodDo0MXB4O3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjQwcHg7Y29sb3I6IzQ0NDtmb250LXNpemU6MTFweDtjdXJzb3I6cG9pbnRlcjttYXJnaW4tdG9wOi0xcHg7bWFyZ2luLWxlZnQ6LTFweDtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b20td2lkdGg6MDt0ZXh0LXNoYWRvdzowIDFweCAwICNmZmZ9LnVrLWh0bWxlZGl0b3ItbmF2YmFyLW5hdj5saTpob3Zlcj5hLC51ay1odG1sZWRpdG9yLW5hdmJhci1uYXY+bGk+YTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOiM0NDQ7b3V0bGluZTowO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MTtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLC4xKTtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgwLDAsMCwuMSk7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xKTtib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLC4xKX0udWstaHRtbGVkaXRvci1uYXZiYXItbmF2PmxpPmE6YWN0aXZle2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtjb2xvcjojNDQ0O2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsLjEpO2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLC4xKTtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjIpO2JveC1zaGFkb3c6aW5zZXQgMCAycHggNHB4IHJnYmEoMCwwLDAsLjEpfS51ay1odG1sZWRpdG9yLW5hdmJhci1uYXY+bGkudWstYWN0aXZlPmF7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO2NvbG9yOiM0NDQ7Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgwLDAsMCwuMSk7Ym9yZGVyLXJpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsLjEpO2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMik7Ym94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwuMSl9LnVrLWh0bWxlZGl0b3ItbmF2YmFyLWZsaXB7ZmxvYXQ6cmlnaHR9W2RhdGEtbW9kZT1zcGxpdF0gLnVrLWh0bWxlZGl0b3ItYnV0dG9uLWNvZGUsW2RhdGEtbW9kZT1zcGxpdF0gLnVrLWh0bWxlZGl0b3ItYnV0dG9uLXByZXZpZXd7ZGlzcGxheTpub25lfS51ay1odG1sZWRpdG9yLWNvbnRlbnR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZGRkO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZGQ7YmFja2dyb3VuZDojZmZmO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweH0udWstaHRtbGVkaXRvci1jb250ZW50OmFmdGVyLC51ay1odG1sZWRpdG9yLWNvbnRlbnQ6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTp0YWJsZX0udWstaHRtbGVkaXRvci1jb250ZW50OmFmdGVye2NsZWFyOmJvdGh9LnVrLWh0bWxlZGl0b3ItZnVsbHNjcmVlbntwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDt6LWluZGV4Ojk5MH0udWstaHRtbGVkaXRvci1mdWxsc2NyZWVuIC51ay1odG1sZWRpdG9yLWNvbnRlbnR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjQxcHg7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjB9LnVrLWh0bWxlZGl0b3ItZnVsbHNjcmVlbiAudWstaWNvbi1leHBhbmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDY2In0udWstaHRtbGVkaXRvci1jb2RlLC51ay1odG1sZWRpdG9yLXByZXZpZXd7Ym94LXNpemluZzpib3JkZXItYm94fS51ay1odG1sZWRpdG9yLXByZXZpZXd7cGFkZGluZzoyMHB4O292ZXJmbG93LXk6c2Nyb2xsO3Bvc2l0aW9uOnJlbGF0aXZlfVtkYXRhLW1vZGU9dGFiXVtkYXRhLWFjdGl2ZS10YWI9Y29kZV0gLnVrLWh0bWxlZGl0b3ItcHJldmlldyxbZGF0YS1tb2RlPXRhYl1bZGF0YS1hY3RpdmUtdGFiPXByZXZpZXddIC51ay1odG1sZWRpdG9yLWNvZGV7ZGlzcGxheTpub25lfVtkYXRhLW1vZGU9c3BsaXRdIC51ay1odG1sZWRpdG9yLWNvZGUsW2RhdGEtbW9kZT1zcGxpdF0gLnVrLWh0bWxlZGl0b3ItcHJldmlld3tmbG9hdDpsZWZ0O3dpZHRoOjUwJX1bZGF0YS1tb2RlPXNwbGl0XSAudWstaHRtbGVkaXRvci1jb2Rle2JvcmRlci1yaWdodDoxcHggc29saWQgI2VlZX0udWstaHRtbGVkaXRvci1pZnJhbWV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LnVrLWh0bWxlZGl0b3IgLkNvZGVNaXJyb3J7cGFkZGluZzoxMHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveH0udWstaHRtbGVkaXRvci1uYXZiYXItbmF2OmZpcnN0LWNoaWxkPmxpOmZpcnN0LWNoaWxkPmF7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHh9LnVrLWh0bWxlZGl0b3ItbmF2YmFyLWZsaXAgLnVrLWh0bWxlZGl0b3ItbmF2YmFyLW5hdj5saT5he21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0Oi0xcHh9LnVrLWh0bWxlZGl0b3ItbmF2YmFyLWZsaXAgLnVrLWh0bWxlZGl0b3ItbmF2YmFyLW5hdjpmaXJzdC1jaGlsZD5saTpmaXJzdC1jaGlsZD5he2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MH0udWstaHRtbGVkaXRvci1uYXZiYXItZmxpcCAudWstaHRtbGVkaXRvci1uYXZiYXItbmF2Omxhc3QtY2hpbGQ+bGk6bGFzdC1jaGlsZD5he2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweH0udWstaHRtbGVkaXRvci1mdWxsc2NyZWVuIC51ay1odG1sZWRpdG9yLW5hdmJhcntib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItcmFkaXVzOjB9LnVrLWh0bWxlZGl0b3ItZnVsbHNjcmVlbiAudWstaHRtbGVkaXRvci1jb250ZW50e2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6MH0udWstaHRtbGVkaXRvci1mdWxsc2NyZWVuIC51ay1odG1sZWRpdG9yLW5hdmJhci1uYXY+bGk+YXtib3JkZXItcmFkaXVzOjAhaW1wb3J0YW50fQ==]]></data>
	</file>
	<file>
	  <filename>/lib/css/htmleditor.min.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIFVJa2l0IDIuMjQuMiB8IGh0dHA6Ly93d3cuZ2V0dWlraXQuY29tIHwgKGMpIDIwMTQgWU9PdGhlbWUgfCBNSVQgTGljZW5zZSAqLwoudWstaHRtbGVkaXRvci1uYXZiYXJ7YmFja2dyb3VuZDojZWVlfS51ay1odG1sZWRpdG9yLW5hdmJhcjphZnRlciwudWstaHRtbGVkaXRvci1uYXZiYXI6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTp0YWJsZX0udWstaHRtbGVkaXRvci1uYXZiYXI6YWZ0ZXJ7Y2xlYXI6Ym90aH0udWstaHRtbGVkaXRvci1uYXZiYXItbmF2e21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmU7ZmxvYXQ6bGVmdH0udWstaHRtbGVkaXRvci1uYXZiYXItbmF2Pmxpe2Zsb2F0OmxlZnR9LnVrLWh0bWxlZGl0b3ItbmF2YmFyLW5hdj5saT5he2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O3RleHQtZGVjb3JhdGlvbjpub25lO2hlaWdodDo0MHB4O3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjQwcHg7Y29sb3I6IzQ0NDtmb250LXNpemU6MTFweDtjdXJzb3I6cG9pbnRlcn0udWstaHRtbGVkaXRvci1uYXZiYXItbmF2PmxpOmhvdmVyPmEsLnVrLWh0bWxlZGl0b3ItbmF2YmFyLW5hdj5saT5hOmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtjb2xvcjojNDQ0O291dGxpbmU6MH0udWstaHRtbGVkaXRvci1uYXZiYXItbmF2PmxpPmE6YWN0aXZle2JhY2tncm91bmQtY29sb3I6I2RkZDtjb2xvcjojNDQ0fS51ay1odG1sZWRpdG9yLW5hdmJhci1uYXY+bGkudWstYWN0aXZlPmF7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2NvbG9yOiM0NDR9LnVrLWh0bWxlZGl0b3ItbmF2YmFyLWZsaXB7ZmxvYXQ6cmlnaHR9W2RhdGEtbW9kZT1zcGxpdF0gLnVrLWh0bWxlZGl0b3ItYnV0dG9uLWNvZGUsW2RhdGEtbW9kZT1zcGxpdF0gLnVrLWh0bWxlZGl0b3ItYnV0dG9uLXByZXZpZXd7ZGlzcGxheTpub25lfS51ay1odG1sZWRpdG9yLWNvbnRlbnR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZGRkO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZGQ7YmFja2dyb3VuZDojZmZmfS51ay1odG1sZWRpdG9yLWNvbnRlbnQ6YWZ0ZXIsLnVrLWh0bWxlZGl0b3ItY29udGVudDpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlfS51ay1odG1sZWRpdG9yLWNvbnRlbnQ6YWZ0ZXJ7Y2xlYXI6Ym90aH0udWstaHRtbGVkaXRvci1mdWxsc2NyZWVue3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3otaW5kZXg6OTkwfS51ay1odG1sZWRpdG9yLWZ1bGxzY3JlZW4gLnVrLWh0bWxlZGl0b3ItY29udGVudHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NDBweDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MH0udWstaHRtbGVkaXRvci1mdWxsc2NyZWVuIC51ay1pY29uLWV4cGFuZDpiZWZvcmV7Y29udGVudDoiXGYwNjYifS51ay1odG1sZWRpdG9yLWNvZGUsLnVrLWh0bWxlZGl0b3ItcHJldmlld3tib3gtc2l6aW5nOmJvcmRlci1ib3h9LnVrLWh0bWxlZGl0b3ItcHJldmlld3twYWRkaW5nOjIwcHg7b3ZlcmZsb3cteTpzY3JvbGw7cG9zaXRpb246cmVsYXRpdmV9W2RhdGEtbW9kZT10YWJdW2RhdGEtYWN0aXZlLXRhYj1jb2RlXSAudWstaHRtbGVkaXRvci1wcmV2aWV3LFtkYXRhLW1vZGU9dGFiXVtkYXRhLWFjdGl2ZS10YWI9cHJldmlld10gLnVrLWh0bWxlZGl0b3ItY29kZXtkaXNwbGF5Om5vbmV9W2RhdGEtbW9kZT1zcGxpdF0gLnVrLWh0bWxlZGl0b3ItY29kZSxbZGF0YS1tb2RlPXNwbGl0XSAudWstaHRtbGVkaXRvci1wcmV2aWV3e2Zsb2F0OmxlZnQ7d2lkdGg6NTAlfVtkYXRhLW1vZGU9c3BsaXRdIC51ay1odG1sZWRpdG9yLWNvZGV7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZWVlfS51ay1odG1sZWRpdG9yLWlmcmFtZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0udWstaHRtbGVkaXRvciAuQ29kZU1pcnJvcntwYWRkaW5nOjEwcHg7Ym94LXNpemluZzpib3JkZXItYm94fQ==]]></data>
	</file>
	<file>
	  <filename>/lib/css/uikit.min.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIFVJa2l0IDIuMjQuMiB8IGh0dHA6Ly93d3cuZ2V0dWlraXQuY29tIHwgKGMpIDIwMTQgWU9PdGhlbWUgfCBNSVQgTGljZW5zZSAqLwpodG1se2ZvbnQ6NDAwIDE0cHgvMjBweCAiSGVsdmV0aWNhIE5ldWUiLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmOy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tcy10ZXh0LXNpemUtYWRqdXN0OjEwMCU7YmFja2dyb3VuZDojZmZmO2NvbG9yOiM0NDR9Ym9keXttYXJnaW46MH1he2JhY2tncm91bmQ6MCAwfWE6YWN0aXZlLGE6aG92ZXJ7b3V0bGluZTowfS51ay1saW5rLGF7Y29sb3I6IzA3ZDt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcn0udWstbGluazpob3ZlcixhOmhvdmVye2NvbG9yOiMwNTk7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX1hYmJyW3RpdGxlXXtib3JkZXItYm90dG9tOjFweCBkb3R0ZWR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6NzAwfTpub3QocHJlKT5jb2RlLDpub3QocHJlKT5rYmQsOm5vdChwcmUpPnNhbXB7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Q29uc29sYXMsbW9ub3NwYWNlLHNlcmlmO2NvbG9yOiNkMDU7d2hpdGUtc3BhY2U6bm93cmFwfWVte2NvbG9yOiNkMDV9aW5ze2JhY2tncm91bmQ6I2ZmYTtjb2xvcjojNDQ0O3RleHQtZGVjb3JhdGlvbjpub25lfW1hcmt7YmFja2dyb3VuZDojZmZhO2NvbG9yOiM0NDR9cXtmb250LXN0eWxlOml0YWxpY31zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXN1cHt0b3A6LS41ZW19c3Vie2JvdHRvbTotLjI1ZW19aW1ne21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LnVrLWltZy1wcmVzZXJ2ZSwudWstaW1nLXByZXNlcnZlIGltZ3ttYXgtd2lkdGg6bm9uZX1zdmc6bm90KDpyb290KXtvdmVyZmxvdzpoaWRkZW59YmxvY2txdW90ZSxmaWd1cmV7bWFyZ2luOjB9YWRkcmVzcyxibG9ja3F1b3RlLGRsLGZpZWxkc2V0LGZpZ3VyZSxvbCxwLHByZSx1bHttYXJnaW46MCAwIDE1cHggMH0qK2FkZHJlc3MsKitibG9ja3F1b3RlLCorZGwsKitmaWVsZHNldCwqK2ZpZ3VyZSwqK29sLCorcCwqK3ByZSwqK3Vse21hcmdpbi10b3A6MTVweH1oMSxoMixoMyxoNCxoNSxoNnttYXJnaW46MCAwIDE1cHggMDtmb250LWZhbWlseToiSGVsdmV0aWNhIE5ldWUiLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNDQ0O3RleHQtdHJhbnNmb3JtOm5vbmV9KitoMSwqK2gyLCoraDMsKitoNCwqK2g1LCoraDZ7bWFyZ2luLXRvcDoyNXB4fS51ay1oMSxoMXtmb250LXNpemU6MzZweDtsaW5lLWhlaWdodDo0MnB4fS51ay1oMixoMntmb250LXNpemU6MjRweDtsaW5lLWhlaWdodDozMHB4fS51ay1oMyxoM3tmb250LXNpemU6MThweDtsaW5lLWhlaWdodDoyNHB4fS51ay1oNCxoNHtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoyMnB4fS51ay1oNSxoNXtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMHB4fS51ay1oNixoNntmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4fW9sLHVse3BhZGRpbmctbGVmdDozMHB4fW9sPmxpPm9sLG9sPmxpPnVsLHVsPmxpPm9sLHVsPmxpPnVse21hcmdpbjowfWR0e2ZvbnQtd2VpZ2h0OjcwMH1kZHttYXJnaW4tbGVmdDowfWhye2JveC1zaXppbmc6Y29udGVudC1ib3g7aGVpZ2h0OjA7bWFyZ2luOjE1cHggMDtib3JkZXI6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjZGRkfWFkZHJlc3N7Zm9udC1zdHlsZTpub3JtYWx9YmxvY2txdW90ZXtwYWRkaW5nLWxlZnQ6MTVweDtib3JkZXItbGVmdDo1cHggc29saWQgI2RkZDtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoyMnB4O2ZvbnQtc3R5bGU6aXRhbGljfXByZXtwYWRkaW5nOjEwcHg7YmFja2dyb3VuZDojZjVmNWY1O2ZvbnQ6MTJweC8xOHB4IENvbnNvbGFzLG1vbm9zcGFjZSxzZXJpZjtjb2xvcjojNDQ0Oy1tb3otdGFiLXNpemU6NDt0YWItc2l6ZTo0O292ZXJmbG93OmF1dG99OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kOiMzOWY7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzpub25lfTo6c2VsZWN0aW9ue2JhY2tncm91bmQ6IzM5Zjtjb2xvcjojZmZmO3RleHQtc2hhZG93Om5vbmV9YXJ0aWNsZSxhc2lkZSxkZXRhaWxzLGZpZ2NhcHRpb24sZmlndXJlLGZvb3RlcixoZWFkZXIsbWFpbixuYXYsc2VjdGlvbixzdW1tYXJ5e2Rpc3BsYXk6YmxvY2t9cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9YXVkaW86bm90KFtjb250cm9sc10pe2Rpc3BsYXk6bm9uZX1baGlkZGVuXSx0ZW1wbGF0ZXtkaXNwbGF5Om5vbmV9aWZyYW1le2JvcmRlcjowfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDAwcHgpe0AtbXMtdmlld3BvcnR7d2lkdGg6ZGV2aWNlLXdpZHRofX0udWstZ3JpZHtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6ZmxleDstbXMtZmxleC13cmFwOndyYXA7LXdlYmtpdC1mbGV4LXdyYXA6d3JhcDtmbGV4LXdyYXA6d3JhcDttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS51ay1ncmlkOmFmdGVyLC51ay1ncmlkOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVufS51ay1ncmlkOmFmdGVye2NsZWFyOmJvdGh9LnVrLWdyaWQ+KnstbXMtZmxleDpub25lOy13ZWJraXQtZmxleDpub25lO2ZsZXg6bm9uZTttYXJnaW46MDtmbG9hdDpsZWZ0fS51ay1ncmlkPio+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1ncmlke21hcmdpbi1sZWZ0Oi0yNXB4fS51ay1ncmlkPip7cGFkZGluZy1sZWZ0OjI1cHh9LnVrLWdyaWQrLnVrLWdyaWQsLnVrLWdyaWQtbWFyZ2luLC51ay1ncmlkPio+LnVrLXBhbmVsKy51ay1wYW5lbHttYXJnaW4tdG9wOjI1cHh9QG1lZGlhIChtaW4td2lkdGg6MTIyMHB4KXsudWstZ3JpZHttYXJnaW4tbGVmdDotMzVweH0udWstZ3JpZD4qe3BhZGRpbmctbGVmdDozNXB4fS51ay1ncmlkKy51ay1ncmlkLC51ay1ncmlkLW1hcmdpbiwudWstZ3JpZD4qPi51ay1wYW5lbCsudWstcGFuZWx7bWFyZ2luLXRvcDozNXB4fX0udWstZ3JpZC1jb2xsYXBzZXttYXJnaW4tbGVmdDowfS51ay1ncmlkLWNvbGxhcHNlPip7cGFkZGluZy1sZWZ0OjB9LnVrLWdyaWQtY29sbGFwc2UrLnVrLWdyaWQtY29sbGFwc2UsLnVrLWdyaWQtY29sbGFwc2U+Kj4udWstcGFuZWwrLnVrLXBhbmVsLC51ay1ncmlkLWNvbGxhcHNlPi51ay1ncmlkLW1hcmdpbnttYXJnaW4tdG9wOjB9LnVrLWdyaWQtc21hbGx7bWFyZ2luLWxlZnQ6LTEwcHh9LnVrLWdyaWQtc21hbGw+KntwYWRkaW5nLWxlZnQ6MTBweH0udWstZ3JpZC1zbWFsbCsudWstZ3JpZC1zbWFsbCwudWstZ3JpZC1zbWFsbD4qPi51ay1wYW5lbCsudWstcGFuZWwsLnVrLWdyaWQtc21hbGw+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6MTBweH0udWstZ3JpZC1tZWRpdW17bWFyZ2luLWxlZnQ6LTI1cHh9LnVrLWdyaWQtbWVkaXVtPip7cGFkZGluZy1sZWZ0OjI1cHh9LnVrLWdyaWQtbWVkaXVtKy51ay1ncmlkLW1lZGl1bSwudWstZ3JpZC1tZWRpdW0+Kj4udWstcGFuZWwrLnVrLXBhbmVsLC51ay1ncmlkLW1lZGl1bT4udWstZ3JpZC1tYXJnaW57bWFyZ2luLXRvcDoyNXB4fS51ay1ncmlkLWRpdmlkZXI6bm90KDplbXB0eSl7bWFyZ2luLWxlZnQ6LTI1cHg7bWFyZ2luLXJpZ2h0Oi0yNXB4fS51ay1ncmlkLWRpdmlkZXI+KntwYWRkaW5nLWxlZnQ6MjVweDtwYWRkaW5nLXJpZ2h0OjI1cHh9LnVrLWdyaWQtZGl2aWRlcj5bY2xhc3MqPXVrLXdpZHRoLTktXTpudGgtY2hpbGQobisyKSwudWstZ3JpZC1kaXZpZGVyPltjbGFzcyo9dWstd2lkdGgtMS1dOm5vdCgudWstd2lkdGgtMS0xKTpudGgtY2hpbGQobisyKSwudWstZ3JpZC1kaXZpZGVyPltjbGFzcyo9dWstd2lkdGgtMi1dOm50aC1jaGlsZChuKzIpLC51ay1ncmlkLWRpdmlkZXI+W2NsYXNzKj11ay13aWR0aC0zLV06bnRoLWNoaWxkKG4rMiksLnVrLWdyaWQtZGl2aWRlcj5bY2xhc3MqPXVrLXdpZHRoLTQtXTpudGgtY2hpbGQobisyKSwudWstZ3JpZC1kaXZpZGVyPltjbGFzcyo9dWstd2lkdGgtNS1dOm50aC1jaGlsZChuKzIpLC51ay1ncmlkLWRpdmlkZXI+W2NsYXNzKj11ay13aWR0aC02LV06bnRoLWNoaWxkKG4rMiksLnVrLWdyaWQtZGl2aWRlcj5bY2xhc3MqPXVrLXdpZHRoLTctXTpudGgtY2hpbGQobisyKSwudWstZ3JpZC1kaXZpZGVyPltjbGFzcyo9dWstd2lkdGgtOC1dOm50aC1jaGlsZChuKzIpe2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGRkfUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsudWstZ3JpZC1kaXZpZGVyPltjbGFzcyo9dWstd2lkdGgtbWVkaXVtLV06bm90KC51ay13aWR0aC1tZWRpdW0tMS0xKTpudGgtY2hpbGQobisyKXtib3JkZXItbGVmdDoxcHggc29saWQgI2RkZH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1ncmlkLWRpdmlkZXI+W2NsYXNzKj11ay13aWR0aC1sYXJnZS1dOm5vdCgudWstd2lkdGgtbGFyZ2UtMS0xKTpudGgtY2hpbGQobisyKXtib3JkZXItbGVmdDoxcHggc29saWQgI2RkZH19QG1lZGlhIChtaW4td2lkdGg6MTIyMHB4KXsudWstZ3JpZC1kaXZpZGVyOm5vdCg6ZW1wdHkpe21hcmdpbi1sZWZ0Oi0zNXB4O21hcmdpbi1yaWdodDotMzVweH0udWstZ3JpZC1kaXZpZGVyPip7cGFkZGluZy1sZWZ0OjM1cHg7cGFkZGluZy1yaWdodDozNXB4fS51ay1ncmlkLWRpdmlkZXI6ZW1wdHl7bWFyZ2luLXRvcDozNXB4O21hcmdpbi1ib3R0b206MzVweH19LnVrLWdyaWQtZGl2aWRlcjplbXB0eXttYXJnaW4tdG9wOjI1cHg7bWFyZ2luLWJvdHRvbToyNXB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGR9LnVrLWdyaWQtbWF0Y2g+KntkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6ZmxleDstbXMtZmxleC13cmFwOndyYXA7LXdlYmtpdC1mbGV4LXdyYXA6d3JhcDtmbGV4LXdyYXA6d3JhcH0udWstZ3JpZC1tYXRjaD4qPip7LW1zLWZsZXg6bm9uZTstd2Via2l0LWZsZXg6bm9uZTtmbGV4Om5vbmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9W2NsYXNzKj11ay1ncmlkLXdpZHRoXT4qe2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxMDAlfS51ay1ncmlkLXdpZHRoLTEtMj4qe3dpZHRoOjUwJX0udWstZ3JpZC13aWR0aC0xLTM+Knt3aWR0aDozMy4zMzMlfS51ay1ncmlkLXdpZHRoLTEtND4qe3dpZHRoOjI1JX0udWstZ3JpZC13aWR0aC0xLTU+Knt3aWR0aDoyMCV9LnVrLWdyaWQtd2lkdGgtMS02Pip7d2lkdGg6MTYuNjY2JX0udWstZ3JpZC13aWR0aC0xLTEwPip7d2lkdGg6MTAlfUBtZWRpYSAobWluLXdpZHRoOjQ4MHB4KXsudWstZ3JpZC13aWR0aC1zbWFsbC0xLTI+Knt3aWR0aDo1MCV9LnVrLWdyaWQtd2lkdGgtc21hbGwtMS0zPip7d2lkdGg6MzMuMzMzJX0udWstZ3JpZC13aWR0aC1zbWFsbC0xLTQ+Knt3aWR0aDoyNSV9LnVrLWdyaWQtd2lkdGgtc21hbGwtMS01Pip7d2lkdGg6MjAlfS51ay1ncmlkLXdpZHRoLXNtYWxsLTEtNj4qe3dpZHRoOjE2LjY2NiV9LnVrLWdyaWQtd2lkdGgtc21hbGwtMS0xMD4qe3dpZHRoOjEwJX19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey51ay1ncmlkLXdpZHRoLW1lZGl1bS0xLTI+Knt3aWR0aDo1MCV9LnVrLWdyaWQtd2lkdGgtbWVkaXVtLTEtMz4qe3dpZHRoOjMzLjMzMyV9LnVrLWdyaWQtd2lkdGgtbWVkaXVtLTEtND4qe3dpZHRoOjI1JX0udWstZ3JpZC13aWR0aC1tZWRpdW0tMS01Pip7d2lkdGg6MjAlfS51ay1ncmlkLXdpZHRoLW1lZGl1bS0xLTY+Knt3aWR0aDoxNi42NjYlfS51ay1ncmlkLXdpZHRoLW1lZGl1bS0xLTEwPip7d2lkdGg6MTAlfX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWdyaWQtd2lkdGgtbGFyZ2UtMS0yPip7d2lkdGg6NTAlfS51ay1ncmlkLXdpZHRoLWxhcmdlLTEtMz4qe3dpZHRoOjMzLjMzMyV9LnVrLWdyaWQtd2lkdGgtbGFyZ2UtMS00Pip7d2lkdGg6MjUlfS51ay1ncmlkLXdpZHRoLWxhcmdlLTEtNT4qe3dpZHRoOjIwJX0udWstZ3JpZC13aWR0aC1sYXJnZS0xLTY+Knt3aWR0aDoxNi42NjYlfS51ay1ncmlkLXdpZHRoLWxhcmdlLTEtMTA+Knt3aWR0aDoxMCV9fUBtZWRpYSAobWluLXdpZHRoOjEyMjBweCl7LnVrLWdyaWQtd2lkdGgteGxhcmdlLTEtMj4qe3dpZHRoOjUwJX0udWstZ3JpZC13aWR0aC14bGFyZ2UtMS0zPip7d2lkdGg6MzMuMzMzJX0udWstZ3JpZC13aWR0aC14bGFyZ2UtMS00Pip7d2lkdGg6MjUlfS51ay1ncmlkLXdpZHRoLXhsYXJnZS0xLTU+Knt3aWR0aDoyMCV9LnVrLWdyaWQtd2lkdGgteGxhcmdlLTEtNj4qe3dpZHRoOjE2LjY2NiV9LnVrLWdyaWQtd2lkdGgteGxhcmdlLTEtMTA+Knt3aWR0aDoxMCV9fVtjbGFzcyo9dWstd2lkdGhde2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxMDAlfS51ay13aWR0aC0xLTF7d2lkdGg6MTAwJX0udWstd2lkdGgtMS0yLC51ay13aWR0aC0yLTQsLnVrLXdpZHRoLTMtNiwudWstd2lkdGgtNS0xMHt3aWR0aDo1MCV9LnVrLXdpZHRoLTEtMywudWstd2lkdGgtMi02e3dpZHRoOjMzLjMzMyV9LnVrLXdpZHRoLTItMywudWstd2lkdGgtNC02e3dpZHRoOjY2LjY2NiV9LnVrLXdpZHRoLTEtNHt3aWR0aDoyNSV9LnVrLXdpZHRoLTMtNHt3aWR0aDo3NSV9LnVrLXdpZHRoLTEtNSwudWstd2lkdGgtMi0xMHt3aWR0aDoyMCV9LnVrLXdpZHRoLTItNSwudWstd2lkdGgtNC0xMHt3aWR0aDo0MCV9LnVrLXdpZHRoLTMtNSwudWstd2lkdGgtNi0xMHt3aWR0aDo2MCV9LnVrLXdpZHRoLTQtNSwudWstd2lkdGgtOC0xMHt3aWR0aDo4MCV9LnVrLXdpZHRoLTEtNnt3aWR0aDoxNi42NjYlfS51ay13aWR0aC01LTZ7d2lkdGg6ODMuMzMzJX0udWstd2lkdGgtMS0xMHt3aWR0aDoxMCV9LnVrLXdpZHRoLTMtMTB7d2lkdGg6MzAlfS51ay13aWR0aC03LTEwe3dpZHRoOjcwJX0udWstd2lkdGgtOS0xMHt3aWR0aDo5MCV9QG1lZGlhIChtaW4td2lkdGg6NDgwcHgpey51ay13aWR0aC1zbWFsbC0xLTF7d2lkdGg6MTAwJX0udWstd2lkdGgtc21hbGwtMS0yLC51ay13aWR0aC1zbWFsbC0yLTQsLnVrLXdpZHRoLXNtYWxsLTMtNiwudWstd2lkdGgtc21hbGwtNS0xMHt3aWR0aDo1MCV9LnVrLXdpZHRoLXNtYWxsLTEtMywudWstd2lkdGgtc21hbGwtMi02e3dpZHRoOjMzLjMzMyV9LnVrLXdpZHRoLXNtYWxsLTItMywudWstd2lkdGgtc21hbGwtNC02e3dpZHRoOjY2LjY2NiV9LnVrLXdpZHRoLXNtYWxsLTEtNHt3aWR0aDoyNSV9LnVrLXdpZHRoLXNtYWxsLTMtNHt3aWR0aDo3NSV9LnVrLXdpZHRoLXNtYWxsLTEtNSwudWstd2lkdGgtc21hbGwtMi0xMHt3aWR0aDoyMCV9LnVrLXdpZHRoLXNtYWxsLTItNSwudWstd2lkdGgtc21hbGwtNC0xMHt3aWR0aDo0MCV9LnVrLXdpZHRoLXNtYWxsLTMtNSwudWstd2lkdGgtc21hbGwtNi0xMHt3aWR0aDo2MCV9LnVrLXdpZHRoLXNtYWxsLTQtNSwudWstd2lkdGgtc21hbGwtOC0xMHt3aWR0aDo4MCV9LnVrLXdpZHRoLXNtYWxsLTEtNnt3aWR0aDoxNi42NjYlfS51ay13aWR0aC1zbWFsbC01LTZ7d2lkdGg6ODMuMzMzJX0udWstd2lkdGgtc21hbGwtMS0xMHt3aWR0aDoxMCV9LnVrLXdpZHRoLXNtYWxsLTMtMTB7d2lkdGg6MzAlfS51ay13aWR0aC1zbWFsbC03LTEwe3dpZHRoOjcwJX0udWstd2lkdGgtc21hbGwtOS0xMHt3aWR0aDo5MCV9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsudWstd2lkdGgtbWVkaXVtLTEtMXt3aWR0aDoxMDAlfS51ay13aWR0aC1tZWRpdW0tMS0yLC51ay13aWR0aC1tZWRpdW0tMi00LC51ay13aWR0aC1tZWRpdW0tMy02LC51ay13aWR0aC1tZWRpdW0tNS0xMHt3aWR0aDo1MCV9LnVrLXdpZHRoLW1lZGl1bS0xLTMsLnVrLXdpZHRoLW1lZGl1bS0yLTZ7d2lkdGg6MzMuMzMzJX0udWstd2lkdGgtbWVkaXVtLTItMywudWstd2lkdGgtbWVkaXVtLTQtNnt3aWR0aDo2Ni42NjYlfS51ay13aWR0aC1tZWRpdW0tMS00e3dpZHRoOjI1JX0udWstd2lkdGgtbWVkaXVtLTMtNHt3aWR0aDo3NSV9LnVrLXdpZHRoLW1lZGl1bS0xLTUsLnVrLXdpZHRoLW1lZGl1bS0yLTEwe3dpZHRoOjIwJX0udWstd2lkdGgtbWVkaXVtLTItNSwudWstd2lkdGgtbWVkaXVtLTQtMTB7d2lkdGg6NDAlfS51ay13aWR0aC1tZWRpdW0tMy01LC51ay13aWR0aC1tZWRpdW0tNi0xMHt3aWR0aDo2MCV9LnVrLXdpZHRoLW1lZGl1bS00LTUsLnVrLXdpZHRoLW1lZGl1bS04LTEwe3dpZHRoOjgwJX0udWstd2lkdGgtbWVkaXVtLTEtNnt3aWR0aDoxNi42NjYlfS51ay13aWR0aC1tZWRpdW0tNS02e3dpZHRoOjgzLjMzMyV9LnVrLXdpZHRoLW1lZGl1bS0xLTEwe3dpZHRoOjEwJX0udWstd2lkdGgtbWVkaXVtLTMtMTB7d2lkdGg6MzAlfS51ay13aWR0aC1tZWRpdW0tNy0xMHt3aWR0aDo3MCV9LnVrLXdpZHRoLW1lZGl1bS05LTEwe3dpZHRoOjkwJX19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay13aWR0aC1sYXJnZS0xLTF7d2lkdGg6MTAwJX0udWstd2lkdGgtbGFyZ2UtMS0yLC51ay13aWR0aC1sYXJnZS0yLTQsLnVrLXdpZHRoLWxhcmdlLTMtNiwudWstd2lkdGgtbGFyZ2UtNS0xMHt3aWR0aDo1MCV9LnVrLXdpZHRoLWxhcmdlLTEtMywudWstd2lkdGgtbGFyZ2UtMi02e3dpZHRoOjMzLjMzMyV9LnVrLXdpZHRoLWxhcmdlLTItMywudWstd2lkdGgtbGFyZ2UtNC02e3dpZHRoOjY2LjY2NiV9LnVrLXdpZHRoLWxhcmdlLTEtNHt3aWR0aDoyNSV9LnVrLXdpZHRoLWxhcmdlLTMtNHt3aWR0aDo3NSV9LnVrLXdpZHRoLWxhcmdlLTEtNSwudWstd2lkdGgtbGFyZ2UtMi0xMHt3aWR0aDoyMCV9LnVrLXdpZHRoLWxhcmdlLTItNSwudWstd2lkdGgtbGFyZ2UtNC0xMHt3aWR0aDo0MCV9LnVrLXdpZHRoLWxhcmdlLTMtNSwudWstd2lkdGgtbGFyZ2UtNi0xMHt3aWR0aDo2MCV9LnVrLXdpZHRoLWxhcmdlLTQtNSwudWstd2lkdGgtbGFyZ2UtOC0xMHt3aWR0aDo4MCV9LnVrLXdpZHRoLWxhcmdlLTEtNnt3aWR0aDoxNi42NjYlfS51ay13aWR0aC1sYXJnZS01LTZ7d2lkdGg6ODMuMzMzJX0udWstd2lkdGgtbGFyZ2UtMS0xMHt3aWR0aDoxMCV9LnVrLXdpZHRoLWxhcmdlLTMtMTB7d2lkdGg6MzAlfS51ay13aWR0aC1sYXJnZS03LTEwe3dpZHRoOjcwJX0udWstd2lkdGgtbGFyZ2UtOS0xMHt3aWR0aDo5MCV9fUBtZWRpYSAobWluLXdpZHRoOjEyMjBweCl7LnVrLXdpZHRoLXhsYXJnZS0xLTF7d2lkdGg6MTAwJX0udWstd2lkdGgteGxhcmdlLTEtMiwudWstd2lkdGgteGxhcmdlLTItNCwudWstd2lkdGgteGxhcmdlLTMtNiwudWstd2lkdGgteGxhcmdlLTUtMTB7d2lkdGg6NTAlfS51ay13aWR0aC14bGFyZ2UtMS0zLC51ay13aWR0aC14bGFyZ2UtMi02e3dpZHRoOjMzLjMzMyV9LnVrLXdpZHRoLXhsYXJnZS0yLTMsLnVrLXdpZHRoLXhsYXJnZS00LTZ7d2lkdGg6NjYuNjY2JX0udWstd2lkdGgteGxhcmdlLTEtNHt3aWR0aDoyNSV9LnVrLXdpZHRoLXhsYXJnZS0zLTR7d2lkdGg6NzUlfS51ay13aWR0aC14bGFyZ2UtMS01LC51ay13aWR0aC14bGFyZ2UtMi0xMHt3aWR0aDoyMCV9LnVrLXdpZHRoLXhsYXJnZS0yLTUsLnVrLXdpZHRoLXhsYXJnZS00LTEwe3dpZHRoOjQwJX0udWstd2lkdGgteGxhcmdlLTMtNSwudWstd2lkdGgteGxhcmdlLTYtMTB7d2lkdGg6NjAlfS51ay13aWR0aC14bGFyZ2UtNC01LC51ay13aWR0aC14bGFyZ2UtOC0xMHt3aWR0aDo4MCV9LnVrLXdpZHRoLXhsYXJnZS0xLTZ7d2lkdGg6MTYuNjY2JX0udWstd2lkdGgteGxhcmdlLTUtNnt3aWR0aDo4My4zMzMlfS51ay13aWR0aC14bGFyZ2UtMS0xMHt3aWR0aDoxMCV9LnVrLXdpZHRoLXhsYXJnZS0zLTEwe3dpZHRoOjMwJX0udWstd2lkdGgteGxhcmdlLTctMTB7d2lkdGg6NzAlfS51ay13aWR0aC14bGFyZ2UtOS0xMHt3aWR0aDo5MCV9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2xhc3MqPXVrLXB1c2gtXSxbY2xhc3MqPXVrLXB1bGwtXXtwb3NpdGlvbjpyZWxhdGl2ZX0udWstcHVzaC0xLTIsLnVrLXB1c2gtMi00LC51ay1wdXNoLTMtNiwudWstcHVzaC01LTEwe2xlZnQ6NTAlfS51ay1wdXNoLTEtMywudWstcHVzaC0yLTZ7bGVmdDozMy4zMzMlfS51ay1wdXNoLTItMywudWstcHVzaC00LTZ7bGVmdDo2Ni42NjYlfS51ay1wdXNoLTEtNHtsZWZ0OjI1JX0udWstcHVzaC0zLTR7bGVmdDo3NSV9LnVrLXB1c2gtMS01LC51ay1wdXNoLTItMTB7bGVmdDoyMCV9LnVrLXB1c2gtMi01LC51ay1wdXNoLTQtMTB7bGVmdDo0MCV9LnVrLXB1c2gtMy01LC51ay1wdXNoLTYtMTB7bGVmdDo2MCV9LnVrLXB1c2gtNC01LC51ay1wdXNoLTgtMTB7bGVmdDo4MCV9LnVrLXB1c2gtMS02e2xlZnQ6MTYuNjY2JX0udWstcHVzaC01LTZ7bGVmdDo4My4zMzMlfS51ay1wdXNoLTEtMTB7bGVmdDoxMCV9LnVrLXB1c2gtMy0xMHtsZWZ0OjMwJX0udWstcHVzaC03LTEwe2xlZnQ6NzAlfS51ay1wdXNoLTktMTB7bGVmdDo5MCV9LnVrLXB1bGwtMS0yLC51ay1wdWxsLTItNCwudWstcHVsbC0zLTYsLnVrLXB1bGwtNS0xMHtsZWZ0Oi01MCV9LnVrLXB1bGwtMS0zLC51ay1wdWxsLTItNntsZWZ0Oi0zMy4zMzMlfS51ay1wdWxsLTItMywudWstcHVsbC00LTZ7bGVmdDotNjYuNjY2JX0udWstcHVsbC0xLTR7bGVmdDotMjUlfS51ay1wdWxsLTMtNHtsZWZ0Oi03NSV9LnVrLXB1bGwtMS01LC51ay1wdWxsLTItMTB7bGVmdDotMjAlfS51ay1wdWxsLTItNSwudWstcHVsbC00LTEwe2xlZnQ6LTQwJX0udWstcHVsbC0zLTUsLnVrLXB1bGwtNi0xMHtsZWZ0Oi02MCV9LnVrLXB1bGwtNC01LC51ay1wdWxsLTgtMTB7bGVmdDotODAlfS51ay1wdWxsLTEtNntsZWZ0Oi0xNi42NjYlfS51ay1wdWxsLTUtNntsZWZ0Oi04My4zMzMlfS51ay1wdWxsLTEtMTB7bGVmdDotMTAlfS51ay1wdWxsLTMtMTB7bGVmdDotMzAlfS51ay1wdWxsLTctMTB7bGVmdDotNzAlfS51ay1wdWxsLTktMTB7bGVmdDotOTAlfX0udWstcGFuZWx7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZX0udWstcGFuZWwsLnVrLXBhbmVsOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lfS51ay1wYW5lbDphZnRlciwudWstcGFuZWw6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTp0YWJsZX0udWstcGFuZWw6YWZ0ZXJ7Y2xlYXI6Ym90aH0udWstcGFuZWw+Om5vdCgudWstcGFuZWwtdGl0bGUpOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1wYW5lbC10aXRsZXttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbToxNXB4O2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC13ZWlnaHQ6NDAwO3RleHQtdHJhbnNmb3JtOm5vbmU7Y29sb3I6IzQ0NH0udWstcGFuZWwtYmFkZ2V7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDt6LWluZGV4OjF9LnVrLXBhbmVsLXRlYXNlcnttYXJnaW4tYm90dG9tOjE1cHh9LnVrLXBhbmVsLWJvZHl7cGFkZGluZzoxNXB4fS51ay1wYW5lbC1ib3h7cGFkZGluZzoxNXB4O2JhY2tncm91bmQ6I2Y1ZjVmNTtjb2xvcjojNDQ0fS51ay1wYW5lbC1ib3gtaG92ZXI6aG92ZXJ7Y29sb3I6IzQ0NH0udWstcGFuZWwtYm94IC51ay1wYW5lbC10aXRsZXtjb2xvcjojNDQ0fS51ay1wYW5lbC1ib3ggLnVrLXBhbmVsLWJhZGdle3RvcDoxMHB4O3JpZ2h0OjEwcHh9LnVrLXBhbmVsLWJveD4udWstcGFuZWwtdGVhc2Vye21hcmdpbi10b3A6LTE1cHg7bWFyZ2luLWxlZnQ6LTE1cHg7bWFyZ2luLXJpZ2h0Oi0xNXB4fS51ay1wYW5lbC1ib3g+LnVrLW5hdi1zaWRle21hcmdpbjowIC0xNXB4fS51ay1wYW5lbC1ib3gtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNlYmY3ZmQ7Y29sb3I6IzJkNzA5MX0udWstcGFuZWwtYm94LXByaW1hcnktaG92ZXI6aG92ZXJ7Y29sb3I6IzJkNzA5MX0udWstcGFuZWwtYm94LXByaW1hcnkgLnVrLXBhbmVsLXRpdGxle2NvbG9yOiMyZDcwOTF9LnVrLXBhbmVsLWJveC1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjojZWVlO2NvbG9yOiM0NDR9LnVrLXBhbmVsLWJveC1zZWNvbmRhcnktaG92ZXI6aG92ZXJ7Y29sb3I6IzQ0NH0udWstcGFuZWwtYm94LXNlY29uZGFyeSAudWstcGFuZWwtdGl0bGV7Y29sb3I6IzQ0NH0udWstcGFuZWwtaG92ZXJ7cGFkZGluZzoxNXB4O2NvbG9yOiM0NDR9LnVrLXBhbmVsLWhvdmVyOmhvdmVye2JhY2tncm91bmQ6I2Y1ZjVmNTtjb2xvcjojNDQ0fS51ay1wYW5lbC1ob3ZlciAudWstcGFuZWwtYmFkZ2V7dG9wOjEwcHg7cmlnaHQ6MTBweH0udWstcGFuZWwtaG92ZXI+LnVrLXBhbmVsLXRlYXNlcnttYXJnaW4tdG9wOi0xNXB4O21hcmdpbi1sZWZ0Oi0xNXB4O21hcmdpbi1yaWdodDotMTVweH0udWstcGFuZWwtaGVhZGVyIC51ay1wYW5lbC10aXRsZXtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZGQ7Y29sb3I6IzQ0NH0udWstcGFuZWwtc3BhY2V7cGFkZGluZzozMHB4fS51ay1wYW5lbC1zcGFjZSAudWstcGFuZWwtYmFkZ2V7dG9wOjMwcHg7cmlnaHQ6MzBweH0udWstcGFuZWwrLnVrLXBhbmVsLWRpdmlkZXJ7bWFyZ2luLXRvcDo1MHB4IWltcG9ydGFudH0udWstcGFuZWwrLnVrLXBhbmVsLWRpdmlkZXI6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTI1cHg7bGVmdDowO3JpZ2h0OjA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZH1AbWVkaWEgKG1pbi13aWR0aDoxMjIwcHgpey51ay1wYW5lbCsudWstcGFuZWwtZGl2aWRlcnttYXJnaW4tdG9wOjcwcHghaW1wb3J0YW50fS51ay1wYW5lbCsudWstcGFuZWwtZGl2aWRlcjpiZWZvcmV7dG9wOi0zNXB4fX0udWstYmxvY2t7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctdG9wOjIwcHg7cGFkZGluZy1ib3R0b206MjBweH1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LnVrLWJsb2Nre3BhZGRpbmctdG9wOjUwcHg7cGFkZGluZy1ib3R0b206NTBweH19LnVrLWJsb2NrOmFmdGVyLC51ay1ibG9jazpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlfS51ay1ibG9jazphZnRlcntjbGVhcjpib3RofS51ay1ibG9jaz46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLWJsb2NrLWxhcmdle3BhZGRpbmctdG9wOjIwcHg7cGFkZGluZy1ib3R0b206MjBweH1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LnVrLWJsb2NrLWxhcmdle3BhZGRpbmctdG9wOjUwcHg7cGFkZGluZy1ib3R0b206NTBweH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1ibG9jay1sYXJnZXtwYWRkaW5nLXRvcDoxMDBweDtwYWRkaW5nLWJvdHRvbToxMDBweH19LnVrLWJsb2NrLWRlZmF1bHR7YmFja2dyb3VuZDojZmZmfS51ay1ibG9jay1tdXRlZHtiYWNrZ3JvdW5kOiNmOWY5Zjl9LnVrLWJsb2NrLXByaW1hcnl7YmFja2dyb3VuZDojMDBhOGU2fS51ay1ibG9jay1zZWNvbmRhcnl7YmFja2dyb3VuZDojMjIyfS51ay1ibG9jay1kZWZhdWx0Ky51ay1ibG9jay1kZWZhdWx0LC51ay1ibG9jay1tdXRlZCsudWstYmxvY2stbXV0ZWQsLnVrLWJsb2NrLXByaW1hcnkrLnVrLWJsb2NrLXByaW1hcnksLnVrLWJsb2NrLXNlY29uZGFyeSsudWstYmxvY2stc2Vjb25kYXJ5e3BhZGRpbmctdG9wOjB9LnVrLWFydGljbGU6YWZ0ZXIsLnVrLWFydGljbGU6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTp0YWJsZX0udWstYXJ0aWNsZTphZnRlcntjbGVhcjpib3RofS51ay1hcnRpY2xlPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstYXJ0aWNsZSsudWstYXJ0aWNsZXttYXJnaW4tdG9wOjI1cHh9LnVrLWFydGljbGUtdGl0bGV7Zm9udC1zaXplOjM2cHg7bGluZS1oZWlnaHQ6NDJweDtmb250LXdlaWdodDo0MDA7dGV4dC10cmFuc2Zvcm06bm9uZX0udWstYXJ0aWNsZS10aXRsZSBhe2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVrLWFydGljbGUtbWV0YXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4O2NvbG9yOiM5OTl9LnVrLWFydGljbGUtbGVhZHtjb2xvcjojNDQ0O2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC13ZWlnaHQ6NDAwfS51ay1hcnRpY2xlLWRpdmlkZXJ7bWFyZ2luLWJvdHRvbToyNXB4O2JvcmRlci1jb2xvcjojZGRkfSorLnVrLWFydGljbGUtZGl2aWRlcnttYXJnaW4tdG9wOjI1cHh9LnVrLWNvbW1lbnQtaGVhZGVye21hcmdpbi1ib3R0b206MTVweH0udWstY29tbWVudC1oZWFkZXI6YWZ0ZXIsLnVrLWNvbW1lbnQtaGVhZGVyOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6dGFibGV9LnVrLWNvbW1lbnQtaGVhZGVyOmFmdGVye2NsZWFyOmJvdGh9LnVrLWNvbW1lbnQtYXZhdGFye21hcmdpbi1yaWdodDoxNXB4O2Zsb2F0OmxlZnR9LnVrLWNvbW1lbnQtdGl0bGV7bWFyZ2luOjVweCAwIDAgMDtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoyMnB4fS51ay1jb21tZW50LW1ldGF7bWFyZ2luOjJweCAwIDAgMDtmb250LXNpemU6MTFweDtsaW5lLWhlaWdodDoxNnB4O2NvbG9yOiM5OTl9LnVrLWNvbW1lbnQtYm9keT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLWNvbW1lbnQtbGlzdHtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS51ay1jb21tZW50LWxpc3QgLnVrLWNvbW1lbnQrdWx7bWFyZ2luOjE1cHggMCAwIDA7bGlzdC1zdHlsZTpub25lfS51ay1jb21tZW50LWxpc3QgLnVrLWNvbW1lbnQrdWw+bGk6bnRoLWNoaWxkKG4rMiksLnVrLWNvbW1lbnQtbGlzdD5saTpudGgtY2hpbGQobisyKXttYXJnaW4tdG9wOjE1cHh9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey51ay1jb21tZW50LWxpc3QgLnVrLWNvbW1lbnQrdWx7cGFkZGluZy1sZWZ0OjEwMHB4fX0udWstY292ZXItYmFja2dyb3VuZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJSA1MCU7YmFja2dyb3VuZC1zaXplOmNvdmVyO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0udWstY292ZXJ7b3ZlcmZsb3c6aGlkZGVufS51ay1jb3Zlci1vYmplY3R7d2lkdGg6YXV0bztoZWlnaHQ6YXV0bzttaW4td2lkdGg6MTAwJTttaW4taGVpZ2h0OjEwMCU7bWF4LXdpZHRoOm5vbmU7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1MCU7dG9wOjUwJTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSl9W2RhdGEtdWstY292ZXJde3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTAlO3RvcDo1MCU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpfS51ay1uYXYsLnVrLW5hdiB1bHttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS51ay1uYXYgbGk+YXtkaXNwbGF5OmJsb2NrO3RleHQtZGVjb3JhdGlvbjpub25lfS51ay1uYXY+bGk+YXtwYWRkaW5nOjVweCAxNXB4fS51ay1uYXYgdWx7cGFkZGluZy1sZWZ0OjE1cHh9LnVrLW5hdiB1bCBhe3BhZGRpbmc6MnB4IDB9LnVrLW5hdiBsaT5hPmRpdntmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4fS51ay1uYXYtaGVhZGVye3BhZGRpbmc6NXB4IDE1cHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTJweH0udWstbmF2LWhlYWRlcjpub3QoOmZpcnN0LWNoaWxkKXttYXJnaW4tdG9wOjE1cHh9LnVrLW5hdi1kaXZpZGVye21hcmdpbjo5cHggMTVweH11bC51ay1uYXYtc3Vie3BhZGRpbmc6NXB4IDAgNXB4IDE1cHh9LnVrLW5hdi1wYXJlbnQtaWNvbj4udWstcGFyZW50PmE6YWZ0ZXJ7Y29udGVudDoiXGYxMDQiO3dpZHRoOjIwcHg7bWFyZ2luLXJpZ2h0Oi0xMHB4O2Zsb2F0OnJpZ2h0O2ZvbnQtZmFtaWx5OkZvbnRBd2Vzb21lO3RleHQtYWxpZ246Y2VudGVyfS51ay1uYXYtcGFyZW50LWljb24+LnVrLXBhcmVudC51ay1vcGVuPmE6YWZ0ZXJ7Y29udGVudDoiXGYxMDcifS51ay1uYXYtc2lkZT5saT5he2NvbG9yOiM0NDR9LnVrLW5hdi1zaWRlPmxpPmE6Zm9jdXMsLnVrLW5hdi1zaWRlPmxpPmE6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNSk7Y29sb3I6IzQ0NDtvdXRsaW5lOjB9LnVrLW5hdi1zaWRlPmxpLnVrLWFjdGl2ZT5he2JhY2tncm91bmQ6IzAwYThlNjtjb2xvcjojZmZmfS51ay1uYXYtc2lkZSAudWstbmF2LWhlYWRlcntjb2xvcjojNDQ0fS51ay1uYXYtc2lkZSAudWstbmF2LWRpdmlkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZH0udWstbmF2LXNpZGUgdWwgYXtjb2xvcjojMDdkfS51ay1uYXYtc2lkZSB1bCBhOmhvdmVye2NvbG9yOiMwNTl9LnVrLW5hdi1kcm9wZG93bj5saT5he2NvbG9yOiM0NDR9LnVrLW5hdi1kcm9wZG93bj5saT5hOmZvY3VzLC51ay1uYXYtZHJvcGRvd24+bGk+YTpob3ZlcntiYWNrZ3JvdW5kOiMwMGE4ZTY7Y29sb3I6I2ZmZjtvdXRsaW5lOjB9LnVrLW5hdi1kcm9wZG93biAudWstbmF2LWhlYWRlcntjb2xvcjojOTk5fS51ay1uYXYtZHJvcGRvd24gLnVrLW5hdi1kaXZpZGVye2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGR9LnVrLW5hdi1kcm9wZG93biB1bCBhe2NvbG9yOiMwN2R9LnVrLW5hdi1kcm9wZG93biB1bCBhOmhvdmVye2NvbG9yOiMwNTl9LnVrLW5hdi1uYXZiYXI+bGk+YXtjb2xvcjojNDQ0fS51ay1uYXYtbmF2YmFyPmxpPmE6Zm9jdXMsLnVrLW5hdi1uYXZiYXI+bGk+YTpob3ZlcntiYWNrZ3JvdW5kOiMwMGE4ZTY7Y29sb3I6I2ZmZjtvdXRsaW5lOjB9LnVrLW5hdi1uYXZiYXIgLnVrLW5hdi1oZWFkZXJ7Y29sb3I6Izk5OX0udWstbmF2LW5hdmJhciAudWstbmF2LWRpdmlkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZH0udWstbmF2LW5hdmJhciB1bCBhe2NvbG9yOiMwN2R9LnVrLW5hdi1uYXZiYXIgdWwgYTpob3Zlcntjb2xvcjojMDU5fS51ay1uYXYtb2ZmY2FudmFzPmxpPmF7Y29sb3I6I2NjYztwYWRkaW5nOjEwcHggMTVweH0udWstbmF2LW9mZmNhbnZhcz4udWstb3Blbj5hLGh0bWw6bm90KC51ay10b3VjaCkgLnVrLW5hdi1vZmZjYW52YXM+bGk+YTpmb2N1cyxodG1sOm5vdCgudWstdG91Y2gpIC51ay1uYXYtb2ZmY2FudmFzPmxpPmE6aG92ZXJ7YmFja2dyb3VuZDojNDA0MDQwO2NvbG9yOiNmZmY7b3V0bGluZTowfWh0bWwgLnVrLW5hdi51ay1uYXYtb2ZmY2FudmFzPmxpLnVrLWFjdGl2ZT5he2JhY2tncm91bmQ6IzFhMWExYTtjb2xvcjojZmZmfS51ay1uYXYtb2ZmY2FudmFzIC51ay1uYXYtaGVhZGVye2NvbG9yOiM3Nzd9LnVrLW5hdi1vZmZjYW52YXMgLnVrLW5hdi1kaXZpZGVye2JvcmRlci10b3A6MXB4IHNvbGlkICMxYTFhMWF9LnVrLW5hdi1vZmZjYW52YXMgdWwgYXtjb2xvcjojY2NjfWh0bWw6bm90KC51ay10b3VjaCkgLnVrLW5hdi1vZmZjYW52YXMgdWwgYTpob3Zlcntjb2xvcjojZmZmfS51ay1uYXZiYXJ7YmFja2dyb3VuZDojZWVlO2NvbG9yOiM0NDR9LnVrLW5hdmJhcjphZnRlciwudWstbmF2YmFyOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6dGFibGV9LnVrLW5hdmJhcjphZnRlcntjbGVhcjpib3RofS51ay1uYXZiYXItbmF2e21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmU7ZmxvYXQ6bGVmdH0udWstbmF2YmFyLW5hdj5saXtmbG9hdDpsZWZ0O3Bvc2l0aW9uOnJlbGF0aXZlfS51ay1uYXZiYXItbmF2PmxpPmF7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7dGV4dC1kZWNvcmF0aW9uOm5vbmU7aGVpZ2h0OjQwcHg7cGFkZGluZzowIDE1cHg7bGluZS1oZWlnaHQ6NDBweDtjb2xvcjojNDQ0O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtZmFtaWx5OiJIZWx2ZXRpY2EgTmV1ZSIsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC13ZWlnaHQ6NDAwfS51ay1uYXZiYXItbmF2PmxpPmFbaHJlZj0nIydde2N1cnNvcjp0ZXh0fS51ay1uYXZiYXItbmF2PmxpLnVrLW9wZW4+YSwudWstbmF2YmFyLW5hdj5saTpob3Zlcj5hLC51ay1uYXZiYXItbmF2PmxpPmE6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2NvbG9yOiM0NDQ7b3V0bGluZTowfS51ay1uYXZiYXItbmF2PmxpPmE6YWN0aXZle2JhY2tncm91bmQtY29sb3I6I2RkZDtjb2xvcjojNDQ0fS51ay1uYXZiYXItbmF2PmxpLnVrLWFjdGl2ZT5he2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtjb2xvcjojNDQ0fS51ay1uYXZiYXItbmF2IC51ay1uYXZiYXItbmF2LXN1YnRpdGxle2xpbmUtaGVpZ2h0OjI4cHh9LnVrLW5hdmJhci1uYXYtc3VidGl0bGU+ZGl2e21hcmdpbi10b3A6LTZweDtmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMnB4fS51ay1uYXZiYXItYnJhbmQsLnVrLW5hdmJhci1jb250ZW50LC51ay1uYXZiYXItdG9nZ2xle2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO2hlaWdodDo0MHB4O3BhZGRpbmc6MCAxNXB4O2Zsb2F0OmxlZnR9LnVrLW5hdmJhci1icmFuZDpiZWZvcmUsLnVrLW5hdmJhci1jb250ZW50OmJlZm9yZSwudWstbmF2YmFyLXRvZ2dsZTpiZWZvcmV7Y29udGVudDonJztkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LnVrLW5hdmJhci1jb250ZW50Ky51ay1uYXZiYXItY29udGVudDpub3QoLnVrLW5hdmJhci1jZW50ZXIpe3BhZGRpbmctbGVmdDowfS51ay1uYXZiYXItY29udGVudD5hOm5vdChbY2xhc3NdKXtjb2xvcjojMDdkfS51ay1uYXZiYXItY29udGVudD5hOm5vdChbY2xhc3NdKTpob3Zlcntjb2xvcjojMDU5fS51ay1uYXZiYXItYnJhbmR7Zm9udC1zaXplOjE4cHg7Y29sb3I6IzQ0NDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstbmF2YmFyLWJyYW5kOmZvY3VzLC51ay1uYXZiYXItYnJhbmQ6aG92ZXJ7Y29sb3I6IzQ0NDt0ZXh0LWRlY29yYXRpb246bm9uZTtvdXRsaW5lOjB9LnVrLW5hdmJhci10b2dnbGV7Zm9udC1zaXplOjE4cHg7Y29sb3I6IzQ0NDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstbmF2YmFyLXRvZ2dsZTpmb2N1cywudWstbmF2YmFyLXRvZ2dsZTpob3Zlcntjb2xvcjojNDQ0O3RleHQtZGVjb3JhdGlvbjpub25lO291dGxpbmU6MH0udWstbmF2YmFyLXRvZ2dsZTphZnRlcntjb250ZW50OiJcZjBjOSI7Zm9udC1mYW1pbHk6Rm9udEF3ZXNvbWU7dmVydGljYWwtYWxpZ246bWlkZGxlfS51ay1uYXZiYXItdG9nZ2xlLWFsdDphZnRlcntjb250ZW50OiJcZjAwMiJ9LnVrLW5hdmJhci1jZW50ZXJ7ZmxvYXQ6bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjttYXgtd2lkdGg6NTAlO21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG99LnVrLW5hdmJhci1mbGlwe2Zsb2F0OnJpZ2h0fS51ay1zdWJuYXZ7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5OmZsZXg7LW1zLWZsZXgtd3JhcDp3cmFwOy13ZWJraXQtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXA7bWFyZ2luLWxlZnQ6LTEwcHg7bWFyZ2luLXRvcDotMTBweDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS51ay1zdWJuYXY+KnstbXMtZmxleDpub25lOy13ZWJraXQtZmxleDpub25lO2ZsZXg6bm9uZTtwYWRkaW5nLWxlZnQ6MTBweDttYXJnaW4tdG9wOjEwcHg7cG9zaXRpb246cmVsYXRpdmV9LnVrLXN1Ym5hdjphZnRlciwudWstc3VibmF2OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVufS51ay1zdWJuYXY6YWZ0ZXJ7Y2xlYXI6Ym90aH0udWstc3VibmF2Pip7ZmxvYXQ6bGVmdH0udWstc3VibmF2Pio+KntkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjojNDQ0fS51ay1zdWJuYXY+Kj46Zm9jdXMsLnVrLXN1Ym5hdj4qPjpob3Zlcntjb2xvcjojMDdkO3RleHQtZGVjb3JhdGlvbjpub25lfS51ay1zdWJuYXY+LnVrLWFjdGl2ZT4qe2NvbG9yOiMwN2R9LnVrLXN1Ym5hdi1saW5lPjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTBweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LnVrLXN1Ym5hdi1saW5lPjpudGgtY2hpbGQobisyKTpiZWZvcmV7bWFyZ2luLXJpZ2h0OjEwcHg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNkZGR9LnVrLXN1Ym5hdi1waWxsPio+KntwYWRkaW5nOjNweCA5cHh9LnVrLXN1Ym5hdi1waWxsPio+OmZvY3VzLC51ay1zdWJuYXYtcGlsbD4qPjpob3ZlcntiYWNrZ3JvdW5kOiNlZWU7Y29sb3I6IzQ0NDt0ZXh0LWRlY29yYXRpb246bm9uZTtvdXRsaW5lOjB9LnVrLXN1Ym5hdi1waWxsPi51ay1hY3RpdmU+KntiYWNrZ3JvdW5kOiMwMGE4ZTY7Y29sb3I6I2ZmZn0udWstc3VibmF2Pi51ay1kaXNhYmxlZD4qe2JhY2tncm91bmQ6MCAwO2NvbG9yOiM5OTk7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnRleHR9LnVrLWJyZWFkY3J1bWJ7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZTtmb250LXNpemU6MH0udWstYnJlYWRjcnVtYj5saXtmb250LXNpemU6MXJlbTt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnVrLWJyZWFkY3J1bWI+bGksLnVrLWJyZWFkY3J1bWI+bGk+YSwudWstYnJlYWRjcnVtYj5saT5zcGFue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS51ay1icmVhZGNydW1iPmxpOm50aC1jaGlsZChuKzIpOmJlZm9yZXtjb250ZW50OiIvIjtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MCA4cHh9LnVrLWJyZWFkY3J1bWI+bGk6bm90KC51ay1hY3RpdmUpPnNwYW57Y29sb3I6Izk5OX0udWstcGFnaW5hdGlvbntwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZTowfS51ay1wYWdpbmF0aW9uOmFmdGVyLC51ay1wYWdpbmF0aW9uOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6dGFibGV9LnVrLXBhZ2luYXRpb246YWZ0ZXJ7Y2xlYXI6Ym90aH0udWstcGFnaW5hdGlvbj5saXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MXJlbTt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnVrLXBhZ2luYXRpb24+bGk6bnRoLWNoaWxkKG4rMil7bWFyZ2luLWxlZnQ6NXB4fS51ay1wYWdpbmF0aW9uPmxpPmEsLnVrLXBhZ2luYXRpb24+bGk+c3BhbntkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6MTZweDtwYWRkaW5nOjNweCA1cHg7bGluZS1oZWlnaHQ6MjBweDt0ZXh0LWRlY29yYXRpb246bm9uZTtib3gtc2l6aW5nOmNvbnRlbnQtYm94O3RleHQtYWxpZ246Y2VudGVyfS51ay1wYWdpbmF0aW9uPmxpPmF7YmFja2dyb3VuZDojZWVlO2NvbG9yOiM0NDR9LnVrLXBhZ2luYXRpb24+bGk+YTpmb2N1cywudWstcGFnaW5hdGlvbj5saT5hOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtjb2xvcjojNDQ0O291dGxpbmU6MH0udWstcGFnaW5hdGlvbj5saT5hOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNkZGQ7Y29sb3I6IzQ0NH0udWstcGFnaW5hdGlvbj4udWstYWN0aXZlPnNwYW57YmFja2dyb3VuZDojMDBhOGU2O2NvbG9yOiNmZmZ9LnVrLXBhZ2luYXRpb24+LnVrLWRpc2FibGVkPnNwYW57YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2NvbG9yOiM5OTl9LnVrLXBhZ2luYXRpb24tcHJldmlvdXN7ZmxvYXQ6bGVmdH0udWstcGFnaW5hdGlvbi1uZXh0e2Zsb2F0OnJpZ2h0fS51ay1wYWdpbmF0aW9uLWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS51ay1wYWdpbmF0aW9uLXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnVrLXRhYnttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZGR9LnVrLXRhYjphZnRlciwudWstdGFiOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6dGFibGV9LnVrLXRhYjphZnRlcntjbGVhcjpib3RofS51ay10YWI+bGl7bWFyZ2luLWJvdHRvbTotMXB4O2Zsb2F0OmxlZnQ7cG9zaXRpb246cmVsYXRpdmV9LnVrLXRhYj5saT5he2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo4cHggMTJweCA4cHggMTJweDtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b20td2lkdGg6MDtjb2xvcjojMDdkO3RleHQtZGVjb3JhdGlvbjpub25lfS51ay10YWI+bGk6bnRoLWNoaWxkKG4rMik+YXttYXJnaW4tbGVmdDo1cHh9LnVrLXRhYj5saS51ay1vcGVuPmEsLnVrLXRhYj5saT5hOmZvY3VzLC51ay10YWI+bGk+YTpob3Zlcntib3JkZXItY29sb3I6I2Y1ZjVmNTtiYWNrZ3JvdW5kOiNmNWY1ZjU7Y29sb3I6IzA1OTtvdXRsaW5lOjB9LnVrLXRhYj5saS51ay1vcGVuOm5vdCgudWstYWN0aXZlKT5hLC51ay10YWI+bGk6bm90KC51ay1hY3RpdmUpPmE6Zm9jdXMsLnVrLXRhYj5saTpub3QoLnVrLWFjdGl2ZSk+YTpob3ZlcnttYXJnaW4tYm90dG9tOjFweDtwYWRkaW5nLWJvdHRvbTo3cHh9LnVrLXRhYj5saS51ay1hY3RpdmU+YXtib3JkZXItY29sb3I6I2RkZDtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojNDQ0fS51ay10YWI+bGkudWstZGlzYWJsZWQ+YXtjb2xvcjojOTk5O2N1cnNvcjp0ZXh0fS51ay10YWI+bGkudWstZGlzYWJsZWQudWstYWN0aXZlPmEsLnVrLXRhYj5saS51ay1kaXNhYmxlZD5hOmZvY3VzLC51ay10YWI+bGkudWstZGlzYWJsZWQ+YTpob3ZlcntiYWNrZ3JvdW5kOjAgMDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9LnVrLXRhYi1mbGlwPmxpe2Zsb2F0OnJpZ2h0fS51ay10YWItZmxpcD5saTpudGgtY2hpbGQobisyKT5he21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjVweH0udWstdGFiPmxpLnVrLXRhYi1yZXNwb25zaXZlPmF7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MH0udWstdGFiLXJlc3BvbnNpdmU+YTpiZWZvcmV7Y29udGVudDoiXGYwYzlcMDBhMCI7Zm9udC1mYW1pbHk6Rm9udEF3ZXNvbWV9LnVrLXRhYi1jZW50ZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZH0udWstdGFiLWNlbnRlci1ib3R0b217Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGR9LnVrLXRhYi1jZW50ZXI6YWZ0ZXIsLnVrLXRhYi1jZW50ZXI6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTp0YWJsZX0udWstdGFiLWNlbnRlcjphZnRlcntjbGVhcjpib3RofS51ay10YWItY2VudGVyIC51ay10YWJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTAlO2JvcmRlcjpub25lO2Zsb2F0OnJpZ2h0fS51ay10YWItY2VudGVyIC51ay10YWI+bGl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6LTUwJX0udWstdGFiLWNlbnRlciAudWstdGFiPmxpPmF7dGV4dC1hbGlnbjpjZW50ZXJ9LnVrLXRhYi1ib3R0b217Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDtib3JkZXItYm90dG9tOm5vbmV9LnVrLXRhYi1ib3R0b20+bGl7bWFyZ2luLXRvcDotMXB4O21hcmdpbi1ib3R0b206MH0udWstdGFiLWJvdHRvbT5saT5he3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHg7Ym9yZGVyLXRvcC13aWR0aDowfS51ay10YWItYm90dG9tPmxpLnVrLW9wZW46bm90KC51ay1hY3RpdmUpPmEsLnVrLXRhYi1ib3R0b20+bGk6bm90KC51ay1hY3RpdmUpPmE6Zm9jdXMsLnVrLXRhYi1ib3R0b20+bGk6bm90KC51ay1hY3RpdmUpPmE6aG92ZXJ7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MXB4O3BhZGRpbmctYm90dG9tOjhweDtwYWRkaW5nLXRvcDo3cHh9LnVrLXRhYi1ib3R0b20+bGkudWstYWN0aXZlPmF7Ym9yZGVyLXRvcC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tLWNvbG9yOiNkZGR9LnVrLXRhYi1ncmlke21hcmdpbi1sZWZ0Oi01cHg7Ym9yZGVyLWJvdHRvbTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MH0udWstdGFiLWdyaWQ6YmVmb3Jle2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1cHg7cmlnaHQ6MDtib3R0b206LTFweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZGRkO3otaW5kZXg6LTF9LnVrLXRhYi1ncmlkPmxpOmZpcnN0LWNoaWxkPmF7bWFyZ2luLWxlZnQ6NXB4fS51ay10YWItZ3JpZD5saT5he3RleHQtYWxpZ246Y2VudGVyfS51ay10YWItZ3JpZC51ay10YWItYm90dG9te2JvcmRlci10b3A6bm9uZX0udWstdGFiLWdyaWQudWstdGFiLWJvdHRvbTpiZWZvcmV7dG9wOi0xcHg7Ym90dG9tOmF1dG99QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey51ay10YWItbGVmdCwudWstdGFiLXJpZ2h0e2JvcmRlci1ib3R0b206bm9uZX0udWstdGFiLWxlZnQ+bGksLnVrLXRhYi1yaWdodD5saXttYXJnaW4tYm90dG9tOjA7ZmxvYXQ6bm9uZX0udWstdGFiLWxlZnQ+bGk+YSwudWstdGFiLXJpZ2h0PmxpPmF7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0udWstdGFiLWxlZnQ+bGk6bnRoLWNoaWxkKG4rMik+YSwudWstdGFiLXJpZ2h0PmxpOm50aC1jaGlsZChuKzIpPmF7bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOjVweH0udWstdGFiLWxlZnQ+bGkudWstYWN0aXZlPmEsLnVrLXRhYi1yaWdodD5saS51ay1hY3RpdmU+YXtib3JkZXItY29sb3I6I2RkZH0udWstdGFiLWxlZnR7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZGRkfS51ay10YWItbGVmdD5saXttYXJnaW4tcmlnaHQ6LTFweH0udWstdGFiLWxlZnQ+bGk+YXtib3JkZXItYm90dG9tLXdpZHRoOjFweDtib3JkZXItcmlnaHQtd2lkdGg6MH0udWstdGFiLWxlZnQ+bGk6bm90KC51ay1hY3RpdmUpPmE6Zm9jdXMsLnVrLXRhYi1sZWZ0PmxpOm5vdCgudWstYWN0aXZlKT5hOmhvdmVye21hcmdpbi1ib3R0b206MDttYXJnaW4tcmlnaHQ6MXB4O3BhZGRpbmctYm90dG9tOjhweDtwYWRkaW5nLXJpZ2h0OjExcHh9LnVrLXRhYi1sZWZ0PmxpLnVrLWFjdGl2ZT5he2JvcmRlci1yaWdodC1jb2xvcjp0cmFuc3BhcmVudH0udWstdGFiLXJpZ2h0e2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGRkfS51ay10YWItcmlnaHQ+bGl7bWFyZ2luLWxlZnQ6LTFweH0udWstdGFiLXJpZ2h0PmxpPmF7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHg7Ym9yZGVyLWxlZnQtd2lkdGg6MH0udWstdGFiLXJpZ2h0PmxpOm5vdCgudWstYWN0aXZlKT5hOmZvY3VzLC51ay10YWItcmlnaHQ+bGk6bm90KC51ay1hY3RpdmUpPmE6aG92ZXJ7bWFyZ2luLWJvdHRvbTowO21hcmdpbi1sZWZ0OjFweDtwYWRkaW5nLWJvdHRvbTo4cHg7cGFkZGluZy1sZWZ0OjExcHh9LnVrLXRhYi1yaWdodD5saS51ay1hY3RpdmU+YXtib3JkZXItbGVmdC1jb2xvcjp0cmFuc3BhcmVudH19LnVrLXRodW1ibmF2e2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTpmbGV4Oy1tcy1mbGV4LXdyYXA6d3JhcDstd2Via2l0LWZsZXgtd3JhcDp3cmFwO2ZsZXgtd3JhcDp3cmFwO21hcmdpbi1sZWZ0Oi0xMHB4O21hcmdpbi10b3A6LTEwcHg7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZX0udWstdGh1bWJuYXY+KnstbXMtZmxleDpub25lOy13ZWJraXQtZmxleDpub25lO2ZsZXg6bm9uZTtwYWRkaW5nLWxlZnQ6MTBweDttYXJnaW4tdG9wOjEwcHh9LnVrLXRodW1ibmF2OmFmdGVyLC51ay10aHVtYm5hdjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbn0udWstdGh1bWJuYXY6YWZ0ZXJ7Y2xlYXI6Ym90aH0udWstdGh1bWJuYXY+KntmbG9hdDpsZWZ0fS51ay10aHVtYm5hdj4qPip7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kOiNmZmZ9LnVrLXRodW1ibmF2Pio+Kj5pbWd7b3BhY2l0eTouNzstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXJ9LnVrLXRodW1ibmF2Pio+OmZvY3VzPmltZywudWstdGh1bWJuYXY+Kj46aG92ZXI+aW1ne29wYWNpdHk6MX0udWstdGh1bWJuYXY+LnVrLWFjdGl2ZT4qPmltZ3tvcGFjaXR5OjF9LnVrLWxpc3R7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZX0udWstbGlzdD5saTphZnRlciwudWstbGlzdD5saTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlfS51ay1saXN0PmxpOmFmdGVye2NsZWFyOmJvdGh9LnVrLWxpc3Q+bGk+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1saXN0IHVse21hcmdpbjowO3BhZGRpbmctbGVmdDoyMHB4O2xpc3Qtc3R5bGU6bm9uZX0udWstbGlzdC1saW5lPmxpOm50aC1jaGlsZChuKzIpe21hcmdpbi10b3A6NXB4O3BhZGRpbmctdG9wOjVweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZGRkfS51ay1saXN0LXN0cmlwZWQ+bGl7cGFkZGluZzo1cHggNXB4fS51ay1saXN0LXN0cmlwZWQ+bGk6bnRoLW9mLXR5cGUob2RkKXtiYWNrZ3JvdW5kOiNmNWY1ZjV9LnVrLWxpc3Qtc3BhY2U+bGk6bnRoLWNoaWxkKG4rMil7bWFyZ2luLXRvcDoxMHB4fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsudWstZGVzY3JpcHRpb24tbGlzdC1ob3Jpem9udGFse292ZXJmbG93OmhpZGRlbn0udWstZGVzY3JpcHRpb24tbGlzdC1ob3Jpem9udGFsPmR0e3dpZHRoOjE2MHB4O2Zsb2F0OmxlZnQ7Y2xlYXI6Ym90aDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LnVrLWRlc2NyaXB0aW9uLWxpc3QtaG9yaXpvbnRhbD5kZHttYXJnaW4tbGVmdDoxODBweH19LnVrLWRlc2NyaXB0aW9uLWxpc3QtbGluZT5kdHtmb250LXdlaWdodDo0MDB9LnVrLWRlc2NyaXB0aW9uLWxpc3QtbGluZT5kdDpudGgtY2hpbGQobisyKXttYXJnaW4tdG9wOjVweDtwYWRkaW5nLXRvcDo1cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZH0udWstZGVzY3JpcHRpb24tbGlzdC1saW5lPmRke2NvbG9yOiM5OTl9LnVrLXRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowO3dpZHRoOjEwMCU7bWFyZ2luLWJvdHRvbToxNXB4fSorLnVrLXRhYmxle21hcmdpbi10b3A6MTVweH0udWstdGFibGUgdGQsLnVrLXRhYmxlIHRoe3BhZGRpbmc6OHB4IDhweH0udWstdGFibGUgdGh7dGV4dC1hbGlnbjpsZWZ0fS51ay10YWJsZSB0ZHt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnVrLXRhYmxlIHRoZWFkIHRoe3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0udWstdGFibGUgY2FwdGlvbiwudWstdGFibGUgdGZvb3R7Zm9udC1zaXplOjEycHg7Zm9udC1zdHlsZTppdGFsaWN9LnVrLXRhYmxlIGNhcHRpb257dGV4dC1hbGlnbjpsZWZ0O2NvbG9yOiM5OTl9LnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZXtiYWNrZ3JvdW5kOiNlZWV9LnVrLXRhYmxlLW1pZGRsZSwudWstdGFibGUtbWlkZGxlIHRke3ZlcnRpY2FsLWFsaWduOm1pZGRsZSFpbXBvcnRhbnR9LnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKXtiYWNrZ3JvdW5kOiNmNWY1ZjV9LnVrLXRhYmxlLWNvbmRlbnNlZCB0ZHtwYWRkaW5nOjRweCA4cHh9LnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVye2JhY2tncm91bmQ6I2VlZX0udWstZm9ybSBpbnB1dCwudWstZm9ybSBzZWxlY3QsLnVrLWZvcm0gdGV4dGFyZWF7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO2JvcmRlci1yYWRpdXM6MDtmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdH0udWstZm9ybSBzZWxlY3R7dGV4dC10cmFuc2Zvcm06bm9uZX0udWstZm9ybSBvcHRncm91cHtmb250OmluaGVyaXQ7Zm9udC13ZWlnaHQ6NzAwfS51ay1mb3JtIGlucHV0OjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowO3BhZGRpbmc6MH0udWstZm9ybSBpbnB1dFt0eXBlPWNoZWNrYm94XSwudWstZm9ybSBpbnB1dFt0eXBlPXJhZGlvXXtwYWRkaW5nOjB9LnVrLWZvcm0gaW5wdXRbdHlwZT1jaGVja2JveF06bm90KDpkaXNhYmxlZCksLnVrLWZvcm0gaW5wdXRbdHlwZT1yYWRpb106bm90KDpkaXNhYmxlZCl7Y3Vyc29yOnBvaW50ZXJ9LnVrLWZvcm0gaW5wdXQ6bm90KFt0eXBlXSksLnVrLWZvcm0gaW5wdXRbdHlwZT10ZXh0XSwudWstZm9ybSBpbnB1dFt0eXBlPXBhc3N3b3JkXSwudWstZm9ybSBpbnB1dFt0eXBlPWVtYWlsXSwudWstZm9ybSBpbnB1dFt0eXBlPXVybF0sLnVrLWZvcm0gaW5wdXRbdHlwZT1zZWFyY2hdLC51ay1mb3JtIGlucHV0W3R5cGU9dGVsXSwudWstZm9ybSBpbnB1dFt0eXBlPW51bWJlcl0sLnVrLWZvcm0gaW5wdXRbdHlwZT1kYXRldGltZV0sLnVrLWZvcm0gdGV4dGFyZWF7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LnVrLWZvcm0gaW5wdXRbdHlwZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLC51ay1mb3JtIGlucHV0W3R5cGU9c2VhcmNoXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0udWstZm9ybSBpbnB1dFt0eXBlPW51bWJlcl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sLnVrLWZvcm0gaW5wdXRbdHlwZT1udW1iZXJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfS51ay1mb3JtIGZpZWxkc2V0e2JvcmRlcjpub25lO21hcmdpbjowO3BhZGRpbmc6MH0udWstZm9ybSB0ZXh0YXJlYXtvdmVyZmxvdzphdXRvO3ZlcnRpY2FsLWFsaWduOnRvcH0udWstZm9ybSA6Oi1tb3otcGxhY2Vob2xkZXJ7b3BhY2l0eToxfS51ay1mb3JtIDppbnZhbGlke2JveC1zaGFkb3c6bm9uZX0udWstZm9ybSBpbnB1dDpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKSwudWstZm9ybSBzZWxlY3R7dmVydGljYWwtYWxpZ246bWlkZGxlfS51ay1mb3JtPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstZm9ybSBpbnB1dDpub3QoW3R5cGVdKSwudWstZm9ybSBpbnB1dFt0eXBlPXRleHRdLC51ay1mb3JtIGlucHV0W3R5cGU9cGFzc3dvcmRdLC51ay1mb3JtIGlucHV0W3R5cGU9ZW1haWxdLC51ay1mb3JtIGlucHV0W3R5cGU9dXJsXSwudWstZm9ybSBpbnB1dFt0eXBlPXNlYXJjaF0sLnVrLWZvcm0gaW5wdXRbdHlwZT10ZWxdLC51ay1mb3JtIGlucHV0W3R5cGU9bnVtYmVyXSwudWstZm9ybSBpbnB1dFt0eXBlPWRhdGV0aW1lXSwudWstZm9ybSBpbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXSwudWstZm9ybSBpbnB1dFt0eXBlPWRhdGVdLC51ay1mb3JtIGlucHV0W3R5cGU9bW9udGhdLC51ay1mb3JtIGlucHV0W3R5cGU9dGltZV0sLnVrLWZvcm0gaW5wdXRbdHlwZT13ZWVrXSwudWstZm9ybSBpbnB1dFt0eXBlPWNvbG9yXSwudWstZm9ybSBzZWxlY3QsLnVrLWZvcm0gdGV4dGFyZWF7aGVpZ2h0OjMwcHg7bWF4LXdpZHRoOjEwMCU7cGFkZGluZzo0cHggNnB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzQ0NDstd2Via2l0LXRyYW5zaXRpb246YWxsIGxpbmVhciAuMnM7dHJhbnNpdGlvbjphbGwgbGluZWFyIC4yc30udWstZm9ybSBpbnB1dDpub3QoW3R5cGVdKTpmb2N1cywudWstZm9ybSBpbnB1dFt0eXBlPXRleHRdOmZvY3VzLC51ay1mb3JtIGlucHV0W3R5cGU9cGFzc3dvcmRdOmZvY3VzLC51ay1mb3JtIGlucHV0W3R5cGU9ZW1haWxdOmZvY3VzLC51ay1mb3JtIGlucHV0W3R5cGU9dXJsXTpmb2N1cywudWstZm9ybSBpbnB1dFt0eXBlPXNlYXJjaF06Zm9jdXMsLnVrLWZvcm0gaW5wdXRbdHlwZT10ZWxdOmZvY3VzLC51ay1mb3JtIGlucHV0W3R5cGU9bnVtYmVyXTpmb2N1cywudWstZm9ybSBpbnB1dFt0eXBlPWRhdGV0aW1lXTpmb2N1cywudWstZm9ybSBpbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpmb2N1cywudWstZm9ybSBpbnB1dFt0eXBlPWRhdGVdOmZvY3VzLC51ay1mb3JtIGlucHV0W3R5cGU9bW9udGhdOmZvY3VzLC51ay1mb3JtIGlucHV0W3R5cGU9dGltZV06Zm9jdXMsLnVrLWZvcm0gaW5wdXRbdHlwZT13ZWVrXTpmb2N1cywudWstZm9ybSBpbnB1dFt0eXBlPWNvbG9yXTpmb2N1cywudWstZm9ybSBzZWxlY3Q6Zm9jdXMsLnVrLWZvcm0gdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM5OWJhY2E7b3V0bGluZTowO2JhY2tncm91bmQ6I2Y1ZmJmZTtjb2xvcjojNDQ0fS51ay1mb3JtIGlucHV0Om5vdChbdHlwZV0pOmRpc2FibGVkLC51ay1mb3JtIGlucHV0W3R5cGU9dGV4dF06ZGlzYWJsZWQsLnVrLWZvcm0gaW5wdXRbdHlwZT1wYXNzd29yZF06ZGlzYWJsZWQsLnVrLWZvcm0gaW5wdXRbdHlwZT1lbWFpbF06ZGlzYWJsZWQsLnVrLWZvcm0gaW5wdXRbdHlwZT11cmxdOmRpc2FibGVkLC51ay1mb3JtIGlucHV0W3R5cGU9c2VhcmNoXTpkaXNhYmxlZCwudWstZm9ybSBpbnB1dFt0eXBlPXRlbF06ZGlzYWJsZWQsLnVrLWZvcm0gaW5wdXRbdHlwZT1udW1iZXJdOmRpc2FibGVkLC51ay1mb3JtIGlucHV0W3R5cGU9ZGF0ZXRpbWVdOmRpc2FibGVkLC51ay1mb3JtIGlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOmRpc2FibGVkLC51ay1mb3JtIGlucHV0W3R5cGU9ZGF0ZV06ZGlzYWJsZWQsLnVrLWZvcm0gaW5wdXRbdHlwZT1tb250aF06ZGlzYWJsZWQsLnVrLWZvcm0gaW5wdXRbdHlwZT10aW1lXTpkaXNhYmxlZCwudWstZm9ybSBpbnB1dFt0eXBlPXdlZWtdOmRpc2FibGVkLC51ay1mb3JtIGlucHV0W3R5cGU9Y29sb3JdOmRpc2FibGVkLC51ay1mb3JtIHNlbGVjdDpkaXNhYmxlZCwudWstZm9ybSB0ZXh0YXJlYTpkaXNhYmxlZHtib3JkZXItY29sb3I6I2RkZDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7Y29sb3I6Izk5OX0udWstZm9ybSA6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiM5OTkhaW1wb3J0YW50fS51ay1mb3JtIDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojOTk5fS51ay1mb3JtIDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojOTk5fS51ay1mb3JtIDpkaXNhYmxlZDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6Izk5OSFpbXBvcnRhbnR9LnVrLWZvcm0gOmRpc2FibGVkOjotbW96LXBsYWNlaG9sZGVye2NvbG9yOiM5OTl9LnVrLWZvcm0gOmRpc2FibGVkOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiM5OTl9LnVrLWZvcm0gbGVnZW5ke3dpZHRoOjEwMCU7Ym9yZGVyOjA7cGFkZGluZzowO3BhZGRpbmctYm90dG9tOjE1cHg7Zm9udC1zaXplOjE4cHg7bGluZS1oZWlnaHQ6MzBweH0udWstZm9ybSBsZWdlbmQ6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZGQ7d2lkdGg6MTAwJX1pbnB1dDpub3QoW3R5cGVdKS51ay1mb3JtLXNtYWxsLGlucHV0W3R5cGVdLnVrLWZvcm0tc21hbGwsc2VsZWN0LnVrLWZvcm0tc21hbGwsdGV4dGFyZWEudWstZm9ybS1zbWFsbHtoZWlnaHQ6MjVweDtwYWRkaW5nOjNweCAzcHg7Zm9udC1zaXplOjEycHh9aW5wdXQ6bm90KFt0eXBlXSkudWstZm9ybS1sYXJnZSxpbnB1dFt0eXBlXS51ay1mb3JtLWxhcmdlLHNlbGVjdC51ay1mb3JtLWxhcmdlLHRleHRhcmVhLnVrLWZvcm0tbGFyZ2V7aGVpZ2h0OjQwcHg7cGFkZGluZzo4cHggNnB4O2ZvbnQtc2l6ZToxNnB4fS51ay1mb3JtIHNlbGVjdFttdWx0aXBsZV0sLnVrLWZvcm0gc2VsZWN0W3NpemVdLC51ay1mb3JtIHRleHRhcmVhe2hlaWdodDphdXRvfS51ay1mb3JtLWRhbmdlcntib3JkZXItY29sb3I6I2RjOGQ5OSFpbXBvcnRhbnQ7YmFja2dyb3VuZDojZmZmN2Y4IWltcG9ydGFudDtjb2xvcjojZDg1MDMwIWltcG9ydGFudH0udWstZm9ybS1zdWNjZXNze2JvcmRlci1jb2xvcjojOGVjNzNiIWltcG9ydGFudDtiYWNrZ3JvdW5kOiNmYWZmZjIhaW1wb3J0YW50O2NvbG9yOiM2NTlmMTMhaW1wb3J0YW50fS51ay1mb3JtLWJsYW5re2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnQ7Ym9yZGVyLXN0eWxlOmRhc2hlZCFpbXBvcnRhbnQ7YmFja2dyb3VuZDowIDAhaW1wb3J0YW50fS51ay1mb3JtLWJsYW5rOmZvY3Vze2JvcmRlci1jb2xvcjojZGRkIWltcG9ydGFudH1pbnB1dC51ay1mb3JtLXdpZHRoLW1pbml7d2lkdGg6NDBweH1zZWxlY3QudWstZm9ybS13aWR0aC1taW5pe3dpZHRoOjY1cHh9LnVrLWZvcm0td2lkdGgtc21hbGx7d2lkdGg6MTMwcHh9LnVrLWZvcm0td2lkdGgtbWVkaXVte3dpZHRoOjIwMHB4fS51ay1mb3JtLXdpZHRoLWxhcmdle3dpZHRoOjUwMHB4fS51ay1mb3JtLXJvdzphZnRlciwudWstZm9ybS1yb3c6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTp0YWJsZX0udWstZm9ybS1yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH0udWstZm9ybS1yb3crLnVrLWZvcm0tcm93e21hcmdpbi10b3A6MTVweH0udWstZm9ybS1oZWxwLWlubGluZXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MCAwIDAgMTBweH0udWstZm9ybS1oZWxwLWJsb2Nre21hcmdpbjo1cHggMCAwIDB9LnVrLWZvcm0tY29udHJvbHM+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0udWstZm9ybS1jb250cm9scz46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLWZvcm0tY29udHJvbHMtY29uZGVuc2Vke21hcmdpbjo1cHggMH0udWstZm9ybS1zdGFja2VkIC51ay1mb3JtLWxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo1cHg7Zm9udC13ZWlnaHQ6NzAwfUBtZWRpYSAobWF4LXdpZHRoOjk1OXB4KXsudWstZm9ybS1ob3Jpem9udGFsIC51ay1mb3JtLWxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo1cHg7Zm9udC13ZWlnaHQ6NzAwfX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWZvcm0taG9yaXpvbnRhbCAudWstZm9ybS1sYWJlbHt3aWR0aDoyMDBweDttYXJnaW4tdG9wOjVweDtmbG9hdDpsZWZ0fS51ay1mb3JtLWhvcml6b250YWwgLnVrLWZvcm0tY29udHJvbHN7bWFyZ2luLWxlZnQ6MjE1cHh9LnVrLWZvcm0taG9yaXpvbnRhbCAudWstZm9ybS1jb250cm9scy10ZXh0e3BhZGRpbmctdG9wOjVweH19LnVrLWZvcm0taWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTttYXgtd2lkdGg6MTAwJX0udWstZm9ybS1pY29uPltjbGFzcyo9dWstaWNvbi1de3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7d2lkdGg6MzBweDttYXJnaW4tdG9wOi03cHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6Izk5OTt0ZXh0LWFsaWduOmNlbnRlcjtwb2ludGVyLWV2ZW50czpub25lfS51ay1mb3JtLWljb246bm90KC51ay1mb3JtLWljb24tZmxpcCk+aW5wdXR7cGFkZGluZy1sZWZ0OjMwcHghaW1wb3J0YW50fS51ay1mb3JtLWljb24tZmxpcD5bY2xhc3MqPXVrLWljb24tXXtyaWdodDowfS51ay1mb3JtLWljb24tZmxpcD5pbnB1dHtwYWRkaW5nLXJpZ2h0OjMwcHghaW1wb3J0YW50fS51ay1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjA7cGFkZGluZzowfS51ay1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7Ym9yZGVyOm5vbmU7b3ZlcmZsb3c6dmlzaWJsZTtmb250OmluaGVyaXQ7Y29sb3I6IzQ0NDt0ZXh0LXRyYW5zZm9ybTpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTJweDtiYWNrZ3JvdW5kOiNlZWU7dmVydGljYWwtYWxpZ246bWlkZGxlO2xpbmUtaGVpZ2h0OjMwcHg7bWluLWhlaWdodDozMHB4O2ZvbnQtc2l6ZToxcmVtO3RleHQtZGVjb3JhdGlvbjpub25lO3RleHQtYWxpZ246Y2VudGVyfS51ay1idXR0b246bm90KDpkaXNhYmxlZCl7Y3Vyc29yOnBvaW50ZXJ9LnVrLWJ1dHRvbjpmb2N1cywudWstYnV0dG9uOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtjb2xvcjojNDQ0O291dGxpbmU6MDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstYnV0dG9uLnVrLWFjdGl2ZSwudWstYnV0dG9uOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNkZGQ7Y29sb3I6IzQ0NH0udWstYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojMDBhOGU2O2NvbG9yOiNmZmZ9LnVrLWJ1dHRvbi1wcmltYXJ5OmZvY3VzLC51ay1idXR0b24tcHJpbWFyeTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMzNWIzZWU7Y29sb3I6I2ZmZn0udWstYnV0dG9uLXByaW1hcnkudWstYWN0aXZlLC51ay1idXR0b24tcHJpbWFyeTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojMDA5MWNhO2NvbG9yOiNmZmZ9LnVrLWJ1dHRvbi1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6IzhjYzE0Yztjb2xvcjojZmZmfS51ay1idXR0b24tc3VjY2Vzczpmb2N1cywudWstYnV0dG9uLXN1Y2Nlc3M6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOGVjNzNiO2NvbG9yOiNmZmZ9LnVrLWJ1dHRvbi1zdWNjZXNzLnVrLWFjdGl2ZSwudWstYnV0dG9uLXN1Y2Nlc3M6YWN0aXZle2JhY2tncm91bmQtY29sb3I6IzcyYWU0MTtjb2xvcjojZmZmfS51ay1idXR0b24tZGFuZ2Vye2JhY2tncm91bmQtY29sb3I6I2RhMzE0Yjtjb2xvcjojZmZmfS51ay1idXR0b24tZGFuZ2VyOmZvY3VzLC51ay1idXR0b24tZGFuZ2VyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U0MzU0Zjtjb2xvcjojZmZmfS51ay1idXR0b24tZGFuZ2VyLnVrLWFjdGl2ZSwudWstYnV0dG9uLWRhbmdlcjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojYzkxMDMyO2NvbG9yOiNmZmZ9LnVrLWJ1dHRvbjpkaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7Y29sb3I6Izk5OX0udWstYnV0dG9uLWxpbmssLnVrLWJ1dHRvbi1saW5rLnVrLWFjdGl2ZSwudWstYnV0dG9uLWxpbms6YWN0aXZlLC51ay1idXR0b24tbGluazpkaXNhYmxlZCwudWstYnV0dG9uLWxpbms6Zm9jdXMsLnVrLWJ1dHRvbi1saW5rOmhvdmVye2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kOjAgMH0udWstYnV0dG9uLWxpbmt7Y29sb3I6IzA3ZH0udWstYnV0dG9uLWxpbmsudWstYWN0aXZlLC51ay1idXR0b24tbGluazphY3RpdmUsLnVrLWJ1dHRvbi1saW5rOmZvY3VzLC51ay1idXR0b24tbGluazpob3Zlcntjb2xvcjojMDU5O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LnVrLWJ1dHRvbi1saW5rOmRpc2FibGVke2NvbG9yOiM5OTl9LnVrLWJ1dHRvbi1saW5rOmZvY3Vze291dGxpbmU6MXB4IGRvdHRlZH0udWstYnV0dG9uLW1pbml7bWluLWhlaWdodDoyMHB4O3BhZGRpbmc6MCA2cHg7bGluZS1oZWlnaHQ6MjBweDtmb250LXNpemU6MTFweH0udWstYnV0dG9uLXNtYWxse21pbi1oZWlnaHQ6MjVweDtwYWRkaW5nOjAgMTBweDtsaW5lLWhlaWdodDoyNXB4O2ZvbnQtc2l6ZToxMnB4fS51ay1idXR0b24tbGFyZ2V7bWluLWhlaWdodDo0MHB4O3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjQwcHg7Zm9udC1zaXplOjE2cHh9LnVrLWJ1dHRvbi1ncm91cHtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjA7d2hpdGUtc3BhY2U6bm93cmFwfS51ay1idXR0b24tZ3JvdXA+KntkaXNwbGF5OmlubGluZS1ibG9ja30udWstYnV0dG9uLWdyb3VwIC51ay1idXR0b257dmVydGljYWwtYWxpZ246dG9wfS51ay1idXR0b24tZHJvcGRvd257ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO3Bvc2l0aW9uOnJlbGF0aXZlfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6Rm9udEF3ZXNvbWU7c3JjOnVybCguLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyksdXJsKC4uL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQud29mZikgZm9ybWF0KCJ3b2ZmIiksdXJsKC4uL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQudHRmKSBmb3JtYXQoInRydWV0eXBlIik7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc3R5bGU6bm9ybWFsfVtjbGFzcyo9dWstaWNvbi1de2ZvbnQtZmFtaWx5OkZvbnRBd2Vzb21lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXN0eWxlOm5vcm1hbDtsaW5lLWhlaWdodDoxOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlfVtjbGFzcyo9dWstaWNvbi1dLFtjbGFzcyo9dWstaWNvbi1dOmZvY3VzLFtjbGFzcyo9dWstaWNvbi1dOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lfS51ay1pY29uLXNtYWxse2ZvbnQtc2l6ZToxNTAlO3ZlcnRpY2FsLWFsaWduOi0xMCV9LnVrLWljb24tbWVkaXVte2ZvbnQtc2l6ZToyMDAlO3ZlcnRpY2FsLWFsaWduOi0xNiV9LnVrLWljb24tbGFyZ2V7Zm9udC1zaXplOjI1MCU7dmVydGljYWwtYWxpZ246LTIyJX0udWstaWNvbi1qdXN0aWZ5e3dpZHRoOjFlbTt0ZXh0LWFsaWduOmNlbnRlcn0udWstaWNvbi1zcGlue2Rpc3BsYXk6aW5saW5lLWJsb2NrOy13ZWJraXQtYW5pbWF0aW9uOnVrLXJvdGF0ZSAycyBpbmZpbml0ZSBsaW5lYXI7YW5pbWF0aW9uOnVrLXJvdGF0ZSAycyBpbmZpbml0ZSBsaW5lYXJ9LnVrLWljb24taG92ZXJ7Y29sb3I6Izk5OX0udWstaWNvbi1ob3Zlcjpob3Zlcntjb2xvcjojNDQ0fS51ay1pY29uLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MzVweDtoZWlnaHQ6MzVweDtib3JkZXItcmFkaXVzOjEwMCU7YmFja2dyb3VuZDojZWVlO2xpbmUtaGVpZ2h0OjM1cHg7Y29sb3I6IzQ0NDtmb250LXNpemU6MThweDt0ZXh0LWFsaWduOmNlbnRlcn0udWstaWNvbi1idXR0b246Zm9jdXMsLnVrLWljb24tYnV0dG9uOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtjb2xvcjojNDQ0O291dGxpbmU6MH0udWstaWNvbi1idXR0b246YWN0aXZle2JhY2tncm91bmQtY29sb3I6I2RkZDtjb2xvcjojNDQ0fS51ay1pY29uLWdsYXNzOmJlZm9yZXtjb250ZW50OiJcZjAwMCJ9LnVrLWljb24tbXVzaWM6YmVmb3Jle2NvbnRlbnQ6IlxmMDAxIn0udWstaWNvbi1zZWFyY2g6YmVmb3Jle2NvbnRlbnQ6IlxmMDAyIn0udWstaWNvbi1lbnZlbG9wZS1vOmJlZm9yZXtjb250ZW50OiJcZjAwMyJ9LnVrLWljb24taGVhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDA0In0udWstaWNvbi1zdGFyOmJlZm9yZXtjb250ZW50OiJcZjAwNSJ9LnVrLWljb24tc3Rhci1vOmJlZm9yZXtjb250ZW50OiJcZjAwNiJ9LnVrLWljb24tdXNlcjpiZWZvcmV7Y29udGVudDoiXGYwMDcifS51ay1pY29uLWZpbG06YmVmb3Jle2NvbnRlbnQ6IlxmMDA4In0udWstaWNvbi10aC1sYXJnZTpiZWZvcmV7Y29udGVudDoiXGYwMDkifS51ay1pY29uLXRoOmJlZm9yZXtjb250ZW50OiJcZjAwYSJ9LnVrLWljb24tdGgtbGlzdDpiZWZvcmV7Y29udGVudDoiXGYwMGIifS51ay1pY29uLWNoZWNrOmJlZm9yZXtjb250ZW50OiJcZjAwYyJ9LnVrLWljb24tY2xvc2U6YmVmb3JlLC51ay1pY29uLXJlbW92ZTpiZWZvcmUsLnVrLWljb24tdGltZXM6YmVmb3Jle2NvbnRlbnQ6IlxmMDBkIn0udWstaWNvbi1zZWFyY2gtcGx1czpiZWZvcmV7Y29udGVudDoiXGYwMGUifS51ay1pY29uLXNlYXJjaC1taW51czpiZWZvcmV7Y29udGVudDoiXGYwMTAifS51ay1pY29uLXBvd2VyLW9mZjpiZWZvcmV7Y29udGVudDoiXGYwMTEifS51ay1pY29uLXNpZ25hbDpiZWZvcmV7Y29udGVudDoiXGYwMTIifS51ay1pY29uLWNvZzpiZWZvcmUsLnVrLWljb24tZ2VhcjpiZWZvcmV7Y29udGVudDoiXGYwMTMifS51ay1pY29uLXRyYXNoLW86YmVmb3Jle2NvbnRlbnQ6IlxmMDE0In0udWstaWNvbi1ob21lOmJlZm9yZXtjb250ZW50OiJcZjAxNSJ9LnVrLWljb24tZmlsZS1vOmJlZm9yZXtjb250ZW50OiJcZjAxNiJ9LnVrLWljb24tY2xvY2stbzpiZWZvcmV7Y29udGVudDoiXGYwMTcifS51ay1pY29uLXJvYWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDE4In0udWstaWNvbi1kb3dubG9hZDpiZWZvcmV7Y29udGVudDoiXGYwMTkifS51ay1pY29uLWFycm93LWNpcmNsZS1vLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMDFhIn0udWstaWNvbi1hcnJvdy1jaXJjbGUtby11cDpiZWZvcmV7Y29udGVudDoiXGYwMWIifS51ay1pY29uLWluYm94OmJlZm9yZXtjb250ZW50OiJcZjAxYyJ9LnVrLWljb24tcGxheS1jaXJjbGUtbzpiZWZvcmV7Y29udGVudDoiXGYwMWQifS51ay1pY29uLXJlcGVhdDpiZWZvcmUsLnVrLWljb24tcm90YXRlLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjAxZSJ9LnVrLWljb24tcmVmcmVzaDpiZWZvcmV7Y29udGVudDoiXGYwMjEifS51ay1pY29uLWxpc3QtYWx0OmJlZm9yZXtjb250ZW50OiJcZjAyMiJ9LnVrLWljb24tbG9jazpiZWZvcmV7Y29udGVudDoiXGYwMjMifS51ay1pY29uLWZsYWc6YmVmb3Jle2NvbnRlbnQ6IlxmMDI0In0udWstaWNvbi1oZWFkcGhvbmVzOmJlZm9yZXtjb250ZW50OiJcZjAyNSJ9LnVrLWljb24tdm9sdW1lLW9mZjpiZWZvcmV7Y29udGVudDoiXGYwMjYifS51ay1pY29uLXZvbHVtZS1kb3duOmJlZm9yZXtjb250ZW50OiJcZjAyNyJ9LnVrLWljb24tdm9sdW1lLXVwOmJlZm9yZXtjb250ZW50OiJcZjAyOCJ9LnVrLWljb24tcXJjb2RlOmJlZm9yZXtjb250ZW50OiJcZjAyOSJ9LnVrLWljb24tYmFyY29kZTpiZWZvcmV7Y29udGVudDoiXGYwMmEifS51ay1pY29uLXRhZzpiZWZvcmV7Y29udGVudDoiXGYwMmIifS51ay1pY29uLXRhZ3M6YmVmb3Jle2NvbnRlbnQ6IlxmMDJjIn0udWstaWNvbi1ib29rOmJlZm9yZXtjb250ZW50OiJcZjAyZCJ9LnVrLWljb24tYm9va21hcms6YmVmb3Jle2NvbnRlbnQ6IlxmMDJlIn0udWstaWNvbi1wcmludDpiZWZvcmV7Y29udGVudDoiXGYwMmYifS51ay1pY29uLWNhbWVyYTpiZWZvcmV7Y29udGVudDoiXGYwMzAifS51ay1pY29uLWZvbnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDMxIn0udWstaWNvbi1ib2xkOmJlZm9yZXtjb250ZW50OiJcZjAzMiJ9LnVrLWljb24taXRhbGljOmJlZm9yZXtjb250ZW50OiJcZjAzMyJ9LnVrLWljb24tdGV4dC1oZWlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDM0In0udWstaWNvbi10ZXh0LXdpZHRoOmJlZm9yZXtjb250ZW50OiJcZjAzNSJ9LnVrLWljb24tYWxpZ24tbGVmdDpiZWZvcmV7Y29udGVudDoiXGYwMzYifS51ay1pY29uLWFsaWduLWNlbnRlcjpiZWZvcmV7Y29udGVudDoiXGYwMzcifS51ay1pY29uLWFsaWduLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjAzOCJ9LnVrLWljb24tYWxpZ24tanVzdGlmeTpiZWZvcmV7Y29udGVudDoiXGYwMzkifS51ay1pY29uLWxpc3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMDNhIn0udWstaWNvbi1kZWRlbnQ6YmVmb3JlLC51ay1pY29uLW91dGRlbnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDNiIn0udWstaWNvbi1pbmRlbnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDNjIn0udWstaWNvbi12aWRlby1jYW1lcmE6YmVmb3Jle2NvbnRlbnQ6IlxmMDNkIn0udWstaWNvbi1pbWFnZTpiZWZvcmUsLnVrLWljb24tcGhvdG86YmVmb3JlLC51ay1pY29uLXBpY3R1cmUtbzpiZWZvcmV7Y29udGVudDoiXGYwM2UifS51ay1pY29uLXBlbmNpbDpiZWZvcmV7Y29udGVudDoiXGYwNDAifS51ay1pY29uLW1hcC1tYXJrZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMDQxIn0udWstaWNvbi1hZGp1c3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMDQyIn0udWstaWNvbi10aW50OmJlZm9yZXtjb250ZW50OiJcZjA0MyJ9LnVrLWljb24tZWRpdDpiZWZvcmUsLnVrLWljb24tcGVuY2lsLXNxdWFyZS1vOmJlZm9yZXtjb250ZW50OiJcZjA0NCJ9LnVrLWljb24tc2hhcmUtc3F1YXJlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMDQ1In0udWstaWNvbi1jaGVjay1zcXVhcmUtbzpiZWZvcmV7Y29udGVudDoiXGYwNDYifS51ay1pY29uLWFycm93czpiZWZvcmV7Y29udGVudDoiXGYwNDcifS51ay1pY29uLXN0ZXAtYmFja3dhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDQ4In0udWstaWNvbi1mYXN0LWJhY2t3YXJkOmJlZm9yZXtjb250ZW50OiJcZjA0OSJ9LnVrLWljb24tYmFja3dhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDRhIn0udWstaWNvbi1wbGF5OmJlZm9yZXtjb250ZW50OiJcZjA0YiJ9LnVrLWljb24tcGF1c2U6YmVmb3Jle2NvbnRlbnQ6IlxmMDRjIn0udWstaWNvbi1zdG9wOmJlZm9yZXtjb250ZW50OiJcZjA0ZCJ9LnVrLWljb24tZm9yd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNGUifS51ay1pY29uLWZhc3QtZm9yd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNTAifS51ay1pY29uLXN0ZXAtZm9yd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNTEifS51ay1pY29uLWVqZWN0OmJlZm9yZXtjb250ZW50OiJcZjA1MiJ9LnVrLWljb24tY2hldnJvbi1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjA1MyJ9LnVrLWljb24tY2hldnJvbi1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYwNTQifS51ay1pY29uLXBsdXMtY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjA1NSJ9LnVrLWljb24tbWludXMtY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjA1NiJ9LnVrLWljb24tdGltZXMtY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjA1NyJ9LnVrLWljb24tY2hlY2stY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjA1OCJ9LnVrLWljb24tcXVlc3Rpb24tY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjA1OSJ9LnVrLWljb24taW5mby1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDVhIn0udWstaWNvbi1jcm9zc2hhaXJzOmJlZm9yZXtjb250ZW50OiJcZjA1YiJ9LnVrLWljb24tdGltZXMtY2lyY2xlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMDVjIn0udWstaWNvbi1jaGVjay1jaXJjbGUtbzpiZWZvcmV7Y29udGVudDoiXGYwNWQifS51ay1pY29uLWJhbjpiZWZvcmV7Y29udGVudDoiXGYwNWUifS51ay1pY29uLWFycm93LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDYwIn0udWstaWNvbi1hcnJvdy1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYwNjEifS51ay1pY29uLWFycm93LXVwOmJlZm9yZXtjb250ZW50OiJcZjA2MiJ9LnVrLWljb24tYXJyb3ctZG93bjpiZWZvcmV7Y29udGVudDoiXGYwNjMifS51ay1pY29uLW1haWwtZm9yd2FyZDpiZWZvcmUsLnVrLWljb24tc2hhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMDY0In0udWstaWNvbi1leHBhbmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDY1In0udWstaWNvbi1jb21wcmVzczpiZWZvcmV7Y29udGVudDoiXGYwNjYifS51ay1pY29uLXBsdXM6YmVmb3Jle2NvbnRlbnQ6IlxmMDY3In0udWstaWNvbi1taW51czpiZWZvcmV7Y29udGVudDoiXGYwNjgifS51ay1pY29uLWFzdGVyaXNrOmJlZm9yZXtjb250ZW50OiJcZjA2OSJ9LnVrLWljb24tZXhjbGFtYXRpb24tY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjA2YSJ9LnVrLWljb24tZ2lmdDpiZWZvcmV7Y29udGVudDoiXGYwNmIifS51ay1pY29uLWxlYWY6YmVmb3Jle2NvbnRlbnQ6IlxmMDZjIn0udWstaWNvbi1maXJlOmJlZm9yZXtjb250ZW50OiJcZjA2ZCJ9LnVrLWljb24tZXllOmJlZm9yZXtjb250ZW50OiJcZjA2ZSJ9LnVrLWljb24tZXllLXNsYXNoOmJlZm9yZXtjb250ZW50OiJcZjA3MCJ9LnVrLWljb24tZXhjbGFtYXRpb24tdHJpYW5nbGU6YmVmb3JlLC51ay1pY29uLXdhcm5pbmc6YmVmb3Jle2NvbnRlbnQ6IlxmMDcxIn0udWstaWNvbi1wbGFuZTpiZWZvcmV7Y29udGVudDoiXGYwNzIifS51ay1pY29uLWNhbGVuZGFyOmJlZm9yZXtjb250ZW50OiJcZjA3MyJ9LnVrLWljb24tcmFuZG9tOmJlZm9yZXtjb250ZW50OiJcZjA3NCJ9LnVrLWljb24tY29tbWVudDpiZWZvcmV7Y29udGVudDoiXGYwNzUifS51ay1pY29uLW1hZ25ldDpiZWZvcmV7Y29udGVudDoiXGYwNzYifS51ay1pY29uLWNoZXZyb24tdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMDc3In0udWstaWNvbi1jaGV2cm9uLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMDc4In0udWstaWNvbi1yZXR3ZWV0OmJlZm9yZXtjb250ZW50OiJcZjA3OSJ9LnVrLWljb24tc2hvcHBpbmctY2FydDpiZWZvcmV7Y29udGVudDoiXGYwN2EifS51ay1pY29uLWZvbGRlcjpiZWZvcmV7Y29udGVudDoiXGYwN2IifS51ay1pY29uLWZvbGRlci1vcGVuOmJlZm9yZXtjb250ZW50OiJcZjA3YyJ9LnVrLWljb24tYXJyb3dzLXY6YmVmb3Jle2NvbnRlbnQ6IlxmMDdkIn0udWstaWNvbi1hcnJvd3MtaDpiZWZvcmV7Y29udGVudDoiXGYwN2UifS51ay1pY29uLWJhci1jaGFydC1vOmJlZm9yZSwudWstaWNvbi1iYXItY2hhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDgwIn0udWstaWNvbi10d2l0dGVyLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYwODEifS51ay1pY29uLWZhY2Vib29rLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYwODIifS51ay1pY29uLWNhbWVyYS1yZXRybzpiZWZvcmV7Y29udGVudDoiXGYwODMifS51ay1pY29uLWtleTpiZWZvcmV7Y29udGVudDoiXGYwODQifS51ay1pY29uLWNvZ3M6YmVmb3JlLC51ay1pY29uLWdlYXJzOmJlZm9yZXtjb250ZW50OiJcZjA4NSJ9LnVrLWljb24tY29tbWVudHM6YmVmb3Jle2NvbnRlbnQ6IlxmMDg2In0udWstaWNvbi10aHVtYnMtby11cDpiZWZvcmV7Y29udGVudDoiXGYwODcifS51ay1pY29uLXRodW1icy1vLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMDg4In0udWstaWNvbi1zdGFyLWhhbGY6YmVmb3Jle2NvbnRlbnQ6IlxmMDg5In0udWstaWNvbi1oZWFydC1vOmJlZm9yZXtjb250ZW50OiJcZjA4YSJ9LnVrLWljb24tc2lnbi1vdXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDhiIn0udWstaWNvbi1saW5rZWRpbi1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMDhjIn0udWstaWNvbi10aHVtYi10YWNrOmJlZm9yZXtjb250ZW50OiJcZjA4ZCJ9LnVrLWljb24tZXh0ZXJuYWwtbGluazpiZWZvcmV7Y29udGVudDoiXGYwOGUifS51ay1pY29uLXNpZ24taW46YmVmb3Jle2NvbnRlbnQ6IlxmMDkwIn0udWstaWNvbi10cm9waHk6YmVmb3Jle2NvbnRlbnQ6IlxmMDkxIn0udWstaWNvbi1naXRodWItc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjA5MiJ9LnVrLWljb24tdXBsb2FkOmJlZm9yZXtjb250ZW50OiJcZjA5MyJ9LnVrLWljb24tbGVtb24tbzpiZWZvcmV7Y29udGVudDoiXGYwOTQifS51ay1pY29uLXBob25lOmJlZm9yZXtjb250ZW50OiJcZjA5NSJ9LnVrLWljb24tc3F1YXJlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMDk2In0udWstaWNvbi1ib29rbWFyay1vOmJlZm9yZXtjb250ZW50OiJcZjA5NyJ9LnVrLWljb24tcGhvbmUtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjA5OCJ9LnVrLWljb24tdHdpdHRlcjpiZWZvcmV7Y29udGVudDoiXGYwOTkifS51ay1pY29uLWZhY2Vib29rLWY6YmVmb3JlLC51ay1pY29uLWZhY2Vib29rOmJlZm9yZXtjb250ZW50OiJcZjA5YSJ9LnVrLWljb24tZ2l0aHViOmJlZm9yZXtjb250ZW50OiJcZjA5YiJ9LnVrLWljb24tdW5sb2NrOmJlZm9yZXtjb250ZW50OiJcZjA5YyJ9LnVrLWljb24tY3JlZGl0LWNhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDlkIn0udWstaWNvbi1yc3M6YmVmb3Jle2NvbnRlbnQ6IlxmMDllIn0udWstaWNvbi1oZGQtbzpiZWZvcmV7Y29udGVudDoiXGYwYTAifS51ay1pY29uLWJ1bGxob3JuOmJlZm9yZXtjb250ZW50OiJcZjBhMSJ9LnVrLWljb24tYmVsbDpiZWZvcmV7Y29udGVudDoiXGYwZjMifS51ay1pY29uLWNlcnRpZmljYXRlOmJlZm9yZXtjb250ZW50OiJcZjBhMyJ9LnVrLWljb24taGFuZC1vLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjBhNCJ9LnVrLWljb24taGFuZC1vLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGE1In0udWstaWNvbi1oYW5kLW8tdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMGE2In0udWstaWNvbi1oYW5kLW8tZG93bjpiZWZvcmV7Y29udGVudDoiXGYwYTcifS51ay1pY29uLWFycm93LWNpcmNsZS1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjBhOCJ9LnVrLWljb24tYXJyb3ctY2lyY2xlLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjBhOSJ9LnVrLWljb24tYXJyb3ctY2lyY2xlLXVwOmJlZm9yZXtjb250ZW50OiJcZjBhYSJ9LnVrLWljb24tYXJyb3ctY2lyY2xlLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMGFiIn0udWstaWNvbi1nbG9iZTpiZWZvcmV7Y29udGVudDoiXGYwYWMifS51ay1pY29uLXdyZW5jaDpiZWZvcmV7Y29udGVudDoiXGYwYWQifS51ay1pY29uLXRhc2tzOmJlZm9yZXtjb250ZW50OiJcZjBhZSJ9LnVrLWljb24tZmlsdGVyOmJlZm9yZXtjb250ZW50OiJcZjBiMCJ9LnVrLWljb24tYnJpZWZjYXNlOmJlZm9yZXtjb250ZW50OiJcZjBiMSJ9LnVrLWljb24tYXJyb3dzLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwYjIifS51ay1pY29uLWdyb3VwOmJlZm9yZSwudWstaWNvbi11c2VyczpiZWZvcmV7Y29udGVudDoiXGYwYzAifS51ay1pY29uLWNoYWluOmJlZm9yZSwudWstaWNvbi1saW5rOmJlZm9yZXtjb250ZW50OiJcZjBjMSJ9LnVrLWljb24tY2xvdWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGMyIn0udWstaWNvbi1mbGFzazpiZWZvcmV7Y29udGVudDoiXGYwYzMifS51ay1pY29uLWN1dDpiZWZvcmUsLnVrLWljb24tc2Npc3NvcnM6YmVmb3Jle2NvbnRlbnQ6IlxmMGM0In0udWstaWNvbi1jb3B5OmJlZm9yZSwudWstaWNvbi1maWxlcy1vOmJlZm9yZXtjb250ZW50OiJcZjBjNSJ9LnVrLWljb24tcGFwZXJjbGlwOmJlZm9yZXtjb250ZW50OiJcZjBjNiJ9LnVrLWljb24tZmxvcHB5LW86YmVmb3JlLC51ay1pY29uLXNhdmU6YmVmb3Jle2NvbnRlbnQ6IlxmMGM3In0udWstaWNvbi1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMGM4In0udWstaWNvbi1iYXJzOmJlZm9yZSwudWstaWNvbi1uYXZpY29uOmJlZm9yZSwudWstaWNvbi1yZW9yZGVyOmJlZm9yZXtjb250ZW50OiJcZjBjOSJ9LnVrLWljb24tbGlzdC11bDpiZWZvcmV7Y29udGVudDoiXGYwY2EifS51ay1pY29uLWxpc3Qtb2w6YmVmb3Jle2NvbnRlbnQ6IlxmMGNiIn0udWstaWNvbi1zdHJpa2V0aHJvdWdoOmJlZm9yZXtjb250ZW50OiJcZjBjYyJ9LnVrLWljb24tdW5kZXJsaW5lOmJlZm9yZXtjb250ZW50OiJcZjBjZCJ9LnVrLWljb24tdGFibGU6YmVmb3Jle2NvbnRlbnQ6IlxmMGNlIn0udWstaWNvbi1tYWdpYzpiZWZvcmV7Y29udGVudDoiXGYwZDAifS51ay1pY29uLXRydWNrOmJlZm9yZXtjb250ZW50OiJcZjBkMSJ9LnVrLWljb24tcGludGVyZXN0OmJlZm9yZXtjb250ZW50OiJcZjBkMiJ9LnVrLWljb24tcGludGVyZXN0LXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYwZDMifS51ay1pY29uLWdvb2dsZS1wbHVzLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYwZDQifS51ay1pY29uLWdvb2dsZS1wbHVzOmJlZm9yZXtjb250ZW50OiJcZjBkNSJ9LnVrLWljb24tbW9uZXk6YmVmb3Jle2NvbnRlbnQ6IlxmMGQ2In0udWstaWNvbi1jYXJldC1kb3duOmJlZm9yZXtjb250ZW50OiJcZjBkNyJ9LnVrLWljb24tY2FyZXQtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMGQ4In0udWstaWNvbi1jYXJldC1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjBkOSJ9LnVrLWljb24tY2FyZXQtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGRhIn0udWstaWNvbi1jb2x1bW5zOmJlZm9yZXtjb250ZW50OiJcZjBkYiJ9LnVrLWljb24tc29ydDpiZWZvcmUsLnVrLWljb24tdW5zb3J0ZWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGRjIn0udWstaWNvbi1zb3J0LWRlc2M6YmVmb3JlLC51ay1pY29uLXNvcnQtZG93bjpiZWZvcmV7Y29udGVudDoiXGYwZGQifS51ay1pY29uLXNvcnQtYXNjOmJlZm9yZSwudWstaWNvbi1zb3J0LXVwOmJlZm9yZXtjb250ZW50OiJcZjBkZSJ9LnVrLWljb24tZW52ZWxvcGU6YmVmb3Jle2NvbnRlbnQ6IlxmMGUwIn0udWstaWNvbi1saW5rZWRpbjpiZWZvcmV7Y29udGVudDoiXGYwZTEifS51ay1pY29uLXJvdGF0ZS1sZWZ0OmJlZm9yZSwudWstaWNvbi11bmRvOmJlZm9yZXtjb250ZW50OiJcZjBlMiJ9LnVrLWljb24tZ2F2ZWw6YmVmb3JlLC51ay1pY29uLWxlZ2FsOmJlZm9yZXtjb250ZW50OiJcZjBlMyJ9LnVrLWljb24tZGFzaGJvYXJkOmJlZm9yZSwudWstaWNvbi10YWNob21ldGVyOmJlZm9yZXtjb250ZW50OiJcZjBlNCJ9LnVrLWljb24tY29tbWVudC1vOmJlZm9yZXtjb250ZW50OiJcZjBlNSJ9LnVrLWljb24tY29tbWVudHMtbzpiZWZvcmV7Y29udGVudDoiXGYwZTYifS51ay1pY29uLWJvbHQ6YmVmb3JlLC51ay1pY29uLWZsYXNoOmJlZm9yZXtjb250ZW50OiJcZjBlNyJ9LnVrLWljb24tc2l0ZW1hcDpiZWZvcmV7Y29udGVudDoiXGYwZTgifS51ay1pY29uLXVtYnJlbGxhOmJlZm9yZXtjb250ZW50OiJcZjBlOSJ9LnVrLWljb24tY2xpcGJvYXJkOmJlZm9yZSwudWstaWNvbi1wYXN0ZTpiZWZvcmV7Y29udGVudDoiXGYwZWEifS51ay1pY29uLWxpZ2h0YnVsYi1vOmJlZm9yZXtjb250ZW50OiJcZjBlYiJ9LnVrLWljb24tZXhjaGFuZ2U6YmVmb3Jle2NvbnRlbnQ6IlxmMGVjIn0udWstaWNvbi1jbG91ZC1kb3dubG9hZDpiZWZvcmV7Y29udGVudDoiXGYwZWQifS51ay1pY29uLWNsb3VkLXVwbG9hZDpiZWZvcmV7Y29udGVudDoiXGYwZWUifS51ay1pY29uLXVzZXItbWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGYwIn0udWstaWNvbi1zdGV0aG9zY29wZTpiZWZvcmV7Y29udGVudDoiXGYwZjEifS51ay1pY29uLXN1aXRjYXNlOmJlZm9yZXtjb250ZW50OiJcZjBmMiJ9LnVrLWljb24tYmVsbC1vOmJlZm9yZXtjb250ZW50OiJcZjBhMiJ9LnVrLWljb24tY29mZmVlOmJlZm9yZXtjb250ZW50OiJcZjBmNCJ9LnVrLWljb24tY3V0bGVyeTpiZWZvcmV7Y29udGVudDoiXGYwZjUifS51ay1pY29uLWZpbGUtdGV4dC1vOmJlZm9yZXtjb250ZW50OiJcZjBmNiJ9LnVrLWljb24tYnVpbGRpbmctbzpiZWZvcmV7Y29udGVudDoiXGYwZjcifS51ay1pY29uLWhvc3BpdGFsLW86YmVmb3Jle2NvbnRlbnQ6IlxmMGY4In0udWstaWNvbi1hbWJ1bGFuY2U6YmVmb3Jle2NvbnRlbnQ6IlxmMGY5In0udWstaWNvbi1tZWRraXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGZhIn0udWstaWNvbi1maWdodGVyLWpldDpiZWZvcmV7Y29udGVudDoiXGYwZmIifS51ay1pY29uLWJlZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMGZjIn0udWstaWNvbi1oLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYwZmQifS51ay1pY29uLXBsdXMtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjBmZSJ9LnVrLWljb24tYW5nbGUtZG91YmxlLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTAwIn0udWstaWNvbi1hbmdsZS1kb3VibGUtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTAxIn0udWstaWNvbi1hbmdsZS1kb3VibGUtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMTAyIn0udWstaWNvbi1hbmdsZS1kb3VibGUtZG93bjpiZWZvcmV7Y29udGVudDoiXGYxMDMifS51ay1pY29uLWFuZ2xlLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTA0In0udWstaWNvbi1hbmdsZS1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYxMDUifS51ay1pY29uLWFuZ2xlLXVwOmJlZm9yZXtjb250ZW50OiJcZjEwNiJ9LnVrLWljb24tYW5nbGUtZG93bjpiZWZvcmV7Y29udGVudDoiXGYxMDcifS51ay1pY29uLWRlc2t0b3A6YmVmb3Jle2NvbnRlbnQ6IlxmMTA4In0udWstaWNvbi1sYXB0b3A6YmVmb3Jle2NvbnRlbnQ6IlxmMTA5In0udWstaWNvbi10YWJsZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTBhIn0udWstaWNvbi1tb2JpbGUtcGhvbmU6YmVmb3JlLC51ay1pY29uLW1vYmlsZTpiZWZvcmV7Y29udGVudDoiXGYxMGIifS51ay1pY29uLWNpcmNsZS1vOmJlZm9yZXtjb250ZW50OiJcZjEwYyJ9LnVrLWljb24tcXVvdGUtbGVmdDpiZWZvcmV7Y29udGVudDoiXGYxMGQifS51ay1pY29uLXF1b3RlLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjEwZSJ9LnVrLWljb24tc3Bpbm5lcjpiZWZvcmV7Y29udGVudDoiXGYxMTAifS51ay1pY29uLWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYxMTEifS51ay1pY29uLW1haWwtcmVwbHk6YmVmb3JlLC51ay1pY29uLXJlcGx5OmJlZm9yZXtjb250ZW50OiJcZjExMiJ9LnVrLWljb24tZ2l0aHViLWFsdDpiZWZvcmV7Y29udGVudDoiXGYxMTMifS51ay1pY29uLWZvbGRlci1vOmJlZm9yZXtjb250ZW50OiJcZjExNCJ9LnVrLWljb24tZm9sZGVyLW9wZW4tbzpiZWZvcmV7Y29udGVudDoiXGYxMTUifS51ay1pY29uLXNtaWxlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMTE4In0udWstaWNvbi1mcm93bi1vOmJlZm9yZXtjb250ZW50OiJcZjExOSJ9LnVrLWljb24tbWVoLW86YmVmb3Jle2NvbnRlbnQ6IlxmMTFhIn0udWstaWNvbi1nYW1lcGFkOmJlZm9yZXtjb250ZW50OiJcZjExYiJ9LnVrLWljb24ta2V5Ym9hcmQtbzpiZWZvcmV7Y29udGVudDoiXGYxMWMifS51ay1pY29uLWZsYWctbzpiZWZvcmV7Y29udGVudDoiXGYxMWQifS51ay1pY29uLWZsYWctY2hlY2tlcmVkOmJlZm9yZXtjb250ZW50OiJcZjExZSJ9LnVrLWljb24tdGVybWluYWw6YmVmb3Jle2NvbnRlbnQ6IlxmMTIwIn0udWstaWNvbi1jb2RlOmJlZm9yZXtjb250ZW50OiJcZjEyMSJ9LnVrLWljb24tbWFpbC1yZXBseS1hbGw6YmVmb3JlLC51ay1pY29uLXJlcGx5LWFsbDpiZWZvcmV7Y29udGVudDoiXGYxMjIifS51ay1pY29uLXN0YXItaGFsZi1lbXB0eTpiZWZvcmUsLnVrLWljb24tc3Rhci1oYWxmLWZ1bGw6YmVmb3JlLC51ay1pY29uLXN0YXItaGFsZi1vOmJlZm9yZXtjb250ZW50OiJcZjEyMyJ9LnVrLWljb24tbG9jYXRpb24tYXJyb3c6YmVmb3Jle2NvbnRlbnQ6IlxmMTI0In0udWstaWNvbi1jcm9wOmJlZm9yZXtjb250ZW50OiJcZjEyNSJ9LnVrLWljb24tY29kZS1mb3JrOmJlZm9yZXtjb250ZW50OiJcZjEyNiJ9LnVrLWljb24tY2hhaW4tYnJva2VuOmJlZm9yZSwudWstaWNvbi11bmxpbms6YmVmb3Jle2NvbnRlbnQ6IlxmMTI3In0udWstaWNvbi1xdWVzdGlvbjpiZWZvcmV7Y29udGVudDoiXGYxMjgifS51ay1pY29uLWluZm86YmVmb3Jle2NvbnRlbnQ6IlxmMTI5In0udWstaWNvbi1leGNsYW1hdGlvbjpiZWZvcmV7Y29udGVudDoiXGYxMmEifS51ay1pY29uLXN1cGVyc2NyaXB0OmJlZm9yZXtjb250ZW50OiJcZjEyYiJ9LnVrLWljb24tc3Vic2NyaXB0OmJlZm9yZXtjb250ZW50OiJcZjEyYyJ9LnVrLWljb24tZXJhc2VyOmJlZm9yZXtjb250ZW50OiJcZjEyZCJ9LnVrLWljb24tcHV6emxlLXBpZWNlOmJlZm9yZXtjb250ZW50OiJcZjEyZSJ9LnVrLWljb24tbWljcm9waG9uZTpiZWZvcmV7Y29udGVudDoiXGYxMzAifS51ay1pY29uLW1pY3JvcGhvbmUtc2xhc2g6YmVmb3Jle2NvbnRlbnQ6IlxmMTMxIn0udWstaWNvbi1zaGllbGQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTMyIn0udWstaWNvbi1jYWxlbmRhci1vOmJlZm9yZXtjb250ZW50OiJcZjEzMyJ9LnVrLWljb24tZmlyZS1leHRpbmd1aXNoZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMTM0In0udWstaWNvbi1yb2NrZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTM1In0udWstaWNvbi1tYXhjZG46YmVmb3Jle2NvbnRlbnQ6IlxmMTM2In0udWstaWNvbi1jaGV2cm9uLWNpcmNsZS1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjEzNyJ9LnVrLWljb24tY2hldnJvbi1jaXJjbGUtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTM4In0udWstaWNvbi1jaGV2cm9uLWNpcmNsZS11cDpiZWZvcmV7Y29udGVudDoiXGYxMzkifS51ay1pY29uLWNoZXZyb24tY2lyY2xlLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMTNhIn0udWstaWNvbi1odG1sNTpiZWZvcmV7Y29udGVudDoiXGYxM2IifS51ay1pY29uLWNzczM6YmVmb3Jle2NvbnRlbnQ6IlxmMTNjIn0udWstaWNvbi1hbmNob3I6YmVmb3Jle2NvbnRlbnQ6IlxmMTNkIn0udWstaWNvbi11bmxvY2stYWx0OmJlZm9yZXtjb250ZW50OiJcZjEzZSJ9LnVrLWljb24tYnVsbHNleWU6YmVmb3Jle2NvbnRlbnQ6IlxmMTQwIn0udWstaWNvbi1lbGxpcHNpcy1oOmJlZm9yZXtjb250ZW50OiJcZjE0MSJ9LnVrLWljb24tZWxsaXBzaXMtdjpiZWZvcmV7Y29udGVudDoiXGYxNDIifS51ay1pY29uLXJzcy1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMTQzIn0udWstaWNvbi1wbGF5LWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYxNDQifS51ay1pY29uLXRpY2tldDpiZWZvcmV7Y29udGVudDoiXGYxNDUifS51ay1pY29uLW1pbnVzLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxNDYifS51ay1pY29uLW1pbnVzLXNxdWFyZS1vOmJlZm9yZXtjb250ZW50OiJcZjE0NyJ9LnVrLWljb24tbGV2ZWwtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMTQ4In0udWstaWNvbi1sZXZlbC1kb3duOmJlZm9yZXtjb250ZW50OiJcZjE0OSJ9LnVrLWljb24tY2hlY2stc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE0YSJ9LnVrLWljb24tcGVuY2lsLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxNGIifS51ay1pY29uLWV4dGVybmFsLWxpbmstc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE0YyJ9LnVrLWljb24tc2hhcmUtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE0ZCJ9LnVrLWljb24tY29tcGFzczpiZWZvcmV7Y29udGVudDoiXGYxNGUifS51ay1pY29uLWNhcmV0LXNxdWFyZS1vLWRvd246YmVmb3JlLC51ay1pY29uLXRvZ2dsZS1kb3duOmJlZm9yZXtjb250ZW50OiJcZjE1MCJ9LnVrLWljb24tY2FyZXQtc3F1YXJlLW8tdXA6YmVmb3JlLC51ay1pY29uLXRvZ2dsZS11cDpiZWZvcmV7Y29udGVudDoiXGYxNTEifS51ay1pY29uLWNhcmV0LXNxdWFyZS1vLXJpZ2h0OmJlZm9yZSwudWstaWNvbi10b2dnbGUtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTUyIn0udWstaWNvbi1ldXI6YmVmb3JlLC51ay1pY29uLWV1cm86YmVmb3Jle2NvbnRlbnQ6IlxmMTUzIn0udWstaWNvbi1nYnA6YmVmb3Jle2NvbnRlbnQ6IlxmMTU0In0udWstaWNvbi1kb2xsYXI6YmVmb3JlLC51ay1pY29uLXVzZDpiZWZvcmV7Y29udGVudDoiXGYxNTUifS51ay1pY29uLWlucjpiZWZvcmUsLnVrLWljb24tcnVwZWU6YmVmb3Jle2NvbnRlbnQ6IlxmMTU2In0udWstaWNvbi1jbnk6YmVmb3JlLC51ay1pY29uLWpweTpiZWZvcmUsLnVrLWljb24tcm1iOmJlZm9yZSwudWstaWNvbi15ZW46YmVmb3Jle2NvbnRlbnQ6IlxmMTU3In0udWstaWNvbi1yb3VibGU6YmVmb3JlLC51ay1pY29uLXJ1YjpiZWZvcmUsLnVrLWljb24tcnVibGU6YmVmb3Jle2NvbnRlbnQ6IlxmMTU4In0udWstaWNvbi1rcnc6YmVmb3JlLC51ay1pY29uLXdvbjpiZWZvcmV7Y29udGVudDoiXGYxNTkifS51ay1pY29uLWJpdGNvaW46YmVmb3JlLC51ay1pY29uLWJ0YzpiZWZvcmV7Y29udGVudDoiXGYxNWEifS51ay1pY29uLWZpbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMTViIn0udWstaWNvbi1maWxlLXRleHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTVjIn0udWstaWNvbi1zb3J0LWFscGhhLWFzYzpiZWZvcmV7Y29udGVudDoiXGYxNWQifS51ay1pY29uLXNvcnQtYWxwaGEtZGVzYzpiZWZvcmV7Y29udGVudDoiXGYxNWUifS51ay1pY29uLXNvcnQtYW1vdW50LWFzYzpiZWZvcmV7Y29udGVudDoiXGYxNjAifS51ay1pY29uLXNvcnQtYW1vdW50LWRlc2M6YmVmb3Jle2NvbnRlbnQ6IlxmMTYxIn0udWstaWNvbi1zb3J0LW51bWVyaWMtYXNjOmJlZm9yZXtjb250ZW50OiJcZjE2MiJ9LnVrLWljb24tc29ydC1udW1lcmljLWRlc2M6YmVmb3Jle2NvbnRlbnQ6IlxmMTYzIn0udWstaWNvbi10aHVtYnMtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMTY0In0udWstaWNvbi10aHVtYnMtZG93bjpiZWZvcmV7Y29udGVudDoiXGYxNjUifS51ay1pY29uLXlvdXR1YmUtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE2NiJ9LnVrLWljb24teW91dHViZTpiZWZvcmV7Y29udGVudDoiXGYxNjcifS51ay1pY29uLXhpbmc6YmVmb3Jle2NvbnRlbnQ6IlxmMTY4In0udWstaWNvbi14aW5nLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxNjkifS51ay1pY29uLXlvdXR1YmUtcGxheTpiZWZvcmV7Y29udGVudDoiXGYxNmEifS51ay1pY29uLWRyb3Bib3g6YmVmb3Jle2NvbnRlbnQ6IlxmMTZiIn0udWstaWNvbi1zdGFjay1vdmVyZmxvdzpiZWZvcmV7Y29udGVudDoiXGYxNmMifS51ay1pY29uLWluc3RhZ3JhbTpiZWZvcmV7Y29udGVudDoiXGYxNmQifS51ay1pY29uLWZsaWNrcjpiZWZvcmV7Y29udGVudDoiXGYxNmUifS51ay1pY29uLWFkbjpiZWZvcmV7Y29udGVudDoiXGYxNzAifS51ay1pY29uLWJpdGJ1Y2tldDpiZWZvcmV7Y29udGVudDoiXGYxNzEifS51ay1pY29uLWJpdGJ1Y2tldC1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMTcyIn0udWstaWNvbi10dW1ibHI6YmVmb3Jle2NvbnRlbnQ6IlxmMTczIn0udWstaWNvbi10dW1ibHItc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE3NCJ9LnVrLWljb24tbG9uZy1hcnJvdy1kb3duOmJlZm9yZXtjb250ZW50OiJcZjE3NSJ9LnVrLWljb24tbG9uZy1hcnJvdy11cDpiZWZvcmV7Y29udGVudDoiXGYxNzYifS51ay1pY29uLWxvbmctYXJyb3ctbGVmdDpiZWZvcmV7Y29udGVudDoiXGYxNzcifS51ay1pY29uLWxvbmctYXJyb3ctcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTc4In0udWstaWNvbi1hcHBsZTpiZWZvcmV7Y29udGVudDoiXGYxNzkifS51ay1pY29uLXdpbmRvd3M6YmVmb3Jle2NvbnRlbnQ6IlxmMTdhIn0udWstaWNvbi1hbmRyb2lkOmJlZm9yZXtjb250ZW50OiJcZjE3YiJ9LnVrLWljb24tbGludXg6YmVmb3Jle2NvbnRlbnQ6IlxmMTdjIn0udWstaWNvbi1kcmliYmJsZTpiZWZvcmV7Y29udGVudDoiXGYxN2QifS51ay1pY29uLXNreXBlOmJlZm9yZXtjb250ZW50OiJcZjE3ZSJ9LnVrLWljb24tZm91cnNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxODAifS51ay1pY29uLXRyZWxsbzpiZWZvcmV7Y29udGVudDoiXGYxODEifS51ay1pY29uLWZlbWFsZTpiZWZvcmV7Y29udGVudDoiXGYxODIifS51ay1pY29uLW1hbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMTgzIn0udWstaWNvbi1naXR0aXA6YmVmb3JlLC51ay1pY29uLWdyYXRpcGF5OmJlZm9yZXtjb250ZW50OiJcZjE4NCJ9LnVrLWljb24tc3VuLW86YmVmb3Jle2NvbnRlbnQ6IlxmMTg1In0udWstaWNvbi1tb29uLW86YmVmb3Jle2NvbnRlbnQ6IlxmMTg2In0udWstaWNvbi1hcmNoaXZlOmJlZm9yZXtjb250ZW50OiJcZjE4NyJ9LnVrLWljb24tYnVnOmJlZm9yZXtjb250ZW50OiJcZjE4OCJ9LnVrLWljb24tdms6YmVmb3Jle2NvbnRlbnQ6IlxmMTg5In0udWstaWNvbi13ZWlibzpiZWZvcmV7Y29udGVudDoiXGYxOGEifS51ay1pY29uLXJlbnJlbjpiZWZvcmV7Y29udGVudDoiXGYxOGIifS51ay1pY29uLXBhZ2VsaW5lczpiZWZvcmV7Y29udGVudDoiXGYxOGMifS51ay1pY29uLXN0YWNrLWV4Y2hhbmdlOmJlZm9yZXtjb250ZW50OiJcZjE4ZCJ9LnVrLWljb24tYXJyb3ctY2lyY2xlLW8tcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMThlIn0udWstaWNvbi1hcnJvdy1jaXJjbGUtby1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjE5MCJ9LnVrLWljb24tY2FyZXQtc3F1YXJlLW8tbGVmdDpiZWZvcmUsLnVrLWljb24tdG9nZ2xlLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTkxIn0udWstaWNvbi1kb3QtY2lyY2xlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMTkyIn0udWstaWNvbi13aGVlbGNoYWlyOmJlZm9yZXtjb250ZW50OiJcZjE5MyJ9LnVrLWljb24tdmltZW8tc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE5NCJ9LnVrLWljb24tdHJ5OmJlZm9yZSwudWstaWNvbi10dXJraXNoLWxpcmE6YmVmb3Jle2NvbnRlbnQ6IlxmMTk1In0udWstaWNvbi1wbHVzLXNxdWFyZS1vOmJlZm9yZXtjb250ZW50OiJcZjE5NiJ9LnVrLWljb24tc3BhY2Utc2h1dHRsZTpiZWZvcmV7Y29udGVudDoiXGYxOTcifS51ay1pY29uLXNsYWNrOmJlZm9yZXtjb250ZW50OiJcZjE5OCJ9LnVrLWljb24tZW52ZWxvcGUtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE5OSJ9LnVrLWljb24td29yZHByZXNzOmJlZm9yZXtjb250ZW50OiJcZjE5YSJ9LnVrLWljb24tb3BlbmlkOmJlZm9yZXtjb250ZW50OiJcZjE5YiJ9LnVrLWljb24tYmFuazpiZWZvcmUsLnVrLWljb24taW5zdGl0dXRpb246YmVmb3JlLC51ay1pY29uLXVuaXZlcnNpdHk6YmVmb3Jle2NvbnRlbnQ6IlxmMTljIn0udWstaWNvbi1ncmFkdWF0aW9uLWNhcDpiZWZvcmUsLnVrLWljb24tbW9ydGFyLWJvYXJkOmJlZm9yZXtjb250ZW50OiJcZjE5ZCJ9LnVrLWljb24teWFob286YmVmb3Jle2NvbnRlbnQ6IlxmMTllIn0udWstaWNvbi1nb29nbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMWEwIn0udWstaWNvbi1yZWRkaXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWExIn0udWstaWNvbi1yZWRkaXQtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjFhMiJ9LnVrLWljb24tc3R1bWJsZXVwb24tY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjFhMyJ9LnVrLWljb24tc3R1bWJsZXVwb246YmVmb3Jle2NvbnRlbnQ6IlxmMWE0In0udWstaWNvbi1kZWxpY2lvdXM6YmVmb3Jle2NvbnRlbnQ6IlxmMWE1In0udWstaWNvbi1kaWdnOmJlZm9yZXtjb250ZW50OiJcZjFhNiJ9LnVrLWljb24tcGllZC1waXBlcjpiZWZvcmV7Y29udGVudDoiXGYxYTcifS51ay1pY29uLXBpZWQtcGlwZXItYWx0OmJlZm9yZXtjb250ZW50OiJcZjFhOCJ9LnVrLWljb24tZHJ1cGFsOmJlZm9yZXtjb250ZW50OiJcZjFhOSJ9LnVrLWljb24tam9vbWxhOmJlZm9yZXtjb250ZW50OiJcZjFhYSJ9LnVrLWljb24tbGFuZ3VhZ2U6YmVmb3Jle2NvbnRlbnQ6IlxmMWFiIn0udWstaWNvbi1mYXg6YmVmb3Jle2NvbnRlbnQ6IlxmMWFjIn0udWstaWNvbi1idWlsZGluZzpiZWZvcmV7Y29udGVudDoiXGYxYWQifS51ay1pY29uLWNoaWxkOmJlZm9yZXtjb250ZW50OiJcZjFhZSJ9LnVrLWljb24tcGF3OmJlZm9yZXtjb250ZW50OiJcZjFiMCJ9LnVrLWljb24tc3Bvb246YmVmb3Jle2NvbnRlbnQ6IlxmMWIxIn0udWstaWNvbi1jdWJlOmJlZm9yZXtjb250ZW50OiJcZjFiMiJ9LnVrLWljb24tY3ViZXM6YmVmb3Jle2NvbnRlbnQ6IlxmMWIzIn0udWstaWNvbi1iZWhhbmNlOmJlZm9yZXtjb250ZW50OiJcZjFiNCJ9LnVrLWljb24tYmVoYW5jZS1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMWI1In0udWstaWNvbi1zdGVhbTpiZWZvcmV7Y29udGVudDoiXGYxYjYifS51ay1pY29uLXN0ZWFtLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxYjcifS51ay1pY29uLXJlY3ljbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMWI4In0udWstaWNvbi1hdXRvbW9iaWxlOmJlZm9yZSwudWstaWNvbi1jYXI6YmVmb3Jle2NvbnRlbnQ6IlxmMWI5In0udWstaWNvbi1jYWI6YmVmb3JlLC51ay1pY29uLXRheGk6YmVmb3Jle2NvbnRlbnQ6IlxmMWJhIn0udWstaWNvbi10cmVlOmJlZm9yZXtjb250ZW50OiJcZjFiYiJ9LnVrLWljb24tc3BvdGlmeTpiZWZvcmV7Y29udGVudDoiXGYxYmMifS51ay1pY29uLWRldmlhbnRhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWJkIn0udWstaWNvbi1zb3VuZGNsb3VkOmJlZm9yZXtjb250ZW50OiJcZjFiZSJ9LnVrLWljb24tZGF0YWJhc2U6YmVmb3Jle2NvbnRlbnQ6IlxmMWMwIn0udWstaWNvbi1maWxlLXBkZi1vOmJlZm9yZXtjb250ZW50OiJcZjFjMSJ9LnVrLWljb24tZmlsZS13b3JkLW86YmVmb3Jle2NvbnRlbnQ6IlxmMWMyIn0udWstaWNvbi1maWxlLWV4Y2VsLW86YmVmb3Jle2NvbnRlbnQ6IlxmMWMzIn0udWstaWNvbi1maWxlLXBvd2VycG9pbnQtbzpiZWZvcmV7Y29udGVudDoiXGYxYzQifS51ay1pY29uLWZpbGUtaW1hZ2UtbzpiZWZvcmUsLnVrLWljb24tZmlsZS1waG90by1vOmJlZm9yZSwudWstaWNvbi1maWxlLXBpY3R1cmUtbzpiZWZvcmV7Y29udGVudDoiXGYxYzUifS51ay1pY29uLWZpbGUtYXJjaGl2ZS1vOmJlZm9yZSwudWstaWNvbi1maWxlLXppcC1vOmJlZm9yZXtjb250ZW50OiJcZjFjNiJ9LnVrLWljb24tZmlsZS1hdWRpby1vOmJlZm9yZSwudWstaWNvbi1maWxlLXNvdW5kLW86YmVmb3Jle2NvbnRlbnQ6IlxmMWM3In0udWstaWNvbi1maWxlLW1vdmllLW86YmVmb3JlLC51ay1pY29uLWZpbGUtdmlkZW8tbzpiZWZvcmV7Y29udGVudDoiXGYxYzgifS51ay1pY29uLWZpbGUtY29kZS1vOmJlZm9yZXtjb250ZW50OiJcZjFjOSJ9LnVrLWljb24tdmluZTpiZWZvcmV7Y29udGVudDoiXGYxY2EifS51ay1pY29uLWNvZGVwZW46YmVmb3Jle2NvbnRlbnQ6IlxmMWNiIn0udWstaWNvbi1qc2ZpZGRsZTpiZWZvcmV7Y29udGVudDoiXGYxY2MifS51ay1pY29uLWxpZmUtYm91eTpiZWZvcmUsLnVrLWljb24tbGlmZS1idW95OmJlZm9yZSwudWstaWNvbi1saWZlLXJpbmc6YmVmb3JlLC51ay1pY29uLWxpZmUtc2F2ZXI6YmVmb3JlLC51ay1pY29uLXN1cHBvcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWNkIn0udWstaWNvbi1jaXJjbGUtby1ub3RjaDpiZWZvcmV7Y29udGVudDoiXGYxY2UifS51ay1pY29uLXJhOmJlZm9yZSwudWstaWNvbi1yZWJlbDpiZWZvcmV7Y29udGVudDoiXGYxZDAifS51ay1pY29uLWVtcGlyZTpiZWZvcmUsLnVrLWljb24tZ2U6YmVmb3Jle2NvbnRlbnQ6IlxmMWQxIn0udWstaWNvbi1naXQtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjFkMiJ9LnVrLWljb24tZ2l0OmJlZm9yZXtjb250ZW50OiJcZjFkMyJ9LnVrLWljb24taGFja2VyLW5ld3M6YmVmb3Jle2NvbnRlbnQ6IlxmMWQ0In0udWstaWNvbi10ZW5jZW50LXdlaWJvOmJlZm9yZXtjb250ZW50OiJcZjFkNSJ9LnVrLWljb24tcXE6YmVmb3Jle2NvbnRlbnQ6IlxmMWQ2In0udWstaWNvbi13ZWNoYXQ6YmVmb3JlLC51ay1pY29uLXdlaXhpbjpiZWZvcmV7Y29udGVudDoiXGYxZDcifS51ay1pY29uLXBhcGVyLXBsYW5lOmJlZm9yZSwudWstaWNvbi1zZW5kOmJlZm9yZXtjb250ZW50OiJcZjFkOCJ9LnVrLWljb24tcGFwZXItcGxhbmUtbzpiZWZvcmUsLnVrLWljb24tc2VuZC1vOmJlZm9yZXtjb250ZW50OiJcZjFkOSJ9LnVrLWljb24taGlzdG9yeTpiZWZvcmV7Y29udGVudDoiXGYxZGEifS51ay1pY29uLWNpcmNsZS10aGluOmJlZm9yZSwudWstaWNvbi1nZW5kZXJsZXNzOmJlZm9yZXtjb250ZW50OiJcZjFkYiJ9LnVrLWljb24taGVhZGVyOmJlZm9yZXtjb250ZW50OiJcZjFkYyJ9LnVrLWljb24tcGFyYWdyYXBoOmJlZm9yZXtjb250ZW50OiJcZjFkZCJ9LnVrLWljb24tc2xpZGVyczpiZWZvcmV7Y29udGVudDoiXGYxZGUifS51ay1pY29uLXNoYXJlLWFsdDpiZWZvcmV7Y29udGVudDoiXGYxZTAifS51ay1pY29uLXNoYXJlLWFsdC1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMWUxIn0udWstaWNvbi1ib21iOmJlZm9yZXtjb250ZW50OiJcZjFlMiJ9LnVrLWljb24tZnV0Ym9sLW86YmVmb3JlLC51ay1pY29uLXNvY2Nlci1iYWxsLW86YmVmb3Jle2NvbnRlbnQ6IlxmMWUzIn0udWstaWNvbi10dHk6YmVmb3Jle2NvbnRlbnQ6IlxmMWU0In0udWstaWNvbi1iaW5vY3VsYXJzOmJlZm9yZXtjb250ZW50OiJcZjFlNSJ9LnVrLWljb24tcGx1ZzpiZWZvcmV7Y29udGVudDoiXGYxZTYifS51ay1pY29uLXNsaWRlc2hhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMWU3In0udWstaWNvbi10d2l0Y2g6YmVmb3Jle2NvbnRlbnQ6IlxmMWU4In0udWstaWNvbi15ZWxwOmJlZm9yZXtjb250ZW50OiJcZjFlOSJ9LnVrLWljb24tbmV3c3BhcGVyLW86YmVmb3Jle2NvbnRlbnQ6IlxmMWVhIn0udWstaWNvbi13aWZpOmJlZm9yZXtjb250ZW50OiJcZjFlYiJ9LnVrLWljb24tY2FsY3VsYXRvcjpiZWZvcmV7Y29udGVudDoiXGYxZWMifS51ay1pY29uLXBheXBhbDpiZWZvcmV7Y29udGVudDoiXGYxZWQifS51ay1pY29uLWdvb2dsZS13YWxsZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWVlIn0udWstaWNvbi1jYy12aXNhOmJlZm9yZXtjb250ZW50OiJcZjFmMCJ9LnVrLWljb24tY2MtbWFzdGVyY2FyZDpiZWZvcmV7Y29udGVudDoiXGYxZjEifS51ay1pY29uLWNjLWRpc2NvdmVyOmJlZm9yZXtjb250ZW50OiJcZjFmMiJ9LnVrLWljb24tY2MtYW1leDpiZWZvcmV7Y29udGVudDoiXGYxZjMifS51ay1pY29uLWNjLXBheXBhbDpiZWZvcmV7Y29udGVudDoiXGYxZjQifS51ay1pY29uLWNjLXN0cmlwZTpiZWZvcmV7Y29udGVudDoiXGYxZjUifS51ay1pY29uLWJlbGwtc2xhc2g6YmVmb3Jle2NvbnRlbnQ6IlxmMWY2In0udWstaWNvbi1iZWxsLXNsYXNoLW86YmVmb3Jle2NvbnRlbnQ6IlxmMWY3In0udWstaWNvbi10cmFzaDpiZWZvcmV7Y29udGVudDoiXGYxZjgifS51ay1pY29uLWNvcHlyaWdodDpiZWZvcmV7Y29udGVudDoiXGYxZjkifS51ay1pY29uLWF0OmJlZm9yZXtjb250ZW50OiJcZjFmYSJ9LnVrLWljb24tZXllZHJvcHBlcjpiZWZvcmV7Y29udGVudDoiXGYxZmIifS51ay1pY29uLXBhaW50LWJydXNoOmJlZm9yZXtjb250ZW50OiJcZjFmYyJ9LnVrLWljb24tYmlydGhkYXktY2FrZTpiZWZvcmV7Y29udGVudDoiXGYxZmQifS51ay1pY29uLWFyZWEtY2hhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWZlIn0udWstaWNvbi1waWUtY2hhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjAwIn0udWstaWNvbi1saW5lLWNoYXJ0OmJlZm9yZXtjb250ZW50OiJcZjIwMSJ9LnVrLWljb24tbGFzdGZtOmJlZm9yZXtjb250ZW50OiJcZjIwMiJ9LnVrLWljb24tbGFzdGZtLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYyMDMifS51ay1pY29uLXRvZ2dsZS1vZmY6YmVmb3Jle2NvbnRlbnQ6IlxmMjA0In0udWstaWNvbi10b2dnbGUtb246YmVmb3Jle2NvbnRlbnQ6IlxmMjA1In0udWstaWNvbi1iaWN5Y2xlOmJlZm9yZXtjb250ZW50OiJcZjIwNiJ9LnVrLWljb24tYnVzOmJlZm9yZXtjb250ZW50OiJcZjIwNyJ9LnVrLWljb24taW94aG9zdDpiZWZvcmV7Y29udGVudDoiXGYyMDgifS51ay1pY29uLWFuZ2VsbGlzdDpiZWZvcmV7Y29udGVudDoiXGYyMDkifS51ay1pY29uLWNjOmJlZm9yZXtjb250ZW50OiJcZjIwYSJ9LnVrLWljb24taWxzOmJlZm9yZSwudWstaWNvbi1zaGVrZWw6YmVmb3JlLC51ay1pY29uLXNoZXFlbDpiZWZvcmV7Y29udGVudDoiXGYyMGIifS51ay1pY29uLW1lYW5wYXRoOmJlZm9yZXtjb250ZW50OiJcZjIwYyJ9LnVrLWljb24tYnV5c2VsbGFkczpiZWZvcmV7Y29udGVudDoiXGYyMGQifS51ay1pY29uLWNvbm5lY3RkZXZlbG9wOmJlZm9yZXtjb250ZW50OiJcZjIwZSJ9LnVrLWljb24tZGFzaGN1YmU6YmVmb3Jle2NvbnRlbnQ6IlxmMjEwIn0udWstaWNvbi1mb3J1bWJlZTpiZWZvcmV7Y29udGVudDoiXGYyMTEifS51ay1pY29uLWxlYW5wdWI6YmVmb3Jle2NvbnRlbnQ6IlxmMjEyIn0udWstaWNvbi1zZWxsc3k6YmVmb3Jle2NvbnRlbnQ6IlxmMjEzIn0udWstaWNvbi1zaGlydHNpbmJ1bGs6YmVmb3Jle2NvbnRlbnQ6IlxmMjE0In0udWstaWNvbi1zaW1wbHlidWlsdDpiZWZvcmV7Y29udGVudDoiXGYyMTUifS51ay1pY29uLXNreWF0bGFzOmJlZm9yZXtjb250ZW50OiJcZjIxNiJ9LnVrLWljb24tY2FydC1wbHVzOmJlZm9yZXtjb250ZW50OiJcZjIxNyJ9LnVrLWljb24tY2FydC1hcnJvdy1kb3duOmJlZm9yZXtjb250ZW50OiJcZjIxOCJ9LnVrLWljb24tZGlhbW9uZDpiZWZvcmV7Y29udGVudDoiXGYyMTkifS51ay1pY29uLXNoaXA6YmVmb3Jle2NvbnRlbnQ6IlxmMjFhIn0udWstaWNvbi11c2VyLXNlY3JldDpiZWZvcmV7Y29udGVudDoiXGYyMWIifS51ay1pY29uLW1vdG9yY3ljbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMjFjIn0udWstaWNvbi1zdHJlZXQtdmlldzpiZWZvcmV7Y29udGVudDoiXGYyMWQifS51ay1pY29uLWhlYXJ0YmVhdDpiZWZvcmV7Y29udGVudDoiXGYyMWUifS51ay1pY29uLXZlbnVzOmJlZm9yZXtjb250ZW50OiJcZjIyMSJ9LnVrLWljb24tbWFyczpiZWZvcmV7Y29udGVudDoiXGYyMjIifS51ay1pY29uLW1lcmN1cnk6YmVmb3Jle2NvbnRlbnQ6IlxmMjIzIn0udWstaWNvbi10cmFuc2dlbmRlcjpiZWZvcmV7Y29udGVudDoiXGYyMjQifS51ay1pY29uLXRyYW5zZ2VuZGVyLWFsdDpiZWZvcmV7Y29udGVudDoiXGYyMjUifS51ay1pY29uLXZlbnVzLWRvdWJsZTpiZWZvcmV7Y29udGVudDoiXGYyMjYifS51ay1pY29uLW1hcnMtZG91YmxlOmJlZm9yZXtjb250ZW50OiJcZjIyNyJ9LnVrLWljb24tdmVudXMtbWFyczpiZWZvcmV7Y29udGVudDoiXGYyMjgifS51ay1pY29uLW1hcnMtc3Ryb2tlOmJlZm9yZXtjb250ZW50OiJcZjIyOSJ9LnVrLWljb24tbWFycy1zdHJva2UtdjpiZWZvcmV7Y29udGVudDoiXGYyMmEifS51ay1pY29uLW1hcnMtc3Ryb2tlLWg6YmVmb3Jle2NvbnRlbnQ6IlxmMjJiIn0udWstaWNvbi1uZXV0ZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMjJjIn0udWstaWNvbi1mYWNlYm9vay1vZmZpY2lhbDpiZWZvcmV7Y29udGVudDoiXGYyMzAifS51ay1pY29uLXBpbnRlcmVzdC1wOmJlZm9yZXtjb250ZW50OiJcZjIzMSJ9LnVrLWljb24td2hhdHNhcHA6YmVmb3Jle2NvbnRlbnQ6IlxmMjMyIn0udWstaWNvbi1zZXJ2ZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMjMzIn0udWstaWNvbi11c2VyLXBsdXM6YmVmb3Jle2NvbnRlbnQ6IlxmMjM0In0udWstaWNvbi11c2VyLXRpbWVzOmJlZm9yZXtjb250ZW50OiJcZjIzNSJ9LnVrLWljb24tYmVkOmJlZm9yZSwudWstaWNvbi1ob3RlbDpiZWZvcmV7Y29udGVudDoiXGYyMzYifS51ay1pY29uLXZpYWNvaW46YmVmb3Jle2NvbnRlbnQ6IlxmMjM3In0udWstaWNvbi10cmFpbjpiZWZvcmV7Y29udGVudDoiXGYyMzgifS51ay1pY29uLXN1YndheTpiZWZvcmV7Y29udGVudDoiXGYyMzkifS51ay1pY29uLW1lZGl1bS1sb2dvOmJlZm9yZXtjb250ZW50OiJcZjIzYSJ9LnVrLWljb24tNTAwcHg6YmVmb3Jle2NvbnRlbnQ6IlxmMjZlIn0udWstaWNvbi1hbWF6b246YmVmb3Jle2NvbnRlbnQ6IlxmMjcwIn0udWstaWNvbi1iYWxhbmNlLXNjYWxlOmJlZm9yZXtjb250ZW50OiJcZjI0ZSJ9LnVrLWljb24tYmF0dGVyeS0wOmJlZm9yZSwudWstaWNvbi1iYXR0ZXJ5LWVtcHR5OmJlZm9yZXtjb250ZW50OiJcZjI0NCJ9LnVrLWljb24tYmF0dGVyeS0xOmJlZm9yZSwudWstaWNvbi1iYXR0ZXJ5LXF1YXJ0ZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMjQzIn0udWstaWNvbi1iYXR0ZXJ5LTI6YmVmb3JlLC51ay1pY29uLWJhdHRlcnktaGFsZjpiZWZvcmV7Y29udGVudDoiXGYyNDIifS51ay1pY29uLWJhdHRlcnktMzpiZWZvcmUsLnVrLWljb24tYmF0dGVyeS10aHJlZS1xdWFydGVyczpiZWZvcmV7Y29udGVudDoiXGYyNDEifS51ay1pY29uLWJhdHRlcnktNDpiZWZvcmUsLnVrLWljb24tYmF0dGVyeS1mdWxsOmJlZm9yZXtjb250ZW50OiJcZjI0MCJ9LnVrLWljb24tYmxhY2stdGllOmJlZm9yZXtjb250ZW50OiJcZjI3ZSJ9LnVrLWljb24tY2FsZW5kYXItY2hlY2stbzpiZWZvcmV7Y29udGVudDoiXGYyNzQifS51ay1pY29uLWNhbGVuZGFyLW1pbnVzLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjcyIn0udWstaWNvbi1jYWxlbmRhci1wbHVzLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjcxIn0udWstaWNvbi1jYWxlbmRhci10aW1lcy1vOmJlZm9yZXtjb250ZW50OiJcZjI3MyJ9LnVrLWljb24tY2MtZGluZXJzLWNsdWI6YmVmb3Jle2NvbnRlbnQ6IlxmMjRjIn0udWstaWNvbi1jYy1qY2I6YmVmb3Jle2NvbnRlbnQ6IlxmMjRiIn0udWstaWNvbi1jaHJvbWU6YmVmb3Jle2NvbnRlbnQ6IlxmMjY4In0udWstaWNvbi1jbG9uZTpiZWZvcmV7Y29udGVudDoiXGYyNGQifS51ay1pY29uLWNvbW1lbnRpbmc6YmVmb3Jle2NvbnRlbnQ6IlxmMjdhIn0udWstaWNvbi1jb21tZW50aW5nLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjdiIn0udWstaWNvbi1jb250YW86YmVmb3Jle2NvbnRlbnQ6IlxmMjZkIn0udWstaWNvbi1jcmVhdGl2ZS1jb21tb25zOmJlZm9yZXtjb250ZW50OiJcZjI1ZSJ9LnVrLWljb24tZXhwZWRpdGVkc3NsOmJlZm9yZXtjb250ZW50OiJcZjIzZSJ9LnVrLWljb24tZmlyZWZveDpiZWZvcmV7Y29udGVudDoiXGYyNjkifS51ay1pY29uLWZvbnRpY29uczpiZWZvcmV7Y29udGVudDoiXGYyODAifS51ay1pY29uLWdldC1wb2NrZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjY1In0udWstaWNvbi1nZzpiZWZvcmV7Y29udGVudDoiXGYyNjAifS51ay1pY29uLWdnLWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYyNjEifS51ay1pY29uLWhhbmQtbGl6YXJkLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjU4In0udWstaWNvbi1oYW5kLXBhcGVyLW86YmVmb3JlLC51ay1pY29uLWhhbmQtc3RvcC1vOmJlZm9yZXtjb250ZW50OiJcZjI1NiJ9LnVrLWljb24taGFuZC1wZWFjZS1vOmJlZm9yZXtjb250ZW50OiJcZjI1YiJ9LnVrLWljb24taGFuZC1wb2ludGVyLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjVhIn0udWstaWNvbi1oYW5kLWdyYWItbzpiZWZvcmUsLnVrLWljb24taGFuZC1yb2NrLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjU1In0udWstaWNvbi1oYW5kLXNjaXNzb3JzLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjU3In0udWstaWNvbi1oYW5kLXNwb2NrLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjU5In0udWstaWNvbi1ob3VyZ2xhc3M6YmVmb3Jle2NvbnRlbnQ6IlxmMjU0In0udWstaWNvbi1ob3VyZ2xhc3MtbzpiZWZvcmV7Y29udGVudDoiXGYyNTAifS51ay1pY29uLWhvdXJnbGFzcy0xOmJlZm9yZSwudWstaWNvbi1ob3VyZ2xhc3Mtc3RhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjUxIn0udWstaWNvbi1ob3VyZ2xhc3MtMjpiZWZvcmUsLnVrLWljb24taG91cmdsYXNzLWhhbGY6YmVmb3Jle2NvbnRlbnQ6IlxmMjUyIn0udWstaWNvbi1ob3VyZ2xhc3MtMzpiZWZvcmUsLnVrLWljb24taG91cmdsYXNzLWVuZDpiZWZvcmV7Y29udGVudDoiXGYyNTMifS51ay1pY29uLWhvdXp6OmJlZm9yZXtjb250ZW50OiJcZjI3YyJ9LnVrLWljb24taS1jdXJzb3I6YmVmb3Jle2NvbnRlbnQ6IlxmMjQ2In0udWstaWNvbi1pbmR1c3RyeTpiZWZvcmV7Y29udGVudDoiXGYyNzUifS51ay1pY29uLWludGVybmV0LWV4cGxvcmVyOmJlZm9yZXtjb250ZW50OiJcZjI2YiJ9LnVrLWljb24tbWFwOmJlZm9yZXtjb250ZW50OiJcZjI3OSJ9LnVrLWljb24tbWFwLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjc4In0udWstaWNvbi1tYXAtcGluOmJlZm9yZXtjb250ZW50OiJcZjI3NiJ9LnVrLWljb24tbWFwLXNpZ25zOmJlZm9yZXtjb250ZW50OiJcZjI3NyJ9LnVrLWljb24tbW91c2UtcG9pbnRlcjpiZWZvcmV7Y29udGVudDoiXGYyNDUifS51ay1pY29uLW9iamVjdC1ncm91cDpiZWZvcmV7Y29udGVudDoiXGYyNDcifS51ay1pY29uLW9iamVjdC11bmdyb3VwOmJlZm9yZXtjb250ZW50OiJcZjI0OCJ9LnVrLWljb24tb2Rub2tsYXNzbmlraTpiZWZvcmV7Y29udGVudDoiXGYyNjMifS51ay1pY29uLW9kbm9rbGFzc25pa2ktc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjI2NCJ9LnVrLWljb24tb3BlbmNhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjNkIn0udWstaWNvbi1vcGVyYTpiZWZvcmV7Y29udGVudDoiXGYyNmEifS51ay1pY29uLW9wdGluLW1vbnN0ZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMjNjIn0udWstaWNvbi1yZWdpc3RlcmVkOmJlZm9yZXtjb250ZW50OiJcZjI1ZCJ9LnVrLWljb24tc2FmYXJpOmJlZm9yZXtjb250ZW50OiJcZjI2NyJ9LnVrLWljb24tc3RpY2t5LW5vdGU6YmVmb3Jle2NvbnRlbnQ6IlxmMjQ5In0udWstaWNvbi1zdGlja3ktbm90ZS1vOmJlZm9yZXtjb250ZW50OiJcZjI0YSJ9LnVrLWljb24tdGVsZXZpc2lvbjpiZWZvcmUsLnVrLWljb24tdHY6YmVmb3Jle2NvbnRlbnQ6IlxmMjZjIn0udWstaWNvbi10cmFkZW1hcms6YmVmb3Jle2NvbnRlbnQ6IlxmMjVjIn0udWstaWNvbi10cmlwYWR2aXNvcjpiZWZvcmV7Y29udGVudDoiXGYyNjIifS51ay1pY29uLXZpbWVvOmJlZm9yZXtjb250ZW50OiJcZjI3ZCJ9LnVrLWljb24td2lraXBlZGlhLXc6YmVmb3Jle2NvbnRlbnQ6IlxmMjY2In0udWstaWNvbi15LWNvbWJpbmF0b3I6YmVmb3JlLC51ay1pY29uLXljOmJlZm9yZXtjb250ZW50OiJcZjIzYiJ9LnVrLWljb24teS1jb21iaW5hdG9yLXNxdWFyZTpiZWZvcmUsLnVrLWljb24teWMtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjFkNCJ9LnVrLWljb24tYmx1ZXRvb3RoOmJlZm9yZXtjb250ZW50OiJcZjI5MyJ9LnVrLWljb24tYmx1ZXRvb3RoLWI6YmVmb3Jle2NvbnRlbnQ6IlxmMjk0In0udWstaWNvbi1jb2RpZXBpZTpiZWZvcmV7Y29udGVudDoiXGYyODQifS51ay1pY29uLWNyZWRpdC1jYXJkLWFsdDpiZWZvcmV7Y29udGVudDoiXGYyODMifS51ay1pY29uLWVkZ2U6YmVmb3Jle2NvbnRlbnQ6IlxmMjgyIn0udWstaWNvbi1mb3J0LWF3ZXNvbWU6YmVmb3Jle2NvbnRlbnQ6IlxmMjg2In0udWstaWNvbi1oYXNodGFnOmJlZm9yZXtjb250ZW50OiJcZjI5MiJ9LnVrLWljb24tbWl4Y2xvdWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjg5In0udWstaWNvbi1tb2R4OmJlZm9yZXtjb250ZW50OiJcZjI4NSJ9LnVrLWljb24tcGF1c2UtY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjI4YiJ9LnVrLWljb24tcGF1c2UtY2lyY2xlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjhjIn0udWstaWNvbi1wZXJjZW50OmJlZm9yZXtjb250ZW50OiJcZjI5NSJ9LnVrLWljb24tcHJvZHVjdC1odW50OmJlZm9yZXtjb250ZW50OiJcZjI4OCJ9LnVrLWljb24tcmVkZGl0LWFsaWVuOmJlZm9yZXtjb250ZW50OiJcZjI4MSJ9LnVrLWljb24tc2NyaWJkOmJlZm9yZXtjb250ZW50OiJcZjI4YSJ9LnVrLWljb24tc2hvcHBpbmctYmFnOmJlZm9yZXtjb250ZW50OiJcZjI5MCJ9LnVrLWljb24tc2hvcHBpbmctYmFza2V0OmJlZm9yZXtjb250ZW50OiJcZjI5MSJ9LnVrLWljb24tc3RvcC1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMjhkIn0udWstaWNvbi1zdG9wLWNpcmNsZS1vOmJlZm9yZXtjb250ZW50OiJcZjI4ZSJ9LnVrLWljb24tdXNiOmJlZm9yZXtjb250ZW50OiJcZjI4NyJ9LnVrLWNsb3NlOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowO3BhZGRpbmc6MH0udWstY2xvc2V7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7Ym9yZGVyOm5vbmU7b3ZlcmZsb3c6dmlzaWJsZTtmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDt0ZXh0LXRyYW5zZm9ybTpub25lO3BhZGRpbmc6MDtiYWNrZ3JvdW5kOjAgMDtkaXNwbGF5OmlubGluZS1ibG9jaztib3gtc2l6aW5nOmNvbnRlbnQtYm94O3dpZHRoOjIwcHg7bGluZS1oZWlnaHQ6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7b3BhY2l0eTouM30udWstY2xvc2U6YWZ0ZXJ7ZGlzcGxheTpibG9jaztjb250ZW50OiJcZjAwZCI7Zm9udC1mYW1pbHk6Rm9udEF3ZXNvbWV9LnVrLWNsb3NlOmZvY3VzLC51ay1jbG9zZTpob3ZlcntvcGFjaXR5Oi41O291dGxpbmU6MDtjb2xvcjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyfS51ay1jbG9zZS1hbHR7cGFkZGluZzoycHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojZWVlO29wYWNpdHk6MX0udWstY2xvc2UtYWx0OmZvY3VzLC51ay1jbG9zZS1hbHQ6aG92ZXJ7b3BhY2l0eToxfS51ay1jbG9zZS1hbHQ6YWZ0ZXJ7b3BhY2l0eTouNX0udWstY2xvc2UtYWx0OmZvY3VzOmFmdGVyLC51ay1jbG9zZS1hbHQ6aG92ZXI6YWZ0ZXJ7b3BhY2l0eTouOH0udWstYmFkZ2V7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzowIDVweDtiYWNrZ3JvdW5kOiMwMGE4ZTY7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE0cHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7dGV4dC10cmFuc2Zvcm06bm9uZX1hLnVrLWJhZGdlOmhvdmVye2NvbG9yOiNmZmZ9LnVrLWJhZGdlLW5vdGlmaWNhdGlvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjE4cHg7Ym9yZGVyLXJhZGl1czo1MDBweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4fS51ay1iYWRnZS1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6IzhjYzE0Y30udWstYmFkZ2Utd2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNmYWE3MzJ9LnVrLWJhZGdlLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNkYTMxNGJ9LnVrLWFsZXJ0e21hcmdpbi1ib3R0b206MTVweDtwYWRkaW5nOjEwcHg7YmFja2dyb3VuZDojZWJmN2ZkO2NvbG9yOiMyZDcwOTF9KisudWstYWxlcnR7bWFyZ2luLXRvcDoxNXB4fS51ay1hbGVydD46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLWFsZXJ0IGgxLC51ay1hbGVydCBoMiwudWstYWxlcnQgaDMsLnVrLWFsZXJ0IGg0LC51ay1hbGVydCBoNSwudWstYWxlcnQgaDZ7Y29sb3I6aW5oZXJpdH0udWstYWxlcnQ+LnVrLWNsb3NlOmZpcnN0LWNoaWxke2Zsb2F0OnJpZ2h0fS51ay1hbGVydD4udWstY2xvc2U6Zmlyc3QtY2hpbGQrKnttYXJnaW4tdG9wOjB9LnVrLWFsZXJ0LXN1Y2Nlc3N7YmFja2dyb3VuZDojZjJmYWUzO2NvbG9yOiM2NTlmMTN9LnVrLWFsZXJ0LXdhcm5pbmd7YmFja2dyb3VuZDojZmZmY2ViO2NvbG9yOiNlMjgzMjd9LnVrLWFsZXJ0LWRhbmdlcntiYWNrZ3JvdW5kOiNmZmYxZjA7Y29sb3I6I2Q4NTAzMH0udWstYWxlcnQtbGFyZ2V7cGFkZGluZzoyMHB4fS51ay1hbGVydC1sYXJnZT4udWstY2xvc2U6Zmlyc3QtY2hpbGR7bWFyZ2luOi0xMHB4IC0xMHB4IDAgMH0udWstdGh1bWJuYWlse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21heC13aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjRweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7YmFja2dyb3VuZDojZmZmfWEudWstdGh1bWJuYWlsOmZvY3VzLGEudWstdGh1bWJuYWlsOmhvdmVye2JvcmRlci1jb2xvcjojYWFhO2JhY2tncm91bmQtY29sb3I6I2ZmZjt0ZXh0LWRlY29yYXRpb246bm9uZTtvdXRsaW5lOjB9LnVrLXRodW1ibmFpbC1jYXB0aW9ue3BhZGRpbmctdG9wOjRweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojNDQ0fS51ay10aHVtYm5haWwtbWluaXt3aWR0aDoxNTBweH0udWstdGh1bWJuYWlsLXNtYWxse3dpZHRoOjIwMHB4fS51ay10aHVtYm5haWwtbWVkaXVte3dpZHRoOjMwMHB4fS51ay10aHVtYm5haWwtbGFyZ2V7d2lkdGg6NDAwcHh9LnVrLXRodW1ibmFpbC1leHBhbmQsLnVrLXRodW1ibmFpbC1leHBhbmQ+aW1ne3dpZHRoOjEwMCV9LnVrLW92ZXJsYXl7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7bWF4LXdpZHRoOjEwMCU7dmVydGljYWwtYWxpZ246bWlkZGxlO292ZXJmbG93OmhpZGRlbjstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVaKDApO21hcmdpbjowfS51ay1vdmVybGF5LnVrLWJvcmRlci1jaXJjbGV7LXdlYmtpdC1tYXNrLWltYWdlOi13ZWJraXQtcmFkaWFsLWdyYWRpZW50KGNpcmNsZSwjZmZmIDEwMCUsIzAwMCAxMDAlKX0udWstb3ZlcmxheT46Zmlyc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1vdmVybGF5LXBhbmVse3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3BhZGRpbmc6MjBweDtjb2xvcjojZmZmfS51ay1vdmVybGF5LXBhbmVsLnVrLWZsZXg+Kj46bGFzdC1jaGlsZCwudWstb3ZlcmxheS1wYW5lbD46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLW92ZXJsYXktcGFuZWwgaDEsLnVrLW92ZXJsYXktcGFuZWwgaDIsLnVrLW92ZXJsYXktcGFuZWwgaDMsLnVrLW92ZXJsYXktcGFuZWwgaDQsLnVrLW92ZXJsYXktcGFuZWwgaDUsLnVrLW92ZXJsYXktcGFuZWwgaDZ7Y29sb3I6aW5oZXJpdH0udWstb3ZlcmxheS1wYW5lbCBhOm5vdChbY2xhc3NdKXtjb2xvcjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LnVrLW92ZXJsYXktcGFuZWwgYVtjbGFzcyo9dWstaWNvbi1dOm5vdCgudWstaWNvbi1idXR0b24pe2NvbG9yOmluaGVyaXR9LnVrLW92ZXJsYXktaG92ZXI6bm90KDpob3Zlcik6bm90KC51ay1ob3ZlcikgLnVrLW92ZXJsYXktcGFuZWw6bm90KC51ay1pZ25vcmUpe29wYWNpdHk6MH0udWstb3ZlcmxheS1hY3RpdmUgOm5vdCgudWstYWN0aXZlKT4udWstb3ZlcmxheS1wYW5lbDpub3QoLnVrLWlnbm9yZSl7b3BhY2l0eTowfS51ay1vdmVybGF5LWJhY2tncm91bmR7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC41KX0udWstb3ZlcmxheS1pbWFnZXtwYWRkaW5nOjB9LnVrLW92ZXJsYXktdG9we2JvdHRvbTphdXRvfS51ay1vdmVybGF5LWJvdHRvbXt0b3A6YXV0b30udWstb3ZlcmxheS1sZWZ0e3JpZ2h0OmF1dG99LnVrLW92ZXJsYXktcmlnaHR7bGVmdDphdXRvfS51ay1vdmVybGF5LWljb246YmVmb3Jle2NvbnRlbnQ6IlxmMDAyIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlO3dpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luLXRvcDotMjVweDttYXJnaW4tbGVmdDotMjVweDtmb250LXNpemU6NTBweDtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OkZvbnRBd2Vzb21lO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiNmZmZ9LnVrLW92ZXJsYXktYmx1ciwudWstb3ZlcmxheS1mYWRlLC51ay1vdmVybGF5LWdyYXlzY2FsZSwudWstb3ZlcmxheS1zY2FsZSwudWstb3ZlcmxheS1zcGluLFtjbGFzcyo9dWstb3ZlcmxheS1zbGlkZV17dHJhbnNpdGlvbi1kdXJhdGlvbjouM3M7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXQ7dHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5LHRyYW5zZm9ybSxmaWx0ZXJ9LnVrLW92ZXJsYXktYWN0aXZlIC51ay1vdmVybGF5LWZhZGUsLnVrLW92ZXJsYXktYWN0aXZlIC51ay1vdmVybGF5LXNjYWxlLC51ay1vdmVybGF5LWFjdGl2ZSAudWstb3ZlcmxheS1zcGluLC51ay1vdmVybGF5LWFjdGl2ZSBbY2xhc3MqPXVrLW92ZXJsYXktc2xpZGVde3RyYW5zaXRpb24tZHVyYXRpb246LjhzfS51ay1vdmVybGF5LWZhZGV7b3BhY2l0eTouN30udWstb3ZlcmxheS1hY3RpdmUgLnVrLWFjdGl2ZT4udWstb3ZlcmxheS1mYWRlLC51ay1vdmVybGF5LWhvdmVyLnVrLWhvdmVyIC51ay1vdmVybGF5LWZhZGUsLnVrLW92ZXJsYXktaG92ZXI6aG92ZXIgLnVrLW92ZXJsYXktZmFkZXtvcGFjaXR5OjF9LnVrLW92ZXJsYXktc2NhbGV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtOnNjYWxlKDEpfS51ay1vdmVybGF5LWFjdGl2ZSAudWstYWN0aXZlPi51ay1vdmVybGF5LXNjYWxlLC51ay1vdmVybGF5LWhvdmVyLnVrLWhvdmVyIC51ay1vdmVybGF5LXNjYWxlLC51ay1vdmVybGF5LWhvdmVyOmhvdmVyIC51ay1vdmVybGF5LXNjYWxley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuMSk7dHJhbnNmb3JtOnNjYWxlKDEuMSl9LnVrLW92ZXJsYXktc3Bpbnstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKSByb3RhdGUoMCk7dHJhbnNmb3JtOnNjYWxlKDEpIHJvdGF0ZSgwKX0udWstb3ZlcmxheS1hY3RpdmUgLnVrLWFjdGl2ZT4udWstb3ZlcmxheS1zcGluLC51ay1vdmVybGF5LWhvdmVyLnVrLWhvdmVyIC51ay1vdmVybGF5LXNwaW4sLnVrLW92ZXJsYXktaG92ZXI6aG92ZXIgLnVrLW92ZXJsYXktc3Bpbnstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjEpIHJvdGF0ZSgzZGVnKTt0cmFuc2Zvcm06c2NhbGUoMS4xKSByb3RhdGUoM2RlZyl9LnVrLW92ZXJsYXktZ3JheXNjYWxley13ZWJraXQtZmlsdGVyOmdyYXlzY2FsZSgxMDAlKTtmaWx0ZXI6Z3JheXNjYWxlKDEwMCUpfS51ay1vdmVybGF5LWFjdGl2ZSAudWstYWN0aXZlPi51ay1vdmVybGF5LWdyYXlzY2FsZSwudWstb3ZlcmxheS1ob3Zlci51ay1ob3ZlciAudWstb3ZlcmxheS1ncmF5c2NhbGUsLnVrLW92ZXJsYXktaG92ZXI6aG92ZXIgLnVrLW92ZXJsYXktZ3JheXNjYWxley13ZWJraXQtZmlsdGVyOmdyYXlzY2FsZSgwKTtmaWx0ZXI6Z3JheXNjYWxlKDApfVtjbGFzcyo9dWstb3ZlcmxheS1zbGlkZV17b3BhY2l0eTowfS51ay1vdmVybGF5LXNsaWRlLXRvcHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSl9LnVrLW92ZXJsYXktc2xpZGUtYm90dG9tey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTAwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTAwJSl9LnVrLW92ZXJsYXktc2xpZGUtbGVmdHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9LnVrLW92ZXJsYXktc2xpZGUtcmlnaHR7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX0udWstb3ZlcmxheS1hY3RpdmUgLnVrLWFjdGl2ZT5bY2xhc3MqPXVrLW92ZXJsYXktc2xpZGVdLC51ay1vdmVybGF5LWhvdmVyLnVrLWhvdmVyIFtjbGFzcyo9dWstb3ZlcmxheS1zbGlkZV0sLnVrLW92ZXJsYXktaG92ZXI6aG92ZXIgW2NsYXNzKj11ay1vdmVybGF5LXNsaWRlXXtvcGFjaXR5OjE7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgwKSB0cmFuc2xhdGVZKDApO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApIHRyYW5zbGF0ZVkoMCl9LnVrLW92ZXJsYXktYXJlYXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMpO29wYWNpdHk6MDstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXI7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApfS51ay1vdmVybGF5LXRvZ2dsZS51ay1ob3ZlciAudWstb3ZlcmxheS1hcmVhLC51ay1vdmVybGF5LXRvZ2dsZTpob3ZlciAudWstb3ZlcmxheS1hcmVhLC51ay1vdmVybGF5LnVrLWhvdmVyIC51ay1vdmVybGF5LWFyZWEsLnVrLW92ZXJsYXk6aG92ZXIgLnVrLW92ZXJsYXktYXJlYXtvcGFjaXR5OjF9LnVrLW92ZXJsYXktYXJlYTplbXB0eTpiZWZvcmV7Y29udGVudDoiXGYwMDIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7d2lkdGg6NTBweDtoZWlnaHQ6NTBweDttYXJnaW4tdG9wOi0yNXB4O21hcmdpbi1sZWZ0Oi0yNXB4O2ZvbnQtc2l6ZTo1MHB4O2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6Rm9udEF3ZXNvbWU7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6I2ZmZn0udWstb3ZlcmxheS1hcmVhOm5vdCg6ZW1wdHkpe2ZvbnQtc2l6ZTowfS51ay1vdmVybGF5LWFyZWE6bm90KDplbXB0eSk6YmVmb3Jle2NvbnRlbnQ6Jyc7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7dmVydGljYWwtYWxpZ246bWlkZGxlfS51ay1vdmVybGF5LWFyZWEtY29udGVudHtkaXNwbGF5OmlubGluZS1ibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Zm9udC1zaXplOjFyZW07dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzowIDE1cHg7Y29sb3I6I2ZmZn0udWstb3ZlcmxheS1hcmVhLWNvbnRlbnQ+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1vdmVybGF5LWFyZWEtY29udGVudCBhOm5vdChbY2xhc3NdKSwudWstb3ZlcmxheS1hcmVhLWNvbnRlbnQgYTpub3QoW2NsYXNzXSk6aG92ZXJ7Y29sb3I6aW5oZXJpdH0udWstb3ZlcmxheS1jYXB0aW9ue3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3BhZGRpbmc6MTVweDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjUpO2NvbG9yOiNmZmY7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyO3RyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCl9LnVrLW92ZXJsYXktdG9nZ2xlLnVrLWhvdmVyIC51ay1vdmVybGF5LWNhcHRpb24sLnVrLW92ZXJsYXktdG9nZ2xlOmhvdmVyIC51ay1vdmVybGF5LWNhcHRpb24sLnVrLW92ZXJsYXkudWstaG92ZXIgLnVrLW92ZXJsYXktY2FwdGlvbiwudWstb3ZlcmxheTpob3ZlciAudWstb3ZlcmxheS1jYXB0aW9ue29wYWNpdHk6MX1bY2xhc3MqPXVrLWNvbHVtbi1dey13ZWJraXQtY29sdW1uLWdhcDoyNXB4Oy1tb3otY29sdW1uLWdhcDoyNXB4O2NvbHVtbi1nYXA6MjVweH0udWstY29sdW1uLTEtMnstd2Via2l0LWNvbHVtbi1jb3VudDoyOy1tb3otY29sdW1uLWNvdW50OjI7Y29sdW1uLWNvdW50OjJ9LnVrLWNvbHVtbi0xLTN7LXdlYmtpdC1jb2x1bW4tY291bnQ6MzstbW96LWNvbHVtbi1jb3VudDozO2NvbHVtbi1jb3VudDozfS51ay1jb2x1bW4tMS00ey13ZWJraXQtY29sdW1uLWNvdW50OjQ7LW1vei1jb2x1bW4tY291bnQ6NDtjb2x1bW4tY291bnQ6NH0udWstY29sdW1uLTEtNXstd2Via2l0LWNvbHVtbi1jb3VudDo1Oy1tb3otY29sdW1uLWNvdW50OjU7Y29sdW1uLWNvdW50OjV9LnVrLWNvbHVtbi0xLTZ7LXdlYmtpdC1jb2x1bW4tY291bnQ6NjstbW96LWNvbHVtbi1jb3VudDo2O2NvbHVtbi1jb3VudDo2fUBtZWRpYSAobWluLXdpZHRoOjQ4MHB4KXsudWstY29sdW1uLXNtYWxsLTEtMnstd2Via2l0LWNvbHVtbi1jb3VudDoyOy1tb3otY29sdW1uLWNvdW50OjI7Y29sdW1uLWNvdW50OjJ9LnVrLWNvbHVtbi1zbWFsbC0xLTN7LXdlYmtpdC1jb2x1bW4tY291bnQ6MzstbW96LWNvbHVtbi1jb3VudDozO2NvbHVtbi1jb3VudDozfS51ay1jb2x1bW4tc21hbGwtMS00ey13ZWJraXQtY29sdW1uLWNvdW50OjQ7LW1vei1jb2x1bW4tY291bnQ6NDtjb2x1bW4tY291bnQ6NH0udWstY29sdW1uLXNtYWxsLTEtNXstd2Via2l0LWNvbHVtbi1jb3VudDo1Oy1tb3otY29sdW1uLWNvdW50OjU7Y29sdW1uLWNvdW50OjV9LnVrLWNvbHVtbi1zbWFsbC0xLTZ7LXdlYmtpdC1jb2x1bW4tY291bnQ6NjstbW96LWNvbHVtbi1jb3VudDo2O2NvbHVtbi1jb3VudDo2fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LnVrLWNvbHVtbi1tZWRpdW0tMS0yey13ZWJraXQtY29sdW1uLWNvdW50OjI7LW1vei1jb2x1bW4tY291bnQ6Mjtjb2x1bW4tY291bnQ6Mn0udWstY29sdW1uLW1lZGl1bS0xLTN7LXdlYmtpdC1jb2x1bW4tY291bnQ6MzstbW96LWNvbHVtbi1jb3VudDozO2NvbHVtbi1jb3VudDozfS51ay1jb2x1bW4tbWVkaXVtLTEtNHstd2Via2l0LWNvbHVtbi1jb3VudDo0Oy1tb3otY29sdW1uLWNvdW50OjQ7Y29sdW1uLWNvdW50OjR9LnVrLWNvbHVtbi1tZWRpdW0tMS01ey13ZWJraXQtY29sdW1uLWNvdW50OjU7LW1vei1jb2x1bW4tY291bnQ6NTtjb2x1bW4tY291bnQ6NX0udWstY29sdW1uLW1lZGl1bS0xLTZ7LXdlYmtpdC1jb2x1bW4tY291bnQ6NjstbW96LWNvbHVtbi1jb3VudDo2O2NvbHVtbi1jb3VudDo2fX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWNvbHVtbi1sYXJnZS0xLTJ7LXdlYmtpdC1jb2x1bW4tY291bnQ6MjstbW96LWNvbHVtbi1jb3VudDoyO2NvbHVtbi1jb3VudDoyfS51ay1jb2x1bW4tbGFyZ2UtMS0zey13ZWJraXQtY29sdW1uLWNvdW50OjM7LW1vei1jb2x1bW4tY291bnQ6Mztjb2x1bW4tY291bnQ6M30udWstY29sdW1uLWxhcmdlLTEtNHstd2Via2l0LWNvbHVtbi1jb3VudDo0Oy1tb3otY29sdW1uLWNvdW50OjQ7Y29sdW1uLWNvdW50OjR9LnVrLWNvbHVtbi1sYXJnZS0xLTV7LXdlYmtpdC1jb2x1bW4tY291bnQ6NTstbW96LWNvbHVtbi1jb3VudDo1O2NvbHVtbi1jb3VudDo1fS51ay1jb2x1bW4tbGFyZ2UtMS02ey13ZWJraXQtY29sdW1uLWNvdW50OjY7LW1vei1jb2x1bW4tY291bnQ6Njtjb2x1bW4tY291bnQ6Nn19QG1lZGlhIChtaW4td2lkdGg6MTIyMHB4KXsudWstY29sdW1uLXhsYXJnZS0xLTJ7LXdlYmtpdC1jb2x1bW4tY291bnQ6MjstbW96LWNvbHVtbi1jb3VudDoyO2NvbHVtbi1jb3VudDoyfS51ay1jb2x1bW4teGxhcmdlLTEtM3std2Via2l0LWNvbHVtbi1jb3VudDozOy1tb3otY29sdW1uLWNvdW50OjM7Y29sdW1uLWNvdW50OjN9LnVrLWNvbHVtbi14bGFyZ2UtMS00ey13ZWJraXQtY29sdW1uLWNvdW50OjQ7LW1vei1jb2x1bW4tY291bnQ6NDtjb2x1bW4tY291bnQ6NH0udWstY29sdW1uLXhsYXJnZS0xLTV7LXdlYmtpdC1jb2x1bW4tY291bnQ6NTstbW96LWNvbHVtbi1jb3VudDo1O2NvbHVtbi1jb3VudDo1fS51ay1jb2x1bW4teGxhcmdlLTEtNnstd2Via2l0LWNvbHVtbi1jb3VudDo2Oy1tb3otY29sdW1uLWNvdW50OjY7Y29sdW1uLWNvdW50OjZ9fVtjbGFzcyo9dWstYW5pbWF0aW9uLV17LXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246LjVzO2FuaW1hdGlvbi1kdXJhdGlvbjouNXM7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXQ7LXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOmJvdGg7YW5pbWF0aW9uLWZpbGwtbW9kZTpib3RofUBtZWRpYSBzY3JlZW57W2RhdGEtdWstc2Nyb2xsc3B5Kj11ay1hbmltYXRpb24tXTpub3QoW2RhdGEtdWstc2Nyb2xsc3B5Kj10YXJnZXRdKXtvcGFjaXR5OjB9fS51ay1hbmltYXRpb24tZmFkZXstd2Via2l0LWFuaW1hdGlvbi1uYW1lOnVrLWZhZGU7YW5pbWF0aW9uLW5hbWU6dWstZmFkZTstd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjouOHM7YW5pbWF0aW9uLWR1cmF0aW9uOi44czstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246bGluZWFyIWltcG9ydGFudDthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmxpbmVhciFpbXBvcnRhbnR9LnVrLWFuaW1hdGlvbi1zY2FsZS11cHstd2Via2l0LWFuaW1hdGlvbi1uYW1lOnVrLWZhZGUtc2NhbGUtMDI7YW5pbWF0aW9uLW5hbWU6dWstZmFkZS1zY2FsZS0wMn0udWstYW5pbWF0aW9uLXNjYWxlLWRvd257LXdlYmtpdC1hbmltYXRpb24tbmFtZTp1ay1mYWRlLXNjYWxlLTE4O2FuaW1hdGlvbi1uYW1lOnVrLWZhZGUtc2NhbGUtMTh9LnVrLWFuaW1hdGlvbi1zbGlkZS10b3B7LXdlYmtpdC1hbmltYXRpb24tbmFtZTp1ay1mYWRlLXRvcDthbmltYXRpb24tbmFtZTp1ay1mYWRlLXRvcH0udWstYW5pbWF0aW9uLXNsaWRlLWJvdHRvbXstd2Via2l0LWFuaW1hdGlvbi1uYW1lOnVrLWZhZGUtYm90dG9tO2FuaW1hdGlvbi1uYW1lOnVrLWZhZGUtYm90dG9tfS51ay1hbmltYXRpb24tc2xpZGUtbGVmdHstd2Via2l0LWFuaW1hdGlvbi1uYW1lOnVrLWZhZGUtbGVmdDthbmltYXRpb24tbmFtZTp1ay1mYWRlLWxlZnR9LnVrLWFuaW1hdGlvbi1zbGlkZS1yaWdodHstd2Via2l0LWFuaW1hdGlvbi1uYW1lOnVrLWZhZGUtcmlnaHQ7YW5pbWF0aW9uLW5hbWU6dWstZmFkZS1yaWdodH0udWstYW5pbWF0aW9uLXNjYWxley13ZWJraXQtYW5pbWF0aW9uLW5hbWU6dWstc2NhbGUtMTI7YW5pbWF0aW9uLW5hbWU6dWstc2NhbGUtMTJ9LnVrLWFuaW1hdGlvbi1zaGFrZXstd2Via2l0LWFuaW1hdGlvbi1uYW1lOnVrLXNoYWtlO2FuaW1hdGlvbi1uYW1lOnVrLXNoYWtlfS51ay1hbmltYXRpb24tcmV2ZXJzZXstd2Via2l0LWFuaW1hdGlvbi1kaXJlY3Rpb246cmV2ZXJzZTthbmltYXRpb24tZGlyZWN0aW9uOnJldmVyc2U7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW47YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWlufS51ay1hbmltYXRpb24tMTV7LXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246MTVzO2FuaW1hdGlvbi1kdXJhdGlvbjoxNXN9LnVrLWFuaW1hdGlvbi10b3AtbGVmdHstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybS1vcmlnaW46MCAwfS51ay1hbmltYXRpb24tdG9wLWNlbnRlcnstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46NTAlIDA7dHJhbnNmb3JtLW9yaWdpbjo1MCUgMH0udWstYW5pbWF0aW9uLXRvcC1yaWdodHstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46MTAwJSAwO3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwfS51ay1hbmltYXRpb24tbWlkZGxlLWxlZnR7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgNTAlO3RyYW5zZm9ybS1vcmlnaW46MCA1MCV9LnVrLWFuaW1hdGlvbi1taWRkbGUtcmlnaHR7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjEwMCUgNTAlO3RyYW5zZm9ybS1vcmlnaW46MTAwJSA1MCV9LnVrLWFuaW1hdGlvbi1ib3R0b20tbGVmdHstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46MCAxMDAlO3RyYW5zZm9ybS1vcmlnaW46MCAxMDAlfS51ay1hbmltYXRpb24tYm90dG9tLWNlbnRlcnstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46NTAlIDEwMCU7dHJhbnNmb3JtLW9yaWdpbjo1MCUgMTAwJX0udWstYW5pbWF0aW9uLWJvdHRvbS1yaWdodHstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlO3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlfS51ay1hbmltYXRpb24taG92ZXI6bm90KDpob3ZlciksLnVrLWFuaW1hdGlvbi1ob3Zlcjpub3QoOmhvdmVyKSBbY2xhc3MqPXVrLWFuaW1hdGlvbi1dLC51ay10b3VjaCAudWstYW5pbWF0aW9uLWhvdmVyOm5vdCgudWstaG92ZXIpLC51ay10b3VjaCAudWstYW5pbWF0aW9uLWhvdmVyOm5vdCgudWstaG92ZXIpIFtjbGFzcyo9dWstYW5pbWF0aW9uLV17LXdlYmtpdC1hbmltYXRpb24tbmFtZTpub25lO2FuaW1hdGlvbi1uYW1lOm5vbmV9QC13ZWJraXQta2V5ZnJhbWVzIHVrLWZhZGV7MCV7b3BhY2l0eTowfTEwMCV7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIHVrLWZhZGV7MCV7b3BhY2l0eTowfTEwMCV7b3BhY2l0eToxfX1ALXdlYmtpdC1rZXlmcmFtZXMgdWstZmFkZS10b3B7MCV7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEwMCUpfTEwMCV7b3BhY2l0eToxOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9fUBrZXlmcmFtZXMgdWstZmFkZS10b3B7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKX0xMDAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKX19QC13ZWJraXQta2V5ZnJhbWVzIHVrLWZhZGUtYm90dG9tezAle29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpfTEwMCV7b3BhY2l0eToxOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9fUBrZXlmcmFtZXMgdWstZmFkZS1ib3R0b217MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApfX1ALXdlYmtpdC1rZXlmcmFtZXMgdWstZmFkZS1sZWZ0ezAle29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX0xMDAle29wYWNpdHk6MTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1Aa2V5ZnJhbWVzIHVrLWZhZGUtbGVmdHswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1ALXdlYmtpdC1rZXlmcmFtZXMgdWstZmFkZS1yaWdodHswJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX0xMDAle29wYWNpdHk6MTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1Aa2V5ZnJhbWVzIHVrLWZhZGUtcmlnaHR7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1ALXdlYmtpdC1rZXlmcmFtZXMgdWstZmFkZS1zY2FsZS0wMnswJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjIpfTEwMCV7b3BhY2l0eToxOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpfX1Aa2V5ZnJhbWVzIHVrLWZhZGUtc2NhbGUtMDJ7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguMil9MTAwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX1ALXdlYmtpdC1rZXlmcmFtZXMgdWstZmFkZS1zY2FsZS0xNXswJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS41KX0xMDAle29wYWNpdHk6MTstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKX19QGtleWZyYW1lcyB1ay1mYWRlLXNjYWxlLTE1ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoMS41KX0xMDAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fUAtd2Via2l0LWtleWZyYW1lcyB1ay1mYWRlLXNjYWxlLTE4ezAle29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjgpfTEwMCV7b3BhY2l0eToxOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpfX1Aa2V5ZnJhbWVzIHVrLWZhZGUtc2NhbGUtMTh7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSgxLjgpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19QC13ZWJraXQta2V5ZnJhbWVzIHVrLXNsaWRlLWxlZnR7MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1Aa2V5ZnJhbWVzIHVrLXNsaWRlLWxlZnR7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9fUAtd2Via2l0LWtleWZyYW1lcyB1ay1zbGlkZS1yaWdodHswJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX19QGtleWZyYW1lcyB1ay1zbGlkZS1yaWdodHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1ALXdlYmtpdC1rZXlmcmFtZXMgdWstc2xpZGUtbGVmdC0zM3swJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDMzJSl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1Aa2V5ZnJhbWVzIHVrLXNsaWRlLWxlZnQtMzN7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMzMlKX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1ALXdlYmtpdC1rZXlmcmFtZXMgdWstc2xpZGUtcmlnaHQtMzN7MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtMzMlKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9fUBrZXlmcmFtZXMgdWstc2xpZGUtcmlnaHQtMzN7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTMzJSl9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX19QC13ZWJraXQta2V5ZnJhbWVzIHVrLXNjYWxlLTEyezAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuMil9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKX19QGtleWZyYW1lcyB1ay1zY2FsZS0xMnswJXt0cmFuc2Zvcm06c2NhbGUoMS4yKX0xMDAle3RyYW5zZm9ybTpzY2FsZSgxKX19QC13ZWJraXQta2V5ZnJhbWVzIHVrLXJvdGF0ZXswJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMCl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMzU5ZGVnKX19QGtleWZyYW1lcyB1ay1yb3RhdGV7MCV7dHJhbnNmb3JtOnJvdGF0ZSgwKX0xMDAle3RyYW5zZm9ybTpyb3RhdGUoMzU5ZGVnKX19QC13ZWJraXQta2V5ZnJhbWVzIHVrLXNoYWtlezAlLDEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX0xMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtOXB4KX0yMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCg4cHgpfTMwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC03cHgpfTQwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDZweCl9NTAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTVweCl9NjAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoNHB4KX03MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtM3B4KX04MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgycHgpfTkwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC0xcHgpfX1Aa2V5ZnJhbWVzIHVrLXNoYWtlezAlLDEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9MTAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC05cHgpfTIwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCg4cHgpfTMwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtN3B4KX00MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoNnB4KX01MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTVweCl9NjAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDRweCl9NzAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0zcHgpfTgwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgycHgpfTkwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMXB4KX19QC13ZWJraXQta2V5ZnJhbWVzIHVrLXNsaWRlLXRvcC1maXhlZHswJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTBweCl9MTAwJXtvcGFjaXR5OjE7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgwKX19QGtleWZyYW1lcyB1ay1zbGlkZS10b3AtZml4ZWR7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMHB4KX0xMDAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKX19QC13ZWJraXQta2V5ZnJhbWVzIHVrLXNsaWRlLWJvdHRvbS1maXhlZHswJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgxMHB4KX0xMDAle29wYWNpdHk6MTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDApfX1Aa2V5ZnJhbWVzIHVrLXNsaWRlLWJvdHRvbS1maXhlZHswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTBweCl9MTAwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9fS51ay1kcm9wZG93biwudWstZHJvcGRvd24tYmxhbmt7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAyMDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MjAwcHh9LnVrLWRyb3Bkb3due3BhZGRpbmc6MTVweDtiYWNrZ3JvdW5kOiNmNWY1ZjU7Y29sb3I6IzQ0NDtmb250LXNpemU6MXJlbTt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnVrLW9wZW4+LnVrLWRyb3Bkb3duLC51ay1vcGVuPi51ay1kcm9wZG93bi1ibGFua3tkaXNwbGF5OmJsb2NrOy13ZWJraXQtYW5pbWF0aW9uOnVrLWZhZGUgLjJzIGVhc2UtaW4tb3V0O2FuaW1hdGlvbjp1ay1mYWRlIC4ycyBlYXNlLWluLW91dDstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybS1vcmlnaW46MCAwfS51ay1kcm9wZG93bi10b3B7bWFyZ2luLXRvcDotNXB4fS51ay1kcm9wZG93bi1ib3R0b217bWFyZ2luLXRvcDo1cHh9LnVrLWRyb3Bkb3duLWxlZnR7bWFyZ2luLWxlZnQ6LTVweH0udWstZHJvcGRvd24tcmlnaHR7bWFyZ2luLWxlZnQ6NXB4fS51ay1kcm9wZG93biAudWstbmF2e21hcmdpbjowIC0xNXB4fS51ay1ncmlkIC51ay1kcm9wZG93bi1ncmlkKy51ay1kcm9wZG93bi1ncmlke21hcmdpbi10b3A6MTVweH0udWstZHJvcGRvd24tZ3JpZD5bY2xhc3MqPXVrLXdpZHRoLV0+LnVrLXBhbmVsKy51ay1wYW5lbHttYXJnaW4tdG9wOjE1cHh9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey51ay1kcm9wZG93bjpub3QoLnVrLWRyb3Bkb3duLXN0YWNrKT4udWstZHJvcGRvd24tZ3JpZHttYXJnaW4tbGVmdDotMTVweDttYXJnaW4tcmlnaHQ6LTE1cHh9LnVrLWRyb3Bkb3duOm5vdCgudWstZHJvcGRvd24tc3RhY2spPi51ay1kcm9wZG93bi1ncmlkPltjbGFzcyo9dWstd2lkdGgtXXtwYWRkaW5nLWxlZnQ6MTVweDtwYWRkaW5nLXJpZ2h0OjE1cHh9LnVrLWRyb3Bkb3duOm5vdCgudWstZHJvcGRvd24tc3RhY2spPi51ay1kcm9wZG93bi1ncmlkPltjbGFzcyo9dWstd2lkdGgtXTpudGgtY2hpbGQobisyKXtib3JkZXItbGVmdDoxcHggc29saWQgI2RkZH0udWstZHJvcGRvd24td2lkdGgtMjpub3QoLnVrLWRyb3Bkb3duLXN0YWNrKXt3aWR0aDo0MDBweH0udWstZHJvcGRvd24td2lkdGgtMzpub3QoLnVrLWRyb3Bkb3duLXN0YWNrKXt3aWR0aDo2MDBweH0udWstZHJvcGRvd24td2lkdGgtNDpub3QoLnVrLWRyb3Bkb3duLXN0YWNrKXt3aWR0aDo4MDBweH0udWstZHJvcGRvd24td2lkdGgtNTpub3QoLnVrLWRyb3Bkb3duLXN0YWNrKXt3aWR0aDoxMDAwcHh9fUBtZWRpYSAobWF4LXdpZHRoOjc2N3B4KXsudWstZHJvcGRvd24tZ3JpZD5bY2xhc3MqPXVrLXdpZHRoLV17d2lkdGg6MTAwJX0udWstZHJvcGRvd24tZ3JpZD5bY2xhc3MqPXVrLXdpZHRoLV06bnRoLWNoaWxkKG4rMil7bWFyZ2luLXRvcDoxNXB4fX0udWstZHJvcGRvd24tc3RhY2s+LnVrLWRyb3Bkb3duLWdyaWQ+W2NsYXNzKj11ay13aWR0aC1de3dpZHRoOjEwMCV9LnVrLWRyb3Bkb3duLXN0YWNrPi51ay1kcm9wZG93bi1ncmlkPltjbGFzcyo9dWstd2lkdGgtXTpudGgtY2hpbGQobisyKXttYXJnaW4tdG9wOjE1cHh9LnVrLWRyb3Bkb3duLXNtYWxse21pbi13aWR0aDoxNTBweDt3aWR0aDphdXRvO3BhZGRpbmc6NXB4O3doaXRlLXNwYWNlOm5vd3JhcH0udWstZHJvcGRvd24tc21hbGwgLnVrLW5hdnttYXJnaW46MCAtNXB4fS51ay1kcm9wZG93bi1uYXZiYXJ7bWFyZ2luLXRvcDowO2JhY2tncm91bmQ6I2Y1ZjVmNTtjb2xvcjojNDQ0fS51ay1vcGVuPi51ay1kcm9wZG93bi1uYXZiYXJ7LXdlYmtpdC1hbmltYXRpb246dWstc2xpZGUtdG9wLWZpeGVkIC4ycyBlYXNlLWluLW91dDthbmltYXRpb246dWstc2xpZGUtdG9wLWZpeGVkIC4ycyBlYXNlLWluLW91dH0udWstZHJvcGRvd24tc2Nyb2xsYWJsZXtvdmVyZmxvdy15OmF1dG87bWF4LWhlaWdodDoyMDBweH0udWstbW9kYWx7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO3otaW5kZXg6MTAxMDtvdmVyZmxvdy15OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC42KTtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXI7dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyO3RvdWNoLWFjdGlvbjpjcm9zcy1zbGlkZS15IHBpbmNoLXpvb20gZG91YmxlLXRhcC16b29tOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVooMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LnVrLW1vZGFsLnVrLW9wZW57b3BhY2l0eToxfS51ay1tb2RhbC1wYWdlLC51ay1tb2RhbC1wYWdlIGJvZHl7b3ZlcmZsb3c6aGlkZGVufS51ay1tb2RhbC1kaWFsb2d7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjo1MHB4IGF1dG87cGFkZGluZzoyMHB4O3dpZHRoOjYwMHB4O21heC13aWR0aDoxMDAlO21heC13aWR0aDpjYWxjKDEwMCUgLSAyMHB4KTtiYWNrZ3JvdW5kOiNmZmY7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEwMHB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwcHgpOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXIsLXdlYmtpdC10cmFuc2Zvcm0gLjNzIGVhc2Utb3V0O3RyYW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyLHRyYW5zZm9ybSAuM3MgZWFzZS1vdXR9QG1lZGlhIChtYXgtd2lkdGg6NzY3cHgpey51ay1tb2RhbC1kaWFsb2d7d2lkdGg6YXV0bzttYXJnaW46MTBweCBhdXRvfX0udWstb3BlbiAudWstbW9kYWwtZGlhbG9ne29wYWNpdHk6MTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDApO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApfS51ay1tb2RhbC1kaWFsb2c+Om5vdChbY2xhc3MqPXVrLW1vZGFsLV0pOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1tb2RhbC1kaWFsb2c+LnVrLWNsb3NlOmZpcnN0LWNoaWxke21hcmdpbjotMTBweCAtMTBweCAwIDA7ZmxvYXQ6cmlnaHR9LnVrLW1vZGFsLWRpYWxvZz4udWstY2xvc2U6Zmlyc3QtY2hpbGQrOm5vdChbY2xhc3MqPXVrLW1vZGFsLV0pe21hcmdpbi10b3A6MH0udWstbW9kYWwtZGlhbG9nLWxpZ2h0Ym94e21hcmdpbjoxNXB4IGF1dG87cGFkZGluZzowO21heC13aWR0aDo5NSU7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIDMwcHgpfS51ay1tb2RhbC1kaWFsb2ctbGlnaHRib3g+LnVrLWNsb3NlOmZpcnN0LWNoaWxke3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMTJweDtyaWdodDotMTJweDttYXJnaW46MDtmbG9hdDpub25lfUBtZWRpYSAobWF4LXdpZHRoOjc2N3B4KXsudWstbW9kYWwtZGlhbG9nLWxpZ2h0Ym94Pi51ay1jbG9zZTpmaXJzdC1jaGlsZHt0b3A6LTdweDtyaWdodDotN3B4fX0udWstbW9kYWwtZGlhbG9nLWJsYW5re21hcmdpbjowO3BhZGRpbmc6MDt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXI7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXJ9LnVrLW1vZGFsLWRpYWxvZy1ibGFuaz4udWstY2xvc2U6Zmlyc3QtY2hpbGR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjIwcHg7cmlnaHQ6MjBweDt6LWluZGV4OjE7bWFyZ2luOjA7ZmxvYXQ6bm9uZX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LnVrLW1vZGFsLWRpYWxvZy1sYXJnZXt3aWR0aDo5MzBweH19QG1lZGlhIChtaW4td2lkdGg6MTIyMHB4KXsudWstbW9kYWwtZGlhbG9nLWxhcmdle3dpZHRoOjExMzBweH19LnVrLW1vZGFsLWhlYWRlcnttYXJnaW4tYm90dG9tOjE1cHh9LnVrLW1vZGFsLWZvb3RlcnttYXJnaW4tdG9wOjE1cHh9LnVrLW1vZGFsLWZvb3Rlcj46bGFzdC1jaGlsZCwudWstbW9kYWwtaGVhZGVyPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstbW9kYWwtY2FwdGlvbntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7cmlnaHQ6MDtib3R0b206LTIwcHg7bWFyZ2luLWJvdHRvbTotMTBweDtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0udWstbW9kYWwtc3Bpbm5lcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTtmb250LXNpemU6MjVweDtjb2xvcjojZGRkfS51ay1tb2RhbC1zcGlubmVyOmFmdGVye2NvbnRlbnQ6IlxmMTEwIjtmb250LWZhbWlseTpGb250QXdlc29tZTstd2Via2l0LWFuaW1hdGlvbjp1ay1yb3RhdGUgMnMgaW5maW5pdGUgbGluZWFyO2FuaW1hdGlvbjp1ay1yb3RhdGUgMnMgaW5maW5pdGUgbGluZWFyfS51ay1vZmZjYW52YXN7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO3otaW5kZXg6MTAwMDt0b3VjaC1hY3Rpb246bm9uZTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEpfS51ay1vZmZjYW52YXMudWstYWN0aXZle2Rpc3BsYXk6YmxvY2t9LnVrLW9mZmNhbnZhcy1wYWdle3Bvc2l0aW9uOmZpeGVkOy13ZWJraXQtdHJhbnNpdGlvbjptYXJnaW4tbGVmdCAuM3MgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjptYXJnaW4tbGVmdCAuM3MgZWFzZS1pbi1vdXR9LnVrLW9mZmNhbnZhcy1iYXJ7cG9zaXRpb246Zml4ZWQ7dG9wOjA7Ym90dG9tOjA7bGVmdDowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKTt6LWluZGV4OjEwMDE7d2lkdGg6MjcwcHg7bWF4LXdpZHRoOjEwMCU7YmFja2dyb3VuZDojMzMzO292ZXJmbG93LXk6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDstd2Via2l0LXRyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjNzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlLWluLW91dDstbXMtc2Nyb2xsLWNoYWluaW5nOm5vbmV9LnVrLW9mZmNhbnZhcy51ay1hY3RpdmUgLnVrLW9mZmNhbnZhcy1iYXIudWstb2ZmY2FudmFzLWJhci1zaG93ey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9LnVrLW9mZmNhbnZhcy1iYXItZmxpcHtsZWZ0OmF1dG87cmlnaHQ6MDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpfS51ay1vZmZjYW52YXMgLnVrLXBhbmVse21hcmdpbjoyMHB4IDE1cHg7Y29sb3I6Izc3N30udWstb2ZmY2FudmFzIC51ay1wYW5lbC10aXRsZXtjb2xvcjojY2NjfS51ay1vZmZjYW52YXMgLnVrLXBhbmVsIGE6bm90KFtjbGFzc10pe2NvbG9yOiNjY2N9LnVrLW9mZmNhbnZhcyAudWstcGFuZWwgYTpub3QoW2NsYXNzXSk6aG92ZXJ7Y29sb3I6I2ZmZn0udWstc3dpdGNoZXJ7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZTt0b3VjaC1hY3Rpb246Y3Jvc3Mtc2xpZGUteSBwaW5jaC16b29tIGRvdWJsZS10YXAtem9vbX0udWstc3dpdGNoZXI+Om5vdCgudWstYWN0aXZlKXtkaXNwbGF5Om5vbmV9LnVrLXRleHQtc21hbGx7Zm9udC1zaXplOjExcHg7bGluZS1oZWlnaHQ6MTZweH0udWstdGV4dC1sYXJnZXtmb250LXNpemU6MThweDtsaW5lLWhlaWdodDoyNHB4O2ZvbnQtd2VpZ2h0OjQwMH0udWstdGV4dC1ib2xke2ZvbnQtd2VpZ2h0OjcwMH0udWstdGV4dC1tdXRlZHtjb2xvcjojOTk5IWltcG9ydGFudH0udWstdGV4dC1wcmltYXJ5e2NvbG9yOiMyZDcwOTEhaW1wb3J0YW50fS51ay10ZXh0LXN1Y2Nlc3N7Y29sb3I6IzY1OWYxMyFpbXBvcnRhbnR9LnVrLXRleHQtd2FybmluZ3tjb2xvcjojZTI4MzI3IWltcG9ydGFudH0udWstdGV4dC1kYW5nZXJ7Y29sb3I6I2Q4NTAzMCFpbXBvcnRhbnR9LnVrLXRleHQtY29udHJhc3R7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LnVrLXRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50fS51ay10ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHQhaW1wb3J0YW50fS51ay10ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlciFpbXBvcnRhbnR9LnVrLXRleHQtanVzdGlmeXt0ZXh0LWFsaWduOmp1c3RpZnkhaW1wb3J0YW50fS51ay10ZXh0LXRvcHt2ZXJ0aWNhbC1hbGlnbjp0b3AhaW1wb3J0YW50fS51ay10ZXh0LW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUhaW1wb3J0YW50fS51ay10ZXh0LWJvdHRvbXt2ZXJ0aWNhbC1hbGlnbjpib3R0b20haW1wb3J0YW50fUBtZWRpYSAobWF4LXdpZHRoOjk1OXB4KXsudWstdGV4dC1jZW50ZXItbWVkaXVte3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH0udWstdGV4dC1sZWZ0LW1lZGl1bXt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0aDo3NjdweCl7LnVrLXRleHQtY2VudGVyLXNtYWxse3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH0udWstdGV4dC1sZWZ0LXNtYWxse3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9fS51ay10ZXh0LW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LnVrLXRleHQtdHJ1bmNhdGV7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS51ay10ZXh0LWJyZWFre3dvcmQtd3JhcDpicmVhay13b3JkOy13ZWJraXQtaHlwaGVuczphdXRvOy1tcy1oeXBoZW5zOmF1dG87LW1vei1oeXBoZW5zOmF1dG87aHlwaGVuczphdXRvfS51ay1jb250YWluZXJ7Ym94LXNpemluZzpib3JkZXItYm94O21heC13aWR0aDo5ODBweDtwYWRkaW5nOjAgMjVweH1AbWVkaWEgKG1pbi13aWR0aDoxMjIwcHgpey51ay1jb250YWluZXJ7bWF4LXdpZHRoOjEyMDBweDtwYWRkaW5nOjAgMzVweH19LnVrLWNvbnRhaW5lcjphZnRlciwudWstY29udGFpbmVyOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6dGFibGV9LnVrLWNvbnRhaW5lcjphZnRlcntjbGVhcjpib3RofS51ay1jb250YWluZXItY2VudGVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG99LnVrLWNsZWFyZml4OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6dGFibGUtY2VsbH0udWstY2xlYXJmaXg6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlO2NsZWFyOmJvdGh9LnVrLW5iZmN7b3ZlcmZsb3c6aGlkZGVufS51ay1uYmZjLWFsdHtkaXNwbGF5OnRhYmxlLWNlbGw7d2lkdGg6MTAwMDBweH0udWstZmxvYXQtbGVmdHtmbG9hdDpsZWZ0fS51ay1mbG9hdC1yaWdodHtmbG9hdDpyaWdodH1bY2xhc3MqPXVrLWZsb2F0LV17bWF4LXdpZHRoOjEwMCV9W2NsYXNzKj11ay1hbGlnbi1de2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbToxNXB4fS51ay1hbGlnbi1sZWZ0e21hcmdpbi1yaWdodDoxNXB4O2Zsb2F0OmxlZnR9LnVrLWFsaWduLXJpZ2h0e21hcmdpbi1sZWZ0OjE1cHg7ZmxvYXQ6cmlnaHR9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey51ay1hbGlnbi1tZWRpdW0tbGVmdHttYXJnaW4tcmlnaHQ6MTVweDttYXJnaW4tYm90dG9tOjE1cHg7ZmxvYXQ6bGVmdH0udWstYWxpZ24tbWVkaXVtLXJpZ2h0e21hcmdpbi1sZWZ0OjE1cHg7bWFyZ2luLWJvdHRvbToxNXB4O2Zsb2F0OnJpZ2h0fX0udWstYWxpZ24tY2VudGVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG99LnVrLXZlcnRpY2FsLWFsaWdue2ZvbnQtc2l6ZTowfS51ay12ZXJ0aWNhbC1hbGlnbjpiZWZvcmV7Y29udGVudDonJztkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LnVrLXZlcnRpY2FsLWFsaWduLWJvdHRvbSwudWstdmVydGljYWwtYWxpZ24tbWlkZGxle2Rpc3BsYXk6aW5saW5lLWJsb2NrO21heC13aWR0aDoxMDAlO2ZvbnQtc2l6ZToxcmVtfS51ay12ZXJ0aWNhbC1hbGlnbi1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfS51ay12ZXJ0aWNhbC1hbGlnbi1ib3R0b217dmVydGljYWwtYWxpZ246Ym90dG9tfVtjbGFzcyo9dWstaGVpZ2h0XXtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnVrLWhlaWdodC0xLTF7aGVpZ2h0OjEwMCV9LnVrLWhlaWdodC12aWV3cG9ydHtoZWlnaHQ6MTAwdmg7bWluLWhlaWdodDo2MDBweH0udWstcmVzcG9uc2l2ZS1oZWlnaHQsLnVrLXJlc3BvbnNpdmUtd2lkdGh7Ym94LXNpemluZzpib3JkZXItYm94fS51ay1yZXNwb25zaXZlLXdpZHRoe21heC13aWR0aDoxMDAlIWltcG9ydGFudDtoZWlnaHQ6YXV0b30udWstcmVzcG9uc2l2ZS1oZWlnaHR7bWF4LWhlaWdodDoxMDAlO3dpZHRoOmF1dG99LnVrLW1hcmdpbnttYXJnaW4tYm90dG9tOjE1cHh9KisudWstbWFyZ2lue21hcmdpbi10b3A6MTVweH0udWstbWFyZ2luLXRvcHttYXJnaW4tdG9wOjE1cHghaW1wb3J0YW50fS51ay1tYXJnaW4tYm90dG9te21hcmdpbi1ib3R0b206MTVweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1sZWZ0e21hcmdpbi1sZWZ0OjE1cHghaW1wb3J0YW50fS51ay1tYXJnaW4tcmlnaHR7bWFyZ2luLXJpZ2h0OjE1cHghaW1wb3J0YW50fS51ay1tYXJnaW4tbGFyZ2V7bWFyZ2luLWJvdHRvbTo1MHB4fSorLnVrLW1hcmdpbi1sYXJnZXttYXJnaW4tdG9wOjUwcHh9LnVrLW1hcmdpbi1sYXJnZS10b3B7bWFyZ2luLXRvcDo1MHB4IWltcG9ydGFudH0udWstbWFyZ2luLWxhcmdlLWJvdHRvbXttYXJnaW4tYm90dG9tOjUwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tbGFyZ2UtbGVmdHttYXJnaW4tbGVmdDo1MHB4IWltcG9ydGFudH0udWstbWFyZ2luLWxhcmdlLXJpZ2h0e21hcmdpbi1yaWdodDo1MHB4IWltcG9ydGFudH0udWstbWFyZ2luLXNtYWxse21hcmdpbi1ib3R0b206NXB4fSorLnVrLW1hcmdpbi1zbWFsbHttYXJnaW4tdG9wOjVweH0udWstbWFyZ2luLXNtYWxsLXRvcHttYXJnaW4tdG9wOjVweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1zbWFsbC1ib3R0b217bWFyZ2luLWJvdHRvbTo1cHghaW1wb3J0YW50fS51ay1tYXJnaW4tc21hbGwtbGVmdHttYXJnaW4tbGVmdDo1cHghaW1wb3J0YW50fS51ay1tYXJnaW4tc21hbGwtcmlnaHR7bWFyZ2luLXJpZ2h0OjVweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1yZW1vdmV7bWFyZ2luOjAhaW1wb3J0YW50fS51ay1tYXJnaW4tdG9wLXJlbW92ZXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS51ay1tYXJnaW4tYm90dG9tLXJlbW92ZXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fS51ay1wYWRkaW5nLXJlbW92ZXtwYWRkaW5nOjAhaW1wb3J0YW50fS51ay1wYWRkaW5nLXRvcC1yZW1vdmV7cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9LnVrLXBhZGRpbmctYm90dG9tLXJlbW92ZXtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH0udWstcGFkZGluZy12ZXJ0aWNhbC1yZW1vdmV7cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9LnVrLWJvcmRlci1jaXJjbGV7Ym9yZGVyLXJhZGl1czo1MCV9LnVrLWJvcmRlci1yb3VuZGVke2JvcmRlci1yYWRpdXM6NXB4fS51ay1oZWFkaW5nLWxhcmdle2ZvbnQtc2l6ZTozNnB4O2xpbmUtaGVpZ2h0OjQycHh9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey51ay1oZWFkaW5nLWxhcmdle2ZvbnQtc2l6ZTo1MnB4O2xpbmUtaGVpZ2h0OjY0cHh9fS51ay1saW5rLW11dGVkLC51ay1saW5rLW11dGVkIGF7Y29sb3I6IzQ0NH0udWstbGluay1tdXRlZCBhOmhvdmVyLC51ay1saW5rLW11dGVkOmhvdmVye2NvbG9yOiM0NDR9LnVrLWxpbmstcmVzZXQsLnVrLWxpbmstcmVzZXQgYSwudWstbGluay1yZXNldCBhOmZvY3VzLC51ay1saW5rLXJlc2V0IGE6aG92ZXIsLnVrLWxpbmstcmVzZXQ6Zm9jdXMsLnVrLWxpbmstcmVzZXQ6aG92ZXJ7Y29sb3I6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstc2Nyb2xsYWJsZS10ZXh0e2hlaWdodDozMDBweDtvdmVyZmxvdy15OnNjcm9sbDstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDtyZXNpemU6Ym90aH0udWstc2Nyb2xsYWJsZS1ib3h7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxNzBweDtwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cmVzaXplOmJvdGh9LnVrLXNjcm9sbGFibGUtYm94PjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstb3ZlcmZsb3ctaGlkZGVue292ZXJmbG93OmhpZGRlbn0udWstb3ZlcmZsb3ctY29udGFpbmVye292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LnVrLW92ZXJmbG93LWNvbnRhaW5lcj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLXBvc2l0aW9uLWFic29sdXRlLFtjbGFzcyo9dWstcG9zaXRpb24tdG9wXSxbY2xhc3MqPXVrLXBvc2l0aW9uLWJvdHRvbV17cG9zaXRpb246YWJzb2x1dGUhaW1wb3J0YW50fS51ay1wb3NpdGlvbi10b3B7dG9wOjA7bGVmdDowO3JpZ2h0OjB9LnVrLXBvc2l0aW9uLWJvdHRvbXtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MH0udWstcG9zaXRpb24tdG9wLWxlZnR7dG9wOjA7bGVmdDowfS51ay1wb3NpdGlvbi10b3AtcmlnaHR7dG9wOjA7cmlnaHQ6MH0udWstcG9zaXRpb24tYm90dG9tLWxlZnR7Ym90dG9tOjA7bGVmdDowfS51ay1wb3NpdGlvbi1ib3R0b20tcmlnaHR7Ym90dG9tOjA7cmlnaHQ6MH0udWstcG9zaXRpb24tY292ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjB9LnVrLXBvc2l0aW9uLXJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlIWltcG9ydGFudH0udWstcG9zaXRpb24tei1pbmRleHt6LWluZGV4OjF9LnVrLWRpc3BsYXktYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LnVrLWRpc3BsYXktaW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH0udWstZGlzcGxheS1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstdmlzaWJsZS1zbWFsbHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS51ay12aXNpYmxlLW1lZGl1bXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS51ay1oaWRkZW4tbGFyZ2V7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpIGFuZCAobWF4LXdpZHRoOjk1OXB4KXsudWstdmlzaWJsZS1zbWFsbHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS51ay12aXNpYmxlLWxhcmdle2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnVrLWhpZGRlbi1tZWRpdW17ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6NzY3cHgpey51ay12aXNpYmxlLW1lZGl1bXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS51ay12aXNpYmxlLWxhcmdle2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnVrLWhpZGRlbi1zbWFsbHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX0udWstaGlkZGVue2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fS51ay1pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fS51ay12aXNpYmxlLWhvdmVyOmhvdmVyIC51ay1oaWRkZW4sLnVrLXZpc2libGUtaG92ZXI6aG92ZXIgLnVrLWludmlzaWJsZXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudDt2aXNpYmlsaXR5OnZpc2libGUhaW1wb3J0YW50fS51ay12aXNpYmxlLWhvdmVyLWlubGluZTpob3ZlciAudWstaGlkZGVuLC51ay12aXNpYmxlLWhvdmVyLWlubGluZTpob3ZlciAudWstaW52aXNpYmxle2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudDt2aXNpYmlsaXR5OnZpc2libGUhaW1wb3J0YW50fS51ay1ub3RvdWNoIC51ay1oaWRkZW4tbm90b3VjaCwudWstdG91Y2ggLnVrLWhpZGRlbi10b3VjaHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS51ay1mbGV4e2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTpmbGV4fS51ay1mbGV4LWlubGluZXtkaXNwbGF5Oi1tcy1pbmxpbmUtZmxleGJveDtkaXNwbGF5Oi13ZWJraXQtaW5saW5lLWZsZXg7ZGlzcGxheTppbmxpbmUtZmxleH0udWstZmxleC1pbmxpbmU+KiwudWstZmxleD4qey1tcy1mbGV4LW5lZ2F0aXZlOjF9LnVrLWZsZXgtdG9wey1tcy1mbGV4LWFsaWduOnN0YXJ0Oy13ZWJraXQtYWxpZ24taXRlbXM6ZmxleC1zdGFydDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS51ay1mbGV4LW1pZGRsZXstbXMtZmxleC1hbGlnbjpjZW50ZXI7LXdlYmtpdC1hbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS51ay1mbGV4LWJvdHRvbXstbXMtZmxleC1hbGlnbjplbmQ7LXdlYmtpdC1hbGlnbi1pdGVtczpmbGV4LWVuZDthbGlnbi1pdGVtczpmbGV4LWVuZH0udWstZmxleC1jZW50ZXJ7LW1zLWZsZXgtcGFjazpjZW50ZXI7LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnVrLWZsZXgtcmlnaHR7LW1zLWZsZXgtcGFjazplbmQ7LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS51ay1mbGV4LXNwYWNlLWJldHdlZW57LW1zLWZsZXgtcGFjazpqdXN0aWZ5Oy13ZWJraXQtanVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnVrLWZsZXgtc3BhY2UtYXJvdW5key1tcy1mbGV4LXBhY2s6ZGlzdHJpYnV0ZTstd2Via2l0LWp1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0udWstZmxleC1yb3ctcmV2ZXJzZXstbXMtZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7LXdlYmtpdC1mbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX0udWstZmxleC1jb2x1bW57LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjstd2Via2l0LWZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LnVrLWZsZXgtY29sdW1uLXJldmVyc2V7LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlOy13ZWJraXQtZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2U7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9LnVrLWZsZXgtbm93cmFwey1tcy1mbGV4LXdyYXA6bm93cmFwOy13ZWJraXQtZmxleC13cmFwOm5vd3JhcDtmbGV4LXdyYXA6bm93cmFwfS51ay1mbGV4LXdyYXB7LW1zLWZsZXgtd3JhcDp3cmFwOy13ZWJraXQtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXB9LnVrLWZsZXgtd3JhcC1yZXZlcnNley1tcy1mbGV4LXdyYXA6d3JhcC1yZXZlcnNlOy13ZWJraXQtZmxleC13cmFwOndyYXAtcmV2ZXJzZTtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlfS51ay1mbGV4LXdyYXAtdG9wey1tcy1mbGV4LWxpbmUtcGFjazpzdGFydDstd2Via2l0LWFsaWduLWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1jb250ZW50OmZsZXgtc3RhcnR9LnVrLWZsZXgtd3JhcC1taWRkbGV7LW1zLWZsZXgtbGluZS1wYWNrOmNlbnRlcjstd2Via2l0LWFsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfS51ay1mbGV4LXdyYXAtYm90dG9tey1tcy1mbGV4LWxpbmUtcGFjazplbmQ7LXdlYmtpdC1hbGlnbi1jb250ZW50OmZsZXgtZW5kO2FsaWduLWNvbnRlbnQ6ZmxleC1lbmR9LnVrLWZsZXgtd3JhcC1zcGFjZS1iZXR3ZWVuey1tcy1mbGV4LWxpbmUtcGFjazpqdXN0aWZ5Oy13ZWJraXQtYWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0udWstZmxleC13cmFwLXNwYWNlLWFyb3VuZHstbXMtZmxleC1saW5lLXBhY2s6ZGlzdHJpYnV0ZTstd2Via2l0LWFsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kO2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS51ay1mbGV4LW9yZGVyLWZpcnN0ey1tcy1mbGV4LW9yZGVyOi0xOy13ZWJraXQtb3JkZXI6LTE7b3JkZXI6LTF9LnVrLWZsZXgtb3JkZXItbGFzdHstbXMtZmxleC1vcmRlcjo5OTstd2Via2l0LW9yZGVyOjk5O29yZGVyOjk5fUBtZWRpYSAobWluLXdpZHRoOjQ4MHB4KXsudWstZmxleC1vcmRlci1maXJzdC1zbWFsbHstbXMtZmxleC1vcmRlcjotMTstd2Via2l0LW9yZGVyOi0xO29yZGVyOi0xfS51ay1mbGV4LW9yZGVyLWxhc3Qtc21hbGx7LW1zLWZsZXgtb3JkZXI6OTk7LXdlYmtpdC1vcmRlcjo5OTtvcmRlcjo5OX19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey51ay1mbGV4LW9yZGVyLWZpcnN0LW1lZGl1bXstbXMtZmxleC1vcmRlcjotMTstd2Via2l0LW9yZGVyOi0xO29yZGVyOi0xfS51ay1mbGV4LW9yZGVyLWxhc3QtbWVkaXVtey1tcy1mbGV4LW9yZGVyOjk5Oy13ZWJraXQtb3JkZXI6OTk7b3JkZXI6OTl9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstZmxleC1vcmRlci1maXJzdC1sYXJnZXstbXMtZmxleC1vcmRlcjotMTstd2Via2l0LW9yZGVyOi0xO29yZGVyOi0xfS51ay1mbGV4LW9yZGVyLWxhc3QtbGFyZ2V7LW1zLWZsZXgtb3JkZXI6OTk7LXdlYmtpdC1vcmRlcjo5OTtvcmRlcjo5OX19QG1lZGlhIChtaW4td2lkdGg6MTIyMHB4KXsudWstZmxleC1vcmRlci1maXJzdC14bGFyZ2V7LW1zLWZsZXgtb3JkZXI6LTE7LXdlYmtpdC1vcmRlcjotMTtvcmRlcjotMX0udWstZmxleC1vcmRlci1sYXN0LXhsYXJnZXstbXMtZmxleC1vcmRlcjo5OTstd2Via2l0LW9yZGVyOjk5O29yZGVyOjk5fX0udWstZmxleC1pdGVtLW5vbmV7LW1zLWZsZXg6bm9uZTstd2Via2l0LWZsZXg6bm9uZTtmbGV4Om5vbmV9LnVrLWZsZXgtaXRlbS1hdXRvey1tcy1mbGV4OmF1dG87LXdlYmtpdC1mbGV4OmF1dG87ZmxleDphdXRvOy1tcy1mbGV4LW5lZ2F0aXZlOjF9LnVrLWZsZXgtaXRlbS0xey1tcy1mbGV4OjE7LXdlYmtpdC1mbGV4OjE7ZmxleDoxfS51ay1jb250cmFzdHtjb2xvcjojZmZmfS51ay1jb250cmFzdCAudWstbGluaywudWstY29udHJhc3QgYTpub3QoW2NsYXNzXSl7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVrLWNvbnRyYXN0IC51ay1saW5rOmhvdmVyLC51ay1jb250cmFzdCBhOm5vdChbY2xhc3NdKTpob3Zlcntjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LnVrLWNvbnRyYXN0IDpub3QocHJlKT5jb2RlLC51ay1jb250cmFzdCA6bm90KHByZSk+a2JkLC51ay1jb250cmFzdCA6bm90KHByZSk+c2FtcHtjb2xvcjojZmZmfS51ay1jb250cmFzdCBlbXtjb2xvcjojZmZmfS51ay1jb250cmFzdCBoMSwudWstY29udHJhc3QgaDIsLnVrLWNvbnRyYXN0IGgzLC51ay1jb250cmFzdCBoNCwudWstY29udHJhc3QgaDUsLnVrLWNvbnRyYXN0IGg2e2NvbG9yOiNmZmZ9LnVrLWNvbnRyYXN0IGhye2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNvbnRyYXN0IC51ay1uYXYgbGk+YSwudWstY29udHJhc3QgLnVrLW5hdiBsaT5hOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lfS51ay1jb250cmFzdCAudWstbmF2LXNpZGU+bGk+YXtjb2xvcjojZmZmfS51ay1jb250cmFzdCAudWstbmF2LXNpZGU+bGk+YTpmb2N1cywudWstY29udHJhc3QgLnVrLW5hdi1zaWRlPmxpPmE6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xKTtjb2xvcjojZmZmfS51ay1jb250cmFzdCAudWstbmF2LXNpZGU+bGkudWstYWN0aXZlPmF7YmFja2dyb3VuZDojZmZmO2NvbG9yOiM0NDR9LnVrLWNvbnRyYXN0IC51ay1uYXYtc2lkZSAudWstbmF2LWhlYWRlcntjb2xvcjojZmZmfS51ay1jb250cmFzdCAudWstbmF2LXNpZGUgLnVrLW5hdi1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNvbnRyYXN0IC51ay1uYXYtc2lkZSB1bCBhe2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jb250cmFzdCAudWstbmF2LXNpZGUgdWwgYTpob3Zlcntjb2xvcjojZmZmfS51ay1jb250cmFzdCAudWstc3VibmF2Pio+YXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstY29udHJhc3QgLnVrLXN1Ym5hdj4qPmE6Zm9jdXMsLnVrLWNvbnRyYXN0IC51ay1zdWJuYXY+Kj5hOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVrLWNvbnRyYXN0IC51ay1zdWJuYXY+LnVrLWFjdGl2ZT5he2NvbG9yOiNmZmZ9LnVrLWNvbnRyYXN0IC51ay1zdWJuYXYtbGluZT46bnRoLWNoaWxkKG4rMik6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jb250cmFzdCAudWstc3VibmF2LXBpbGw+Kj5hOmZvY3VzLC51ay1jb250cmFzdCAudWstc3VibmF2LXBpbGw+Kj5hOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuNyk7Y29sb3I6IzQ0NDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstY29udHJhc3QgLnVrLXN1Ym5hdi1waWxsPi51ay1hY3RpdmU+YXtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzQ0NH0udWstY29udHJhc3QgLnVrLXRhYntib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jb250cmFzdCAudWstdGFiPmxpPmF7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jb250cmFzdCAudWstdGFiPmxpLnVrLW9wZW4+YSwudWstY29udHJhc3QgLnVrLXRhYj5saT5hOmZvY3VzLC51ay1jb250cmFzdCAudWstdGFiPmxpPmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuNyk7Y29sb3I6IzQ0NDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstY29udHJhc3QgLnVrLXRhYj5saS51ay1hY3RpdmU+YXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMik7Ym9yZGVyLWJvdHRvbS1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzQ0NH0udWstY29udHJhc3QgLnVrLXRhYi1jZW50ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY29udHJhc3QgLnVrLXRhYi1ncmlkOmJlZm9yZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jb250cmFzdCAudWstbGlzdC1saW5lPmxpOm50aC1jaGlsZChuKzIpe2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNvbnRyYXN0IC51ay1mb3JtIGlucHV0Om5vdChbdHlwZV0pLC51ay1jb250cmFzdCAudWstZm9ybSBpbnB1dFt0eXBlPXRleHRdLC51ay1jb250cmFzdCAudWstZm9ybSBpbnB1dFt0eXBlPXBhc3N3b3JkXSwudWstY29udHJhc3QgLnVrLWZvcm0gaW5wdXRbdHlwZT1lbWFpbF0sLnVrLWNvbnRyYXN0IC51ay1mb3JtIGlucHV0W3R5cGU9dXJsXSwudWstY29udHJhc3QgLnVrLWZvcm0gaW5wdXRbdHlwZT1zZWFyY2hdLC51ay1jb250cmFzdCAudWstZm9ybSBpbnB1dFt0eXBlPXRlbF0sLnVrLWNvbnRyYXN0IC51ay1mb3JtIGlucHV0W3R5cGU9bnVtYmVyXSwudWstY29udHJhc3QgLnVrLWZvcm0gaW5wdXRbdHlwZT1kYXRldGltZV0sLnVrLWNvbnRyYXN0IC51ay1mb3JtIGlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdLC51ay1jb250cmFzdCAudWstZm9ybSBpbnB1dFt0eXBlPWRhdGVdLC51ay1jb250cmFzdCAudWstZm9ybSBpbnB1dFt0eXBlPW1vbnRoXSwudWstY29udHJhc3QgLnVrLWZvcm0gaW5wdXRbdHlwZT10aW1lXSwudWstY29udHJhc3QgLnVrLWZvcm0gaW5wdXRbdHlwZT13ZWVrXSwudWstY29udHJhc3QgLnVrLWZvcm0gaW5wdXRbdHlwZT1jb2xvcl0sLnVrLWNvbnRyYXN0IC51ay1mb3JtIHNlbGVjdCwudWstY29udHJhc3QgLnVrLWZvcm0gdGV4dGFyZWF7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjgpO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuOCk7Y29sb3I6IzQ0NDtiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3h9LnVrLWNvbnRyYXN0IC51ay1mb3JtIGlucHV0Om5vdChbdHlwZV0pOmZvY3VzLC51ay1jb250cmFzdCAudWstZm9ybSBpbnB1dFt0eXBlPXRleHRdOmZvY3VzLC51ay1jb250cmFzdCAudWstZm9ybSBpbnB1dFt0eXBlPXBhc3N3b3JkXTpmb2N1cywudWstY29udHJhc3QgLnVrLWZvcm0gaW5wdXRbdHlwZT1lbWFpbF06Zm9jdXMsLnVrLWNvbnRyYXN0IC51ay1mb3JtIGlucHV0W3R5cGU9dXJsXTpmb2N1cywudWstY29udHJhc3QgLnVrLWZvcm0gaW5wdXRbdHlwZT1zZWFyY2hdOmZvY3VzLC51ay1jb250cmFzdCAudWstZm9ybSBpbnB1dFt0eXBlPXRlbF06Zm9jdXMsLnVrLWNvbnRyYXN0IC51ay1mb3JtIGlucHV0W3R5cGU9bnVtYmVyXTpmb2N1cywudWstY29udHJhc3QgLnVrLWZvcm0gaW5wdXRbdHlwZT1kYXRldGltZV06Zm9jdXMsLnVrLWNvbnRyYXN0IC51ay1mb3JtIGlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOmZvY3VzLC51ay1jb250cmFzdCAudWstZm9ybSBpbnB1dFt0eXBlPWRhdGVdOmZvY3VzLC51ay1jb250cmFzdCAudWstZm9ybSBpbnB1dFt0eXBlPW1vbnRoXTpmb2N1cywudWstY29udHJhc3QgLnVrLWZvcm0gaW5wdXRbdHlwZT10aW1lXTpmb2N1cywudWstY29udHJhc3QgLnVrLWZvcm0gaW5wdXRbdHlwZT13ZWVrXTpmb2N1cywudWstY29udHJhc3QgLnVrLWZvcm0gaW5wdXRbdHlwZT1jb2xvcl06Zm9jdXMsLnVrLWNvbnRyYXN0IC51ay1mb3JtIHNlbGVjdDpmb2N1cywudWstY29udHJhc3QgLnVrLWZvcm0gdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmY7YmFja2dyb3VuZDojZmZmO2NvbG9yOiM0NDR9LnVrLWNvbnRyYXN0IC51ay1mb3JtIDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg2OCw2OCw2OCwuNykhaW1wb3J0YW50fS51ay1jb250cmFzdCAudWstZm9ybSA6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg2OCw2OCw2OCwuNyl9LnVrLWNvbnRyYXN0IC51ay1mb3JtIDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDY4LDY4LDY4LC43KX0udWstY29udHJhc3QgLnVrLWJ1dHRvbntjb2xvcjojNDQ0O2JhY2tncm91bmQ6I2ZmZn0udWstY29udHJhc3QgLnVrLWJ1dHRvbjpmb2N1cywudWstY29udHJhc3QgLnVrLWJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjgpO2NvbG9yOiM0NDR9LnVrLWNvbnRyYXN0IC51ay1idXR0b24udWstYWN0aXZlLC51ay1jb250cmFzdCAudWstYnV0dG9uOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2NvbG9yOiM0NDR9LnVrLWNvbnRyYXN0IC51ay1idXR0b24tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiMwMGE4ZTY7Y29sb3I6I2ZmZn0udWstY29udHJhc3QgLnVrLWJ1dHRvbi1wcmltYXJ5OmZvY3VzLC51ay1jb250cmFzdCAudWstYnV0dG9uLXByaW1hcnk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMzViM2VlO2NvbG9yOiNmZmZ9LnVrLWNvbnRyYXN0IC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsLnVrLWNvbnRyYXN0IC51ay1idXR0b24tcHJpbWFyeTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojMDA5MWNhO2NvbG9yOiNmZmZ9LnVrLWNvbnRyYXN0IC51ay1pY29uLWhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jb250cmFzdCAudWstaWNvbi1ob3Zlcjpob3Zlcntjb2xvcjojZmZmfS51ay1jb250cmFzdCAudWstaWNvbi1idXR0b257YmFja2dyb3VuZDojZmZmO2NvbG9yOiM0NDR9LnVrLWNvbnRyYXN0IC51ay1pY29uLWJ1dHRvbjpmb2N1cywudWstY29udHJhc3QgLnVrLWljb24tYnV0dG9uOmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuOCk7Y29sb3I6IzQ0NH0udWstY29udHJhc3QgLnVrLWljb24tYnV0dG9uOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2NvbG9yOiM0NDR9LnVrLWNvbnRyYXN0IC51ay10ZXh0LW11dGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjYpIWltcG9ydGFudH0udWstY29udHJhc3QgLnVrLXRleHQtcHJpbWFyeXtjb2xvcjojMmQ3MDkxIWltcG9ydGFudH1AbWVkaWEgcHJpbnR7KntiYWNrZ3JvdW5kOjAgMCFpbXBvcnRhbnQ7Y29sb3I6IzAwMCFpbXBvcnRhbnQ7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudDt0ZXh0LXNoYWRvdzpub25lIWltcG9ydGFudH1hLGE6dmlzaXRlZHt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfWJsb2NrcXVvdGUscHJle2JvcmRlcjoxcHggc29saWQgIzk5OTtwYWdlLWJyZWFrLWluc2lkZTphdm9pZH10aGVhZHtkaXNwbGF5OnRhYmxlLWhlYWRlci1ncm91cH1pbWcsdHJ7cGFnZS1icmVhay1pbnNpZGU6YXZvaWR9aW1ne21heC13aWR0aDoxMDAlIWltcG9ydGFudH1AcGFnZXttYXJnaW46LjVjbX1oMixoMyxwe29ycGhhbnM6Mzt3aWRvd3M6M31oMixoM3twYWdlLWJyZWFrLWFmdGVyOmF2b2lkfX0=]]></data>
	</file>
	<file>
	  <filename>/lib/Engines/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/Engines/class.MichelfEngine.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL01pY2hlbGYvTWFya2Rvd24uaW5jLnBocCcpOwoKY2xhc3MgTWljaGVsZkVuZ2luZSBleHRlbmRzIEVuZ2luZXsKCglwdWJsaWMgZnVuY3Rpb24gcGFyc2luZygkdGV4dCl7CgkJJG1hcmtkb3duID0gbmV3IE1pY2hlbGZcTWFya2Rvd24oKTsKCQkkdGV4dCA9ICRtYXJrZG93bi0+ZGVmYXVsdFRyYW5zZm9ybSgkdGV4dCk7CgoJCXJldHVybiAkdGV4dDsKCX0KfQo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/Engines/class.MichelfExtraEngine.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmluY2x1ZGVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL01pY2hlbGYvTWFya2Rvd25FeHRyYS5pbmMucGhwJyk7CgpjbGFzcyBNaWNoZWxmRXh0cmFFbmdpbmUgZXh0ZW5kcyBFbmdpbmV7CgoJcHVibGljIGZ1bmN0aW9uIHBhcnNpbmcoJHRleHQpewoJCSRtYXJrZG93biA9IG5ldyBNaWNoZWxmXE1hcmtkb3duRXh0cmE7CgkJJHRleHQgPSAkbWFya2Rvd24tPmRlZmF1bHRUcmFuc2Zvcm0oJHRleHQpOwoKCQlyZXR1cm4gJHRleHQ7Cgl9Cn0KPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/Engines/class.ParsedownEngine.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmluY2x1ZGVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL1BhcnNlZG93bi9QYXJzZWRvd24ucGhwJyk7CgpjbGFzcyBQYXJzZWRvd25FbmdpbmUgZXh0ZW5kcyBFbmdpbmV7CgoJcHVibGljIGZ1bmN0aW9uIHBhcnNpbmcoJHRleHQpewoJCSRtYXJrZG93biA9IG5ldyBQYXJzZWRvd247CgkJJHRleHQgPSAkbWFya2Rvd24tPnRleHQoJHRleHQpOwoKCQlyZXR1cm4gJHRleHQ7Cgl9Cn0KPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/Engines/Michelf/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/Engines/Michelf/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lib/Engines/Michelf/Markdown.inc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMgVXNlIHRoaXMgZmlsZSBpZiB5b3UgY2Fubm90IHVzZSBjbGFzcyBhdXRvbG9hZGluZy4gSXQgd2lsbCBpbmNsdWRlIGFsbCB0aGUKIyBmaWxlcyBuZWVkZWQgZm9yIHRoZSBNYXJrZG93biBtYXJrZG93bi4KIwojIFRha2UgYSBsb29rIGF0IHRoZSBQU1ItMC1jb21wYXRpYmxlIGNsYXNzIGF1dG9sb2FkaW5nIGltcGxlbWVudGF0aW9uCiMgaW4gdGhlIFJlYWRtZS5waHAgZmlsZSBpZiB5b3Ugd2FudCBhIHNpbXBsZSBhdXRvbG9hZGVyIHNldHVwLgoKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9NYXJrZG93bkludGVyZmFjZS5waHAnOwpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL01hcmtkb3duLnBocCc7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/Engines/Michelf/Markdown.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIwojIE1hcmtkb3duICAtICBBIHRleHQtdG8tSFRNTCBjb252ZXJzaW9uIHRvb2wgZm9yIHdlYiB3cml0ZXJzCiMKIyBQSFAgTWFya2Rvd24gIAojIENvcHlyaWdodCAoYykgMjAwNC0yMDE1IE1pY2hlbCBGb3J0aW4gIAojIDxodHRwczovL21pY2hlbGYuY2EvcHJvamVjdHMvcGhwLW1hcmtkb3duLz4KIwojIE9yaWdpbmFsIE1hcmtkb3duICAKIyBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNiBKb2huIEdydWJlciAgCiMgPGh0dHA6Ly9kYXJpbmdmaXJlYmFsbC5uZXQvcHJvamVjdHMvbWFya2Rvd24vPgojCm5hbWVzcGFjZSBNaWNoZWxmOwoKCiMKIyBNYXJrZG93biBNYXJrZG93biBDbGFzcwojCgpjbGFzcyBNYXJrZG93biBpbXBsZW1lbnRzIE1hcmtkb3duSW50ZXJmYWNlIHsKCgkjIyMgVmVyc2lvbiAjIyMKCgljb25zdCAgTUFSS0RPV05MSUJfVkVSU0lPTiAgPSAgIjEuNS4wIjsKCgkjIyMgU2ltcGxlIEZ1bmN0aW9uIEludGVyZmFjZSAjIyMKCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlZmF1bHRUcmFuc2Zvcm0oJHRleHQpIHsKCSMKCSMgSW5pdGlhbGl6ZSB0aGUgbWFya2Rvd24gYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIGl0cyB0cmFuc2Zvcm0gbWV0aG9kLgoJIyBUaGlzIHdpbGwgd29yayBmaW5lIGZvciBkZXJpdmVkIGNsYXNzZXMgdG9vLgoJIwoJCSMgVGFrZSBtYXJrZG93biBjbGFzcyBvbiB3aGljaCB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQuCgkJJG1hcmtkb3duX2NsYXNzID0gXGdldF9jYWxsZWRfY2xhc3MoKTsKCgkJIyB0cnkgdG8gdGFrZSBtYXJrZG93biBmcm9tIHRoZSBzdGF0aWMgbWFya2Rvd24gbGlzdAoJCXN0YXRpYyAkbWFya2Rvd25fbGlzdDsKCQkkbWFya2Rvd24gPSYgJG1hcmtkb3duX2xpc3RbJG1hcmtkb3duX2NsYXNzXTsKCgkJIyBjcmVhdGUgdGhlIG1hcmtkb3duIGl0IG5vdCBhbHJlYWR5IHNldAoJCWlmICghJG1hcmtkb3duKQoJCQkkbWFya2Rvd24gPSBuZXcgJG1hcmtkb3duX2NsYXNzOwoKCQkjIFRyYW5zZm9ybSB0ZXh0IHVzaW5nIG1hcmtkb3duLgoJCXJldHVybiAkbWFya2Rvd24tPnRyYW5zZm9ybSgkdGV4dCk7Cgl9CgoJIyMjIENvbmZpZ3VyYXRpb24gVmFyaWFibGVzICMjIwoKCSMgQ2hhbmdlIHRvICI+IiBmb3IgSFRNTCBvdXRwdXQuCglwdWJsaWMgJGVtcHR5X2VsZW1lbnRfc3VmZml4ID0gIiAvPiI7CglwdWJsaWMgJHRhYl93aWR0aCA9IDQ7CgkKCSMgQ2hhbmdlIHRvIGB0cnVlYCB0byBkaXNhbGxvdyBtYXJrdXAgb3IgZW50aXRpZXMuCglwdWJsaWMgJG5vX21hcmt1cCA9IGZhbHNlOwoJcHVibGljICRub19lbnRpdGllcyA9IGZhbHNlOwoJCgkjIFByZWRlZmluZWQgdXJscyBhbmQgdGl0bGVzIGZvciByZWZlcmVuY2UgbGlua3MgYW5kIGltYWdlcy4KCXB1YmxpYyAkcHJlZGVmX3VybHMgPSBhcnJheSgpOwoJcHVibGljICRwcmVkZWZfdGl0bGVzID0gYXJyYXkoKTsKCgkjIE9wdGlvbmFsIGZpbHRlciBmdW5jdGlvbiBmb3IgVVJMcwoJcHVibGljICR1cmxfZmlsdGVyX2Z1bmMgPSBudWxsOwoKCSMgT3B0aW9uYWwgaGVhZGVyIGlkPSIiIGdlbmVyYXRpb24gY2FsbGJhY2sgZnVuY3Rpb24uCglwdWJsaWMgJGhlYWRlcl9pZF9mdW5jID0gbnVsbDsKCgkjIENsYXNzIGF0dHJpYnV0ZSB0byB0b2dnbGUgImVuaGFuY2VkIG9yZGVyZWQgbGlzdCIgYmVoYXZpb3VyCgkjIHNldHRpbmcgdGhpcyB0byB0cnVlIHdpbGwgYWxsb3cgb3JkZXJlZCBsaXN0cyB0byBzdGFydCBmcm9tIHRoZSBpbmRleAoJIyBudW1iZXIgdGhhdCBpcyBkZWZpbmVkIGZpcnN0LiAgRm9yIGV4YW1wbGU6CgkjIDIuIExpc3QgaXRlbSB0d28KCSMgMy4gTGlzdCBpdGVtIHRocmVlCgkjIAoJIyBiZWNvbWVzCgkjIDxvbCBzdGFydD0iMiI+CgkjIDxsaT5MaXN0IGl0ZW0gdHdvPC9saT4KCSMgPGxpPkxpc3QgaXRlbSB0aHJlZTwvbGk+CgkjIDwvb2w+CglwdWJsaWMgJGVuaGFuY2VkX29yZGVyZWRfbGlzdCA9IGZhbHNlOwoKCSMjIyBNYXJrZG93biBJbXBsZW1lbnRhdGlvbiAjIyMKCgkjIFJlZ2V4IHRvIG1hdGNoIGJhbGFuY2VkIFticmFja2V0c10uCgkjIE5lZWRlZCB0byBpbnNlcnQgYSBtYXhpbXVtIGJyYWNrZWQgZGVwdGggd2hpbGUgY29udmVydGluZyB0byBQSFAuCglwcm90ZWN0ZWQgJG5lc3RlZF9icmFja2V0c19kZXB0aCA9IDY7Cglwcm90ZWN0ZWQgJG5lc3RlZF9icmFja2V0c19yZTsKCQoJcHJvdGVjdGVkICRuZXN0ZWRfdXJsX3BhcmVudGhlc2lzX2RlcHRoID0gNDsKCXByb3RlY3RlZCAkbmVzdGVkX3VybF9wYXJlbnRoZXNpc19yZTsKCgkjIFRhYmxlIG9mIGhhc2ggdmFsdWVzIGZvciBlc2NhcGVkIGNoYXJhY3RlcnM6Cglwcm90ZWN0ZWQgJGVzY2FwZV9jaGFycyA9ICdcYCpfe31bXSgpPiMrLS4hJzsKCXByb3RlY3RlZCAkZXNjYXBlX2NoYXJzX3JlOwoKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7CgkjCgkjIENvbnN0cnVjdG9yIGZ1bmN0aW9uLiBJbml0aWFsaXplIGFwcHJvcHJpYXRlIG1lbWJlciB2YXJpYWJsZXMuCgkjCgkJJHRoaXMtPl9pbml0RGV0YWIoKTsKCQkkdGhpcy0+cHJlcGFyZUl0YWxpY3NBbmRCb2xkKCk7CgkKCQkkdGhpcy0+bmVzdGVkX2JyYWNrZXRzX3JlID0gCgkJCXN0cl9yZXBlYXQoJyg/PlteXFtcXV0rfFxbJywgJHRoaXMtPm5lc3RlZF9icmFja2V0c19kZXB0aCkuCgkJCXN0cl9yZXBlYXQoJ1xdKSonLCAkdGhpcy0+bmVzdGVkX2JyYWNrZXRzX2RlcHRoKTsKCQoJCSR0aGlzLT5uZXN0ZWRfdXJsX3BhcmVudGhlc2lzX3JlID0gCgkJCXN0cl9yZXBlYXQoJyg/PlteKClcc10rfFwoJywgJHRoaXMtPm5lc3RlZF91cmxfcGFyZW50aGVzaXNfZGVwdGgpLgoJCQlzdHJfcmVwZWF0KCcoPz5cKSkpKicsICR0aGlzLT5uZXN0ZWRfdXJsX3BhcmVudGhlc2lzX2RlcHRoKTsKCQkKCQkkdGhpcy0+ZXNjYXBlX2NoYXJzX3JlID0gJ1snLnByZWdfcXVvdGUoJHRoaXMtPmVzY2FwZV9jaGFycykuJ10nOwoJCQoJCSMgU29ydCBkb2N1bWVudCwgYmxvY2ssIGFuZCBzcGFuIGdhbXV0IGluIGFzY2VuZGVudCBwcmlvcml0eSBvcmRlci4KCQlhc29ydCgkdGhpcy0+ZG9jdW1lbnRfZ2FtdXQpOwoJCWFzb3J0KCR0aGlzLT5ibG9ja19nYW11dCk7CgkJYXNvcnQoJHRoaXMtPnNwYW5fZ2FtdXQpOwoJfQoKCgkjIEludGVybmFsIGhhc2hlcyB1c2VkIGR1cmluZyB0cmFuc2Zvcm1hdGlvbi4KCXByb3RlY3RlZCAkdXJscyA9IGFycmF5KCk7Cglwcm90ZWN0ZWQgJHRpdGxlcyA9IGFycmF5KCk7Cglwcm90ZWN0ZWQgJGh0bWxfaGFzaGVzID0gYXJyYXkoKTsKCQoJIyBTdGF0dXMgZmxhZyB0byBhdm9pZCBpbnZhbGlkIG5lc3RpbmcuCglwcm90ZWN0ZWQgJGluX2FuY2hvciA9IGZhbHNlOwoJCgkKCXByb3RlY3RlZCBmdW5jdGlvbiBzZXR1cCgpIHsKCSMKCSMgQ2FsbGVkIGJlZm9yZSB0aGUgdHJhbnNmb3JtYXRpb24gcHJvY2VzcyBzdGFydHMgdG8gc2V0dXAgbWFya2Rvd24gCgkjIHN0YXRlcy4KCSMKCQkjIENsZWFyIGdsb2JhbCBoYXNoZXMuCgkJJHRoaXMtPnVybHMgPSAkdGhpcy0+cHJlZGVmX3VybHM7CgkJJHRoaXMtPnRpdGxlcyA9ICR0aGlzLT5wcmVkZWZfdGl0bGVzOwoJCSR0aGlzLT5odG1sX2hhc2hlcyA9IGFycmF5KCk7CgkJCgkJJHRoaXMtPmluX2FuY2hvciA9IGZhbHNlOwoJfQoJCglwcm90ZWN0ZWQgZnVuY3Rpb24gdGVhcmRvd24oKSB7CgkjCgkjIENhbGxlZCBhZnRlciB0aGUgdHJhbnNmb3JtYXRpb24gcHJvY2VzcyB0byBjbGVhciBhbnkgdmFyaWFibGUgCgkjIHdoaWNoIG1heSBiZSB0YWtpbmcgdXAgbWVtb3J5IHVubmVjZXNzYXJseS4KCSMKCQkkdGhpcy0+dXJscyA9IGFycmF5KCk7CgkJJHRoaXMtPnRpdGxlcyA9IGFycmF5KCk7CgkJJHRoaXMtPmh0bWxfaGFzaGVzID0gYXJyYXkoKTsKCX0KCgoJcHVibGljIGZ1bmN0aW9uIHRyYW5zZm9ybSgkdGV4dCkgewoJIwoJIyBNYWluIGZ1bmN0aW9uLiBQZXJmb3JtcyBzb21lIHByZXByb2Nlc3Npbmcgb24gdGhlIGlucHV0IHRleHQKCSMgYW5kIHBhc3MgaXQgdGhyb3VnaCB0aGUgZG9jdW1lbnQgZ2FtdXQuCgkjCgkJJHRoaXMtPnNldHVwKCk7CgkKCQkjIFJlbW92ZSBVVEYtOCBCT00gYW5kIG1hcmtlciBjaGFyYWN0ZXIgaW4gaW5wdXQsIGlmIHByZXNlbnQuCgkJJHRleHQgPSBwcmVnX3JlcGxhY2UoJ3teXHhFRlx4QkJceEJGfFx4MUF9JywgJycsICR0ZXh0KTsKCgkJIyBTdGFuZGFyZGl6ZSBsaW5lIGVuZGluZ3M6CgkJIyAgIERPUyB0byBVbml4IGFuZCBNYWMgdG8gVW5peAoJCSR0ZXh0ID0gcHJlZ19yZXBsYWNlKCd7XHJcbj99JywgIlxuIiwgJHRleHQpOwoKCQkjIE1ha2Ugc3VyZSAkdGV4dCBlbmRzIHdpdGggYSBjb3VwbGUgb2YgbmV3bGluZXM6CgkJJHRleHQgLj0gIlxuXG4iOwoKCQkjIENvbnZlcnQgYWxsIHRhYnMgdG8gc3BhY2VzLgoJCSR0ZXh0ID0gJHRoaXMtPmRldGFiKCR0ZXh0KTsKCgkJIyBUdXJuIGJsb2NrLWxldmVsIEhUTUwgYmxvY2tzIGludG8gaGFzaCBlbnRyaWVzCgkJJHRleHQgPSAkdGhpcy0+aGFzaEhUTUxCbG9ja3MoJHRleHQpOwoKCQkjIFN0cmlwIGFueSBsaW5lcyBjb25zaXN0aW5nIG9ubHkgb2Ygc3BhY2VzIGFuZCB0YWJzLgoJCSMgVGhpcyBtYWtlcyBzdWJzZXF1ZW50IHJlZ2V4ZW4gZWFzaWVyIHRvIHdyaXRlLCBiZWNhdXNlIHdlIGNhbgoJCSMgbWF0Y2ggY29uc2VjdXRpdmUgYmxhbmsgbGluZXMgd2l0aCAvXG4rLyBpbnN0ZWFkIG9mIHNvbWV0aGluZwoJCSMgY29udG9ydGVkIGxpa2UgL1sgXSpcbisvIC4KCQkkdGV4dCA9IHByZWdfcmVwbGFjZSgnL15bIF0rJC9tJywgJycsICR0ZXh0KTsKCgkJIyBSdW4gZG9jdW1lbnQgZ2FtdXQgbWV0aG9kcy4KCQlmb3JlYWNoICgkdGhpcy0+ZG9jdW1lbnRfZ2FtdXQgYXMgJG1ldGhvZCA9PiAkcHJpb3JpdHkpIHsKCQkJJHRleHQgPSAkdGhpcy0+JG1ldGhvZCgkdGV4dCk7CgkJfQoJCQoJCSR0aGlzLT50ZWFyZG93bigpOwoKCQlyZXR1cm4gJHRleHQgLiAiXG4iOwoJfQoJCglwcm90ZWN0ZWQgJGRvY3VtZW50X2dhbXV0ID0gYXJyYXkoCgkJIyBTdHJpcCBsaW5rIGRlZmluaXRpb25zLCBzdG9yZSBpbiBoYXNoZXMuCgkJInN0cmlwTGlua0RlZmluaXRpb25zIiA9PiAyMCwKCQkKCQkicnVuQmFzaWNCbG9ja0dhbXV0IiAgID0+IDMwLAoJCSk7CgoKCXByb3RlY3RlZCBmdW5jdGlvbiBzdHJpcExpbmtEZWZpbml0aW9ucygkdGV4dCkgewoJIwoJIyBTdHJpcHMgbGluayBkZWZpbml0aW9ucyBmcm9tIHRleHQsIHN0b3JlcyB0aGUgVVJMcyBhbmQgdGl0bGVzIGluCgkjIGhhc2ggcmVmZXJlbmNlcy4KCSMKCQkkbGVzc190aGFuX3RhYiA9ICR0aGlzLT50YWJfd2lkdGggLSAxOwoKCQkjIExpbmsgZGVmcyBhcmUgaW4gdGhlIGZvcm06IF5baWRdOiB1cmwgIm9wdGlvbmFsIHRpdGxlIgoJCSR0ZXh0ID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCd7CgkJCQkJCQleWyBdezAsJy4kbGVzc190aGFuX3RhYi4nfVxbKC4rKVxdWyBdPzoJIyBpZCA9ICQxCgkJCQkJCQkgIFsgXSoKCQkJCQkJCSAgXG4/CQkJCSMgbWF5YmUgKm9uZSogbmV3bGluZQoJCQkJCQkJICBbIF0qCgkJCQkJCQkoPzoKCQkJCQkJCSAgPCguKz8pPgkJCSMgdXJsID0gJDIKCQkJCQkJCXwKCQkJCQkJCSAgKFxTKz8pCQkJIyB1cmwgPSAkMwoJCQkJCQkJKQoJCQkJCQkJICBbIF0qCgkJCQkJCQkgIFxuPwkJCQkjIG1heWJlIG9uZSBuZXdsaW5lCgkJCQkJCQkgIFsgXSoKCQkJCQkJCSg/OgoJCQkJCQkJCSg/PD1ccykJCQkjIGxvb2tiZWhpbmQgZm9yIHdoaXRlc3BhY2UKCQkJCQkJCQlbIihdCgkJCQkJCQkJKC4qPykJCQkjIHRpdGxlID0gJDQKCQkJCQkJCQlbIildCgkJCQkJCQkJWyBdKgoJCQkJCQkJKT8JIyB0aXRsZSBpcyBvcHRpb25hbAoJCQkJCQkJKD86XG4rfFxaKQoJCQl9eG0nLAoJCQlhcnJheSgkdGhpcywgJ19zdHJpcExpbmtEZWZpbml0aW9uc19jYWxsYmFjaycpLAoJCQkkdGV4dCk7CgkJcmV0dXJuICR0ZXh0OwoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9zdHJpcExpbmtEZWZpbml0aW9uc19jYWxsYmFjaygkbWF0Y2hlcykgewoJCSRsaW5rX2lkID0gc3RydG9sb3dlcigkbWF0Y2hlc1sxXSk7CgkJJHVybCA9ICRtYXRjaGVzWzJdID09ICcnID8gJG1hdGNoZXNbM10gOiAkbWF0Y2hlc1syXTsKCQkkdGhpcy0+dXJsc1skbGlua19pZF0gPSAkdXJsOwoJCSR0aGlzLT50aXRsZXNbJGxpbmtfaWRdID0mICRtYXRjaGVzWzRdOwoJCXJldHVybiAnJzsgIyBTdHJpbmcgdGhhdCB3aWxsIHJlcGxhY2UgdGhlIGJsb2NrCgl9CgoKCXByb3RlY3RlZCBmdW5jdGlvbiBoYXNoSFRNTEJsb2NrcygkdGV4dCkgewoJCWlmICgkdGhpcy0+bm9fbWFya3VwKSAgcmV0dXJuICR0ZXh0OwoKCQkkbGVzc190aGFuX3RhYiA9ICR0aGlzLT50YWJfd2lkdGggLSAxOwoKCQkjIEhhc2hpZnkgSFRNTCBibG9ja3M6CgkJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBmb3IgYmxvY2stbGV2ZWwgSFRNTCB0YWdzLCBzdWNoIGFzIGhlYWRlcnMsCgkJIyBsaXN0cywgYW5kIHRhYmxlcy4gVGhhdCdzIGJlY2F1c2Ugd2Ugc3RpbGwgd2FudCB0byB3cmFwIDxwPnMgYXJvdW5kCgkJIyAicGFyYWdyYXBocyIgdGhhdCBhcmUgd3JhcHBlZCBpbiBub24tYmxvY2stbGV2ZWwgdGFncywgc3VjaCBhcyBhbmNob3JzLAoJCSMgcGhyYXNlIGVtcGhhc2lzLCBhbmQgc3BhbnMuIFRoZSBsaXN0IG9mIHRhZ3Mgd2UncmUgbG9va2luZyBmb3IgaXMKCQkjIGhhcmQtY29kZWQ6CgkJIwoJCSMgKiAgTGlzdCAiYSIgaXMgbWFkZSBvZiB0YWdzIHdoaWNoIGNhbiBiZSBib3RoIGlubGluZSBvciBibG9jay1sZXZlbC4KCQkjICAgIFRoZXNlIHdpbGwgYmUgdHJlYXRlZCBibG9jay1sZXZlbCB3aGVuIHRoZSBzdGFydCB0YWcgaXMgYWxvbmUgb24gCgkJIyAgICBpdHMgbGluZSwgb3RoZXJ3aXNlIHRoZXkncmUgbm90IG1hdGNoZWQgaGVyZSBhbmQgd2lsbCBiZSB0YWtlbiBhcyAKCQkjICAgIGlubGluZSBsYXRlci4KCQkjICogIExpc3QgImIiIGlzIG1hZGUgb2YgdGFncyB3aGljaCBhcmUgYWx3YXlzIGJsb2NrLWxldmVsOwoJCSMKCQkkYmxvY2tfdGFnc19hX3JlID0gJ2luc3xkZWwnOwoJCSRibG9ja190YWdzX2JfcmUgPSAncHxkaXZ8aFsxLTZdfGJsb2NrcXVvdGV8cHJlfHRhYmxlfGRsfG9sfHVsfGFkZHJlc3N8Jy4KCQkJCQkJICAgJ3NjcmlwdHxub3NjcmlwdHxzdHlsZXxmb3JtfGZpZWxkc2V0fGlmcmFtZXxtYXRofHN2Z3wnLgoJCQkJCQkgICAnYXJ0aWNsZXxzZWN0aW9ufG5hdnxhc2lkZXxoZ3JvdXB8aGVhZGVyfGZvb3RlcnwnLgoJCQkJCQkgICAnZmlndXJlJzsKCgkJIyBSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHRoZSBjb250ZW50IG9mIGEgYmxvY2sgdGFnLgoJCSRuZXN0ZWRfdGFnc19sZXZlbCA9IDQ7CgkJJGF0dHIgPSAnCgkJCSg/PgkJCQkjIG9wdGlvbmFsIHRhZyBhdHRyaWJ1dGVzCgkJCSAgXHMJCQkjIHN0YXJ0cyB3aXRoIHdoaXRlc3BhY2UKCQkJICAoPz4KCQkJCVtePiIvXSsJCSMgdGV4dCBvdXRzaWRlIHF1b3RlcwoJCQkgIHwKCQkJCS8rKD8hPikJCSMgc2xhc2ggbm90IGZvbGxvd2VkIGJ5ICI+IgoJCQkgIHwKCQkJCSJbXiJdKiIJCSMgdGV4dCBpbnNpZGUgZG91YmxlIHF1b3RlcyAodG9sZXJhdGUgIj4iKQoJCQkgIHwKCQkJCVwnW15cJ10qXCcJIyB0ZXh0IGluc2lkZSBzaW5nbGUgcXVvdGVzICh0b2xlcmF0ZSAiPiIpCgkJCSAgKSoKCQkJKT8JCgkJCSc7CgkJJGNvbnRlbnQgPQoJCQlzdHJfcmVwZWF0KCcKCQkJCSg/PgoJCQkJICBbXjxdKwkJCSMgY29udGVudCB3aXRob3V0IHRhZwoJCQkJfAoJCQkJICA8XDIJCQkjIG5lc3RlZCBvcGVuaW5nIHRhZwoJCQkJCScuJGF0dHIuJwkjIGF0dHJpYnV0ZXMKCQkJCQkoPz4KCQkJCQkgIC8+CgkJCQkJfAoJCQkJCSAgPicsICRuZXN0ZWRfdGFnc19sZXZlbCkuCSMgZW5kIG9mIG9wZW5pbmcgdGFnCgkJCQkJICAnLio/Jy4JCQkJCSMgbGFzdCBsZXZlbCBuZXN0ZWQgdGFnIGNvbnRlbnQKCQkJc3RyX3JlcGVhdCgnCgkJCQkJICA8L1wyXHMqPgkjIGNsb3NpbmcgbmVzdGVkIHRhZwoJCQkJCSkKCQkJCSAgfAkJCQkKCQkJCQk8KD8hL1wyXHMqPgkjIG90aGVyIHRhZ3Mgd2l0aCBhIGRpZmZlcmVudCBuYW1lCgkJCQkgICkKCQkJCSkqJywKCQkJCSRuZXN0ZWRfdGFnc19sZXZlbCk7CgkJJGNvbnRlbnQyID0gc3RyX3JlcGxhY2UoJ1wyJywgJ1wzJywgJGNvbnRlbnQpOwoKCQkjIEZpcnN0LCBsb29rIGZvciBuZXN0ZWQgYmxvY2tzLCBlLmcuOgoJCSMgCTxkaXY+CgkJIyAJCTxkaXY+CgkJIyAJCXRhZ3MgZm9yIGlubmVyIGJsb2NrIG11c3QgYmUgaW5kZW50ZWQuCgkJIyAJCTwvZGl2PgoJCSMgCTwvZGl2PgoJCSMKCQkjIFRoZSBvdXRlcm1vc3QgdGFncyBtdXN0IHN0YXJ0IGF0IHRoZSBsZWZ0IG1hcmdpbiBmb3IgdGhpcyB0byBtYXRjaCwgYW5kCgkJIyB0aGUgaW5uZXIgbmVzdGVkIGRpdnMgbXVzdCBiZSBpbmRlbnRlZC4KCQkjIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgdGhlIG5leHQsIG1vcmUgbGliZXJhbCBtYXRjaCwgYmVjYXVzZSB0aGUgbmV4dAoJCSMgbWF0Y2ggd2lsbCBzdGFydCBhdCB0aGUgZmlyc3QgYDxkaXY+YCBhbmQgc3RvcCBhdCB0aGUgZmlyc3QgYDwvZGl2PmAuCgkJJHRleHQgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJ3soPz4KCQkJKD8+CgkJCQkoPzw9XG4pCQkJIyBTdGFydGluZyBvbiBpdHMgb3duIGxpbmUKCQkJCXwJCQkJIyBvcgoJCQkJXEFcbj8JCQkjIHRoZSBhdCBiZWdpbm5pbmcgb2YgdGhlIGRvYwoJCQkpCgkJCSgJCQkJCQkjIHNhdmUgaW4gJDEKCgkJCSAgIyBNYXRjaCBmcm9tIGBcbjx0YWc+YCB0byBgPC90YWc+XG5gLCBoYW5kbGluZyBuZXN0ZWQgdGFncyAKCQkJICAjIGluIGJldHdlZW4uCgkJCQkJCgkJCQkJCVsgXXswLCcuJGxlc3NfdGhhbl90YWIuJ30KCQkJCQkJPCgnLiRibG9ja190YWdzX2JfcmUuJykjIHN0YXJ0IHRhZyA9ICQyCgkJCQkJCScuJGF0dHIuJz4JCQkjIGF0dHJpYnV0ZXMgZm9sbG93ZWQgYnkgPiBhbmQgXG4KCQkJCQkJJy4kY29udGVudC4nCQkjIGNvbnRlbnQsIHN1cHBvcnQgbmVzdGluZwoJCQkJCQk8L1wyPgkJCQkjIHRoZSBtYXRjaGluZyBlbmQgdGFnCgkJCQkJCVsgXSoJCQkJIyB0cmFpbGluZyBzcGFjZXMvdGFicwoJCQkJCQkoPz1cbit8XFopCSMgZm9sbG93ZWQgYnkgYSBuZXdsaW5lIG9yIGVuZCBvZiBkb2N1bWVudAoKCQkJfCAjIFNwZWNpYWwgdmVyc2lvbiBmb3IgdGFncyBvZiBncm91cCBhLgoKCQkJCQkJWyBdezAsJy4kbGVzc190aGFuX3RhYi4nfQoJCQkJCQk8KCcuJGJsb2NrX3RhZ3NfYV9yZS4nKSMgc3RhcnQgdGFnID0gJDMKCQkJCQkJJy4kYXR0ci4nPlsgXSpcbgkjIGF0dHJpYnV0ZXMgZm9sbG93ZWQgYnkgPgoJCQkJCQknLiRjb250ZW50Mi4nCQkjIGNvbnRlbnQsIHN1cHBvcnQgbmVzdGluZwoJCQkJCQk8L1wzPgkJCQkjIHRoZSBtYXRjaGluZyBlbmQgdGFnCgkJCQkJCVsgXSoJCQkJIyB0cmFpbGluZyBzcGFjZXMvdGFicwoJCQkJCQkoPz1cbit8XFopCSMgZm9sbG93ZWQgYnkgYSBuZXdsaW5lIG9yIGVuZCBvZiBkb2N1bWVudAoJCQkJCQoJCQl8ICMgU3BlY2lhbCBjYXNlIGp1c3QgZm9yIDxociAvPi4gSXQgd2FzIGVhc2llciB0byBtYWtlIGEgc3BlY2lhbCAKCQkJICAjIGNhc2UgdGhhbiB0byBtYWtlIHRoZSBvdGhlciByZWdleCBtb3JlIGNvbXBsaWNhdGVkLgoJCQkKCQkJCQkJWyBdezAsJy4kbGVzc190aGFuX3RhYi4nfQoJCQkJCQk8KGhyKQkJCQkjIHN0YXJ0IHRhZyA9ICQyCgkJCQkJCScuJGF0dHIuJwkJCSMgYXR0cmlidXRlcwoJCQkJCQkvPz4JCQkJCSMgdGhlIG1hdGNoaW5nIGVuZCB0YWcKCQkJCQkJWyBdKgoJCQkJCQkoPz1cbnsyLH18XFopCQkjIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSBvciBlbmQgb2YgZG9jdW1lbnQKCQkJCgkJCXwgIyBTcGVjaWFsIGNhc2UgZm9yIHN0YW5kYWxvbmUgSFRNTCBjb21tZW50czoKCQkJCgkJCQkJWyBdezAsJy4kbGVzc190aGFuX3RhYi4nfQoJCQkJCSg/czoKCQkJCQkJPCEtLSAuKj8gLS0+CgkJCQkJKQoJCQkJCVsgXSoKCQkJCQkoPz1cbnsyLH18XFopCQkjIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSBvciBlbmQgb2YgZG9jdW1lbnQKCQkJCgkJCXwgIyBQSFAgYW5kIEFTUC1zdHlsZSBwcm9jZXNzb3IgaW5zdHJ1Y3Rpb25zICg8PyBhbmQgPCUpCgkJCQoJCQkJCVsgXXswLCcuJGxlc3NfdGhhbl90YWIuJ30KCQkJCQkoP3M6CgkJCQkJCTwoWz8lXSkJCQkjICQyCgkJCQkJCS4qPwoJCQkJCQlcMj4KCQkJCQkpCgkJCQkJWyBdKgoJCQkJCSg/PVxuezIsfXxcWikJCSMgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lIG9yIGVuZCBvZiBkb2N1bWVudAoJCQkJCQoJCQkpCgkJCSl9U3htaScsCgkJCWFycmF5KCR0aGlzLCAnX2hhc2hIVE1MQmxvY2tzX2NhbGxiYWNrJyksCgkJCSR0ZXh0KTsKCgkJcmV0dXJuICR0ZXh0OwoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9oYXNoSFRNTEJsb2Nrc19jYWxsYmFjaygkbWF0Y2hlcykgewoJCSR0ZXh0ID0gJG1hdGNoZXNbMV07CgkJJGtleSAgPSAkdGhpcy0+aGFzaEJsb2NrKCR0ZXh0KTsKCQlyZXR1cm4gIlxuXG4ka2V5XG5cbiI7Cgl9CgkKCQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGhhc2hQYXJ0KCR0ZXh0LCAkYm91bmRhcnkgPSAnWCcpIHsKCSMKCSMgQ2FsbGVkIHdoZW5ldmVyIGEgdGFnIG11c3QgYmUgaGFzaGVkIHdoZW4gYSBmdW5jdGlvbiBpbnNlcnQgYW4gYXRvbWljIAoJIyBlbGVtZW50IGluIHRoZSB0ZXh0IHN0cmVhbS4gUGFzc2luZyAkdGV4dCB0byB0aHJvdWdoIHRoaXMgZnVuY3Rpb24gZ2l2ZXMKCSMgYSB1bmlxdWUgdGV4dC10b2tlbiB3aGljaCB3aWxsIGJlIHJldmVydGVkIGJhY2sgd2hlbiBjYWxsaW5nIHVuaGFzaC4KCSMKCSMgVGhlICRib3VuZGFyeSBhcmd1bWVudCBzcGVjaWZ5IHdoYXQgY2hhcmFjdGVyIHNob3VsZCBiZSB1c2VkIHRvIHN1cnJvdW5kCgkjIHRoZSB0b2tlbi4gQnkgY29udmVuc2lvbiwgIkIiIGlzIHVzZWQgZm9yIGJsb2NrIGVsZW1lbnRzIHRoYXQgbmVlZHMgbm90CgkjIHRvIGJlIHdyYXBwZWQgaW50byBwYXJhZ3JhcGggdGFncyBhdCB0aGUgZW5kLCAiOiIgaXMgdXNlZCBmb3IgZWxlbWVudHMKCSMgdGhhdCBhcmUgd29yZCBzZXBhcmF0b3JzIGFuZCAiWCIgaXMgdXNlZCBpbiB0aGUgZ2VuZXJhbCBjYXNlLgoJIwoJCSMgU3dhcCBiYWNrIGFueSB0YWcgaGFzaCBmb3VuZCBpbiAkdGV4dCBzbyB3ZSBkbyBub3QgaGF2ZSB0byBgdW5oYXNoYAoJCSMgbXVsdGlwbGUgdGltZXMgYXQgdGhlIGVuZC4KCQkkdGV4dCA9ICR0aGlzLT51bmhhc2goJHRleHQpOwoJCQoJCSMgVGhlbiBoYXNoIHRoZSBibG9jay4KCQlzdGF0aWMgJGkgPSAwOwoJCSRrZXkgPSAiJGJvdW5kYXJ5XHgxQSIgLiArKyRpIC4gJGJvdW5kYXJ5OwoJCSR0aGlzLT5odG1sX2hhc2hlc1ska2V5XSA9ICR0ZXh0OwoJCXJldHVybiAka2V5OyAjIFN0cmluZyB0aGF0IHdpbGwgcmVwbGFjZSB0aGUgdGFnLgoJfQoKCglwcm90ZWN0ZWQgZnVuY3Rpb24gaGFzaEJsb2NrKCR0ZXh0KSB7CgkjCgkjIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBoYXNoUGFydCB3aXRoIGJsb2NrLWxldmVsIGJvdW5kYXJpZXMuCgkjCgkJcmV0dXJuICR0aGlzLT5oYXNoUGFydCgkdGV4dCwgJ0InKTsKCX0KCgoJcHJvdGVjdGVkICRibG9ja19nYW11dCA9IGFycmF5KAoJIwoJIyBUaGVzZSBhcmUgYWxsIHRoZSB0cmFuc2Zvcm1hdGlvbnMgdGhhdCBmb3JtIGJsb2NrLWxldmVsCgkjIHRhZ3MgbGlrZSBwYXJhZ3JhcGhzLCBoZWFkZXJzLCBhbmQgbGlzdCBpdGVtcy4KCSMKCQkiZG9IZWFkZXJzIiAgICAgICAgID0+IDEwLAoJCSJkb0hvcml6b250YWxSdWxlcyIgPT4gMjAsCgkJCgkJImRvTGlzdHMiICAgICAgICAgICA9PiA0MCwKCQkiZG9Db2RlQmxvY2tzIiAgICAgID0+IDUwLAoJCSJkb0Jsb2NrUXVvdGVzIiAgICAgPT4gNjAsCgkJKTsKCglwcm90ZWN0ZWQgZnVuY3Rpb24gcnVuQmxvY2tHYW11dCgkdGV4dCkgewoJIwoJIyBSdW4gYmxvY2sgZ2FtdXQgdHJhbmZvcm1hdGlvbnMuCgkjCgkJIyBXZSBuZWVkIHRvIGVzY2FwZSByYXcgSFRNTCBpbiBNYXJrZG93biBzb3VyY2UgYmVmb3JlIGRvaW5nIGFueXRoaW5nIAoJCSMgZWxzZS4gVGhpcyBuZWVkIHRvIGJlIGRvbmUgZm9yIGVhY2ggYmxvY2ssIGFuZCBub3Qgb25seSBhdCB0aGUgCgkJIyBiZWdpbmluZyBpbiB0aGUgTWFya2Rvd24gZnVuY3Rpb24gc2luY2UgaGFzaGVkIGJsb2NrcyBjYW4gYmUgcGFydCBvZgoJCSMgbGlzdCBpdGVtcyBhbmQgY291bGQgaGF2ZSBiZWVuIGluZGVudGVkLiBJbmRlbnRlZCBibG9ja3Mgd291bGQgaGF2ZSAKCQkjIGJlZW4gc2VlbiBhcyBhIGNvZGUgYmxvY2sgaW4gYSBwcmV2aW91cyBwYXNzIG9mIGhhc2hIVE1MQmxvY2tzLgoJCSR0ZXh0ID0gJHRoaXMtPmhhc2hIVE1MQmxvY2tzKCR0ZXh0KTsKCQkKCQlyZXR1cm4gJHRoaXMtPnJ1bkJhc2ljQmxvY2tHYW11dCgkdGV4dCk7Cgl9CgkKCXByb3RlY3RlZCBmdW5jdGlvbiBydW5CYXNpY0Jsb2NrR2FtdXQoJHRleHQpIHsKCSMKCSMgUnVuIGJsb2NrIGdhbXV0IHRyYW5mb3JtYXRpb25zLCB3aXRob3V0IGhhc2hpbmcgSFRNTCBibG9ja3MuIFRoaXMgaXMgCgkjIHVzZWZ1bCB3aGVuIEhUTUwgYmxvY2tzIGFyZSBrbm93biB0byBiZSBhbHJlYWR5IGhhc2hlZCwgbGlrZSBpbiB0aGUgZmlyc3QKCSMgd2hvbGUtZG9jdW1lbnQgcGFzcy4KCSMKCQlmb3JlYWNoICgkdGhpcy0+YmxvY2tfZ2FtdXQgYXMgJG1ldGhvZCA9PiAkcHJpb3JpdHkpIHsKCQkJJHRleHQgPSAkdGhpcy0+JG1ldGhvZCgkdGV4dCk7CgkJfQoJCQoJCSMgRmluYWxseSBmb3JtIHBhcmFncmFwaCBhbmQgcmVzdG9yZSBoYXNoZWQgYmxvY2tzLgoJCSR0ZXh0ID0gJHRoaXMtPmZvcm1QYXJhZ3JhcGhzKCR0ZXh0KTsKCgkJcmV0dXJuICR0ZXh0OwoJfQoJCgkKCXByb3RlY3RlZCBmdW5jdGlvbiBkb0hvcml6b250YWxSdWxlcygkdGV4dCkgewoJCSMgRG8gSG9yaXpvbnRhbCBSdWxlczoKCQlyZXR1cm4gcHJlZ19yZXBsYWNlKAoJCQknewoJCQkJXlsgXXswLDN9CSMgTGVhZGluZyBzcGFjZQoJCQkJKFstKl9dKQkJIyAkMTogRmlyc3QgbWFya2VyCgkJCQkoPz4JCQkjIFJlcGVhdGVkIG1hcmtlciBncm91cAoJCQkJCVsgXXswLDJ9CSMgWmVybywgb25lLCBvciB0d28gc3BhY2VzLgoJCQkJCVwxCQkJIyBNYXJrZXIgY2hhcmFjdGVyCgkJCQkpezIsfQkJIyBHcm91cCByZXBlYXRlZCBhdCBsZWFzdCB0d2ljZQoJCQkJWyBdKgkJIyBUYWlsaW5nIHNwYWNlcwoJCQkJJAkJCSMgRW5kIG9mIGxpbmUuCgkJCX1teCcsCgkJCSJcbiIuJHRoaXMtPmhhc2hCbG9jaygiPGhyJHRoaXMtPmVtcHR5X2VsZW1lbnRfc3VmZml4IikuIlxuIiwgCgkJCSR0ZXh0KTsKCX0KCgoJcHJvdGVjdGVkICRzcGFuX2dhbXV0ID0gYXJyYXkoCgkjCgkjIFRoZXNlIGFyZSBhbGwgdGhlIHRyYW5zZm9ybWF0aW9ucyB0aGF0IG9jY3VyICp3aXRoaW4qIGJsb2NrLWxldmVsCgkjIHRhZ3MgbGlrZSBwYXJhZ3JhcGhzLCBoZWFkZXJzLCBhbmQgbGlzdCBpdGVtcy4KCSMKCQkjIFByb2Nlc3MgY2hhcmFjdGVyIGVzY2FwZXMsIGNvZGUgc3BhbnMsIGFuZCBpbmxpbmUgSFRNTAoJCSMgaW4gb25lIHNob3QuCgkJInBhcnNlU3BhbiIgICAgICAgICAgID0+IC0zMCwKCgkJIyBQcm9jZXNzIGFuY2hvciBhbmQgaW1hZ2UgdGFncy4gSW1hZ2VzIG11c3QgY29tZSBmaXJzdCwKCQkjIGJlY2F1c2UgIVtmb29dW2ZdIGxvb2tzIGxpa2UgYW4gYW5jaG9yLgoJCSJkb0ltYWdlcyIgICAgICAgICAgICA9PiAgMTAsCgkJImRvQW5jaG9ycyIgICAgICAgICAgID0+ICAyMCwKCQkKCQkjIE1ha2UgbGlua3Mgb3V0IG9mIHRoaW5ncyBsaWtlIGA8aHR0cDovL2V4YW1wbGUuY29tLz5gCgkJIyBNdXN0IGNvbWUgYWZ0ZXIgZG9BbmNob3JzLCBiZWNhdXNlIHlvdSBjYW4gdXNlIDwgYW5kID4KCQkjIGRlbGltaXRlcnMgaW4gaW5saW5lIGxpbmtzIGxpa2UgW3RoaXNdKDx1cmw+KS4KCQkiZG9BdXRvTGlua3MiICAgICAgICAgPT4gIDMwLAoJCSJlbmNvZGVBbXBzQW5kQW5nbGVzIiA9PiAgNDAsCgoJCSJkb0l0YWxpY3NBbmRCb2xkIiAgICA9PiAgNTAsCgkJImRvSGFyZEJyZWFrcyIgICAgICAgID0+ICA2MCwKCQkpOwoKCXByb3RlY3RlZCBmdW5jdGlvbiBydW5TcGFuR2FtdXQoJHRleHQpIHsKCSMKCSMgUnVuIHNwYW4gZ2FtdXQgdHJhbmZvcm1hdGlvbnMuCgkjCgkJZm9yZWFjaCAoJHRoaXMtPnNwYW5fZ2FtdXQgYXMgJG1ldGhvZCA9PiAkcHJpb3JpdHkpIHsKCQkJJHRleHQgPSAkdGhpcy0+JG1ldGhvZCgkdGV4dCk7CgkJfQoKCQlyZXR1cm4gJHRleHQ7Cgl9CgkKCQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGRvSGFyZEJyZWFrcygkdGV4dCkgewoJCSMgRG8gaGFyZCBicmVha3M6CgkJcmV0dXJuIHByZWdfcmVwbGFjZV9jYWxsYmFjaygnLyB7Mix9XG4vJywgCgkJCWFycmF5KCR0aGlzLCAnX2RvSGFyZEJyZWFrc19jYWxsYmFjaycpLCAkdGV4dCk7Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gX2RvSGFyZEJyZWFrc19jYWxsYmFjaygkbWF0Y2hlcykgewoJCXJldHVybiAkdGhpcy0+aGFzaFBhcnQoIjxiciR0aGlzLT5lbXB0eV9lbGVtZW50X3N1ZmZpeFxuIik7Cgl9CgoKCXByb3RlY3RlZCBmdW5jdGlvbiBkb0FuY2hvcnMoJHRleHQpIHsKCSMKCSMgVHVybiBNYXJrZG93biBsaW5rIHNob3J0Y3V0cyBpbnRvIFhIVE1MIDxhPiB0YWdzLgoJIwoJCWlmICgkdGhpcy0+aW5fYW5jaG9yKSByZXR1cm4gJHRleHQ7CgkJJHRoaXMtPmluX2FuY2hvciA9IHRydWU7CgkJCgkJIwoJCSMgRmlyc3QsIGhhbmRsZSByZWZlcmVuY2Utc3R5bGUgbGlua3M6IFtsaW5rIHRleHRdIFtpZF0KCQkjCgkJJHRleHQgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJ3sKCQkJKAkJCQkJIyB3cmFwIHdob2xlIG1hdGNoIGluICQxCgkJCSAgXFsKCQkJCSgnLiR0aGlzLT5uZXN0ZWRfYnJhY2tldHNfcmUuJykJIyBsaW5rIHRleHQgPSAkMgoJCQkgIFxdCgoJCQkgIFsgXT8JCQkJIyBvbmUgb3B0aW9uYWwgc3BhY2UKCQkJICAoPzpcblsgXSopPwkJIyBvbmUgb3B0aW9uYWwgbmV3bGluZSBmb2xsb3dlZCBieSBzcGFjZXMKCgkJCSAgXFsKCQkJCSguKj8pCQkjIGlkID0gJDMKCQkJICBcXQoJCQkpCgkJCX14cycsCgkJCWFycmF5KCR0aGlzLCAnX2RvQW5jaG9yc19yZWZlcmVuY2VfY2FsbGJhY2snKSwgJHRleHQpOwoKCQkjCgkJIyBOZXh0LCBpbmxpbmUtc3R5bGUgbGlua3M6IFtsaW5rIHRleHRdKHVybCAib3B0aW9uYWwgdGl0bGUiKQoJCSMKCQkkdGV4dCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnewoJCQkoCQkJCSMgd3JhcCB3aG9sZSBtYXRjaCBpbiAkMQoJCQkgIFxbCgkJCQkoJy4kdGhpcy0+bmVzdGVkX2JyYWNrZXRzX3JlLicpCSMgbGluayB0ZXh0ID0gJDIKCQkJICBcXQoJCQkgIFwoCQkJIyBsaXRlcmFsIHBhcmVuCgkJCQlbIFxuXSoKCQkJCSg/OgoJCQkJCTwoLis/KT4JIyBocmVmID0gJDMKCQkJCXwKCQkJCQkoJy4kdGhpcy0+bmVzdGVkX3VybF9wYXJlbnRoZXNpc19yZS4nKQkjIGhyZWYgPSAkNAoJCQkJKQoJCQkJWyBcbl0qCgkJCQkoCQkJIyAkNQoJCQkJICAoW1wnIl0pCSMgcXVvdGUgY2hhciA9ICQ2CgkJCQkgICguKj8pCQkjIFRpdGxlID0gJDcKCQkJCSAgXDYJCSMgbWF0Y2hpbmcgcXVvdGUKCQkJCSAgWyBcbl0qCSMgaWdub3JlIGFueSBzcGFjZXMvdGFicyBiZXR3ZWVuIGNsb3NpbmcgcXVvdGUgYW5kICkKCQkJCSk/CQkJIyB0aXRsZSBpcyBvcHRpb25hbAoJCQkgIFwpCgkJCSkKCQkJfXhzJywKCQkJYXJyYXkoJHRoaXMsICdfZG9BbmNob3JzX2lubGluZV9jYWxsYmFjaycpLCAkdGV4dCk7CgoJCSMKCQkjIExhc3QsIGhhbmRsZSByZWZlcmVuY2Utc3R5bGUgc2hvcnRjdXRzOiBbbGluayB0ZXh0XQoJCSMgVGhlc2UgbXVzdCBjb21lIGxhc3QgaW4gY2FzZSB5b3UndmUgYWxzbyBnb3QgW2xpbmsgdGV4dF1bMV0KCQkjIG9yIFtsaW5rIHRleHRdKC9mb28pCgkJIwoJCSR0ZXh0ID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCd7CgkJCSgJCQkJCSMgd3JhcCB3aG9sZSBtYXRjaCBpbiAkMQoJCQkgIFxbCgkJCQkoW15cW1xdXSspCQkjIGxpbmsgdGV4dCA9ICQyOyBjYW5cJ3QgY29udGFpbiBbIG9yIF0KCQkJICBcXQoJCQkpCgkJCX14cycsCgkJCWFycmF5KCR0aGlzLCAnX2RvQW5jaG9yc19yZWZlcmVuY2VfY2FsbGJhY2snKSwgJHRleHQpOwoKCQkkdGhpcy0+aW5fYW5jaG9yID0gZmFsc2U7CgkJcmV0dXJuICR0ZXh0OwoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9kb0FuY2hvcnNfcmVmZXJlbmNlX2NhbGxiYWNrKCRtYXRjaGVzKSB7CgkJJHdob2xlX21hdGNoID0gICRtYXRjaGVzWzFdOwoJCSRsaW5rX3RleHQgICA9ICAkbWF0Y2hlc1syXTsKCQkkbGlua19pZCAgICAgPSYgJG1hdGNoZXNbM107CgoJCWlmICgkbGlua19pZCA9PSAiIikgewoJCQkjIGZvciBzaG9ydGN1dCBsaW5rcyBsaWtlIFt0aGlzXVtdIG9yIFt0aGlzXS4KCQkJJGxpbmtfaWQgPSAkbGlua190ZXh0OwoJCX0KCQkKCQkjIGxvd2VyLWNhc2UgYW5kIHR1cm4gZW1iZWRkZWQgbmV3bGluZXMgaW50byBzcGFjZXMKCQkkbGlua19pZCA9IHN0cnRvbG93ZXIoJGxpbmtfaWQpOwoJCSRsaW5rX2lkID0gcHJlZ19yZXBsYWNlKCd7WyBdP1xufScsICcgJywgJGxpbmtfaWQpOwoKCQlpZiAoaXNzZXQoJHRoaXMtPnVybHNbJGxpbmtfaWRdKSkgewoJCQkkdXJsID0gJHRoaXMtPnVybHNbJGxpbmtfaWRdOwoJCQkkdXJsID0gJHRoaXMtPmVuY29kZVVSTEF0dHJpYnV0ZSgkdXJsKTsKCQkJCgkJCSRyZXN1bHQgPSAiPGEgaHJlZj1cIiR1cmxcIiI7CgkJCWlmICggaXNzZXQoICR0aGlzLT50aXRsZXNbJGxpbmtfaWRdICkgKSB7CgkJCQkkdGl0bGUgPSAkdGhpcy0+dGl0bGVzWyRsaW5rX2lkXTsKCQkJCSR0aXRsZSA9ICR0aGlzLT5lbmNvZGVBdHRyaWJ1dGUoJHRpdGxlKTsKCQkJCSRyZXN1bHQgLj0gICIgdGl0bGU9XCIkdGl0bGVcIiI7CgkJCX0KCQkKCQkJJGxpbmtfdGV4dCA9ICR0aGlzLT5ydW5TcGFuR2FtdXQoJGxpbmtfdGV4dCk7CgkJCSRyZXN1bHQgLj0gIj4kbGlua190ZXh0PC9hPiI7CgkJCSRyZXN1bHQgPSAkdGhpcy0+aGFzaFBhcnQoJHJlc3VsdCk7CgkJfQoJCWVsc2UgewoJCQkkcmVzdWx0ID0gJHdob2xlX21hdGNoOwoJCX0KCQlyZXR1cm4gJHJlc3VsdDsKCX0KCXByb3RlY3RlZCBmdW5jdGlvbiBfZG9BbmNob3JzX2lubGluZV9jYWxsYmFjaygkbWF0Y2hlcykgewoJCSR3aG9sZV9tYXRjaAk9ICAkbWF0Y2hlc1sxXTsKCQkkbGlua190ZXh0CQk9ICAkdGhpcy0+cnVuU3BhbkdhbXV0KCRtYXRjaGVzWzJdKTsKCQkkdXJsCQkJPSAgJG1hdGNoZXNbM10gPT0gJycgPyAkbWF0Y2hlc1s0XSA6ICRtYXRjaGVzWzNdOwoJCSR0aXRsZQkJCT0mICRtYXRjaGVzWzddOwoKCQkvLyBpZiB0aGUgVVJMIHdhcyBvZiB0aGUgZm9ybSA8cyBwIGEgYyBlIHM+IGl0IGdvdCBjYXVnaHQgYnkgdGhlIEhUTUwKCQkvLyB0YWcgbWFya2Rvd24gYW5kIGhhc2hlZC4gTmVlZCB0byByZXZlcnNlIHRoZSBwcm9jZXNzIGJlZm9yZSB1c2luZyB0aGUgVVJMLgoJCSR1bmhhc2hlZCA9ICR0aGlzLT51bmhhc2goJHVybCk7CgkJaWYgKCR1bmhhc2hlZCAhPSAkdXJsKQoJCQkkdXJsID0gcHJlZ19yZXBsYWNlKCcvXjwoLiopPiQvJywgJ1wxJywgJHVuaGFzaGVkKTsKCgkJJHVybCA9ICR0aGlzLT5lbmNvZGVVUkxBdHRyaWJ1dGUoJHVybCk7CgoJCSRyZXN1bHQgPSAiPGEgaHJlZj1cIiR1cmxcIiI7CgkJaWYgKGlzc2V0KCR0aXRsZSkpIHsKCQkJJHRpdGxlID0gJHRoaXMtPmVuY29kZUF0dHJpYnV0ZSgkdGl0bGUpOwoJCQkkcmVzdWx0IC49ICAiIHRpdGxlPVwiJHRpdGxlXCIiOwoJCX0KCQkKCQkkbGlua190ZXh0ID0gJHRoaXMtPnJ1blNwYW5HYW11dCgkbGlua190ZXh0KTsKCQkkcmVzdWx0IC49ICI+JGxpbmtfdGV4dDwvYT4iOwoKCQlyZXR1cm4gJHRoaXMtPmhhc2hQYXJ0KCRyZXN1bHQpOwoJfQoKCglwcm90ZWN0ZWQgZnVuY3Rpb24gZG9JbWFnZXMoJHRleHQpIHsKCSMKCSMgVHVybiBNYXJrZG93biBpbWFnZSBzaG9ydGN1dHMgaW50byA8aW1nPiB0YWdzLgoJIwoJCSMKCQkjIEZpcnN0LCBoYW5kbGUgcmVmZXJlbmNlLXN0eWxlIGxhYmVsZWQgaW1hZ2VzOiAhW2FsdCB0ZXh0XVtpZF0KCQkjCgkJJHRleHQgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJ3sKCQkJKAkJCQkjIHdyYXAgd2hvbGUgbWF0Y2ggaW4gJDEKCQkJICAhXFsKCQkJCSgnLiR0aGlzLT5uZXN0ZWRfYnJhY2tldHNfcmUuJykJCSMgYWx0IHRleHQgPSAkMgoJCQkgIFxdCgoJCQkgIFsgXT8JCQkJIyBvbmUgb3B0aW9uYWwgc3BhY2UKCQkJICAoPzpcblsgXSopPwkJIyBvbmUgb3B0aW9uYWwgbmV3bGluZSBmb2xsb3dlZCBieSBzcGFjZXMKCgkJCSAgXFsKCQkJCSguKj8pCQkjIGlkID0gJDMKCQkJICBcXQoKCQkJKQoJCQl9eHMnLCAKCQkJYXJyYXkoJHRoaXMsICdfZG9JbWFnZXNfcmVmZXJlbmNlX2NhbGxiYWNrJyksICR0ZXh0KTsKCgkJIwoJCSMgTmV4dCwgaGFuZGxlIGlubGluZSBpbWFnZXM6ICAhW2FsdCB0ZXh0XSh1cmwgIm9wdGlvbmFsIHRpdGxlIikKCQkjIERvbid0IGZvcmdldDogZW5jb2RlICogYW5kIF8KCQkjCgkJJHRleHQgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJ3sKCQkJKAkJCQkjIHdyYXAgd2hvbGUgbWF0Y2ggaW4gJDEKCQkJICAhXFsKCQkJCSgnLiR0aGlzLT5uZXN0ZWRfYnJhY2tldHNfcmUuJykJCSMgYWx0IHRleHQgPSAkMgoJCQkgIFxdCgkJCSAgXHM/CQkJIyBPbmUgb3B0aW9uYWwgd2hpdGVzcGFjZSBjaGFyYWN0ZXIKCQkJICBcKAkJCSMgbGl0ZXJhbCBwYXJlbgoJCQkJWyBcbl0qCgkJCQkoPzoKCQkJCQk8KFxTKik+CSMgc3JjIHVybCA9ICQzCgkJCQl8CgkJCQkJKCcuJHRoaXMtPm5lc3RlZF91cmxfcGFyZW50aGVzaXNfcmUuJykJIyBzcmMgdXJsID0gJDQKCQkJCSkKCQkJCVsgXG5dKgoJCQkJKAkJCSMgJDUKCQkJCSAgKFtcJyJdKQkjIHF1b3RlIGNoYXIgPSAkNgoJCQkJICAoLio/KQkJIyB0aXRsZSA9ICQ3CgkJCQkgIFw2CQkjIG1hdGNoaW5nIHF1b3RlCgkJCQkgIFsgXG5dKgoJCQkJKT8JCQkjIHRpdGxlIGlzIG9wdGlvbmFsCgkJCSAgXCkKCQkJKQoJCQl9eHMnLAoJCQlhcnJheSgkdGhpcywgJ19kb0ltYWdlc19pbmxpbmVfY2FsbGJhY2snKSwgJHRleHQpOwoKCQlyZXR1cm4gJHRleHQ7Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gX2RvSW1hZ2VzX3JlZmVyZW5jZV9jYWxsYmFjaygkbWF0Y2hlcykgewoJCSR3aG9sZV9tYXRjaCA9ICRtYXRjaGVzWzFdOwoJCSRhbHRfdGV4dCAgICA9ICRtYXRjaGVzWzJdOwoJCSRsaW5rX2lkICAgICA9IHN0cnRvbG93ZXIoJG1hdGNoZXNbM10pOwoKCQlpZiAoJGxpbmtfaWQgPT0gIiIpIHsKCQkJJGxpbmtfaWQgPSBzdHJ0b2xvd2VyKCRhbHRfdGV4dCk7ICMgZm9yIHNob3J0Y3V0IGxpbmtzIGxpa2UgIVt0aGlzXVtdLgoJCX0KCgkJJGFsdF90ZXh0ID0gJHRoaXMtPmVuY29kZUF0dHJpYnV0ZSgkYWx0X3RleHQpOwoJCWlmIChpc3NldCgkdGhpcy0+dXJsc1skbGlua19pZF0pKSB7CgkJCSR1cmwgPSAkdGhpcy0+ZW5jb2RlVVJMQXR0cmlidXRlKCR0aGlzLT51cmxzWyRsaW5rX2lkXSk7CgkJCSRyZXN1bHQgPSAiPGltZyBzcmM9XCIkdXJsXCIgYWx0PVwiJGFsdF90ZXh0XCIiOwoJCQlpZiAoaXNzZXQoJHRoaXMtPnRpdGxlc1skbGlua19pZF0pKSB7CgkJCQkkdGl0bGUgPSAkdGhpcy0+dGl0bGVzWyRsaW5rX2lkXTsKCQkJCSR0aXRsZSA9ICR0aGlzLT5lbmNvZGVBdHRyaWJ1dGUoJHRpdGxlKTsKCQkJCSRyZXN1bHQgLj0gICIgdGl0bGU9XCIkdGl0bGVcIiI7CgkJCX0KCQkJJHJlc3VsdCAuPSAkdGhpcy0+ZW1wdHlfZWxlbWVudF9zdWZmaXg7CgkJCSRyZXN1bHQgPSAkdGhpcy0+aGFzaFBhcnQoJHJlc3VsdCk7CgkJfQoJCWVsc2UgewoJCQkjIElmIHRoZXJlJ3Mgbm8gc3VjaCBsaW5rIElELCBsZWF2ZSBpbnRhY3Q6CgkJCSRyZXN1bHQgPSAkd2hvbGVfbWF0Y2g7CgkJfQoKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCXByb3RlY3RlZCBmdW5jdGlvbiBfZG9JbWFnZXNfaW5saW5lX2NhbGxiYWNrKCRtYXRjaGVzKSB7CgkJJHdob2xlX21hdGNoCT0gJG1hdGNoZXNbMV07CgkJJGFsdF90ZXh0CQk9ICRtYXRjaGVzWzJdOwoJCSR1cmwJCQk9ICRtYXRjaGVzWzNdID09ICcnID8gJG1hdGNoZXNbNF0gOiAkbWF0Y2hlc1szXTsKCQkkdGl0bGUJCQk9JiAkbWF0Y2hlc1s3XTsKCgkJJGFsdF90ZXh0ID0gJHRoaXMtPmVuY29kZUF0dHJpYnV0ZSgkYWx0X3RleHQpOwoJCSR1cmwgPSAkdGhpcy0+ZW5jb2RlVVJMQXR0cmlidXRlKCR1cmwpOwoJCSRyZXN1bHQgPSAiPGltZyBzcmM9XCIkdXJsXCIgYWx0PVwiJGFsdF90ZXh0XCIiOwoJCWlmIChpc3NldCgkdGl0bGUpKSB7CgkJCSR0aXRsZSA9ICR0aGlzLT5lbmNvZGVBdHRyaWJ1dGUoJHRpdGxlKTsKCQkJJHJlc3VsdCAuPSAgIiB0aXRsZT1cIiR0aXRsZVwiIjsgIyAkdGl0bGUgYWxyZWFkeSBxdW90ZWQKCQl9CgkJJHJlc3VsdCAuPSAkdGhpcy0+ZW1wdHlfZWxlbWVudF9zdWZmaXg7CgoJCXJldHVybiAkdGhpcy0+aGFzaFBhcnQoJHJlc3VsdCk7Cgl9CgoKCXByb3RlY3RlZCBmdW5jdGlvbiBkb0hlYWRlcnMoJHRleHQpIHsKCQkjIFNldGV4dC1zdHlsZSBoZWFkZXJzOgoJCSMJICBIZWFkZXIgMQoJCSMJICA9PT09PT09PQoJCSMgIAoJCSMJICBIZWFkZXIgMgoJCSMJICAtLS0tLS0tLQoJCSMKCQkkdGV4dCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygneyBeKC4rPylbIF0qXG4oPSt8LSspWyBdKlxuKyB9bXgnLAoJCQlhcnJheSgkdGhpcywgJ19kb0hlYWRlcnNfY2FsbGJhY2tfc2V0ZXh0JyksICR0ZXh0KTsKCgkJIyBhdHgtc3R5bGUgaGVhZGVyczoKCQkjCSMgSGVhZGVyIDEKCQkjCSMjIEhlYWRlciAyCgkJIwkjIyBIZWFkZXIgMiB3aXRoIGNsb3NpbmcgaGFzaGVzICMjCgkJIwkuLi4KCQkjCSMjIyMjIyBIZWFkZXIgNgoJCSMKCQkkdGV4dCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnewoJCQkJXihcI3sxLDZ9KQkjICQxID0gc3RyaW5nIG9mICNcJ3MKCQkJCVsgXSoKCQkJCSguKz8pCQkjICQyID0gSGVhZGVyIHRleHQKCQkJCVsgXSoKCQkJCVwjKgkJCSMgb3B0aW9uYWwgY2xvc2luZyAjXCdzIChub3QgY291bnRlZCkKCQkJCVxuKwoJCQl9eG0nLAoJCQlhcnJheSgkdGhpcywgJ19kb0hlYWRlcnNfY2FsbGJhY2tfYXR4JyksICR0ZXh0KTsKCgkJcmV0dXJuICR0ZXh0OwoJfQoKCXByb3RlY3RlZCBmdW5jdGlvbiBfZG9IZWFkZXJzX2NhbGxiYWNrX3NldGV4dCgkbWF0Y2hlcykgewoJCSMgVGVycmlibGUgaGFjayB0byBjaGVjayB3ZSBoYXZlbid0IGZvdW5kIGFuIGVtcHR5IGxpc3QgaXRlbS4KCQlpZiAoJG1hdGNoZXNbMl0gPT0gJy0nICYmIHByZWdfbWF0Y2goJ3teLSg/OiB8JCl9JywgJG1hdGNoZXNbMV0pKQoJCQlyZXR1cm4gJG1hdGNoZXNbMF07CgkJCgkJJGxldmVsID0gJG1hdGNoZXNbMl17MH0gPT0gJz0nID8gMSA6IDI7CgoJCSMgaWQgYXR0cmlidXRlIGdlbmVyYXRpb24KCQkkaWRBdHQgPSAkdGhpcy0+X2dlbmVyYXRlSWRGcm9tSGVhZGVyVmFsdWUoJG1hdGNoZXNbMV0pOwoKCQkkYmxvY2sgPSAiPGgkbGV2ZWwkaWRBdHQ+Ii4kdGhpcy0+cnVuU3BhbkdhbXV0KCRtYXRjaGVzWzFdKS4iPC9oJGxldmVsPiI7CgkJcmV0dXJuICJcbiIgLiAkdGhpcy0+aGFzaEJsb2NrKCRibG9jaykgLiAiXG5cbiI7Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gX2RvSGVhZGVyc19jYWxsYmFja19hdHgoJG1hdGNoZXMpIHsKCgkJIyBpZCBhdHRyaWJ1dGUgZ2VuZXJhdGlvbgoJCSRpZEF0dCA9ICR0aGlzLT5fZ2VuZXJhdGVJZEZyb21IZWFkZXJWYWx1ZSgkbWF0Y2hlc1syXSk7CgoJCSRsZXZlbCA9IHN0cmxlbigkbWF0Y2hlc1sxXSk7CgkJJGJsb2NrID0gIjxoJGxldmVsJGlkQXR0PiIuJHRoaXMtPnJ1blNwYW5HYW11dCgkbWF0Y2hlc1syXSkuIjwvaCRsZXZlbD4iOwoJCXJldHVybiAiXG4iIC4gJHRoaXMtPmhhc2hCbG9jaygkYmxvY2spIC4gIlxuXG4iOwoJfQoKCXByb3RlY3RlZCBmdW5jdGlvbiBfZ2VuZXJhdGVJZEZyb21IZWFkZXJWYWx1ZSgkaGVhZGVyVmFsdWUpIHsKCgkJIyBpZiBhIGhlYWRlcl9pZF9mdW5jIHByb3BlcnR5IGlzIHNldCwgd2UgY2FuIHVzZSBpdCB0byBhdXRvbWF0aWNhbGx5CgkJIyBnZW5lcmF0ZSBhbiBpZCBhdHRyaWJ1dGUuCgkJIwoJCSMgVGhpcyBtZXRob2QgcmV0dXJucyBhIHN0cmluZyBpbiB0aGUgZm9ybSBpZD0iZm9vIiwgb3IgYW4gZW1wdHkgc3RyaW5nCgkJIyBvdGhlcndpc2UuCgkJaWYgKCFpc19jYWxsYWJsZSgkdGhpcy0+aGVhZGVyX2lkX2Z1bmMpKSB7CgkJCXJldHVybiAiIjsKCQl9CgkJJGlkVmFsdWUgPSBjYWxsX3VzZXJfZnVuYygkdGhpcy0+aGVhZGVyX2lkX2Z1bmMsICRoZWFkZXJWYWx1ZSk7CgkJaWYgKCEkaWRWYWx1ZSkgcmV0dXJuICIiOwoKCQlyZXR1cm4gJyBpZD0iJyAuICR0aGlzLT5lbmNvZGVBdHRyaWJ1dGUoJGlkVmFsdWUpIC4gJyInOwoKCX0KCglwcm90ZWN0ZWQgZnVuY3Rpb24gZG9MaXN0cygkdGV4dCkgewoJIwoJIyBGb3JtIEhUTUwgb3JkZXJlZCAobnVtYmVyZWQpIGFuZCB1bm9yZGVyZWQgKGJ1bGxldGVkKSBsaXN0cy4KCSMKCQkkbGVzc190aGFuX3RhYiA9ICR0aGlzLT50YWJfd2lkdGggLSAxOwoKCQkjIFJlLXVzYWJsZSBwYXR0ZXJucyB0byBtYXRjaCBsaXN0IGl0ZW0gYnVsbGV0cyBhbmQgbnVtYmVyIG1hcmtlcnM6CgkJJG1hcmtlcl91bF9yZSAgPSAnWyorLV0nOwoJCSRtYXJrZXJfb2xfcmUgID0gJ1xkK1tcLl0nOwoKCQkkbWFya2Vyc19yZWxpc3QgPSBhcnJheSgKCQkJJG1hcmtlcl91bF9yZSA9PiAkbWFya2VyX29sX3JlLAoJCQkkbWFya2VyX29sX3JlID0+ICRtYXJrZXJfdWxfcmUsCgkJCSk7CgoJCWZvcmVhY2ggKCRtYXJrZXJzX3JlbGlzdCBhcyAkbWFya2VyX3JlID0+ICRvdGhlcl9tYXJrZXJfcmUpIHsKCQkJIyBSZS11c2FibGUgcGF0dGVybiB0byBtYXRjaCBhbnkgZW50aXJlbCB1bCBvciBvbCBsaXN0OgoJCQkkd2hvbGVfbGlzdF9yZSA9ICcKCQkJCSgJCQkJCQkJCSMgJDEgPSB3aG9sZSBsaXN0CgkJCQkgICgJCQkJCQkJCSMgJDIKCQkJCQkoWyBdezAsJy4kbGVzc190aGFuX3RhYi4nfSkJIyAkMyA9IG51bWJlciBvZiBzcGFjZXMKCQkJCQkoJy4kbWFya2VyX3JlLicpCQkJIyAkNCA9IGZpcnN0IGxpc3QgaXRlbSBtYXJrZXIKCQkJCQlbIF0rCgkJCQkgICkKCQkJCSAgKD9zOi4rPykKCQkJCSAgKAkJCQkJCQkJIyAkNQoJCQkJCSAgXHoKCQkJCQl8CgkJCQkJICBcbnsyLH0KCQkJCQkgICg/PVxTKQoJCQkJCSAgKD8hCQkJCQkJIyBOZWdhdGl2ZSBsb29rYWhlYWQgZm9yIGFub3RoZXIgbGlzdCBpdGVtIG1hcmtlcgoJCQkJCQlbIF0qCgkJCQkJCScuJG1hcmtlcl9yZS4nWyBdKwoJCQkJCSAgKQoJCQkJCXwKCQkJCQkgICg/PQkJCQkJCSMgTG9va2FoZWFkIGZvciBhbm90aGVyIGtpbmQgb2YgbGlzdAoJCQkJCSAgICBcbgoJCQkJCQlcMwkJCQkJCSMgTXVzdCBoYXZlIHRoZSBzYW1lIGluZGVudGF0aW9uCgkJCQkJCScuJG90aGVyX21hcmtlcl9yZS4nWyBdKwoJCQkJCSAgKQoJCQkJICApCgkJCQkpCgkJCSc7IC8vIG14CgkJCQoJCQkjIFdlIHVzZSBhIGRpZmZlcmVudCBwcmVmaXggYmVmb3JlIG5lc3RlZCBsaXN0cyB0aGFuIHRvcC1sZXZlbCBsaXN0cy4KCQkJIyBTZWUgZXh0ZW5kZWQgY29tbWVudCBpbiBfUHJvY2Vzc0xpc3RJdGVtcygpLgoJCQoJCQlpZiAoJHRoaXMtPmxpc3RfbGV2ZWwpIHsKCQkJCSR0ZXh0ID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCd7CgkJCQkJCV4KCQkJCQkJJy4kd2hvbGVfbGlzdF9yZS4nCgkJCQkJfW14JywKCQkJCQlhcnJheSgkdGhpcywgJ19kb0xpc3RzX2NhbGxiYWNrJyksICR0ZXh0KTsKCQkJfQoJCQllbHNlIHsKCQkJCSR0ZXh0ID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCd7CgkJCQkJCSg/Oig/PD1cbilcbnxcQVxuPykgIyBNdXN0IGVhdCB0aGUgbmV3bGluZQoJCQkJCQknLiR3aG9sZV9saXN0X3JlLicKCQkJCQl9bXgnLAoJCQkJCWFycmF5KCR0aGlzLCAnX2RvTGlzdHNfY2FsbGJhY2snKSwgJHRleHQpOwoJCQl9CgkJfQoKCQlyZXR1cm4gJHRleHQ7Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gX2RvTGlzdHNfY2FsbGJhY2soJG1hdGNoZXMpIHsKCQkjIFJlLXVzYWJsZSBwYXR0ZXJucyB0byBtYXRjaCBsaXN0IGl0ZW0gYnVsbGV0cyBhbmQgbnVtYmVyIG1hcmtlcnM6CgkJJG1hcmtlcl91bF9yZSAgPSAnWyorLV0nOwoJCSRtYXJrZXJfb2xfcmUgID0gJ1xkK1tcLl0nOwoJCSRtYXJrZXJfYW55X3JlID0gIig/OiRtYXJrZXJfdWxfcmV8JG1hcmtlcl9vbF9yZSkiOwoJCSRtYXJrZXJfb2xfc3RhcnRfcmUgPSAnWzAtOV0rJzsKCgkJJGxpc3QgPSAkbWF0Y2hlc1sxXTsKCQkkbGlzdF90eXBlID0gcHJlZ19tYXRjaCgiLyRtYXJrZXJfdWxfcmUvIiwgJG1hdGNoZXNbNF0pID8gInVsIiA6ICJvbCI7CgoJCSRtYXJrZXJfYW55X3JlID0gKCAkbGlzdF90eXBlID09ICJ1bCIgPyAkbWFya2VyX3VsX3JlIDogJG1hcmtlcl9vbF9yZSApOwoKCQkkbGlzdCAuPSAiXG4iOwoJCSRyZXN1bHQgPSAkdGhpcy0+cHJvY2Vzc0xpc3RJdGVtcygkbGlzdCwgJG1hcmtlcl9hbnlfcmUpOwoKCQkkb2xfc3RhcnQgPSAxOwoJCWlmICgkdGhpcy0+ZW5oYW5jZWRfb3JkZXJlZF9saXN0KSB7CgkJCSMgR2V0IHRoZSBzdGFydCBudW1iZXIgZm9yIG9yZGVyZWQgbGlzdC4KCQkJaWYgKCRsaXN0X3R5cGUgPT0gJ29sJykgewoJCQkJJG9sX3N0YXJ0X2FycmF5ID0gYXJyYXkoKTsKCQkJCSRvbF9zdGFydF9jaGVjayA9IHByZWdfbWF0Y2goIi8kbWFya2VyX29sX3N0YXJ0X3JlLyIsICRtYXRjaGVzWzRdLCAkb2xfc3RhcnRfYXJyYXkpOwoJCQkJaWYgKCRvbF9zdGFydF9jaGVjayl7CgkJCQkJJG9sX3N0YXJ0ID0gJG9sX3N0YXJ0X2FycmF5WzBdOwoJCQkJfQoJCQl9CgkJfQoKCQlpZiAoJG9sX3N0YXJ0ID4gMSAmJiAkbGlzdF90eXBlID09ICdvbCcpewoJCQkkcmVzdWx0ID0gJHRoaXMtPmhhc2hCbG9jaygiPCRsaXN0X3R5cGUgc3RhcnQ9XCIkb2xfc3RhcnRcIj5cbiIgLiAkcmVzdWx0IC4gIjwvJGxpc3RfdHlwZT4iKTsKCQl9IGVsc2UgewoJCQkkcmVzdWx0ID0gJHRoaXMtPmhhc2hCbG9jaygiPCRsaXN0X3R5cGU+XG4iIC4gJHJlc3VsdCAuICI8LyRsaXN0X3R5cGU+Iik7CgkJfQoJCXJldHVybiAiXG4iLiAkcmVzdWx0IC4iXG5cbiI7Cgl9CgoJcHJvdGVjdGVkICRsaXN0X2xldmVsID0gMDsKCglwcm90ZWN0ZWQgZnVuY3Rpb24gcHJvY2Vzc0xpc3RJdGVtcygkbGlzdF9zdHIsICRtYXJrZXJfYW55X3JlKSB7CgkjCgkjCVByb2Nlc3MgdGhlIGNvbnRlbnRzIG9mIGEgc2luZ2xlIG9yZGVyZWQgb3IgdW5vcmRlcmVkIGxpc3QsIHNwbGl0dGluZyBpdAoJIwlpbnRvIGluZGl2aWR1YWwgbGlzdCBpdGVtcy4KCSMKCQkjIFRoZSAkdGhpcy0+bGlzdF9sZXZlbCBnbG9iYWwga2VlcHMgdHJhY2sgb2Ygd2hlbiB3ZSdyZSBpbnNpZGUgYSBsaXN0LgoJCSMgRWFjaCB0aW1lIHdlIGVudGVyIGEgbGlzdCwgd2UgaW5jcmVtZW50IGl0OyB3aGVuIHdlIGxlYXZlIGEgbGlzdCwKCQkjIHdlIGRlY3JlbWVudC4gSWYgaXQncyB6ZXJvLCB3ZSdyZSBub3QgaW4gYSBsaXN0IGFueW1vcmUuCgkJIwoJCSMgV2UgZG8gdGhpcyBiZWNhdXNlIHdoZW4gd2UncmUgbm90IGluc2lkZSBhIGxpc3QsIHdlIHdhbnQgdG8gdHJlYXQKCQkjIHNvbWV0aGluZyBsaWtlIHRoaXM6CgkJIwoJCSMJCUkgcmVjb21tZW5kIHVwZ3JhZGluZyB0byB2ZXJzaW9uCgkJIwkJOC4gT29wcywgbm93IHRoaXMgbGluZSBpcyB0cmVhdGVkCgkJIwkJYXMgYSBzdWItbGlzdC4KCQkjCgkJIyBBcyBhIHNpbmdsZSBwYXJhZ3JhcGgsIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB0aGUgc2Vjb25kIGxpbmUgc3RhcnRzCgkJIyB3aXRoIGEgZGlnaXQtcGVyaW9kLXNwYWNlIHNlcXVlbmNlLgoJCSMKCQkjIFdoZXJlYXMgd2hlbiB3ZSdyZSBpbnNpZGUgYSBsaXN0IChvciBzdWItbGlzdCksIHRoYXQgbGluZSB3aWxsIGJlCgkJIyB0cmVhdGVkIGFzIHRoZSBzdGFydCBvZiBhIHN1Yi1saXN0LiBXaGF0IGEga2x1ZGdlLCBodWg/IFRoaXMgaXMKCQkjIGFuIGFzcGVjdCBvZiBNYXJrZG93bidzIHN5bnRheCB0aGF0J3MgaGFyZCB0byBwYXJzZSBwZXJmZWN0bHkKCQkjIHdpdGhvdXQgcmVzb3J0aW5nIHRvIG1pbmQtcmVhZGluZy4gUGVyaGFwcyB0aGUgc29sdXRpb24gaXMgdG8KCQkjIGNoYW5nZSB0aGUgc3ludGF4IHJ1bGVzIHN1Y2ggdGhhdCBzdWItbGlzdHMgbXVzdCBzdGFydCB3aXRoIGEKCQkjIHN0YXJ0aW5nIGNhcmRpbmFsIG51bWJlcjsgZS5nLiAiMS4iIG9yICJhLiIuCgkJCgkJJHRoaXMtPmxpc3RfbGV2ZWwrKzsKCgkJIyB0cmltIHRyYWlsaW5nIGJsYW5rIGxpbmVzOgoJCSRsaXN0X3N0ciA9IHByZWdfcmVwbGFjZSgiL1xuezIsfVxcei8iLCAiXG4iLCAkbGlzdF9zdHIpOwoKCQkkbGlzdF9zdHIgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJ3sKCQkJKFxuKT8JCQkJCQkJIyBsZWFkaW5nIGxpbmUgPSAkMQoJCQkoXlsgXSopCQkJCQkJCSMgbGVhZGluZyB3aGl0ZXNwYWNlID0gJDIKCQkJKCcuJG1hcmtlcl9hbnlfcmUuJwkJCQkjIGxpc3QgbWFya2VyIGFuZCBzcGFjZSA9ICQzCgkJCQkoPzpbIF0rfCg/PVxuKSkJIyBzcGFjZSBvbmx5IHJlcXVpcmVkIGlmIGl0ZW0gaXMgbm90IGVtcHR5CgkJCSkKCQkJKCg/czouKj8pKQkJCQkJCSMgbGlzdCBpdGVtIHRleHQgICA9ICQ0CgkJCSg/OihcbisoPz1cbikpfFxuKQkJCQkjIHRhaWxpbmcgYmxhbmsgbGluZSA9ICQ1CgkJCSg/PSBcbiogKFx6IHwgXDIgKCcuJG1hcmtlcl9hbnlfcmUuJykgKD86WyBdK3woPz1cbikpKSkKCQkJfXhtJywKCQkJYXJyYXkoJHRoaXMsICdfcHJvY2Vzc0xpc3RJdGVtc19jYWxsYmFjaycpLCAkbGlzdF9zdHIpOwoKCQkkdGhpcy0+bGlzdF9sZXZlbC0tOwoJCXJldHVybiAkbGlzdF9zdHI7Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gX3Byb2Nlc3NMaXN0SXRlbXNfY2FsbGJhY2soJG1hdGNoZXMpIHsKCQkkaXRlbSA9ICRtYXRjaGVzWzRdOwoJCSRsZWFkaW5nX2xpbmUgPSYgJG1hdGNoZXNbMV07CgkJJGxlYWRpbmdfc3BhY2UgPSYgJG1hdGNoZXNbMl07CgkJJG1hcmtlcl9zcGFjZSA9ICRtYXRjaGVzWzNdOwoJCSR0YWlsaW5nX2JsYW5rX2xpbmUgPSYgJG1hdGNoZXNbNV07CgoJCWlmICgkbGVhZGluZ19saW5lIHx8ICR0YWlsaW5nX2JsYW5rX2xpbmUgfHwgCgkJCXByZWdfbWF0Y2goJy9cbnsyLH0vJywgJGl0ZW0pKQoJCXsKCQkJIyBSZXBsYWNlIG1hcmtlciB3aXRoIHRoZSBhcHByb3ByaWF0ZSB3aGl0ZXNwYWNlIGluZGVudGF0aW9uCgkJCSRpdGVtID0gJGxlYWRpbmdfc3BhY2UgLiBzdHJfcmVwZWF0KCcgJywgc3RybGVuKCRtYXJrZXJfc3BhY2UpKSAuICRpdGVtOwoJCQkkaXRlbSA9ICR0aGlzLT5ydW5CbG9ja0dhbXV0KCR0aGlzLT5vdXRkZW50KCRpdGVtKS4iXG4iKTsKCQl9CgkJZWxzZSB7CgkJCSMgUmVjdXJzaW9uIGZvciBzdWItbGlzdHM6CgkJCSRpdGVtID0gJHRoaXMtPmRvTGlzdHMoJHRoaXMtPm91dGRlbnQoJGl0ZW0pKTsKCQkJJGl0ZW0gPSBwcmVnX3JlcGxhY2UoJy9cbiskLycsICcnLCAkaXRlbSk7CgkJCSRpdGVtID0gJHRoaXMtPnJ1blNwYW5HYW11dCgkaXRlbSk7CgkJfQoKCQlyZXR1cm4gIjxsaT4iIC4gJGl0ZW0gLiAiPC9saT5cbiI7Cgl9CgoKCXByb3RlY3RlZCBmdW5jdGlvbiBkb0NvZGVCbG9ja3MoJHRleHQpIHsKCSMKCSMJUHJvY2VzcyBNYXJrZG93biBgPHByZT48Y29kZT5gIGJsb2Nrcy4KCSMKCQkkdGV4dCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnewoJCQkJKD86XG5cbnxcQVxuPykKCQkJCSgJICAgICAgICAgICAgIyAkMSA9IHRoZSBjb2RlIGJsb2NrIC0tIG9uZSBvciBtb3JlIGxpbmVzLCBzdGFydGluZyB3aXRoIGEgc3BhY2UvdGFiCgkJCQkgICg/PgoJCQkJCVsgXXsnLiR0aGlzLT50YWJfd2lkdGguJ30gICMgTGluZXMgbXVzdCBzdGFydCB3aXRoIGEgdGFiIG9yIGEgdGFiLXdpZHRoIG9mIHNwYWNlcwoJCQkJCS4qXG4rCgkJCQkgICkrCgkJCQkpCgkJCQkoKD89XlsgXXswLCcuJHRoaXMtPnRhYl93aWR0aC4nfVxTKXxcWikJIyBMb29rYWhlYWQgZm9yIG5vbi1zcGFjZSBhdCBsaW5lLXN0YXJ0LCBvciBlbmQgb2YgZG9jCgkJCX14bScsCgkJCWFycmF5KCR0aGlzLCAnX2RvQ29kZUJsb2Nrc19jYWxsYmFjaycpLCAkdGV4dCk7CgoJCXJldHVybiAkdGV4dDsKCX0KCXByb3RlY3RlZCBmdW5jdGlvbiBfZG9Db2RlQmxvY2tzX2NhbGxiYWNrKCRtYXRjaGVzKSB7CgkJJGNvZGVibG9jayA9ICRtYXRjaGVzWzFdOwoKCQkkY29kZWJsb2NrID0gJHRoaXMtPm91dGRlbnQoJGNvZGVibG9jayk7CgkJJGNvZGVibG9jayA9IGh0bWxzcGVjaWFsY2hhcnMoJGNvZGVibG9jaywgRU5UX05PUVVPVEVTKTsKCgkJIyB0cmltIGxlYWRpbmcgbmV3bGluZXMgYW5kIHRyYWlsaW5nIG5ld2xpbmVzCgkJJGNvZGVibG9jayA9IHByZWdfcmVwbGFjZSgnL1xBXG4rfFxuK1x6LycsICcnLCAkY29kZWJsb2NrKTsKCgkJJGNvZGVibG9jayA9ICI8cHJlPjxjb2RlPiRjb2RlYmxvY2tcbjwvY29kZT48L3ByZT4iOwoJCXJldHVybiAiXG5cbiIuJHRoaXMtPmhhc2hCbG9jaygkY29kZWJsb2NrKS4iXG5cbiI7Cgl9CgoKCXByb3RlY3RlZCBmdW5jdGlvbiBtYWtlQ29kZVNwYW4oJGNvZGUpIHsKCSMKCSMgQ3JlYXRlIGEgY29kZSBzcGFuIG1hcmt1cCBmb3IgJGNvZGUuIENhbGxlZCBmcm9tIGhhbmRsZVNwYW5Ub2tlbi4KCSMKCQkkY29kZSA9IGh0bWxzcGVjaWFsY2hhcnModHJpbSgkY29kZSksIEVOVF9OT1FVT1RFUyk7CgkJcmV0dXJuICR0aGlzLT5oYXNoUGFydCgiPGNvZGU+JGNvZGU8L2NvZGU+Iik7Cgl9CgoKCXByb3RlY3RlZCAkZW1fcmVsaXN0ID0gYXJyYXkoCgkJJycgID0+ICcoPzooPzwhXCopXCooPyFcKil8KD88IV8pXyg/IV8pKSg/IVtcLiw6O10/XHMpJywKCQknKicgPT4gJyg/PCFbXHMqXSlcKig/IVwqKScsCgkJJ18nID0+ICcoPzwhW1xzX10pXyg/IV8pJywKCQkpOwoJcHJvdGVjdGVkICRzdHJvbmdfcmVsaXN0ID0gYXJyYXkoCgkJJycgICA9PiAnKD86KD88IVwqKVwqXCooPyFcKil8KD88IV8pX18oPyFfKSkoPyFbXC4sOjtdP1xzKScsCgkJJyoqJyA9PiAnKD88IVtccypdKVwqXCooPyFcKiknLAoJCSdfXycgPT4gJyg/PCFbXHNfXSlfXyg/IV8pJywKCQkpOwoJcHJvdGVjdGVkICRlbV9zdHJvbmdfcmVsaXN0ID0gYXJyYXkoCgkJJycgICAgPT4gJyg/Oig/PCFcKilcKlwqXCooPyFcKil8KD88IV8pX19fKD8hXykpKD8hW1wuLDo7XT9ccyknLAoJCScqKionID0+ICcoPzwhW1xzKl0pXCpcKlwqKD8hXCopJywKCQknX19fJyA9PiAnKD88IVtcc19dKV9fXyg/IV8pJywKCQkpOwoJcHJvdGVjdGVkICRlbV9zdHJvbmdfcHJlcGFyZWRfcmVsaXN0OwoJCglwcm90ZWN0ZWQgZnVuY3Rpb24gcHJlcGFyZUl0YWxpY3NBbmRCb2xkKCkgewoJIwoJIyBQcmVwYXJlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIHNlYXJjaGluZyBlbXBoYXNpcyB0b2tlbnMgaW4gYW55CgkjIGNvbnRleHQuCgkjCgkJZm9yZWFjaCAoJHRoaXMtPmVtX3JlbGlzdCBhcyAkZW0gPT4gJGVtX3JlKSB7CgkJCWZvcmVhY2ggKCR0aGlzLT5zdHJvbmdfcmVsaXN0IGFzICRzdHJvbmcgPT4gJHN0cm9uZ19yZSkgewoJCQkJIyBDb25zdHJ1Y3QgbGlzdCBvZiBhbGxvd2VkIHRva2VuIGV4cHJlc3Npb25zLgoJCQkJJHRva2VuX3JlbGlzdCA9IGFycmF5KCk7CgkJCQlpZiAoaXNzZXQoJHRoaXMtPmVtX3N0cm9uZ19yZWxpc3RbIiRlbSRzdHJvbmciXSkpIHsKCQkJCQkkdG9rZW5fcmVsaXN0W10gPSAkdGhpcy0+ZW1fc3Ryb25nX3JlbGlzdFsiJGVtJHN0cm9uZyJdOwoJCQkJfQoJCQkJJHRva2VuX3JlbGlzdFtdID0gJGVtX3JlOwoJCQkJJHRva2VuX3JlbGlzdFtdID0gJHN0cm9uZ19yZTsKCQkJCQoJCQkJIyBDb25zdHJ1Y3QgbWFzdGVyIGV4cHJlc3Npb24gZnJvbSBsaXN0LgoJCQkJJHRva2VuX3JlID0gJ3soJy4gaW1wbG9kZSgnfCcsICR0b2tlbl9yZWxpc3QpIC4nKX0nOwoJCQkJJHRoaXMtPmVtX3N0cm9uZ19wcmVwYXJlZF9yZWxpc3RbIiRlbSRzdHJvbmciXSA9ICR0b2tlbl9yZTsKCQkJfQoJCX0KCX0KCQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGRvSXRhbGljc0FuZEJvbGQoJHRleHQpIHsKCQkkdG9rZW5fc3RhY2sgPSBhcnJheSgnJyk7CgkJJHRleHRfc3RhY2sgPSBhcnJheSgnJyk7CgkJJGVtID0gJyc7CgkJJHN0cm9uZyA9ICcnOwoJCSR0cmVlX2NoYXJfZW0gPSBmYWxzZTsKCQkKCQl3aGlsZSAoMSkgewoJCQkjCgkJCSMgR2V0IHByZXBhcmVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3Igc2VyYWNoaW5nIGVtcGhhc2lzIHRva2VucwoJCQkjIGluIGN1cnJlbnQgY29udGV4dC4KCQkJIwoJCQkkdG9rZW5fcmUgPSAkdGhpcy0+ZW1fc3Ryb25nX3ByZXBhcmVkX3JlbGlzdFsiJGVtJHN0cm9uZyJdOwoJCQkKCQkJIwoJCQkjIEVhY2ggbG9vcCBpdGVyYXRpb24gc2VhcmNoIGZvciB0aGUgbmV4dCBlbXBoYXNpcyB0b2tlbi4gCgkJCSMgRWFjaCB0b2tlbiBpcyB0aGVuIHBhc3NlZCB0byBoYW5kbGVTcGFuVG9rZW4uCgkJCSMKCQkJJHBhcnRzID0gcHJlZ19zcGxpdCgkdG9rZW5fcmUsICR0ZXh0LCAyLCBQUkVHX1NQTElUX0RFTElNX0NBUFRVUkUpOwoJCQkkdGV4dF9zdGFja1swXSAuPSAkcGFydHNbMF07CgkJCSR0b2tlbiA9JiAkcGFydHNbMV07CgkJCSR0ZXh0ID0mICRwYXJ0c1syXTsKCQkJCgkJCWlmIChlbXB0eSgkdG9rZW4pKSB7CgkJCQkjIFJlYWNoZWQgZW5kIG9mIHRleHQgc3BhbjogZW1wdHkgc3RhY2sgd2l0aG91dCBlbWl0dGluZy4KCQkJCSMgYW55IG1vcmUgZW1waGFzaXMuCgkJCQl3aGlsZSAoJHRva2VuX3N0YWNrWzBdKSB7CgkJCQkJJHRleHRfc3RhY2tbMV0gLj0gYXJyYXlfc2hpZnQoJHRva2VuX3N0YWNrKTsKCQkJCQkkdGV4dF9zdGFja1swXSAuPSBhcnJheV9zaGlmdCgkdGV4dF9zdGFjayk7CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCQkKCQkJJHRva2VuX2xlbiA9IHN0cmxlbigkdG9rZW4pOwoJCQlpZiAoJHRyZWVfY2hhcl9lbSkgewoJCQkJIyBSZWFjaGVkIGNsb3NpbmcgbWFya2VyIHdoaWxlIGluc2lkZSBhIHRocmVlLWNoYXIgZW1waGFzaXMuCgkJCQlpZiAoJHRva2VuX2xlbiA9PSAzKSB7CgkJCQkJIyBUaHJlZS1jaGFyIGNsb3NpbmcgbWFya2VyLCBjbG9zZSBlbSBhbmQgc3Ryb25nLgoJCQkJCWFycmF5X3NoaWZ0KCR0b2tlbl9zdGFjayk7CgkJCQkJJHNwYW4gPSBhcnJheV9zaGlmdCgkdGV4dF9zdGFjayk7CgkJCQkJJHNwYW4gPSAkdGhpcy0+cnVuU3BhbkdhbXV0KCRzcGFuKTsKCQkJCQkkc3BhbiA9ICI8c3Ryb25nPjxlbT4kc3BhbjwvZW0+PC9zdHJvbmc+IjsKCQkJCQkkdGV4dF9zdGFja1swXSAuPSAkdGhpcy0+aGFzaFBhcnQoJHNwYW4pOwoJCQkJCSRlbSA9ICcnOwoJCQkJCSRzdHJvbmcgPSAnJzsKCQkJCX0gZWxzZSB7CgkJCQkJIyBPdGhlciBjbG9zaW5nIG1hcmtlcjogY2xvc2Ugb25lIGVtIG9yIHN0cm9uZyBhbmQKCQkJCQkjIGNoYW5nZSBjdXJyZW50IHRva2VuIHN0YXRlIHRvIG1hdGNoIHRoZSBvdGhlcgoJCQkJCSR0b2tlbl9zdGFja1swXSA9IHN0cl9yZXBlYXQoJHRva2VuezB9LCAzLSR0b2tlbl9sZW4pOwoJCQkJCSR0YWcgPSAkdG9rZW5fbGVuID09IDIgPyAic3Ryb25nIiA6ICJlbSI7CgkJCQkJJHNwYW4gPSAkdGV4dF9zdGFja1swXTsKCQkJCQkkc3BhbiA9ICR0aGlzLT5ydW5TcGFuR2FtdXQoJHNwYW4pOwoJCQkJCSRzcGFuID0gIjwkdGFnPiRzcGFuPC8kdGFnPiI7CgkJCQkJJHRleHRfc3RhY2tbMF0gPSAkdGhpcy0+aGFzaFBhcnQoJHNwYW4pOwoJCQkJCSQkdGFnID0gJyc7ICMgJCR0YWcgc3RhbmRzIGZvciAkZW0gb3IgJHN0cm9uZwoJCQkJfQoJCQkJJHRyZWVfY2hhcl9lbSA9IGZhbHNlOwoJCQl9IGVsc2UgaWYgKCR0b2tlbl9sZW4gPT0gMykgewoJCQkJaWYgKCRlbSkgewoJCQkJCSMgUmVhY2hlZCBjbG9zaW5nIG1hcmtlciBmb3IgYm90aCBlbSBhbmQgc3Ryb25nLgoJCQkJCSMgQ2xvc2luZyBzdHJvbmcgbWFya2VyOgoJCQkJCWZvciAoJGkgPSAwOyAkaSA8IDI7ICsrJGkpIHsKCQkJCQkJJHNoaWZ0ZWRfdG9rZW4gPSBhcnJheV9zaGlmdCgkdG9rZW5fc3RhY2spOwoJCQkJCQkkdGFnID0gc3RybGVuKCRzaGlmdGVkX3Rva2VuKSA9PSAyID8gInN0cm9uZyIgOiAiZW0iOwoJCQkJCQkkc3BhbiA9IGFycmF5X3NoaWZ0KCR0ZXh0X3N0YWNrKTsKCQkJCQkJJHNwYW4gPSAkdGhpcy0+cnVuU3BhbkdhbXV0KCRzcGFuKTsKCQkJCQkJJHNwYW4gPSAiPCR0YWc+JHNwYW48LyR0YWc+IjsKCQkJCQkJJHRleHRfc3RhY2tbMF0gLj0gJHRoaXMtPmhhc2hQYXJ0KCRzcGFuKTsKCQkJCQkJJCR0YWcgPSAnJzsgIyAkJHRhZyBzdGFuZHMgZm9yICRlbSBvciAkc3Ryb25nCgkJCQkJfQoJCQkJfSBlbHNlIHsKCQkJCQkjIFJlYWNoZWQgb3BlbmluZyB0aHJlZS1jaGFyIGVtcGhhc2lzIG1hcmtlci4gUHVzaCBvbiB0b2tlbiAKCQkJCQkjIHN0YWNrOyB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIHNwZWNpYWwgY29uZGl0aW9uIGFib3ZlLgoJCQkJCSRlbSA9ICR0b2tlbnswfTsKCQkJCQkkc3Ryb25nID0gIiRlbSRlbSI7CgkJCQkJYXJyYXlfdW5zaGlmdCgkdG9rZW5fc3RhY2ssICR0b2tlbik7CgkJCQkJYXJyYXlfdW5zaGlmdCgkdGV4dF9zdGFjaywgJycpOwoJCQkJCSR0cmVlX2NoYXJfZW0gPSB0cnVlOwoJCQkJfQoJCQl9IGVsc2UgaWYgKCR0b2tlbl9sZW4gPT0gMikgewoJCQkJaWYgKCRzdHJvbmcpIHsKCQkJCQkjIFVud2luZCBhbnkgZGFuZ2xpbmcgZW1waGFzaXMgbWFya2VyOgoJCQkJCWlmIChzdHJsZW4oJHRva2VuX3N0YWNrWzBdKSA9PSAxKSB7CgkJCQkJCSR0ZXh0X3N0YWNrWzFdIC49IGFycmF5X3NoaWZ0KCR0b2tlbl9zdGFjayk7CgkJCQkJCSR0ZXh0X3N0YWNrWzBdIC49IGFycmF5X3NoaWZ0KCR0ZXh0X3N0YWNrKTsKCQkJCQl9CgkJCQkJIyBDbG9zaW5nIHN0cm9uZyBtYXJrZXI6CgkJCQkJYXJyYXlfc2hpZnQoJHRva2VuX3N0YWNrKTsKCQkJCQkkc3BhbiA9IGFycmF5X3NoaWZ0KCR0ZXh0X3N0YWNrKTsKCQkJCQkkc3BhbiA9ICR0aGlzLT5ydW5TcGFuR2FtdXQoJHNwYW4pOwoJCQkJCSRzcGFuID0gIjxzdHJvbmc+JHNwYW48L3N0cm9uZz4iOwoJCQkJCSR0ZXh0X3N0YWNrWzBdIC49ICR0aGlzLT5oYXNoUGFydCgkc3Bhbik7CgkJCQkJJHN0cm9uZyA9ICcnOwoJCQkJfSBlbHNlIHsKCQkJCQlhcnJheV91bnNoaWZ0KCR0b2tlbl9zdGFjaywgJHRva2VuKTsKCQkJCQlhcnJheV91bnNoaWZ0KCR0ZXh0X3N0YWNrLCAnJyk7CgkJCQkJJHN0cm9uZyA9ICR0b2tlbjsKCQkJCX0KCQkJfSBlbHNlIHsKCQkJCSMgSGVyZSAkdG9rZW5fbGVuID09IDEKCQkJCWlmICgkZW0pIHsKCQkJCQlpZiAoc3RybGVuKCR0b2tlbl9zdGFja1swXSkgPT0gMSkgewoJCQkJCQkjIENsb3NpbmcgZW1waGFzaXMgbWFya2VyOgoJCQkJCQlhcnJheV9zaGlmdCgkdG9rZW5fc3RhY2spOwoJCQkJCQkkc3BhbiA9IGFycmF5X3NoaWZ0KCR0ZXh0X3N0YWNrKTsKCQkJCQkJJHNwYW4gPSAkdGhpcy0+cnVuU3BhbkdhbXV0KCRzcGFuKTsKCQkJCQkJJHNwYW4gPSAiPGVtPiRzcGFuPC9lbT4iOwoJCQkJCQkkdGV4dF9zdGFja1swXSAuPSAkdGhpcy0+aGFzaFBhcnQoJHNwYW4pOwoJCQkJCQkkZW0gPSAnJzsKCQkJCQl9IGVsc2UgewoJCQkJCQkkdGV4dF9zdGFja1swXSAuPSAkdG9rZW47CgkJCQkJfQoJCQkJfSBlbHNlIHsKCQkJCQlhcnJheV91bnNoaWZ0KCR0b2tlbl9zdGFjaywgJHRva2VuKTsKCQkJCQlhcnJheV91bnNoaWZ0KCR0ZXh0X3N0YWNrLCAnJyk7CgkJCQkJJGVtID0gJHRva2VuOwoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiAkdGV4dF9zdGFja1swXTsKCX0KCgoJcHJvdGVjdGVkIGZ1bmN0aW9uIGRvQmxvY2tRdW90ZXMoJHRleHQpIHsKCQkkdGV4dCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnLwoJCQkgICgJCQkJCQkJCSMgV3JhcCB3aG9sZSBtYXRjaCBpbiAkMQoJCQkJKD8+CgkJCQkgIF5bIF0qPlsgXT8JCQkjICI+IiBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lCgkJCQkJLitcbgkJCQkJIyByZXN0IG9mIHRoZSBmaXJzdCBsaW5lCgkJCQkgICguK1xuKSoJCQkJCSMgc3Vic2VxdWVudCBjb25zZWN1dGl2ZSBsaW5lcwoJCQkJICBcbioJCQkJCQkjIGJsYW5rcwoJCQkJKSsKCQkJICApCgkJCS94bScsCgkJCWFycmF5KCR0aGlzLCAnX2RvQmxvY2tRdW90ZXNfY2FsbGJhY2snKSwgJHRleHQpOwoKCQlyZXR1cm4gJHRleHQ7Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gX2RvQmxvY2tRdW90ZXNfY2FsbGJhY2soJG1hdGNoZXMpIHsKCQkkYnEgPSAkbWF0Y2hlc1sxXTsKCQkjIHRyaW0gb25lIGxldmVsIG9mIHF1b3RpbmcgLSB0cmltIHdoaXRlc3BhY2Utb25seSBsaW5lcwoJCSRicSA9IHByZWdfcmVwbGFjZSgnL15bIF0qPlsgXT98XlsgXSskL20nLCAnJywgJGJxKTsKCQkkYnEgPSAkdGhpcy0+cnVuQmxvY2tHYW11dCgkYnEpOwkJIyByZWN1cnNlCgoJCSRicSA9IHByZWdfcmVwbGFjZSgnL14vbScsICIgICIsICRicSk7CgkJIyBUaGVzZSBsZWFkaW5nIHNwYWNlcyBjYXVzZSBwcm9ibGVtIHdpdGggPHByZT4gY29udGVudCwgCgkJIyBzbyB3ZSBuZWVkIHRvIGZpeCB0aGF0OgoJCSRicSA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygneyhccyo8cHJlPi4rPzwvcHJlPil9c3gnLCAKCQkJYXJyYXkoJHRoaXMsICdfZG9CbG9ja1F1b3Rlc19jYWxsYmFjazInKSwgJGJxKTsKCgkJcmV0dXJuICJcbiIuICR0aGlzLT5oYXNoQmxvY2soIjxibG9ja3F1b3RlPlxuJGJxXG48L2Jsb2NrcXVvdGU+IikuIlxuXG4iOwoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9kb0Jsb2NrUXVvdGVzX2NhbGxiYWNrMigkbWF0Y2hlcykgewoJCSRwcmUgPSAkbWF0Y2hlc1sxXTsKCQkkcHJlID0gcHJlZ19yZXBsYWNlKCcvXiAgL20nLCAnJywgJHByZSk7CgkJcmV0dXJuICRwcmU7Cgl9CgoKCXByb3RlY3RlZCBmdW5jdGlvbiBmb3JtUGFyYWdyYXBocygkdGV4dCkgewoJIwoJIwlQYXJhbXM6CgkjCQkkdGV4dCAtIHN0cmluZyB0byBwcm9jZXNzIHdpdGggaHRtbCA8cD4gdGFncwoJIwoJCSMgU3RyaXAgbGVhZGluZyBhbmQgdHJhaWxpbmcgbGluZXM6CgkJJHRleHQgPSBwcmVnX3JlcGxhY2UoJy9cQVxuK3xcbitcei8nLCAnJywgJHRleHQpOwoKCQkkZ3JhZnMgPSBwcmVnX3NwbGl0KCcvXG57Mix9LycsICR0ZXh0LCAtMSwgUFJFR19TUExJVF9OT19FTVBUWSk7CgoJCSMKCQkjIFdyYXAgPHA+IHRhZ3MgYW5kIHVuaGFzaGlmeSBIVE1MIGJsb2NrcwoJCSMKCQlmb3JlYWNoICgkZ3JhZnMgYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkJaWYgKCFwcmVnX21hdGNoKCcvXkJceDFBWzAtOV0rQiQvJywgJHZhbHVlKSkgewoJCQkJIyBJcyBhIHBhcmFncmFwaC4KCQkJCSR2YWx1ZSA9ICR0aGlzLT5ydW5TcGFuR2FtdXQoJHZhbHVlKTsKCQkJCSR2YWx1ZSA9IHByZWdfcmVwbGFjZSgnL14oWyBdKikvJywgIjxwPiIsICR2YWx1ZSk7CgkJCQkkdmFsdWUgLj0gIjwvcD4iOwoJCQkJJGdyYWZzWyRrZXldID0gJHRoaXMtPnVuaGFzaCgkdmFsdWUpOwoJCQl9CgkJCWVsc2UgewoJCQkJIyBJcyBhIGJsb2NrLgoJCQkJIyBNb2RpZnkgZWxlbWVudHMgb2YgQGdyYWZzIGluLXBsYWNlLi4uCgkJCQkkZ3JhZiA9ICR2YWx1ZTsKCQkJCSRibG9jayA9ICR0aGlzLT5odG1sX2hhc2hlc1skZ3JhZl07CgkJCQkkZ3JhZiA9ICRibG9jazsKLy8JCQkJaWYgKHByZWdfbWF0Y2goJ3sKLy8JCQkJCVxBCi8vCQkJCQkoCQkJCQkJCSMgJDEgPSA8ZGl2PiB0YWcKLy8JCQkJCSAgPGRpdiAgXHMrCi8vCQkJCQkgIFtePl0qCi8vCQkJCQkgIFxiCi8vCQkJCQkgIG1hcmtkb3duXHMqPVxzKiAgKFtcJyJdKQkjCSQyID0gYXR0ciBxdW90ZSBjaGFyCi8vCQkJCQkgIDEKLy8JCQkJCSAgXDIKLy8JCQkJCSAgW14+XSoKLy8JCQkJCSAgPgovLwkJCQkJKQovLwkJCQkJKAkJCQkJCQkjICQzID0gY29udGVudHMKLy8JCQkJCS4qCi8vCQkJCQkpCi8vCQkJCQkoPC9kaXY+KQkJCQkJIyAkNCA9IGNsb3NpbmcgdGFnCi8vCQkJCQlcegovLwkJCQkJfXhzJywgJGJsb2NrLCAkbWF0Y2hlcykpCi8vCQkJCXsKLy8JCQkJCWxpc3QoLCAkZGl2X29wZW4sICwgJGRpdl9jb250ZW50LCAkZGl2X2Nsb3NlKSA9ICRtYXRjaGVzOwovLwovLwkJCQkJIyBXZSBjYW4ndCBjYWxsIE1hcmtkb3duKCksIGJlY2F1c2UgdGhhdCByZXNldHMgdGhlIGhhc2g7Ci8vCQkJCQkjIHRoYXQgaW5pdGlhbGl6YXRpb24gY29kZSBzaG91bGQgYmUgcHVsbGVkIGludG8gaXRzIG93biBzdWIsIHRob3VnaC4KLy8JCQkJCSRkaXZfY29udGVudCA9ICR0aGlzLT5oYXNoSFRNTEJsb2NrcygkZGl2X2NvbnRlbnQpOwovLwkJCQkJCi8vCQkJCQkjIFJ1biBkb2N1bWVudCBnYW11dCBtZXRob2RzIG9uIHRoZSBjb250ZW50LgovLwkJCQkJZm9yZWFjaCAoJHRoaXMtPmRvY3VtZW50X2dhbXV0IGFzICRtZXRob2QgPT4gJHByaW9yaXR5KSB7Ci8vCQkJCQkJJGRpdl9jb250ZW50ID0gJHRoaXMtPiRtZXRob2QoJGRpdl9jb250ZW50KTsKLy8JCQkJCX0KLy8KLy8JCQkJCSRkaXZfb3BlbiA9IHByZWdfcmVwbGFjZSgKLy8JCQkJCQkne1xzbWFya2Rvd25ccyo9XHMqKFtcJyJdKS4rP1wxfScsICcnLCAkZGl2X29wZW4pOwovLwovLwkJCQkJJGdyYWYgPSAkZGl2X29wZW4gLiAiXG4iIC4gJGRpdl9jb250ZW50IC4gIlxuIiAuICRkaXZfY2xvc2U7Ci8vCQkJCX0KCQkJCSRncmFmc1ska2V5XSA9ICRncmFmOwoJCQl9CgkJfQoKCQlyZXR1cm4gaW1wbG9kZSgiXG5cbiIsICRncmFmcyk7Cgl9CgoKCXByb3RlY3RlZCBmdW5jdGlvbiBlbmNvZGVBdHRyaWJ1dGUoJHRleHQpIHsKCSMKCSMgRW5jb2RlIHRleHQgZm9yIGEgZG91YmxlLXF1b3RlZCBIVE1MIGF0dHJpYnV0ZS4gVGhpcyBmdW5jdGlvbgoJIyBpcyAqbm90KiBzdWl0YWJsZSBmb3IgYXR0cmlidXRlcyBlbmNsb3NlZCBpbiBzaW5nbGUgcXVvdGVzLgoJIwoJCSR0ZXh0ID0gJHRoaXMtPmVuY29kZUFtcHNBbmRBbmdsZXMoJHRleHQpOwoJCSR0ZXh0ID0gc3RyX3JlcGxhY2UoJyInLCAnJnF1b3Q7JywgJHRleHQpOwoJCXJldHVybiAkdGV4dDsKCX0KCgoJcHJvdGVjdGVkIGZ1bmN0aW9uIGVuY29kZVVSTEF0dHJpYnV0ZSgkdXJsLCAmJHRleHQgPSBudWxsKSB7CgkjCgkjIEVuY29kZSB0ZXh0IGZvciBhIGRvdWJsZS1xdW90ZWQgSFRNTCBhdHRyaWJ1dGUgY29udGFpbmluZyBhIFVSTCwKCSMgYXBwbHlpbmcgdGhlIFVSTCBmaWx0ZXIgaWYgc2V0LiBBbHNvIGdlbmVyYXRlcyB0aGUgdGV4dHVhbAoJIyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIFVSTCAocmVtb3ZpbmcgbWFpbHRvOiBvciB0ZWw6KSBzdG9yaW5nIGl0IGluICR0ZXh0LgoJIyBUaGlzIGZ1bmN0aW9uIGlzICpub3QqIHN1aXRhYmxlIGZvciBhdHRyaWJ1dGVzIGVuY2xvc2VkIGluIHNpbmdsZSBxdW90ZXMuCgkjCgkJaWYgKCR0aGlzLT51cmxfZmlsdGVyX2Z1bmMpCgkJCSR1cmwgPSBjYWxsX3VzZXJfZnVuYygkdGhpcy0+dXJsX2ZpbHRlcl9mdW5jLCAkdXJsKTsKCgkJaWYgKHByZWdfbWF0Y2goJ3tebWFpbHRvOn1pJywgJHVybCkpCgkJCSR1cmwgPSAkdGhpcy0+ZW5jb2RlRW50aXR5T2JmdXNjYXRlZEF0dHJpYnV0ZSgkdXJsLCAkdGV4dCwgNyk7CgkJZWxzZSBpZiAocHJlZ19tYXRjaCgne150ZWw6fWknLCAkdXJsKSkKCQl7CgkJCSR1cmwgPSAkdGhpcy0+ZW5jb2RlQXR0cmlidXRlKCR1cmwpOwoJCQkkdGV4dCA9IHN1YnN0cigkdXJsLCA0KTsKCQl9CgkJZWxzZQoJCXsKCQkJJHVybCA9ICR0aGlzLT5lbmNvZGVBdHRyaWJ1dGUoJHVybCk7CgkJCSR0ZXh0ID0gJHVybDsKCQl9CgoJCXJldHVybiAkdXJsOwoJfQoJCgkKCXByb3RlY3RlZCBmdW5jdGlvbiBlbmNvZGVBbXBzQW5kQW5nbGVzKCR0ZXh0KSB7CgkjCgkjIFNtYXJ0IHByb2Nlc3NpbmcgZm9yIGFtcGVyc2FuZHMgYW5kIGFuZ2xlIGJyYWNrZXRzIHRoYXQgbmVlZCB0byAKCSMgYmUgZW5jb2RlZC4gVmFsaWQgY2hhcmFjdGVyIGVudGl0aWVzIGFyZSBsZWZ0IGFsb25lIHVubGVzcyB0aGUKCSMgbm8tZW50aXRpZXMgbW9kZSBpcyBzZXQuCgkjCgkJaWYgKCR0aGlzLT5ub19lbnRpdGllcykgewoJCQkkdGV4dCA9IHN0cl9yZXBsYWNlKCcmJywgJyZhbXA7JywgJHRleHQpOwoJCX0gZWxzZSB7CgkJCSMgQW1wZXJzYW5kLWVuY29kaW5nIGJhc2VkIGVudGlyZWx5IG9uIE5hdCBJcm9ucydzIEFtcHV0YXRvcgoJCQkjIE1UIHBsdWdpbjogPGh0dHA6Ly9idW1wcG8ubmV0L3Byb2plY3RzL2FtcHV0YXRvci8+CgkJCSR0ZXh0ID0gcHJlZ19yZXBsYWNlKCcvJig/ISM/W3hYXT8oPzpbMC05YS1mQS1GXSt8XHcrKTspLycsIAoJCQkJCQkJCScmYW1wOycsICR0ZXh0KTsKCQl9CgkJIyBFbmNvZGUgcmVtYWluaW5nIDwncwoJCSR0ZXh0ID0gc3RyX3JlcGxhY2UoJzwnLCAnJmx0OycsICR0ZXh0KTsKCgkJcmV0dXJuICR0ZXh0OwoJfQoKCglwcm90ZWN0ZWQgZnVuY3Rpb24gZG9BdXRvTGlua3MoJHRleHQpIHsKCQkkdGV4dCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnezwoKGh0dHBzP3xmdHB8ZGljdHx0ZWwpOlteXCciPlxzXSspPn1pJywKCQkJYXJyYXkoJHRoaXMsICdfZG9BdXRvTGlua3NfdXJsX2NhbGxiYWNrJyksICR0ZXh0KTsKCgkJIyBFbWFpbCBhZGRyZXNzZXM6IDxhZGRyZXNzQGRvbWFpbi5mb28+CgkJJHRleHQgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJ3sKCQkJPAoJCQkoPzptYWlsdG86KT8KCQkJKAoJCQkJKD86CgkJCQkJWy0hIyQlJlwnKisvPT9eX2Aue3x9flx3XHg4MC1ceEZGXSsKCQkJCXwKCQkJCQkiLio/IgoJCQkJKQoJCQkJXEAKCQkJCSg/OgoJCQkJCVstYS16MC05XHg4MC1ceEZGXSsoXC5bLWEtejAtOVx4ODAtXHhGRl0rKSpcLlthLXpdKwoJCQkJfAoJCQkJCVxbW1xkLmEtZkEtRjpdK1xdCSMgSVB2NCAmIElQdjYKCQkJCSkKCQkJKQoJCQk+CgkJCX14aScsCgkJCWFycmF5KCR0aGlzLCAnX2RvQXV0b0xpbmtzX2VtYWlsX2NhbGxiYWNrJyksICR0ZXh0KTsKCgkJcmV0dXJuICR0ZXh0OwoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9kb0F1dG9MaW5rc191cmxfY2FsbGJhY2soJG1hdGNoZXMpIHsKCQkkdXJsID0gJHRoaXMtPmVuY29kZVVSTEF0dHJpYnV0ZSgkbWF0Y2hlc1sxXSwgJHRleHQpOwoJCSRsaW5rID0gIjxhIGhyZWY9XCIkdXJsXCI+JHRleHQ8L2E+IjsKCQlyZXR1cm4gJHRoaXMtPmhhc2hQYXJ0KCRsaW5rKTsKCX0KCXByb3RlY3RlZCBmdW5jdGlvbiBfZG9BdXRvTGlua3NfZW1haWxfY2FsbGJhY2soJG1hdGNoZXMpIHsKCQkkYWRkciA9ICRtYXRjaGVzWzFdOwoJCSR1cmwgPSAkdGhpcy0+ZW5jb2RlVVJMQXR0cmlidXRlKCJtYWlsdG86JGFkZHIiLCAkdGV4dCk7CgkJJGxpbmsgPSAiPGEgaHJlZj1cIiR1cmxcIj4kdGV4dDwvYT4iOwoJCXJldHVybiAkdGhpcy0+aGFzaFBhcnQoJGxpbmspOwoJfQoKCglwcm90ZWN0ZWQgZnVuY3Rpb24gZW5jb2RlRW50aXR5T2JmdXNjYXRlZEF0dHJpYnV0ZSgkdGV4dCwgJiR0YWlsID0gbnVsbCwgJGhlYWRfbGVuZ3RoID0gMCkgewoJIwoJIwlJbnB1dDogc29tZSB0ZXh0IHRvIG9iZnVzY2F0ZSwgZS5nLiAibWFpbHRvOmZvb0BleGFtcGxlLmNvbSIKCSMKCSMJT3V0cHV0OiB0aGUgc2FtZSB0ZXh0IGJ1dCB3aXRoIG1vc3QgY2hhcmFjdGVycyBlbmNvZGVkIGFzIGVpdGhlciBhCgkjCQlkZWNpbWFsIG9yIGhleCBlbnRpdHksIGluIHRoZSBob3BlcyBvZiBmb2lsaW5nIG1vc3QgYWRkcmVzcwoJIwkJaGFydmVzdGluZyBzcGFtIGJvdHMuIEUuZy46CgkjCgkjICAgICAgICAmIzEwOTsmI3g2MTsmIzEwNTsmI3g2YzsmIzExNjsmI3g2ZjsmIzU4OyYjeDY2O28mIzExMTsKCSMgICAgICAgICYjeDQwOyYjMTAxOyYjeDc4OyYjOTc7JiN4NmQ7JiMxMTI7JiN4NmM7JiMxMDE7JiM0NjsmI3g2MzsmIzExMTsKCSMgICAgICAgICYjeDZkOwoJIwoJIwlOb3RlOiB0aGUgYWRkaXRpb25hbCBvdXRwdXQgJHRhaWwgaXMgYXNzaWduZWQgdGhlIHNhbWUgdmFsdWUgYXMgdGhlCgkjCW91cHV0LCBtaW51cyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgc3BlY2lmaWVkIGJ5ICRoZWFkX2xlbmd0aC4KCSMKCSMJQmFzZWQgYnkgYSBmaWx0ZXIgYnkgTWF0dGhldyBXaWNrbGluZSwgcG9zdGVkIHRvIEJCRWRpdC1UYWxrLgoJIyAgIFdpdGggc29tZSBvcHRpbWl6YXRpb25zIGJ5IE1pbGlhbiBXb2xmZi4gRm9yY2VkIGVuY29kaW5nIG9mIEhUTUwKCSMJYXR0cmlidXRlIHNwZWNpYWwgY2hhcmFjdGVycyBieSBBbGxhbiBPZGdhYXJkLgoJIwoJCWlmICgkdGV4dCA9PSAiIikgcmV0dXJuICR0YWlsID0gIiI7CgoJCSRjaGFycyA9IHByZWdfc3BsaXQoJy8oPzwhXikoPyEkKS8nLCAkdGV4dCk7CgkJJHNlZWQgPSAoaW50KWFicyhjcmMzMigkdGV4dCkgLyBzdHJsZW4oJHRleHQpKTsgIyBEZXRlcm1pbmlzdGljIHNlZWQuCgoJCWZvcmVhY2ggKCRjaGFycyBhcyAka2V5ID0+ICRjaGFyKSB7CgkJCSRvcmQgPSBvcmQoJGNoYXIpOwoJCQkjIElnbm9yZSBub24tYXNjaWkgY2hhcnMuCgkJCWlmICgkb3JkIDwgMTI4KSB7CgkJCQkkciA9ICgkc2VlZCAqICgxICsgJGtleSkpICUgMTAwOyAjIFBzZXVkby1yYW5kb20gZnVuY3Rpb24uCgkJCQkjIHJvdWdobHkgMTAlIHJhdywgNDUlIGhleCwgNDUlIGRlYwoJCQkJIyAnQCcgKm11c3QqIGJlIGVuY29kZWQuIEkgaW5zaXN0LgoJCQkJIyAnIicgYW5kICc+JyBoYXZlIHRvIGJlIGVuY29kZWQgaW5zaWRlIHRoZSBhdHRyaWJ1dGUKCQkJCWlmICgkciA+IDkwICYmIHN0cnBvcygnQCImPicsICRjaGFyKSA9PT0gZmFsc2UpIC8qIGRvIG5vdGhpbmcgKi87CgkJCQllbHNlIGlmICgkciA8IDQ1KSAkY2hhcnNbJGtleV0gPSAnJiN4Jy5kZWNoZXgoJG9yZCkuJzsnOwoJCQkJZWxzZSAgICAgICAgICAgICAgJGNoYXJzWyRrZXldID0gJyYjJy4kb3JkLic7JzsKCQkJfQoJCX0KCgkJJHRleHQgPSBpbXBsb2RlKCcnLCAkY2hhcnMpOwoJCSR0YWlsID0gJGhlYWRfbGVuZ3RoID8gaW1wbG9kZSgnJywgYXJyYXlfc2xpY2UoJGNoYXJzLCAkaGVhZF9sZW5ndGgpKSA6ICR0ZXh0OwoKCQlyZXR1cm4gJHRleHQ7Cgl9CgoKCXByb3RlY3RlZCBmdW5jdGlvbiBwYXJzZVNwYW4oJHN0cikgewoJIwoJIyBUYWtlIHRoZSBzdHJpbmcgJHN0ciBhbmQgcGFyc2UgaXQgaW50byB0b2tlbnMsIGhhc2hpbmcgZW1iZWRlZCBIVE1MLAoJIyBlc2NhcGVkIGNoYXJhY3RlcnMgYW5kIGhhbmRsaW5nIGNvZGUgc3BhbnMuCgkjCgkJJG91dHB1dCA9ICcnOwoJCQoJCSRzcGFuX3JlID0gJ3sKCQkJCSgKCQkJCQlcXFxcJy4kdGhpcy0+ZXNjYXBlX2NoYXJzX3JlLicKCQkJCXwKCQkJCQkoPzwhW2BcXFxcXSkKCQkJCQlgKwkJCQkJCSMgY29kZSBzcGFuIG1hcmtlcgoJCQknLiggJHRoaXMtPm5vX21hcmt1cCA/ICcnIDogJwoJCQkJfAoJCQkJCTwhLS0gICAgLio/ICAgICAtLT4JCSMgY29tbWVudAoJCQkJfAoJCQkJCTxcPy4qP1w/PiB8IDwlLio/JT4JCSMgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbgoJCQkJfAoJCQkJCTxbISRdP1stYS16QS1aMC05Ol9dKwkjIHJlZ3VsYXIgdGFncwoJCQkJCSg/PgoJCQkJCQlccwoJCQkJCQkoPz5bXiJcJz5dK3wiW14iXSoifFwnW15cJ10qXCcpKgoJCQkJCSk/CgkJCQkJPgoJCQkJfAoJCQkJCTxbLWEtekEtWjAtOTpfXStccyovPiAjIHhtbC1zdHlsZSBlbXB0eSB0YWcKCQkJCXwKCQkJCQk8L1stYS16QS1aMC05Ol9dK1xzKj4gIyBjbG9zaW5nIHRhZwoJCQknKS4nCgkJCQkpCgkJCQl9eHMnOwoKCQl3aGlsZSAoMSkgewoJCQkjCgkJCSMgRWFjaCBsb29wIGl0ZXJhdGlvbiBzZWFjaCBmb3IgZWl0aGVyIHRoZSBuZXh0IHRhZywgdGhlIG5leHQgCgkJCSMgb3Blbm5pbmcgY29kZSBzcGFuIG1hcmtlciwgb3IgdGhlIG5leHQgZXNjYXBlZCBjaGFyYWN0ZXIuIAoJCQkjIEVhY2ggdG9rZW4gaXMgdGhlbiBwYXNzZWQgdG8gaGFuZGxlU3BhblRva2VuLgoJCQkjCgkJCSRwYXJ0cyA9IHByZWdfc3BsaXQoJHNwYW5fcmUsICRzdHIsIDIsIFBSRUdfU1BMSVRfREVMSU1fQ0FQVFVSRSk7CgkJCQoJCQkjIENyZWF0ZSB0b2tlbiBmcm9tIHRleHQgcHJlY2VkaW5nIHRhZy4KCQkJaWYgKCRwYXJ0c1swXSAhPSAiIikgewoJCQkJJG91dHB1dCAuPSAkcGFydHNbMF07CgkJCX0KCQkJCgkJCSMgQ2hlY2sgaWYgd2UgcmVhY2ggdGhlIGVuZC4KCQkJaWYgKGlzc2V0KCRwYXJ0c1sxXSkpIHsKCQkJCSRvdXRwdXQgLj0gJHRoaXMtPmhhbmRsZVNwYW5Ub2tlbigkcGFydHNbMV0sICRwYXJ0c1syXSk7CgkJCQkkc3RyID0gJHBhcnRzWzJdOwoJCQl9CgkJCWVsc2UgewoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJCgkJcmV0dXJuICRvdXRwdXQ7Cgl9CgkKCQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGhhbmRsZVNwYW5Ub2tlbigkdG9rZW4sICYkc3RyKSB7CgkjCgkjIEhhbmRsZSAkdG9rZW4gcHJvdmlkZWQgYnkgcGFyc2VTcGFuIGJ5IGRldGVybWluaW5nIGl0cyBuYXR1cmUgYW5kIAoJIyByZXR1cm5pbmcgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgdGhhdCBzaG91bGQgcmVwbGFjZSBpdC4KCSMKCQlzd2l0Y2ggKCR0b2tlbnswfSkgewoJCQljYXNlICJcXCI6CgkJCQlyZXR1cm4gJHRoaXMtPmhhc2hQYXJ0KCImIyIuIG9yZCgkdG9rZW57MX0pLiAiOyIpOwoJCQljYXNlICJgIjoKCQkJCSMgU2VhcmNoIGZvciBlbmQgbWFya2VyIGluIHJlbWFpbmluZyB0ZXh0LgoJCQkJaWYgKHByZWdfbWF0Y2goJy9eKC4qP1teYF0pJy5wcmVnX3F1b3RlKCR0b2tlbikuJyg/IWApKC4qKSQvc20nLCAKCQkJCQkkc3RyLCAkbWF0Y2hlcykpCgkJCQl7CgkJCQkJJHN0ciA9ICRtYXRjaGVzWzJdOwoJCQkJCSRjb2Rlc3BhbiA9ICR0aGlzLT5tYWtlQ29kZVNwYW4oJG1hdGNoZXNbMV0pOwoJCQkJCXJldHVybiAkdGhpcy0+aGFzaFBhcnQoJGNvZGVzcGFuKTsKCQkJCX0KCQkJCXJldHVybiAkdG9rZW47IC8vIHJldHVybiBhcyB0ZXh0IHNpbmNlIG5vIGVuZGluZyBtYXJrZXIgZm91bmQuCgkJCWRlZmF1bHQ6CgkJCQlyZXR1cm4gJHRoaXMtPmhhc2hQYXJ0KCR0b2tlbik7CgkJfQoJfQoKCglwcm90ZWN0ZWQgZnVuY3Rpb24gb3V0ZGVudCgkdGV4dCkgewoJIwoJIyBSZW1vdmUgb25lIGxldmVsIG9mIGxpbmUtbGVhZGluZyB0YWJzIG9yIHNwYWNlcwoJIwoJCXJldHVybiBwcmVnX3JlcGxhY2UoJy9eKFx0fFsgXXsxLCcuJHRoaXMtPnRhYl93aWR0aC4nfSkvbScsICcnLCAkdGV4dCk7Cgl9CgoKCSMgU3RyaW5nIGxlbmd0aCBmdW5jdGlvbiBmb3IgZGV0YWIuIGBfaW5pdERldGFiYCB3aWxsIGNyZWF0ZSBhIGZ1bmN0aW9uIHRvIAoJIyBoYW5sZGUgVVRGLTggaWYgdGhlIGRlZmF1bHQgZnVuY3Rpb24gZG9lcyBub3QgZXhpc3QuCglwcm90ZWN0ZWQgJHV0Zjhfc3RybGVuID0gJ21iX3N0cmxlbic7CgkKCXByb3RlY3RlZCBmdW5jdGlvbiBkZXRhYigkdGV4dCkgewoJIwoJIyBSZXBsYWNlIHRhYnMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgYW1vdW50IG9mIHNwYWNlLgoJIwoJCSMgRm9yIGVhY2ggbGluZSB3ZSBzZXBhcmF0ZSB0aGUgbGluZSBpbiBibG9ja3MgZGVsZW1pdGVkIGJ5CgkJIyB0YWIgY2hhcmFjdGVycy4gVGhlbiB3ZSByZWNvbnN0cnVjdCBldmVyeSBsaW5lIGJ5IGFkZGluZyB0aGUgCgkJIyBhcHByb3ByaWF0ZSBudW1iZXIgb2Ygc3BhY2UgYmV0d2VlbiBlYWNoIGJsb2Nrcy4KCQkKCQkkdGV4dCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnL14uKlx0LiokL20nLAoJCQlhcnJheSgkdGhpcywgJ19kZXRhYl9jYWxsYmFjaycpLCAkdGV4dCk7CgoJCXJldHVybiAkdGV4dDsKCX0KCXByb3RlY3RlZCBmdW5jdGlvbiBfZGV0YWJfY2FsbGJhY2soJG1hdGNoZXMpIHsKCQkkbGluZSA9ICRtYXRjaGVzWzBdOwoJCSRzdHJsZW4gPSAkdGhpcy0+dXRmOF9zdHJsZW47ICMgc3RybGVuIGZ1bmN0aW9uIGZvciBVVEYtOC4KCQkKCQkjIFNwbGl0IGluIGJsb2Nrcy4KCQkkYmxvY2tzID0gZXhwbG9kZSgiXHQiLCAkbGluZSk7CgkJIyBBZGQgZWFjaCBibG9ja3MgdG8gdGhlIGxpbmUuCgkJJGxpbmUgPSAkYmxvY2tzWzBdOwoJCXVuc2V0KCRibG9ja3NbMF0pOyAjIERvIG5vdCBhZGQgZmlyc3QgYmxvY2sgdHdpY2UuCgkJZm9yZWFjaCAoJGJsb2NrcyBhcyAkYmxvY2spIHsKCQkJIyBDYWxjdWxhdGUgYW1vdW50IG9mIHNwYWNlLCBpbnNlcnQgc3BhY2VzLCBpbnNlcnQgYmxvY2suCgkJCSRhbW91bnQgPSAkdGhpcy0+dGFiX3dpZHRoIC0gCgkJCQkkc3RybGVuKCRsaW5lLCAnVVRGLTgnKSAlICR0aGlzLT50YWJfd2lkdGg7CgkJCSRsaW5lIC49IHN0cl9yZXBlYXQoIiAiLCAkYW1vdW50KSAuICRibG9jazsKCQl9CgkJcmV0dXJuICRsaW5lOwoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9pbml0RGV0YWIoKSB7CgkjCgkjIENoZWNrIGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBmdW5jdGlvbiBpbiB0aGUgYHV0Zjhfc3RybGVuYCBwcm9wZXJ0eQoJIyAoaW5pdGlhbGx5IGBtYl9zdHJsZW5gKS4gSWYgdGhlIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUsIGNyZWF0ZSBhIAoJIyBmdW5jdGlvbiB0aGF0IHdpbGwgbG9vc2VseSBjb3VudCB0aGUgbnVtYmVyIG9mIFVURi04IGNoYXJhY3RlcnMgd2l0aCBhCgkjIHJlZ3VsYXIgZXhwcmVzc2lvbi4KCSMKCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCR0aGlzLT51dGY4X3N0cmxlbikpIHJldHVybjsKCQkkdGhpcy0+dXRmOF9zdHJsZW4gPSBjcmVhdGVfZnVuY3Rpb24oJyR0ZXh0JywgJ3JldHVybiBwcmVnX21hdGNoX2FsbCgKCQkJIi9bXFxcXHgwMC1cXFxceEJGXXxbXFxcXHhDMC1cXFxceEZGXVtcXFxceDgwLVxcXFx4QkZdKi8iLCAKCQkJJHRleHQsICRtKTsnKTsKCX0KCgoJcHJvdGVjdGVkIGZ1bmN0aW9uIHVuaGFzaCgkdGV4dCkgewoJIwoJIyBTd2FwIGJhY2sgaW4gYWxsIHRoZSB0YWdzIGhhc2hlZCBieSBfSGFzaEhUTUxCbG9ja3MuCgkjCgkJcmV0dXJuIHByZWdfcmVwbGFjZV9jYWxsYmFjaygnLyguKVx4MUFbMC05XStcMS8nLCAKCQkJYXJyYXkoJHRoaXMsICdfdW5oYXNoX2NhbGxiYWNrJyksICR0ZXh0KTsKCX0KCXByb3RlY3RlZCBmdW5jdGlvbiBfdW5oYXNoX2NhbGxiYWNrKCRtYXRjaGVzKSB7CgkJcmV0dXJuICR0aGlzLT5odG1sX2hhc2hlc1skbWF0Y2hlc1swXV07Cgl9Cgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/Engines/Michelf/MarkdownExtra.inc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMgVXNlIHRoaXMgZmlsZSBpZiB5b3UgY2Fubm90IHVzZSBjbGFzcyBhdXRvbG9hZGluZy4gSXQgd2lsbCBpbmNsdWRlIGFsbCB0aGUKIyBmaWxlcyBuZWVkZWQgZm9yIHRoZSBNYXJrZG93bkV4dHJhIG1hcmtkb3duLgojCiMgVGFrZSBhIGxvb2sgYXQgdGhlIFBTUi0wLWNvbXBhdGlibGUgY2xhc3MgYXV0b2xvYWRpbmcgaW1wbGVtZW50YXRpb24KIyBpbiB0aGUgUmVhZG1lLnBocCBmaWxlIGlmIHlvdSB3YW50IGEgc2ltcGxlIGF1dG9sb2FkZXIgc2V0dXAuCgpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL01hcmtkb3duSW50ZXJmYWNlLnBocCc7CnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvTWFya2Rvd24ucGhwJzsKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9NYXJrZG93bkV4dHJhLnBocCc7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/Engines/Michelf/MarkdownExtra.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIwojIE1hcmtkb3duIEV4dHJhICAtICBBIHRleHQtdG8tSFRNTCBjb252ZXJzaW9uIHRvb2wgZm9yIHdlYiB3cml0ZXJzCiMKIyBQSFAgTWFya2Rvd24gRXh0cmEKIyBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxNSBNaWNoZWwgRm9ydGluICAKIyA8aHR0cHM6Ly9taWNoZWxmLmNhL3Byb2plY3RzL3BocC1tYXJrZG93bi8+CiMKIyBPcmlnaW5hbCBNYXJrZG93bgojIENvcHlyaWdodCAoYykgMjAwNC0yMDA2IEpvaG4gR3J1YmVyICAKIyA8aHR0cDovL2RhcmluZ2ZpcmViYWxsLm5ldC9wcm9qZWN0cy9tYXJrZG93bi8+CiMKbmFtZXNwYWNlIE1pY2hlbGY7CgoKIwojIE1hcmtkb3duIEV4dHJhIE1hcmtkb3duIENsYXNzCiMKCmNsYXNzIE1hcmtkb3duRXh0cmEgZXh0ZW5kcyBcTWljaGVsZlxNYXJrZG93biB7CgoJIyMjIENvbmZpZ3VyYXRpb24gVmFyaWFibGVzICMjIwoKCSMgUHJlZml4IGZvciBmb290bm90ZSBpZHMuCglwdWJsaWMgJGZuX2lkX3ByZWZpeCA9ICIiOwoJCgkjIE9wdGlvbmFsIHRpdGxlIGF0dHJpYnV0ZSBmb3IgZm9vdG5vdGUgbGlua3MgYW5kIGJhY2tsaW5rcy4KCXB1YmxpYyAkZm5fbGlua190aXRsZSA9ICIiOwoJcHVibGljICRmbl9iYWNrbGlua190aXRsZSA9ICIiOwoJCgkjIE9wdGlvbmFsIGNsYXNzIGF0dHJpYnV0ZSBmb3IgZm9vdG5vdGUgbGlua3MgYW5kIGJhY2tsaW5rcy4KCXB1YmxpYyAkZm5fbGlua19jbGFzcyA9ICJmb290bm90ZS1yZWYiOwoJcHVibGljICRmbl9iYWNrbGlua19jbGFzcyA9ICJmb290bm90ZS1iYWNrcmVmIjsKCgkjIENsYXNzIG5hbWUgZm9yIHRhYmxlIGNlbGwgYWxpZ25tZW50ICglJSByZXBsYWNlZCBsZWZ0L2NlbnRlci9yaWdodCkKCSMgRm9yIGluc3RhbmNlOiAnZ28tJSUnIGJlY29tZXMgJ2dvLWxlZnQnIG9yICdnby1yaWdodCcgb3IgJ2dvLWNlbnRlcicKCSMgSWYgZW1wdHksIHRoZSBhbGlnbiBhdHRyaWJ1dGUgaXMgdXNlZCBpbnN0ZWFkIG9mIGEgY2xhc3MgbmFtZS4KCXB1YmxpYyAkdGFibGVfYWxpZ25fY2xhc3NfdG1wbCA9ICcnOwoKCSMgT3B0aW9uYWwgY2xhc3MgcHJlZml4IGZvciBmZW5jZWQgY29kZSBibG9jay4KCXB1YmxpYyAkY29kZV9jbGFzc19wcmVmaXggPSAiIjsKCSMgQ2xhc3MgYXR0cmlidXRlIGZvciBjb2RlIGJsb2NrcyBnb2VzIG9uIHRoZSBgY29kZWAgdGFnOwoJIyBzZXR0aW5nIHRoaXMgdG8gdHJ1ZSB3aWxsIHB1dCBhdHRyaWJ1dGVzIG9uIHRoZSBgcHJlYCB0YWcgaW5zdGVhZC4KCXB1YmxpYyAkY29kZV9hdHRyX29uX3ByZSA9IGZhbHNlOwoJCgkjIFByZWRlZmluZWQgYWJicmV2aWF0aW9ucy4KCXB1YmxpYyAkcHJlZGVmX2FiYnIgPSBhcnJheSgpOwoKCSMjIyBNYXJrZG93biBJbXBsZW1lbnRhdGlvbiAjIyMKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7CgkjCgkjIENvbnN0cnVjdG9yIGZ1bmN0aW9uLiBJbml0aWFsaXplIHRoZSBtYXJrZG93biBvYmplY3QuCgkjCgkJIyBBZGQgZXh0cmEgZXNjYXBhYmxlIGNoYXJhY3RlcnMgYmVmb3JlIHBhcmVudCBjb25zdHJ1Y3RvciAKCQkjIGluaXRpYWxpemUgdGhlIHRhYmxlLgoJCSR0aGlzLT5lc2NhcGVfY2hhcnMgLj0gJzp8JzsKCQkKCQkjIEluc2VydCBleHRyYSBkb2N1bWVudCwgYmxvY2ssIGFuZCBzcGFuIHRyYW5zZm9ybWF0aW9ucy4gCgkJIyBQYXJlbnQgY29uc3RydWN0b3Igd2lsbCBkbyB0aGUgc29ydGluZy4KCQkkdGhpcy0+ZG9jdW1lbnRfZ2FtdXQgKz0gYXJyYXkoCgkJCSJkb0ZlbmNlZENvZGVCbG9ja3MiID0+IDUsCgkJCSJzdHJpcEZvb3Rub3RlcyIgICAgID0+IDE1LAoJCQkic3RyaXBBYmJyZXZpYXRpb25zIiA9PiAyNSwKCQkJImFwcGVuZEZvb3Rub3RlcyIgICAgPT4gNTAsCgkJCSk7CgkJJHRoaXMtPmJsb2NrX2dhbXV0ICs9IGFycmF5KAoJCQkiZG9GZW5jZWRDb2RlQmxvY2tzIiA9PiA1LAoJCQkiZG9UYWJsZXMiICAgICAgICAgICA9PiAxNSwKCQkJImRvRGVmTGlzdHMiICAgICAgICAgPT4gNDUsCgkJCSk7CgkJJHRoaXMtPnNwYW5fZ2FtdXQgKz0gYXJyYXkoCgkJCSJkb0Zvb3Rub3RlcyIgICAgICAgID0+IDUsCgkJCSJkb0FiYnJldmlhdGlvbnMiICAgID0+IDcwLAoJCQkpOwoJCQoJCSR0aGlzLT5lbmhhbmNlZF9vcmRlcmVkX2xpc3QgPSB0cnVlOwoJCXBhcmVudDo6X19jb25zdHJ1Y3QoKTsKCX0KCQoJCgkjIEV4dHJhIHZhcmlhYmxlcyB1c2VkIGR1cmluZyBleHRyYSB0cmFuc2Zvcm1hdGlvbnMuCglwcm90ZWN0ZWQgJGZvb3Rub3RlcyA9IGFycmF5KCk7Cglwcm90ZWN0ZWQgJGZvb3Rub3Rlc19vcmRlcmVkID0gYXJyYXkoKTsKCXByb3RlY3RlZCAkZm9vdG5vdGVzX3JlZl9jb3VudCA9IGFycmF5KCk7Cglwcm90ZWN0ZWQgJGZvb3Rub3Rlc19udW1iZXJzID0gYXJyYXkoKTsKCXByb3RlY3RlZCAkYWJicl9kZXNjaXB0aW9ucyA9IGFycmF5KCk7Cglwcm90ZWN0ZWQgJGFiYnJfd29yZF9yZSA9ICcnOwoJCgkjIEdpdmUgdGhlIGN1cnJlbnQgZm9vdG5vdGUgbnVtYmVyLgoJcHJvdGVjdGVkICRmb290bm90ZV9jb3VudGVyID0gMTsKCQoJCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0dXAoKSB7CgkjCgkjIFNldHRpbmcgdXAgRXh0cmEtc3BlY2lmaWMgdmFyaWFibGVzLgoJIwoJCXBhcmVudDo6c2V0dXAoKTsKCQkKCQkkdGhpcy0+Zm9vdG5vdGVzID0gYXJyYXkoKTsKCQkkdGhpcy0+Zm9vdG5vdGVzX29yZGVyZWQgPSBhcnJheSgpOwoJCSR0aGlzLT5mb290bm90ZXNfcmVmX2NvdW50ID0gYXJyYXkoKTsKCQkkdGhpcy0+Zm9vdG5vdGVzX251bWJlcnMgPSBhcnJheSgpOwoJCSR0aGlzLT5hYmJyX2Rlc2NpcHRpb25zID0gYXJyYXkoKTsKCQkkdGhpcy0+YWJicl93b3JkX3JlID0gJyc7CgkJJHRoaXMtPmZvb3Rub3RlX2NvdW50ZXIgPSAxOwoJCQoJCWZvcmVhY2ggKCR0aGlzLT5wcmVkZWZfYWJiciBhcyAkYWJicl93b3JkID0+ICRhYmJyX2Rlc2MpIHsKCQkJaWYgKCR0aGlzLT5hYmJyX3dvcmRfcmUpCgkJCQkkdGhpcy0+YWJicl93b3JkX3JlIC49ICd8JzsKCQkJJHRoaXMtPmFiYnJfd29yZF9yZSAuPSBwcmVnX3F1b3RlKCRhYmJyX3dvcmQpOwoJCQkkdGhpcy0+YWJicl9kZXNjaXB0aW9uc1skYWJicl93b3JkXSA9IHRyaW0oJGFiYnJfZGVzYyk7CgkJfQoJfQoJCglwcm90ZWN0ZWQgZnVuY3Rpb24gdGVhcmRvd24oKSB7CgkjCgkjIENsZWFyaW5nIEV4dHJhLXNwZWNpZmljIHZhcmlhYmxlcy4KCSMKCQkkdGhpcy0+Zm9vdG5vdGVzID0gYXJyYXkoKTsKCQkkdGhpcy0+Zm9vdG5vdGVzX29yZGVyZWQgPSBhcnJheSgpOwoJCSR0aGlzLT5mb290bm90ZXNfcmVmX2NvdW50ID0gYXJyYXkoKTsKCQkkdGhpcy0+Zm9vdG5vdGVzX251bWJlcnMgPSBhcnJheSgpOwoJCSR0aGlzLT5hYmJyX2Rlc2NpcHRpb25zID0gYXJyYXkoKTsKCQkkdGhpcy0+YWJicl93b3JkX3JlID0gJyc7CgkJCgkJcGFyZW50Ojp0ZWFyZG93bigpOwoJfQoJCgkKCSMjIyBFeHRyYSBBdHRyaWJ1dGUgTWFya2Rvd24gIyMjCgoJIyBFeHByZXNzaW9uIHRvIHVzZSB0byBjYXRjaCBhdHRyaWJ1dGVzIChpbmNsdWRlcyB0aGUgYnJhY2VzKQoJcHJvdGVjdGVkICRpZF9jbGFzc19hdHRyX2NhdGNoX3JlID0gJ1x7KCg/OlsgXSpbIy5hLXpdWy1fOmEtekEtWjAtOT1dKyl7MSx9KVsgXSpcfSc7CgkjIEV4cHJlc3Npb24gdG8gdXNlIHdoZW4gcGFyc2luZyBpbiBhIGNvbnRleHQgd2hlbiBubyBjYXB0dXJlIGlzIGRlc2lyZWQKCXByb3RlY3RlZCAkaWRfY2xhc3NfYXR0cl9ub2NhdGNoX3JlID0gJ1x7KD86WyBdKlsjLmEtel1bLV86YS16QS1aMC05PV0rKXsxLH1bIF0qXH0nOwoKCXByb3RlY3RlZCBmdW5jdGlvbiBkb0V4dHJhQXR0cmlidXRlcygkdGFnX25hbWUsICRhdHRyLCAkZGVmYXVsdElkVmFsdWUgPSBudWxsKSB7CgkjCgkjIFBhcnNlIGF0dHJpYnV0ZXMgY2F1Z2h0IGJ5IHRoZSAkdGhpcy0+aWRfY2xhc3NfYXR0cl9jYXRjaF9yZSBleHByZXNzaW9uCgkjIGFuZCByZXR1cm4gdGhlIEhUTUwtZm9ybWF0dGVkIGxpc3Qgb2YgYXR0cmlidXRlcy4KCSMKCSMgQ3VycmVudGx5IHN1cHBvcnRlZCBhdHRyaWJ1dGVzIGFyZSAuY2xhc3MgYW5kICNpZC4KCSMKCSMgSW4gYWRkaXRpb24sIHRoaXMgbWV0aG9kIGFsc28gc3VwcG9ydHMgc3VwcGx5aW5nIGEgZGVmYXVsdCBJZCB2YWx1ZSwKCSMgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHBvcHVsYXRlIHRoZSBpZCBhdHRyaWJ1dGUgaW4gY2FzZSBpdCB3YXMgbm90CgkjIG92ZXJyaWRkZW4uCgkJaWYgKGVtcHR5KCRhdHRyKSAmJiAhJGRlZmF1bHRJZFZhbHVlKSByZXR1cm4gIiI7CgkJCgkJIyBTcGxpdCBvbiBjb21wb25lbnRzCgkJcHJlZ19tYXRjaF9hbGwoJy9bIy5hLXpdWy1fOmEtekEtWjAtOT1dKy8nLCAkYXR0ciwgJG1hdGNoZXMpOwoJCSRlbGVtZW50cyA9ICRtYXRjaGVzWzBdOwoKCQkjIGhhbmRsZSBjbGFzc2VzIGFuZCBpZHMgKG9ubHkgZmlyc3QgaWQgdGFrZW4gaW50byBhY2NvdW50KQoJCSRjbGFzc2VzID0gYXJyYXkoKTsKCQkkYXR0cmlidXRlcyA9IGFycmF5KCk7CgkJJGlkID0gZmFsc2U7CgkJZm9yZWFjaCAoJGVsZW1lbnRzIGFzICRlbGVtZW50KSB7CgkJCWlmICgkZWxlbWVudHswfSA9PSAnLicpIHsKCQkJCSRjbGFzc2VzW10gPSBzdWJzdHIoJGVsZW1lbnQsIDEpOwoJCQl9IGVsc2UgaWYgKCRlbGVtZW50ezB9ID09ICcjJykgewoJCQkJaWYgKCRpZCA9PT0gZmFsc2UpICRpZCA9IHN1YnN0cigkZWxlbWVudCwgMSk7CgkJCX0gZWxzZSBpZiAoc3RycG9zKCRlbGVtZW50LCAnPScpID4gMCkgewoJCQkJJHBhcnRzID0gZXhwbG9kZSgnPScsICRlbGVtZW50LCAyKTsKCQkJCSRhdHRyaWJ1dGVzW10gPSAkcGFydHNbMF0gLiAnPSInIC4gJHBhcnRzWzFdIC4gJyInOwoJCQl9CgkJfQoKCQlpZiAoISRpZCkgJGlkID0gJGRlZmF1bHRJZFZhbHVlOwoKCQkjIGNvbXBvc2UgYXR0cmlidXRlcyBhcyBzdHJpbmcKCQkkYXR0cl9zdHIgPSAiIjsKCQlpZiAoIWVtcHR5KCRpZCkpIHsKCQkJJGF0dHJfc3RyIC49ICcgaWQ9IicuJHRoaXMtPmVuY29kZUF0dHJpYnV0ZSgkaWQpIC4nIic7CgkJfQoJCWlmICghZW1wdHkoJGNsYXNzZXMpKSB7CgkJCSRhdHRyX3N0ciAuPSAnIGNsYXNzPSInLiBpbXBsb2RlKCIgIiwgJGNsYXNzZXMpIC4gJyInOwoJCX0KCQlpZiAoISR0aGlzLT5ub19tYXJrdXAgJiYgIWVtcHR5KCRhdHRyaWJ1dGVzKSkgewoJCQkkYXR0cl9zdHIgLj0gJyAnLmltcGxvZGUoIiAiLCAkYXR0cmlidXRlcyk7CgkJfQoJCXJldHVybiAkYXR0cl9zdHI7Cgl9CgoKCXByb3RlY3RlZCBmdW5jdGlvbiBzdHJpcExpbmtEZWZpbml0aW9ucygkdGV4dCkgewoJIwoJIyBTdHJpcHMgbGluayBkZWZpbml0aW9ucyBmcm9tIHRleHQsIHN0b3JlcyB0aGUgVVJMcyBhbmQgdGl0bGVzIGluCgkjIGhhc2ggcmVmZXJlbmNlcy4KCSMKCQkkbGVzc190aGFuX3RhYiA9ICR0aGlzLT50YWJfd2lkdGggLSAxOwoKCQkjIExpbmsgZGVmcyBhcmUgaW4gdGhlIGZvcm06IF5baWRdOiB1cmwgIm9wdGlvbmFsIHRpdGxlIgoJCSR0ZXh0ID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCd7CgkJCQkJCQleWyBdezAsJy4kbGVzc190aGFuX3RhYi4nfVxbKC4rKVxdWyBdPzoJIyBpZCA9ICQxCgkJCQkJCQkgIFsgXSoKCQkJCQkJCSAgXG4/CQkJCSMgbWF5YmUgKm9uZSogbmV3bGluZQoJCQkJCQkJICBbIF0qCgkJCQkJCQkoPzoKCQkJCQkJCSAgPCguKz8pPgkJCSMgdXJsID0gJDIKCQkJCQkJCXwKCQkJCQkJCSAgKFxTKz8pCQkJIyB1cmwgPSAkMwoJCQkJCQkJKQoJCQkJCQkJICBbIF0qCgkJCQkJCQkgIFxuPwkJCQkjIG1heWJlIG9uZSBuZXdsaW5lCgkJCQkJCQkgIFsgXSoKCQkJCQkJCSg/OgoJCQkJCQkJCSg/PD1ccykJCQkjIGxvb2tiZWhpbmQgZm9yIHdoaXRlc3BhY2UKCQkJCQkJCQlbIihdCgkJCQkJCQkJKC4qPykJCQkjIHRpdGxlID0gJDQKCQkJCQkJCQlbIildCgkJCQkJCQkJWyBdKgoJCQkJCQkJKT8JIyB0aXRsZSBpcyBvcHRpb25hbAoJCQkJCSg/OlsgXSogJy4kdGhpcy0+aWRfY2xhc3NfYXR0cl9jYXRjaF9yZS4nICk/ICAjICQ1ID0gZXh0cmEgaWQgJiBjbGFzcyBhdHRyCgkJCQkJCQkoPzpcbit8XFopCgkJCX14bScsCgkJCWFycmF5KCR0aGlzLCAnX3N0cmlwTGlua0RlZmluaXRpb25zX2NhbGxiYWNrJyksCgkJCSR0ZXh0KTsKCQlyZXR1cm4gJHRleHQ7Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gX3N0cmlwTGlua0RlZmluaXRpb25zX2NhbGxiYWNrKCRtYXRjaGVzKSB7CgkJJGxpbmtfaWQgPSBzdHJ0b2xvd2VyKCRtYXRjaGVzWzFdKTsKCQkkdXJsID0gJG1hdGNoZXNbMl0gPT0gJycgPyAkbWF0Y2hlc1szXSA6ICRtYXRjaGVzWzJdOwoJCSR0aGlzLT51cmxzWyRsaW5rX2lkXSA9ICR1cmw7CgkJJHRoaXMtPnRpdGxlc1skbGlua19pZF0gPSYgJG1hdGNoZXNbNF07CgkJJHRoaXMtPnJlZl9hdHRyWyRsaW5rX2lkXSA9ICR0aGlzLT5kb0V4dHJhQXR0cmlidXRlcygiIiwgJGR1bW15ID0mICRtYXRjaGVzWzVdKTsKCQlyZXR1cm4gJyc7ICMgU3RyaW5nIHRoYXQgd2lsbCByZXBsYWNlIHRoZSBibG9jawoJfQoKCgkjIyMgSFRNTCBCbG9jayBNYXJrZG93biAjIyMKCQoJIyBUYWdzIHRoYXQgYXJlIGFsd2F5cyB0cmVhdGVkIGFzIGJsb2NrIHRhZ3M6Cglwcm90ZWN0ZWQgJGJsb2NrX3RhZ3NfcmUgPSAncHxkaXZ8aFsxLTZdfGJsb2NrcXVvdGV8cHJlfHRhYmxlfGRsfG9sfHVsfGFkZHJlc3N8Zm9ybXxmaWVsZHNldHxpZnJhbWV8aHJ8bGVnZW5kfGFydGljbGV8c2VjdGlvbnxuYXZ8YXNpZGV8aGdyb3VwfGhlYWRlcnxmb290ZXJ8ZmlnY2FwdGlvbnxmaWd1cmUnOwoJCQkJCQkgICAKCSMgVGFncyB0cmVhdGVkIGFzIGJsb2NrIHRhZ3Mgb25seSBpZiB0aGUgb3BlbmluZyB0YWcgaXMgYWxvbmUgb24gaXRzIGxpbmU6Cglwcm90ZWN0ZWQgJGNvbnRleHRfYmxvY2tfdGFnc19yZSA9ICdzY3JpcHR8bm9zY3JpcHR8c3R5bGV8aW5zfGRlbHxpZnJhbWV8b2JqZWN0fHNvdXJjZXx0cmFja3xwYXJhbXxtYXRofHN2Z3xjYW52YXN8YXVkaW98dmlkZW8nOwoJCgkjIFRhZ3Mgd2hlcmUgbWFya2Rvd249IjEiIGRlZmF1bHQgdG8gc3BhbiBtb2RlOgoJcHJvdGVjdGVkICRjb250YWluX3NwYW5fdGFnc19yZSA9ICdwfGhbMS02XXxsaXxkZHxkdHx0ZHx0aHxsZWdlbmR8YWRkcmVzcyc7CgkKCSMgVGFncyB3aGljaCBtdXN0IG5vdCBoYXZlIHRoZWlyIGNvbnRlbnRzIG1vZGlmaWVkLCBubyBtYXR0ZXIgd2hlcmUgCgkjIHRoZXkgYXBwZWFyOgoJcHJvdGVjdGVkICRjbGVhbl90YWdzX3JlID0gJ3NjcmlwdHxzdHlsZXxtYXRofHN2Zyc7CgkKCSMgVGFncyB0aGF0IGRvIG5vdCBuZWVkIHRvIGJlIGNsb3NlZC4KCXByb3RlY3RlZCAkYXV0b19jbG9zZV90YWdzX3JlID0gJ2hyfGltZ3xwYXJhbXxzb3VyY2V8dHJhY2snOwoJCgoJcHJvdGVjdGVkIGZ1bmN0aW9uIGhhc2hIVE1MQmxvY2tzKCR0ZXh0KSB7CgkjCgkjIEhhc2hpZnkgSFRNTCBCbG9ja3MgYW5kICJjbGVhbiB0YWdzIi4KCSMKCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgZm9yIGJsb2NrLWxldmVsIEhUTUwgdGFncywgc3VjaCBhcyBoZWFkZXJzLAoJIyBsaXN0cywgYW5kIHRhYmxlcy4gVGhhdCdzIGJlY2F1c2Ugd2Ugc3RpbGwgd2FudCB0byB3cmFwIDxwPnMgYXJvdW5kCgkjICJwYXJhZ3JhcGhzIiB0aGF0IGFyZSB3cmFwcGVkIGluIG5vbi1ibG9jay1sZXZlbCB0YWdzLCBzdWNoIGFzIGFuY2hvcnMsCgkjIHBocmFzZSBlbXBoYXNpcywgYW5kIHNwYW5zLiBUaGUgbGlzdCBvZiB0YWdzIHdlJ3JlIGxvb2tpbmcgZm9yIGlzCgkjIGhhcmQtY29kZWQuCgkjCgkjIFRoaXMgd29ya3MgYnkgY2FsbGluZyBfSGFzaEhUTUxCbG9ja3NfSW5NYXJrZG93biwgd2hpY2ggdGhlbiBjYWxscwoJIyBfSGFzaEhUTUxCbG9ja3NfSW5IVE1MIHdoZW4gaXQgZW5jb3VudGVyIGJsb2NrIHRhZ3MuIFdoZW4gdGhlIG1hcmtkb3duPSIxIiAKCSMgYXR0cmlidXRlIGlzIGZvdW5kIHdpdGhpbiBhIHRhZywgX0hhc2hIVE1MQmxvY2tzX0luSFRNTCBjYWxscyBiYWNrCgkjICBfSGFzaEhUTUxCbG9ja3NfSW5NYXJrZG93biB0byBoYW5kbGUgdGhlIE1hcmtkb3duIHN5bnRheCB3aXRoaW4gdGhlIHRhZy4KCSMgVGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgY2FsbGluZyBlYWNoIG90aGVyLiBJdCdzIHJlY3Vyc2l2ZSEKCSMKCQlpZiAoJHRoaXMtPm5vX21hcmt1cCkgIHJldHVybiAkdGV4dDsKCgkJIwoJCSMgQ2FsbCB0aGUgSFRNTC1pbi1NYXJrZG93biBoYXNoZXIuCgkJIwoJCWxpc3QoJHRleHQsICkgPSAkdGhpcy0+X2hhc2hIVE1MQmxvY2tzX2luTWFya2Rvd24oJHRleHQpOwoJCQoJCXJldHVybiAkdGV4dDsKCX0KCXByb3RlY3RlZCBmdW5jdGlvbiBfaGFzaEhUTUxCbG9ja3NfaW5NYXJrZG93bigkdGV4dCwgJGluZGVudCA9IDAsCgkJCQkJCQkJCQkkZW5jbG9zaW5nX3RhZ19yZSA9ICcnLCAkc3BhbiA9IGZhbHNlKQoJewoJIwoJIyBQYXJzZSBtYXJrZG93biB0ZXh0LCBjYWxsaW5nIF9IYXNoSFRNTEJsb2Nrc19JbkhUTUwgZm9yIGJsb2NrIHRhZ3MuCgkjCgkjICogICAkaW5kZW50IGlzIHRoZSBudW1iZXIgb2Ygc3BhY2UgdG8gYmUgaWdub3JlZCB3aGVuIGNoZWNraW5nIGZvciBjb2RlIAoJIyAgICAgYmxvY2tzLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGlmIHdlIGRvbid0IHRha2UgdGhlIGluZGVudCBpbnRvIAoJIyAgICAgYWNjb3VudCwgc29tZXRoaW5nIGxpa2UgdGhpcyAod2hpY2ggbG9va3MgcmlnaHQpIHdvbid0IHdvcmsgYXMgZXhwZWN0ZWQ6CgkjCgkjICAgICA8ZGl2PgoJIyAgICAgICAgIDxkaXYgbWFya2Rvd249IjEiPgoJIyAgICAgICAgIEhlbGxvIFdvcmxkLiAgPC0tIElzIHRoaXMgYSBNYXJrZG93biBjb2RlIGJsb2NrIG9yIHRleHQ/CgkjICAgICAgICAgPC9kaXY+ICA8LS0gSXMgdGhpcyBhIE1hcmtkb3duIGNvZGUgYmxvY2sgb3IgYSByZWFsIHRhZz8KCSMgICAgIDxkaXY+CgkjCgkjICAgICBJZiB5b3UgZG9uJ3QgbGlrZSB0aGlzLCBqdXN0IGRvbid0IGluZGVudCB0aGUgdGFnIG9uIHdoaWNoCgkjICAgICB5b3UgYXBwbHkgdGhlIG1hcmtkb3duPSIxIiBhdHRyaWJ1dGUuCgkjCgkjICogICBJZiAkZW5jbG9zaW5nX3RhZ19yZSBpcyBub3QgZW1wdHksIHN0b3BzIGF0IHRoZSBmaXJzdCB1bm1hdGNoZWQgY2xvc2luZyAKCSMgICAgIHRhZyB3aXRoIHRoYXQgbmFtZS4gTmVzdGVkIHRhZ3Mgc3VwcG9ydGVkLgoJIwoJIyAqICAgSWYgJHNwYW4gaXMgdHJ1ZSwgdGV4dCBpbnNpZGUgbXVzdCB0cmVhdGVkIGFzIHNwYW4uIFNvIGFueSBkb3VibGUgCgkjICAgICBuZXdsaW5lIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBzaW5nbGUgbmV3bGluZSBzbyB0aGF0IGl0IGRvZXMgbm90IGNyZWF0ZSAKCSMgICAgIHBhcmFncmFwaHMuCgkjCgkjIFJldHVybnMgYW4gYXJyYXkgb2YgdGhhdCBmb3JtOiAoIHByb2Nlc3NlZCB0ZXh0ICwgcmVtYWluaW5nIHRleHQgKQoJIwoJCWlmICgkdGV4dCA9PT0gJycpIHJldHVybiBhcnJheSgnJywgJycpOwoKCQkjIFJlZ2V4IHRvIGNoZWNrIGZvciB0aGUgcHJlc2Vuc2Ugb2YgbmV3bGluZXMgYXJvdW5kIGEgYmxvY2sgdGFnLgoJCSRuZXdsaW5lX2JlZm9yZV9yZSA9ICcvKD86XlxuP3xcblxuKSokLyc7CgkJJG5ld2xpbmVfYWZ0ZXJfcmUgPSAKCQkJJ3sKCQkJCV4JCQkJCQkjIFN0YXJ0IG9mIHRleHQgZm9sbG93aW5nIHRoZSB0YWcuCgkJCQkoPz5bIF0qPCEtLS4qPy0tPik/CQkjIE9wdGlvbmFsIGNvbW1lbnQuCgkJCQlbIF0qXG4JCQkJCSMgTXVzdCBiZSBmb2xsb3dlZCBieSBuZXdsaW5lLgoJCQl9eHMnOwoJCQoJCSMgUmVnZXggdG8gbWF0Y2ggYW55IHRhZy4KCQkkYmxvY2tfdGFnX3JlID0KCQkJJ3sKCQkJCSgJCQkJCSMgJDI6IENhcHR1cmUgd2hvbGUgdGFnLgoJCQkJCTwvPwkJCQkJIyBBbnkgb3BlbmluZyBvciBjbG9zaW5nIHRhZy4KCQkJCQkJKD8+CQkJCSMgVGFnIG5hbWUuCgkJCQkJCQknLiR0aGlzLT5ibG9ja190YWdzX3JlLicJCQl8CgkJCQkJCQknLiR0aGlzLT5jb250ZXh0X2Jsb2NrX3RhZ3NfcmUuJwl8CgkJCQkJCQknLiR0aGlzLT5jbGVhbl90YWdzX3JlLicgICAgICAgIAl8CgkJCQkJCQkoPyFccyknLiRlbmNsb3NpbmdfdGFnX3JlLicKCQkJCQkJKQoJCQkJCQkoPzoKCQkJCQkJCSg/PVtccyJcJy9hLXpBLVowLTldKQkjIEFsbG93ZWQgY2hhcmFjdGVycyBhZnRlciB0YWcgbmFtZS4KCQkJCQkJCSg/PgoJCQkJCQkJCSIuKj8iCQl8CSMgRG91YmxlIHF1b3RlcyAoY2FuIGNvbnRhaW4gYD5gKQoJCQkJCQkJCVwnLio/XCcgICAJfAkjIFNpbmdsZSBxdW90ZXMgKGNhbiBjb250YWluIGA+YCkKCQkJCQkJCQkuKz8JCQkJIyBBbnl0aGluZyBidXQgcXVvdGVzIGFuZCBgPmAuCgkJCQkJCQkpKj8KCQkJCQkJKT8KCQkJCQk+CQkJCQkjIEVuZCBvZiB0YWcuCgkJCQl8CgkJCQkJPCEtLSAgICAuKj8gICAgIC0tPgkjIEhUTUwgQ29tbWVudAoJCQkJfAoJCQkJCTxcPy4qP1w/PiB8IDwlLio/JT4JIyBQcm9jZXNzaW5nIGluc3RydWN0aW9uCgkJCQl8CgkJCQkJPCFcW0NEQVRBXFsuKj9cXVxdPgkjIENEYXRhIEJsb2NrCgkJCQknLiAoICEkc3BhbiA/ICcgIyBJZiBub3QgaW4gc3Bhbi4KCQkJCXwKCQkJCQkjIEluZGVudGVkIGNvZGUgYmxvY2sKCQkJCQkoPzogXlsgXSpcbiB8IF4gfCBcblsgXSpcbiApCgkJCQkJWyBdeycuKCRpbmRlbnQrNCkuJ31bXlxuXSogXG4KCQkJCQkoPz4KCQkJCQkJKD86IFsgXXsnLigkaW5kZW50KzQpLid9W15cbl0qIHwgWyBdKiApIFxuCgkJCQkJKSoKCQkJCXwKCQkJCQkjIEZlbmNlZCBjb2RlIGJsb2NrIG1hcmtlcgoJCQkJCSg/PD0gXiB8IFxuICkKCQkJCQlbIF17MCwnLigkaW5kZW50KzMpLid9KD86fnszLH18YHszLH0pCgkJCQkJCQkJCVsgXSoKCQkJCQkoPzoKCQkJCQlcLj9bLV86YS16QS1aMC05XSsgIyBzdGFuZGFsb25lIGNsYXNzIG5hbWUKCQkJCQl8CgkJCQkJCScuJHRoaXMtPmlkX2NsYXNzX2F0dHJfbm9jYXRjaF9yZS4nICMgZXh0cmEgYXR0cmlidXRlcwoJCQkJCSk/CgkJCQkJWyBdKgoJCQkJCSg/PSBcbiApCgkJCQknIDogJycgKS4gJyAjIEVuZCAoaWYgbm90IGlzIHNwYW4pLgoJCQkJfAoJCQkJCSMgQ29kZSBzcGFuIG1hcmtlcgoJCQkJCSMgTm90ZSwgdGhpcyByZWdleCBuZWVkcyB0byBnbyBhZnRlciBiYWNrdGljayBmZW5jZWQKCQkJCQkjIGNvZGUgYmxvY2tzIGJ1dCBpdCBzaG91bGQgYWxzbyBiZSBrZXB0IG91dHNpZGUgb2YgdGhlCgkJCQkJIyAiaWYgbm90IGluIHNwYW4iIGNvbmRpdGlvbiBhZGRpbmcgYmFja3RpY2tzIHRvIHRoZSBtYXJrZG93bgoJCQkJCWArCgkJCQkpCgkJCX14cyc7CgoJCQoJCSRkZXB0aCA9IDA7CQkjIEN1cnJlbnQgZGVwdGggaW5zaWRlIHRoZSB0YWcgdHJlZS4KCQkkcGFyc2VkID0gIiI7CSMgUGFyc2VkIHRleHQgdGhhdCB3aWxsIGJlIHJldHVybmVkLgoKCQkjCgkJIyBMb29wIHRocm91Z2ggZXZlcnkgdGFnIHVudGlsIHdlIGZpbmQgdGhlIGNsb3NpbmcgdGFnIG9mIHRoZSBwYXJlbnQKCQkjIG9yIGxvb3AgdW50aWwgcmVhY2hpbmcgdGhlIGVuZCBvZiB0ZXh0IGlmIG5vIHBhcmVudCB0YWcgc3BlY2lmaWVkLgoJCSMKCQlkbyB7CgkJCSMKCQkJIyBTcGxpdCB0aGUgdGV4dCB1c2luZyB0aGUgZmlyc3QgJHRhZ19tYXRjaCBwYXR0ZXJuIGZvdW5kLgoJCQkjIFRleHQgYmVmb3JlICBwYXR0ZXJuIHdpbGwgYmUgZmlyc3QgaW4gdGhlIGFycmF5LCB0ZXh0IGFmdGVyCgkJCSMgcGF0dGVybiB3aWxsIGJlIGF0IHRoZSBlbmQsIGFuZCBiZXR3ZWVuIHdpbGwgYmUgYW55IGNhdGNoZXMgbWFkZSAKCQkJIyBieSB0aGUgcGF0dGVybi4KCQkJIwoJCQkkcGFydHMgPSBwcmVnX3NwbGl0KCRibG9ja190YWdfcmUsICR0ZXh0LCAyLCAKCQkJCQkJCQlQUkVHX1NQTElUX0RFTElNX0NBUFRVUkUpOwoJCQkKCQkJIyBJZiBpbiBNYXJrZG93biBzcGFuIG1vZGUsIGFkZCBhIGVtcHR5LXN0cmluZyBzcGFuLWxldmVsIGhhc2ggCgkJCSMgYWZ0ZXIgZWFjaCBuZXdsaW5lIHRvIHByZXZlbnQgdHJpZ2dlcmluZyBhbnkgYmxvY2sgZWxlbWVudC4KCQkJaWYgKCRzcGFuKSB7CgkJCQkkdm9pZCA9ICR0aGlzLT5oYXNoUGFydCgiIiwgJzonKTsKCQkJCSRuZXdsaW5lID0gIiR2b2lkXG4iOwoJCQkJJHBhcnRzWzBdID0gJHZvaWQgLiBzdHJfcmVwbGFjZSgiXG4iLCAkbmV3bGluZSwgJHBhcnRzWzBdKSAuICR2b2lkOwoJCQl9CgkJCQoJCQkkcGFyc2VkIC49ICRwYXJ0c1swXTsgIyBUZXh0IGJlZm9yZSBjdXJyZW50IHRhZy4KCQkJCgkJCSMgSWYgZW5kIG9mICR0ZXh0IGhhcyBiZWVuIHJlYWNoZWQuIFN0b3AgbG9vcC4KCQkJaWYgKGNvdW50KCRwYXJ0cykgPCAzKSB7CgkJCQkkdGV4dCA9ICIiOwoJCQkJYnJlYWs7CgkJCX0KCQkJCgkJCSR0YWcgID0gJHBhcnRzWzFdOyAjIFRhZyB0byBoYW5kbGUuCgkJCSR0ZXh0ID0gJHBhcnRzWzJdOyAjIFJlbWFpbmluZyB0ZXh0IGFmdGVyIGN1cnJlbnQgdGFnLgoJCQkkdGFnX3JlID0gcHJlZ19xdW90ZSgkdGFnKTsgIyBGb3IgdXNlIGluIGEgcmVndWxhciBleHByZXNzaW9uLgoJCQkKCQkJIwoJCQkjIENoZWNrIGZvcjogRmVuY2VkIGNvZGUgYmxvY2sgbWFya2VyLgoJCQkjIE5vdGU6IG5lZWQgdG8gcmVjaGVjayB0aGUgd2hvbGUgdGFnIHRvIGRpc2FtYmlndWF0ZSBiYWNrdGljawoJCQkjIGZlbmNlcyBmcm9tIGNvZGUgc3BhbnMKCQkJIwoJCQlpZiAocHJlZ19tYXRjaCgne15cbj8oWyBdezAsJy4oJGluZGVudCszKS4nfSkofnszLH18YHszLH0pWyBdKig/OlwuP1stXzphLXpBLVowLTldK3wnLiR0aGlzLT5pZF9jbGFzc19hdHRyX25vY2F0Y2hfcmUuJyk/WyBdKlxuPyR9JywgJHRhZywgJGNhcHR1cmUpKSB7CgkJCQkjIEZlbmNlZCBjb2RlIGJsb2NrIG1hcmtlcjogZmluZCBtYXRjaGluZyBlbmQgbWFya2VyLgoJCQkJJGZlbmNlX2luZGVudCA9IHN0cmxlbigkY2FwdHVyZVsxXSk7ICMgdXNlIGNhcHR1cmVkIGluZGVudCBpbiByZQoJCQkJJGZlbmNlX3JlID0gJGNhcHR1cmVbMl07ICMgdXNlIGNhcHR1cmVkIGZlbmNlIGluIHJlCgkJCQlpZiAocHJlZ19tYXRjaCgne14oPz4uKlxuKSo/WyBdeycuKCRmZW5jZV9pbmRlbnQpLid9Jy4kZmVuY2VfcmUuJ1sgXSooPzpcbnwkKX0nLCAkdGV4dCwKCQkJCQkkbWF0Y2hlcykpIAoJCQkJewoJCQkJCSMgRW5kIG1hcmtlciBmb3VuZDogcGFzcyB0ZXh0IHVuY2hhbmdlZCB1bnRpbCBtYXJrZXIuCgkJCQkJJHBhcnNlZCAuPSAkdGFnIC4gJG1hdGNoZXNbMF07CgkJCQkJJHRleHQgPSBzdWJzdHIoJHRleHQsIHN0cmxlbigkbWF0Y2hlc1swXSkpOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJIyBObyBlbmQgbWFya2VyOiBqdXN0IHNraXAgaXQuCgkJCQkJJHBhcnNlZCAuPSAkdGFnOwoJCQkJfQoJCQl9CgkJCSMKCQkJIyBDaGVjayBmb3I6IEluZGVudGVkIGNvZGUgYmxvY2suCgkJCSMKCQkJZWxzZSBpZiAoJHRhZ3swfSA9PSAiXG4iIHx8ICR0YWd7MH0gPT0gIiAiKSB7CgkJCQkjIEluZGVudGVkIGNvZGUgYmxvY2s6IHBhc3MgaXQgdW5jaGFuZ2VkLCB3aWxsIGJlIGhhbmRsZWQgCgkJCQkjIGxhdGVyLgoJCQkJJHBhcnNlZCAuPSAkdGFnOwoJCQl9CgkJCSMKCQkJIyBDaGVjayBmb3I6IENvZGUgc3BhbiBtYXJrZXIKCQkJIyBOb3RlOiBuZWVkIHRvIGNoZWNrIHRoaXMgYWZ0ZXIgYmFja3RpY2sgZmVuY2VkIGNvZGUgYmxvY2tzCgkJCSMKCQkJZWxzZSBpZiAoJHRhZ3swfSA9PSAiYCIpIHsKCQkJCSMgRmluZCBjb3JyZXNwb25kaW5nIGVuZCBtYXJrZXIuCgkJCQkkdGFnX3JlID0gcHJlZ19xdW90ZSgkdGFnKTsKCQkJCWlmIChwcmVnX21hdGNoKCd7Xig/Pi4rP3xcbig/IVxuKSkqPyg/PCFgKScuJHRhZ19yZS4nKD8hYCl9JywKCQkJCQkkdGV4dCwgJG1hdGNoZXMpKQoJCQkJewoJCQkJCSMgRW5kIG1hcmtlciBmb3VuZDogcGFzcyB0ZXh0IHVuY2hhbmdlZCB1bnRpbCBtYXJrZXIuCgkJCQkJJHBhcnNlZCAuPSAkdGFnIC4gJG1hdGNoZXNbMF07CgkJCQkJJHRleHQgPSBzdWJzdHIoJHRleHQsIHN0cmxlbigkbWF0Y2hlc1swXSkpOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJIyBVbm1hdGNoZWQgbWFya2VyOiBqdXN0IHNraXAgaXQuCgkJCQkJJHBhcnNlZCAuPSAkdGFnOwoJCQkJfQoJCQl9CgkJCSMKCQkJIyBDaGVjayBmb3I6IE9wZW5pbmcgQmxvY2sgbGV2ZWwgdGFnIG9yCgkJCSMgICAgICAgICAgICBPcGVuaW5nIENvbnRleHQgQmxvY2sgdGFnIChsaWtlIGlucyBhbmQgZGVsKSAKCQkJIyAgICAgICAgICAgICAgIHVzZWQgYXMgYSBibG9jayB0YWcgKHRhZyBpcyBhbG9uZSBvbiBpdCdzIGxpbmUpLgoJCQkjCgkJCWVsc2UgaWYgKHByZWdfbWF0Y2goJ3tePCg/OicuJHRoaXMtPmJsb2NrX3RhZ3NfcmUuJylcYn0nLCAkdGFnKSB8fAoJCQkJKAlwcmVnX21hdGNoKCd7XjwoPzonLiR0aGlzLT5jb250ZXh0X2Jsb2NrX3RhZ3NfcmUuJylcYn0nLCAkdGFnKSAmJgoJCQkJCXByZWdfbWF0Y2goJG5ld2xpbmVfYmVmb3JlX3JlLCAkcGFyc2VkKSAmJgoJCQkJCXByZWdfbWF0Y2goJG5ld2xpbmVfYWZ0ZXJfcmUsICR0ZXh0KQkpCgkJCQkpCgkJCXsKCQkJCSMgTmVlZCB0byBwYXJzZSB0YWcgYW5kIGZvbGxvd2luZyB0ZXh0IHVzaW5nIHRoZSBIVE1MIG1hcmtkb3duLgoJCQkJbGlzdCgkYmxvY2tfdGV4dCwgJHRleHQpID0gCgkJCQkJJHRoaXMtPl9oYXNoSFRNTEJsb2Nrc19pbkhUTUwoJHRhZyAuICR0ZXh0LCAiaGFzaEJsb2NrIiwgdHJ1ZSk7CgkJCQkKCQkJCSMgTWFrZSBzdXJlIGl0IHN0YXlzIG91dHNpZGUgb2YgYW55IHBhcmFncmFwaCBieSBhZGRpbmcgbmV3bGluZXMuCgkJCQkkcGFyc2VkIC49ICJcblxuJGJsb2NrX3RleHRcblxuIjsKCQkJfQoJCQkjCgkJCSMgQ2hlY2sgZm9yOiBDbGVhbiB0YWcgKGxpa2Ugc2NyaXB0LCBtYXRoKQoJCQkjICAgICAgICAgICAgSFRNTCBDb21tZW50cywgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMuCgkJCSMKCQkJZWxzZSBpZiAocHJlZ19tYXRjaCgne148KD86Jy4kdGhpcy0+Y2xlYW5fdGFnc19yZS4nKVxifScsICR0YWcpIHx8CgkJCQkkdGFnezF9ID09ICchJyB8fCAkdGFnezF9ID09ICc/JykKCQkJewoJCQkJIyBOZWVkIHRvIHBhcnNlIHRhZyBhbmQgZm9sbG93aW5nIHRleHQgdXNpbmcgdGhlIEhUTUwgbWFya2Rvd24uCgkJCQkjIChkb24ndCBjaGVjayBmb3IgbWFya2Rvd24gYXR0cmlidXRlKQoJCQkJbGlzdCgkYmxvY2tfdGV4dCwgJHRleHQpID0gCgkJCQkJJHRoaXMtPl9oYXNoSFRNTEJsb2Nrc19pbkhUTUwoJHRhZyAuICR0ZXh0LCAiaGFzaENsZWFuIiwgZmFsc2UpOwoJCQkJCgkJCQkkcGFyc2VkIC49ICRibG9ja190ZXh0OwoJCQl9CgkJCSMKCQkJIyBDaGVjayBmb3I6IFRhZyB3aXRoIHNhbWUgbmFtZSBhcyBlbmNsb3NpbmcgdGFnLgoJCQkjCgkJCWVsc2UgaWYgKCRlbmNsb3NpbmdfdGFnX3JlICE9PSAnJyAmJgoJCQkJIyBTYW1lIG5hbWUgYXMgZW5jbG9zaW5nIHRhZy4KCQkJCXByZWdfbWF0Y2goJ3tePC8/KD86Jy4kZW5jbG9zaW5nX3RhZ19yZS4nKVxifScsICR0YWcpKQoJCQl7CgkJCQkjCgkJCQkjIEluY3JlYXNlL2RlY3JlYXNlIG5lc3RlZCB0YWcgY291bnQuCgkJCQkjCgkJCQlpZiAoJHRhZ3sxfSA9PSAnLycpCQkJCQkJJGRlcHRoLS07CgkJCQllbHNlIGlmICgkdGFne3N0cmxlbigkdGFnKS0yfSAhPSAnLycpCSRkZXB0aCsrOwoKCQkJCWlmICgkZGVwdGggPCAwKSB7CgkJCQkJIwoJCQkJCSMgR29pbmcgb3V0IG9mIHBhcmVudCBlbGVtZW50LiBDbGVhbiB1cCBhbmQgYnJlYWsgc28gd2UKCQkJCQkjIHJldHVybiB0byB0aGUgY2FsbGluZyBmdW5jdGlvbi4KCQkJCQkjCgkJCQkJJHRleHQgPSAkdGFnIC4gJHRleHQ7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQkKCQkJCSRwYXJzZWQgLj0gJHRhZzsKCQkJfQoJCQllbHNlIHsKCQkJCSRwYXJzZWQgLj0gJHRhZzsKCQkJfQoJCX0gd2hpbGUgKCRkZXB0aCA+PSAwKTsKCQkKCQlyZXR1cm4gYXJyYXkoJHBhcnNlZCwgJHRleHQpOwoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9oYXNoSFRNTEJsb2Nrc19pbkhUTUwoJHRleHQsICRoYXNoX21ldGhvZCwgJG1kX2F0dHIpIHsKCSMKCSMgUGFyc2UgSFRNTCwgY2FsbGluZyBfSGFzaEhUTUxCbG9ja3NfSW5NYXJrZG93biBmb3IgYmxvY2sgdGFncy4KCSMKCSMgKiAgIENhbGxzICRoYXNoX21ldGhvZCB0byBjb252ZXJ0IGFueSBibG9ja3MuCgkjICogICBTdG9wcyB3aGVuIHRoZSBmaXJzdCBvcGVuaW5nIHRhZyBjbG9zZXMuCgkjICogICAkbWRfYXR0ciBpbmRpY2F0ZSBpZiB0aGUgdXNlIG9mIHRoZSBgbWFya2Rvd249IjEiYCBhdHRyaWJ1dGUgaXMgYWxsb3dlZC4KCSMgICAgIChpdCBpcyBub3QgaW5zaWRlIGNsZWFuIHRhZ3MpCgkjCgkjIFJldHVybnMgYW4gYXJyYXkgb2YgdGhhdCBmb3JtOiAoIHByb2Nlc3NlZCB0ZXh0ICwgcmVtYWluaW5nIHRleHQgKQoJIwoJCWlmICgkdGV4dCA9PT0gJycpIHJldHVybiBhcnJheSgnJywgJycpOwoJCQoJCSMgUmVnZXggdG8gbWF0Y2ggYG1hcmtkb3duYCBhdHRyaWJ1dGUgaW5zaWRlIG9mIGEgdGFnLgoJCSRtYXJrZG93bl9hdHRyX3JlID0gJwoJCQl7CgkJCQlccyoJCQkjIEVhdCB3aGl0ZXNwYWNlIGJlZm9yZSB0aGUgYG1hcmtkb3duYCBhdHRyaWJ1dGUKCQkJCW1hcmtkb3duCgkJCQlccyo9XHMqCgkJCQkoPz4KCQkJCQkoWyJcJ10pCQkjICQxOiBxdW90ZSBkZWxpbWl0ZXIJCQoJCQkJCSguKj8pCQkjICQyOiBhdHRyaWJ1dGUgdmFsdWUKCQkJCQlcMQkJCSMgbWF0Y2hpbmcgZGVsaW1pdGVyCQoJCQkJfAoJCQkJCShbXlxzPl0qKQkjICQzOiB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUKCQkJCSkKCQkJCSgpCQkJCSMgJDQ6IG1ha2UgJDMgYWx3YXlzIGRlZmluZWQgKGF2b2lkIHdhcm5pbmdzKQoJCQl9eHMnOwoJCQoJCSMgUmVnZXggdG8gbWF0Y2ggYW55IHRhZy4KCQkkdGFnX3JlID0gJ3sKCQkJCSgJCQkJCSMgJDI6IENhcHR1cmUgd2hvbGUgdGFnLgoJCQkJCTwvPwkJCQkJIyBBbnkgb3BlbmluZyBvciBjbG9zaW5nIHRhZy4KCQkJCQkJW1x3OiRdKwkJCSMgVGFnIG5hbWUuCgkJCQkJCSg/OgoJCQkJCQkJKD89W1xzIlwnL2EtekEtWjAtOV0pCSMgQWxsb3dlZCBjaGFyYWN0ZXJzIGFmdGVyIHRhZyBuYW1lLgoJCQkJCQkJKD8+CgkJCQkJCQkJIi4qPyIJCXwJIyBEb3VibGUgcXVvdGVzIChjYW4gY29udGFpbiBgPmApCgkJCQkJCQkJXCcuKj9cJyAgIAl8CSMgU2luZ2xlIHF1b3RlcyAoY2FuIGNvbnRhaW4gYD5gKQoJCQkJCQkJCS4rPwkJCQkjIEFueXRoaW5nIGJ1dCBxdW90ZXMgYW5kIGA+YC4KCQkJCQkJCSkqPwoJCQkJCQkpPwoJCQkJCT4JCQkJCSMgRW5kIG9mIHRhZy4KCQkJCXwKCQkJCQk8IS0tICAgIC4qPyAgICAgLS0+CSMgSFRNTCBDb21tZW50CgkJCQl8CgkJCQkJPFw/Lio/XD8+IHwgPCUuKj8lPgkjIFByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KCQkJCXwKCQkJCQk8IVxbQ0RBVEFcWy4qP1xdXF0+CSMgQ0RhdGEgQmxvY2sKCQkJCSkKCQkJfXhzJzsKCQkKCQkkb3JpZ2luYWxfdGV4dCA9ICR0ZXh0OwkJIyBTYXZlIG9yaWdpbmFsIHRleHQgaW4gY2FzZSBvZiBmYWxpdXJlLgoJCQoJCSRkZXB0aAkJPSAwOwkjIEN1cnJlbnQgZGVwdGggaW5zaWRlIHRoZSB0YWcgdHJlZS4KCQkkYmxvY2tfdGV4dAk9ICIiOwkjIFRlbXBvcmFyeSB0ZXh0IGhvbGRlciBmb3IgY3VycmVudCB0ZXh0LgoJCSRwYXJzZWQJCT0gIiI7CSMgUGFyc2VkIHRleHQgdGhhdCB3aWxsIGJlIHJldHVybmVkLgoKCQkjCgkJIyBHZXQgdGhlIG5hbWUgb2YgdGhlIHN0YXJ0aW5nIHRhZy4KCQkjIChUaGlzIHBhdHRlcm4gbWFrZXMgJGJhc2VfdGFnX25hbWVfcmUgc2FmZSB3aXRob3V0IHF1b3RpbmcuKQoJCSMKCQlpZiAocHJlZ19tYXRjaCgnL148KFtcdzokXSopXGIvJywgJHRleHQsICRtYXRjaGVzKSkKCQkJJGJhc2VfdGFnX25hbWVfcmUgPSAkbWF0Y2hlc1sxXTsKCgkJIwoJCSMgTG9vcCB0aHJvdWdoIGV2ZXJ5IHRhZyB1bnRpbCB3ZSBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsb3NpbmcgdGFnLgoJCSMKCQlkbyB7CgkJCSMKCQkJIyBTcGxpdCB0aGUgdGV4dCB1c2luZyB0aGUgZmlyc3QgJHRhZ19tYXRjaCBwYXR0ZXJuIGZvdW5kLgoJCQkjIFRleHQgYmVmb3JlICBwYXR0ZXJuIHdpbGwgYmUgZmlyc3QgaW4gdGhlIGFycmF5LCB0ZXh0IGFmdGVyCgkJCSMgcGF0dGVybiB3aWxsIGJlIGF0IHRoZSBlbmQsIGFuZCBiZXR3ZWVuIHdpbGwgYmUgYW55IGNhdGNoZXMgbWFkZSAKCQkJIyBieSB0aGUgcGF0dGVybi4KCQkJIwoJCQkkcGFydHMgPSBwcmVnX3NwbGl0KCR0YWdfcmUsICR0ZXh0LCAyLCBQUkVHX1NQTElUX0RFTElNX0NBUFRVUkUpOwoJCQkKCQkJaWYgKGNvdW50KCRwYXJ0cykgPCAzKSB7CgkJCQkjCgkJCQkjIEVuZCBvZiAkdGV4dCByZWFjaGVkIHdpdGggdW5iYWxlbmNlZCB0YWcocykuCgkJCQkjIEluIHRoYXQgY2FzZSwgd2UgcmV0dXJuIG9yaWdpbmFsIHRleHQgdW5jaGFuZ2VkIGFuZCBwYXNzIHRoZQoJCQkJIyBmaXJzdCBjaGFyYWN0ZXIgYXMgZmlsdGVyZWQgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIGluIHRoZSAKCQkJCSMgcGFyZW50IGZ1bmN0aW9uLgoJCQkJIwoJCQkJcmV0dXJuIGFycmF5KCRvcmlnaW5hbF90ZXh0ezB9LCBzdWJzdHIoJG9yaWdpbmFsX3RleHQsIDEpKTsKCQkJfQoJCQkKCQkJJGJsb2NrX3RleHQgLj0gJHBhcnRzWzBdOyAjIFRleHQgYmVmb3JlIGN1cnJlbnQgdGFnLgoJCQkkdGFnICAgICAgICAgPSAkcGFydHNbMV07ICMgVGFnIHRvIGhhbmRsZS4KCQkJJHRleHQgICAgICAgID0gJHBhcnRzWzJdOyAjIFJlbWFpbmluZyB0ZXh0IGFmdGVyIGN1cnJlbnQgdGFnLgoJCQkKCQkJIwoJCQkjIENoZWNrIGZvcjogQXV0by1jbG9zZSB0YWcgKGxpa2UgPGhyLz4pCgkJCSMJCQkgQ29tbWVudHMgYW5kIFByb2Nlc3NpbmcgSW5zdHJ1Y3Rpb25zLgoJCQkjCgkJCWlmIChwcmVnX21hdGNoKCd7XjwvPyg/OicuJHRoaXMtPmF1dG9fY2xvc2VfdGFnc19yZS4nKVxifScsICR0YWcpIHx8CgkJCQkkdGFnezF9ID09ICchJyB8fCAkdGFnezF9ID09ICc/JykKCQkJewoJCQkJIyBKdXN0IGFkZCB0aGUgdGFnIHRvIHRoZSBibG9jayBhcyBpZiBpdCB3YXMgdGV4dC4KCQkJCSRibG9ja190ZXh0IC49ICR0YWc7CgkJCX0KCQkJZWxzZSB7CgkJCQkjCgkJCQkjIEluY3JlYXNlL2RlY3JlYXNlIG5lc3RlZCB0YWcgY291bnQuIE9ubHkgZG8gc28gaWYKCQkJCSMgdGhlIHRhZydzIG5hbWUgbWF0Y2ggYmFzZSB0YWcncy4KCQkJCSMKCQkJCWlmIChwcmVnX21hdGNoKCd7XjwvPycuJGJhc2VfdGFnX25hbWVfcmUuJ1xifScsICR0YWcpKSB7CgkJCQkJaWYgKCR0YWd7MX0gPT0gJy8nKQkJCQkJCSRkZXB0aC0tOwoJCQkJCWVsc2UgaWYgKCR0YWd7c3RybGVuKCR0YWcpLTJ9ICE9ICcvJykJJGRlcHRoKys7CgkJCQl9CgkJCQkKCQkJCSMKCQkJCSMgQ2hlY2sgZm9yIGBtYXJrZG93bj0iMSJgIGF0dHJpYnV0ZSBhbmQgaGFuZGxlIGl0LgoJCQkJIwoJCQkJaWYgKCRtZF9hdHRyICYmIAoJCQkJCXByZWdfbWF0Y2goJG1hcmtkb3duX2F0dHJfcmUsICR0YWcsICRhdHRyX20pICYmCgkJCQkJcHJlZ19tYXRjaCgnL14xfGJsb2NrfHNwYW4kLycsICRhdHRyX21bMl0gLiAkYXR0cl9tWzNdKSkKCQkJCXsKCQkJCQkjIFJlbW92ZSBgbWFya2Rvd25gIGF0dHJpYnV0ZSBmcm9tIG9wZW5pbmcgdGFnLgoJCQkJCSR0YWcgPSBwcmVnX3JlcGxhY2UoJG1hcmtkb3duX2F0dHJfcmUsICcnLCAkdGFnKTsKCQkJCQkKCQkJCQkjIENoZWNrIGlmIHRleHQgaW5zaWRlIHRoaXMgdGFnIG11c3QgYmUgcGFyc2VkIGluIHNwYW4gbW9kZS4KCQkJCQkkdGhpcy0+bW9kZSA9ICRhdHRyX21bMl0gLiAkYXR0cl9tWzNdOwoJCQkJCSRzcGFuX21vZGUgPSAkdGhpcy0+bW9kZSA9PSAnc3BhbicgfHwgJHRoaXMtPm1vZGUgIT0gJ2Jsb2NrJyAmJgoJCQkJCQlwcmVnX21hdGNoKCd7XjwoPzonLiR0aGlzLT5jb250YWluX3NwYW5fdGFnc19yZS4nKVxifScsICR0YWcpOwoJCQkJCQoJCQkJCSMgQ2FsY3VsYXRlIGluZGVudCBiZWZvcmUgdGFnLgoJCQkJCWlmIChwcmVnX21hdGNoKCcvKD86XnxcbikoICo/KSg/ISApLio/JC8nLCAkYmxvY2tfdGV4dCwgJG1hdGNoZXMpKSB7CgkJCQkJCSRzdHJsZW4gPSAkdGhpcy0+dXRmOF9zdHJsZW47CgkJCQkJCSRpbmRlbnQgPSAkc3RybGVuKCRtYXRjaGVzWzFdLCAnVVRGLTgnKTsKCQkJCQl9IGVsc2UgewoJCQkJCQkkaW5kZW50ID0gMDsKCQkJCQl9CgkJCQkJCgkJCQkJIyBFbmQgcHJlY2VkaW5nIGJsb2NrIHdpdGggdGhpcyB0YWcuCgkJCQkJJGJsb2NrX3RleHQgLj0gJHRhZzsKCQkJCQkkcGFyc2VkIC49ICR0aGlzLT4kaGFzaF9tZXRob2QoJGJsb2NrX3RleHQpOwoJCQkJCQoJCQkJCSMgR2V0IGVuY2xvc2luZyB0YWcgbmFtZSBmb3IgdGhlIFBhcnNlTWFya2Rvd24gZnVuY3Rpb24uCgkJCQkJIyAoVGhpcyBwYXR0ZXJuIG1ha2VzICR0YWdfbmFtZV9yZSBzYWZlIHdpdGhvdXQgcXVvdGluZy4pCgkJCQkJcHJlZ19tYXRjaCgnL148KFtcdzokXSopXGIvJywgJHRhZywgJG1hdGNoZXMpOwoJCQkJCSR0YWdfbmFtZV9yZSA9ICRtYXRjaGVzWzFdOwoJCQkJCQoJCQkJCSMgUGFyc2UgdGhlIGNvbnRlbnQgdXNpbmcgdGhlIEhUTUwtaW4tTWFya2Rvd24gbWFya2Rvd24uCgkJCQkJbGlzdCAoJGJsb2NrX3RleHQsICR0ZXh0KQoJCQkJCQk9ICR0aGlzLT5faGFzaEhUTUxCbG9ja3NfaW5NYXJrZG93bigkdGV4dCwgJGluZGVudCwgCgkJCQkJCQkkdGFnX25hbWVfcmUsICRzcGFuX21vZGUpOwoJCQkJCQoJCQkJCSMgT3V0ZGVudCBtYXJrZG93biB0ZXh0LgoJCQkJCWlmICgkaW5kZW50ID4gMCkgewoJCQkJCQkkYmxvY2tfdGV4dCA9IHByZWdfcmVwbGFjZSgiL15bIF17MSwkaW5kZW50fS9tIiwgIiIsIAoJCQkJCQkJCQkJCQkJJGJsb2NrX3RleHQpOwoJCQkJCX0KCQkJCQkKCQkJCQkjIEFwcGVuZCB0YWcgY29udGVudCB0byBwYXJzZWQgdGV4dC4KCQkJCQlpZiAoISRzcGFuX21vZGUpCSRwYXJzZWQgLj0gIlxuXG4kYmxvY2tfdGV4dFxuXG4iOwoJCQkJCWVsc2UJCQkJJHBhcnNlZCAuPSAiJGJsb2NrX3RleHQiOwoJCQkJCQoJCQkJCSMgU3RhcnQgb3ZlciB3aXRoIGEgbmV3IGJsb2NrLgoJCQkJCSRibG9ja190ZXh0ID0gIiI7CgkJCQl9CgkJCQllbHNlICRibG9ja190ZXh0IC49ICR0YWc7CgkJCX0KCQkJCgkJfSB3aGlsZSAoJGRlcHRoID4gMCk7CgkJCgkJIwoJCSMgSGFzaCBsYXN0IGJsb2NrIHRleHQgdGhhdCB3YXNuJ3QgcHJvY2Vzc2VkIGluc2lkZSB0aGUgbG9vcC4KCQkjCgkJJHBhcnNlZCAuPSAkdGhpcy0+JGhhc2hfbWV0aG9kKCRibG9ja190ZXh0KTsKCQkKCQlyZXR1cm4gYXJyYXkoJHBhcnNlZCwgJHRleHQpOwoJfQoKCglwcm90ZWN0ZWQgZnVuY3Rpb24gaGFzaENsZWFuKCR0ZXh0KSB7CgkjCgkjIENhbGxlZCB3aGVuZXZlciBhIHRhZyBtdXN0IGJlIGhhc2hlZCB3aGVuIGEgZnVuY3Rpb24gaW5zZXJ0cyBhICJjbGVhbiIgdGFnCgkjIGluICR0ZXh0LCBpdCBwYXNzZXMgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIGFuZCBpcyBhdXRvbWF0aWNhbHkgZXNjYXBlZCwgCgkjIGJsb2NraW5nIGludmFsaWQgbmVzdGVkIG92ZXJsYXAuCgkjCgkJcmV0dXJuICR0aGlzLT5oYXNoUGFydCgkdGV4dCwgJ0MnKTsKCX0KCgoJcHJvdGVjdGVkIGZ1bmN0aW9uIGRvQW5jaG9ycygkdGV4dCkgewoJIwoJIyBUdXJuIE1hcmtkb3duIGxpbmsgc2hvcnRjdXRzIGludG8gWEhUTUwgPGE+IHRhZ3MuCgkjCgkJaWYgKCR0aGlzLT5pbl9hbmNob3IpIHJldHVybiAkdGV4dDsKCQkkdGhpcy0+aW5fYW5jaG9yID0gdHJ1ZTsKCQkKCQkjCgkJIyBGaXJzdCwgaGFuZGxlIHJlZmVyZW5jZS1zdHlsZSBsaW5rczogW2xpbmsgdGV4dF0gW2lkXQoJCSMKCQkkdGV4dCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnewoJCQkoCQkJCQkjIHdyYXAgd2hvbGUgbWF0Y2ggaW4gJDEKCQkJICBcWwoJCQkJKCcuJHRoaXMtPm5lc3RlZF9icmFja2V0c19yZS4nKQkjIGxpbmsgdGV4dCA9ICQyCgkJCSAgXF0KCgkJCSAgWyBdPwkJCQkjIG9uZSBvcHRpb25hbCBzcGFjZQoJCQkgICg/OlxuWyBdKik/CQkjIG9uZSBvcHRpb25hbCBuZXdsaW5lIGZvbGxvd2VkIGJ5IHNwYWNlcwoKCQkJICBcWwoJCQkJKC4qPykJCSMgaWQgPSAkMwoJCQkgIFxdCgkJCSkKCQkJfXhzJywKCQkJYXJyYXkoJHRoaXMsICdfZG9BbmNob3JzX3JlZmVyZW5jZV9jYWxsYmFjaycpLCAkdGV4dCk7CgoJCSMKCQkjIE5leHQsIGlubGluZS1zdHlsZSBsaW5rczogW2xpbmsgdGV4dF0odXJsICJvcHRpb25hbCB0aXRsZSIpCgkJIwoJCSR0ZXh0ID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCd7CgkJCSgJCQkJIyB3cmFwIHdob2xlIG1hdGNoIGluICQxCgkJCSAgXFsKCQkJCSgnLiR0aGlzLT5uZXN0ZWRfYnJhY2tldHNfcmUuJykJIyBsaW5rIHRleHQgPSAkMgoJCQkgIFxdCgkJCSAgXCgJCQkjIGxpdGVyYWwgcGFyZW4KCQkJCVsgXG5dKgoJCQkJKD86CgkJCQkJPCguKz8pPgkjIGhyZWYgPSAkMwoJCQkJfAoJCQkJCSgnLiR0aGlzLT5uZXN0ZWRfdXJsX3BhcmVudGhlc2lzX3JlLicpCSMgaHJlZiA9ICQ0CgkJCQkpCgkJCQlbIFxuXSoKCQkJCSgJCQkjICQ1CgkJCQkgIChbXCciXSkJIyBxdW90ZSBjaGFyID0gJDYKCQkJCSAgKC4qPykJCSMgVGl0bGUgPSAkNwoJCQkJICBcNgkJIyBtYXRjaGluZyBxdW90ZQoJCQkJICBbIFxuXSoJIyBpZ25vcmUgYW55IHNwYWNlcy90YWJzIGJldHdlZW4gY2xvc2luZyBxdW90ZSBhbmQgKQoJCQkJKT8JCQkjIHRpdGxlIGlzIG9wdGlvbmFsCgkJCSAgXCkKCQkJICAoPzpbIF0/ICcuJHRoaXMtPmlkX2NsYXNzX2F0dHJfY2F0Y2hfcmUuJyApPwkgIyAkOCA9IGlkL2NsYXNzIGF0dHJpYnV0ZXMKCQkJKQoJCQl9eHMnLAoJCQlhcnJheSgkdGhpcywgJ19kb0FuY2hvcnNfaW5saW5lX2NhbGxiYWNrJyksICR0ZXh0KTsKCgkJIwoJCSMgTGFzdCwgaGFuZGxlIHJlZmVyZW5jZS1zdHlsZSBzaG9ydGN1dHM6IFtsaW5rIHRleHRdCgkJIyBUaGVzZSBtdXN0IGNvbWUgbGFzdCBpbiBjYXNlIHlvdSd2ZSBhbHNvIGdvdCBbbGluayB0ZXh0XVsxXQoJCSMgb3IgW2xpbmsgdGV4dF0oL2ZvbykKCQkjCgkJJHRleHQgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJ3sKCQkJKAkJCQkJIyB3cmFwIHdob2xlIG1hdGNoIGluICQxCgkJCSAgXFsKCQkJCShbXlxbXF1dKykJCSMgbGluayB0ZXh0ID0gJDI7IGNhblwndCBjb250YWluIFsgb3IgXQoJCQkgIFxdCgkJCSkKCQkJfXhzJywKCQkJYXJyYXkoJHRoaXMsICdfZG9BbmNob3JzX3JlZmVyZW5jZV9jYWxsYmFjaycpLCAkdGV4dCk7CgoJCSR0aGlzLT5pbl9hbmNob3IgPSBmYWxzZTsKCQlyZXR1cm4gJHRleHQ7Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gX2RvQW5jaG9yc19yZWZlcmVuY2VfY2FsbGJhY2soJG1hdGNoZXMpIHsKCQkkd2hvbGVfbWF0Y2ggPSAgJG1hdGNoZXNbMV07CgkJJGxpbmtfdGV4dCAgID0gICRtYXRjaGVzWzJdOwoJCSRsaW5rX2lkICAgICA9JiAkbWF0Y2hlc1szXTsKCgkJaWYgKCRsaW5rX2lkID09ICIiKSB7CgkJCSMgZm9yIHNob3J0Y3V0IGxpbmtzIGxpa2UgW3RoaXNdW10gb3IgW3RoaXNdLgoJCQkkbGlua19pZCA9ICRsaW5rX3RleHQ7CgkJfQoJCQoJCSMgbG93ZXItY2FzZSBhbmQgdHVybiBlbWJlZGRlZCBuZXdsaW5lcyBpbnRvIHNwYWNlcwoJCSRsaW5rX2lkID0gc3RydG9sb3dlcigkbGlua19pZCk7CgkJJGxpbmtfaWQgPSBwcmVnX3JlcGxhY2UoJ3tbIF0/XG59JywgJyAnLCAkbGlua19pZCk7CgoJCWlmIChpc3NldCgkdGhpcy0+dXJsc1skbGlua19pZF0pKSB7CgkJCSR1cmwgPSAkdGhpcy0+dXJsc1skbGlua19pZF07CgkJCSR1cmwgPSAkdGhpcy0+ZW5jb2RlVVJMQXR0cmlidXRlKCR1cmwpOwoJCQkKCQkJJHJlc3VsdCA9ICI8YSBocmVmPVwiJHVybFwiIjsKCQkJaWYgKCBpc3NldCggJHRoaXMtPnRpdGxlc1skbGlua19pZF0gKSApIHsKCQkJCSR0aXRsZSA9ICR0aGlzLT50aXRsZXNbJGxpbmtfaWRdOwoJCQkJJHRpdGxlID0gJHRoaXMtPmVuY29kZUF0dHJpYnV0ZSgkdGl0bGUpOwoJCQkJJHJlc3VsdCAuPSAgIiB0aXRsZT1cIiR0aXRsZVwiIjsKCQkJfQoJCQlpZiAoaXNzZXQoJHRoaXMtPnJlZl9hdHRyWyRsaW5rX2lkXSkpCgkJCQkkcmVzdWx0IC49ICR0aGlzLT5yZWZfYXR0clskbGlua19pZF07CgkJCgkJCSRsaW5rX3RleHQgPSAkdGhpcy0+cnVuU3BhbkdhbXV0KCRsaW5rX3RleHQpOwoJCQkkcmVzdWx0IC49ICI+JGxpbmtfdGV4dDwvYT4iOwoJCQkkcmVzdWx0ID0gJHRoaXMtPmhhc2hQYXJ0KCRyZXN1bHQpOwoJCX0KCQllbHNlIHsKCQkJJHJlc3VsdCA9ICR3aG9sZV9tYXRjaDsKCQl9CgkJcmV0dXJuICRyZXN1bHQ7Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gX2RvQW5jaG9yc19pbmxpbmVfY2FsbGJhY2soJG1hdGNoZXMpIHsKCQkkd2hvbGVfbWF0Y2gJPSAgJG1hdGNoZXNbMV07CgkJJGxpbmtfdGV4dAkJPSAgJHRoaXMtPnJ1blNwYW5HYW11dCgkbWF0Y2hlc1syXSk7CgkJJHVybAkJCT0gICRtYXRjaGVzWzNdID09ICcnID8gJG1hdGNoZXNbNF0gOiAkbWF0Y2hlc1szXTsKCQkkdGl0bGUJCQk9JiAkbWF0Y2hlc1s3XTsKCQkkYXR0ciAgPSAkdGhpcy0+ZG9FeHRyYUF0dHJpYnV0ZXMoImEiLCAkZHVtbXkgPSYgJG1hdGNoZXNbOF0pOwoKCQkvLyBpZiB0aGUgVVJMIHdhcyBvZiB0aGUgZm9ybSA8cyBwIGEgYyBlIHM+IGl0IGdvdCBjYXVnaHQgYnkgdGhlIEhUTUwKCQkvLyB0YWcgbWFya2Rvd24gYW5kIGhhc2hlZC4gTmVlZCB0byByZXZlcnNlIHRoZSBwcm9jZXNzIGJlZm9yZSB1c2luZyB0aGUgVVJMLgoJCSR1bmhhc2hlZCA9ICR0aGlzLT51bmhhc2goJHVybCk7CgkJaWYgKCR1bmhhc2hlZCAhPSAkdXJsKQoJCQkkdXJsID0gcHJlZ19yZXBsYWNlKCcvXjwoLiopPiQvJywgJ1wxJywgJHVuaGFzaGVkKTsKCgkJJHVybCA9ICR0aGlzLT5lbmNvZGVVUkxBdHRyaWJ1dGUoJHVybCk7CgoJCSRyZXN1bHQgPSAiPGEgaHJlZj1cIiR1cmxcIiI7CgkJaWYgKGlzc2V0KCR0aXRsZSkpIHsKCQkJJHRpdGxlID0gJHRoaXMtPmVuY29kZUF0dHJpYnV0ZSgkdGl0bGUpOwoJCQkkcmVzdWx0IC49ICAiIHRpdGxlPVwiJHRpdGxlXCIiOwoJCX0KCQkkcmVzdWx0IC49ICRhdHRyOwoJCQoJCSRsaW5rX3RleHQgPSAkdGhpcy0+cnVuU3BhbkdhbXV0KCRsaW5rX3RleHQpOwoJCSRyZXN1bHQgLj0gIj4kbGlua190ZXh0PC9hPiI7CgoJCXJldHVybiAkdGhpcy0+aGFzaFBhcnQoJHJlc3VsdCk7Cgl9CgoKCXByb3RlY3RlZCBmdW5jdGlvbiBkb0ltYWdlcygkdGV4dCkgewoJIwoJIyBUdXJuIE1hcmtkb3duIGltYWdlIHNob3J0Y3V0cyBpbnRvIDxpbWc+IHRhZ3MuCgkjCgkJIwoJCSMgRmlyc3QsIGhhbmRsZSByZWZlcmVuY2Utc3R5bGUgbGFiZWxlZCBpbWFnZXM6ICFbYWx0IHRleHRdW2lkXQoJCSMKCQkkdGV4dCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnewoJCQkoCQkJCSMgd3JhcCB3aG9sZSBtYXRjaCBpbiAkMQoJCQkgICFcWwoJCQkJKCcuJHRoaXMtPm5lc3RlZF9icmFja2V0c19yZS4nKQkJIyBhbHQgdGV4dCA9ICQyCgkJCSAgXF0KCgkJCSAgWyBdPwkJCQkjIG9uZSBvcHRpb25hbCBzcGFjZQoJCQkgICg/OlxuWyBdKik/CQkjIG9uZSBvcHRpb25hbCBuZXdsaW5lIGZvbGxvd2VkIGJ5IHNwYWNlcwoKCQkJICBcWwoJCQkJKC4qPykJCSMgaWQgPSAkMwoJCQkgIFxdCgoJCQkpCgkJCX14cycsIAoJCQlhcnJheSgkdGhpcywgJ19kb0ltYWdlc19yZWZlcmVuY2VfY2FsbGJhY2snKSwgJHRleHQpOwoKCQkjCgkJIyBOZXh0LCBoYW5kbGUgaW5saW5lIGltYWdlczogICFbYWx0IHRleHRdKHVybCAib3B0aW9uYWwgdGl0bGUiKQoJCSMgRG9uJ3QgZm9yZ2V0OiBlbmNvZGUgKiBhbmQgXwoJCSMKCQkkdGV4dCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnewoJCQkoCQkJCSMgd3JhcCB3aG9sZSBtYXRjaCBpbiAkMQoJCQkgICFcWwoJCQkJKCcuJHRoaXMtPm5lc3RlZF9icmFja2V0c19yZS4nKQkJIyBhbHQgdGV4dCA9ICQyCgkJCSAgXF0KCQkJICBccz8JCQkjIE9uZSBvcHRpb25hbCB3aGl0ZXNwYWNlIGNoYXJhY3RlcgoJCQkgIFwoCQkJIyBsaXRlcmFsIHBhcmVuCgkJCQlbIFxuXSoKCQkJCSg/OgoJCQkJCTwoXFMqKT4JIyBzcmMgdXJsID0gJDMKCQkJCXwKCQkJCQkoJy4kdGhpcy0+bmVzdGVkX3VybF9wYXJlbnRoZXNpc19yZS4nKQkjIHNyYyB1cmwgPSAkNAoJCQkJKQoJCQkJWyBcbl0qCgkJCQkoCQkJIyAkNQoJCQkJICAoW1wnIl0pCSMgcXVvdGUgY2hhciA9ICQ2CgkJCQkgICguKj8pCQkjIHRpdGxlID0gJDcKCQkJCSAgXDYJCSMgbWF0Y2hpbmcgcXVvdGUKCQkJCSAgWyBcbl0qCgkJCQkpPwkJCSMgdGl0bGUgaXMgb3B0aW9uYWwKCQkJICBcKQoJCQkgICg/OlsgXT8gJy4kdGhpcy0+aWRfY2xhc3NfYXR0cl9jYXRjaF9yZS4nICk/CSAjICQ4ID0gaWQvY2xhc3MgYXR0cmlidXRlcwoJCQkpCgkJCX14cycsCgkJCWFycmF5KCR0aGlzLCAnX2RvSW1hZ2VzX2lubGluZV9jYWxsYmFjaycpLCAkdGV4dCk7CgoJCXJldHVybiAkdGV4dDsKCX0KCXByb3RlY3RlZCBmdW5jdGlvbiBfZG9JbWFnZXNfcmVmZXJlbmNlX2NhbGxiYWNrKCRtYXRjaGVzKSB7CgkJJHdob2xlX21hdGNoID0gJG1hdGNoZXNbMV07CgkJJGFsdF90ZXh0ICAgID0gJG1hdGNoZXNbMl07CgkJJGxpbmtfaWQgICAgID0gc3RydG9sb3dlcigkbWF0Y2hlc1szXSk7CgoJCWlmICgkbGlua19pZCA9PSAiIikgewoJCQkkbGlua19pZCA9IHN0cnRvbG93ZXIoJGFsdF90ZXh0KTsgIyBmb3Igc2hvcnRjdXQgbGlua3MgbGlrZSAhW3RoaXNdW10uCgkJfQoKCQkkYWx0X3RleHQgPSAkdGhpcy0+ZW5jb2RlQXR0cmlidXRlKCRhbHRfdGV4dCk7CgkJaWYgKGlzc2V0KCR0aGlzLT51cmxzWyRsaW5rX2lkXSkpIHsKCQkJJHVybCA9ICR0aGlzLT5lbmNvZGVVUkxBdHRyaWJ1dGUoJHRoaXMtPnVybHNbJGxpbmtfaWRdKTsKCQkJJHJlc3VsdCA9ICI8aW1nIHNyYz1cIiR1cmxcIiBhbHQ9XCIkYWx0X3RleHRcIiI7CgkJCWlmIChpc3NldCgkdGhpcy0+dGl0bGVzWyRsaW5rX2lkXSkpIHsKCQkJCSR0aXRsZSA9ICR0aGlzLT50aXRsZXNbJGxpbmtfaWRdOwoJCQkJJHRpdGxlID0gJHRoaXMtPmVuY29kZUF0dHJpYnV0ZSgkdGl0bGUpOwoJCQkJJHJlc3VsdCAuPSAgIiB0aXRsZT1cIiR0aXRsZVwiIjsKCQkJfQoJCQlpZiAoaXNzZXQoJHRoaXMtPnJlZl9hdHRyWyRsaW5rX2lkXSkpCgkJCQkkcmVzdWx0IC49ICR0aGlzLT5yZWZfYXR0clskbGlua19pZF07CgkJCSRyZXN1bHQgLj0gJHRoaXMtPmVtcHR5X2VsZW1lbnRfc3VmZml4OwoJCQkkcmVzdWx0ID0gJHRoaXMtPmhhc2hQYXJ0KCRyZXN1bHQpOwoJCX0KCQllbHNlIHsKCQkJIyBJZiB0aGVyZSdzIG5vIHN1Y2ggbGluayBJRCwgbGVhdmUgaW50YWN0OgoJCQkkcmVzdWx0ID0gJHdob2xlX21hdGNoOwoJCX0KCgkJcmV0dXJuICRyZXN1bHQ7Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gX2RvSW1hZ2VzX2lubGluZV9jYWxsYmFjaygkbWF0Y2hlcykgewoJCSR3aG9sZV9tYXRjaAk9ICRtYXRjaGVzWzFdOwoJCSRhbHRfdGV4dAkJPSAkbWF0Y2hlc1syXTsKCQkkdXJsCQkJPSAkbWF0Y2hlc1szXSA9PSAnJyA/ICRtYXRjaGVzWzRdIDogJG1hdGNoZXNbM107CgkJJHRpdGxlCQkJPSYgJG1hdGNoZXNbN107CgkJJGF0dHIgID0gJHRoaXMtPmRvRXh0cmFBdHRyaWJ1dGVzKCJpbWciLCAkZHVtbXkgPSYgJG1hdGNoZXNbOF0pOwoKCQkkYWx0X3RleHQgPSAkdGhpcy0+ZW5jb2RlQXR0cmlidXRlKCRhbHRfdGV4dCk7CgkJJHVybCA9ICR0aGlzLT5lbmNvZGVVUkxBdHRyaWJ1dGUoJHVybCk7CgkJJHJlc3VsdCA9ICI8aW1nIHNyYz1cIiR1cmxcIiBhbHQ9XCIkYWx0X3RleHRcIiI7CgkJaWYgKGlzc2V0KCR0aXRsZSkpIHsKCQkJJHRpdGxlID0gJHRoaXMtPmVuY29kZUF0dHJpYnV0ZSgkdGl0bGUpOwoJCQkkcmVzdWx0IC49ICAiIHRpdGxlPVwiJHRpdGxlXCIiOyAjICR0aXRsZSBhbHJlYWR5IHF1b3RlZAoJCX0KCQkkcmVzdWx0IC49ICRhdHRyOwoJCSRyZXN1bHQgLj0gJHRoaXMtPmVtcHR5X2VsZW1lbnRfc3VmZml4OwoKCQlyZXR1cm4gJHRoaXMtPmhhc2hQYXJ0KCRyZXN1bHQpOwoJfQoKCglwcm90ZWN0ZWQgZnVuY3Rpb24gZG9IZWFkZXJzKCR0ZXh0KSB7CgkjCgkjIFJlZGVmaW5lZCB0byBhZGQgaWQgYW5kIGNsYXNzIGF0dHJpYnV0ZSBzdXBwb3J0LgoJIwoJCSMgU2V0ZXh0LXN0eWxlIGhlYWRlcnM6CgkJIwkgIEhlYWRlciAxICB7I2hlYWRlcjF9CgkJIwkgID09PT09PT09CgkJIyAgCgkJIwkgIEhlYWRlciAyICB7I2hlYWRlcjIgLmNsYXNzMSAuY2xhc3MyfQoJCSMJICAtLS0tLS0tLQoJCSMKCQkkdGV4dCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygKCQkJJ3sKCQkJCSheLis/KQkJCQkJCQkJIyAkMTogSGVhZGVyIHRleHQKCQkJCSg/OlsgXSsgJy4kdGhpcy0+aWRfY2xhc3NfYXR0cl9jYXRjaF9yZS4nICk/CSAjICQzID0gaWQvY2xhc3MgYXR0cmlidXRlcwoJCQkJWyBdKlxuKD0rfC0rKVsgXSpcbisJCQkJIyAkMzogSGVhZGVyIGZvb3RlcgoJCQl9bXgnLAoJCQlhcnJheSgkdGhpcywgJ19kb0hlYWRlcnNfY2FsbGJhY2tfc2V0ZXh0JyksICR0ZXh0KTsKCgkJIyBhdHgtc3R5bGUgaGVhZGVyczoKCQkjCSMgSGVhZGVyIDEgICAgICAgIHsjaGVhZGVyMX0KCQkjCSMjIEhlYWRlciAyICAgICAgIHsjaGVhZGVyMn0KCQkjCSMjIEhlYWRlciAyIHdpdGggY2xvc2luZyBoYXNoZXMgIyMgIHsjaGVhZGVyMy5jbGFzczEuY2xhc3MyfQoJCSMJLi4uCgkJIwkjIyMjIyMgSGVhZGVyIDYgICB7LmNsYXNzMn0KCQkjCgkJJHRleHQgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJ3sKCQkJCV4oXCN7MSw2fSkJIyAkMSA9IHN0cmluZyBvZiAjXCdzCgkJCQlbIF0qCgkJCQkoLis/KQkJIyAkMiA9IEhlYWRlciB0ZXh0CgkJCQlbIF0qCgkJCQlcIyoJCQkjIG9wdGlvbmFsIGNsb3NpbmcgI1wncyAobm90IGNvdW50ZWQpCgkJCQkoPzpbIF0rICcuJHRoaXMtPmlkX2NsYXNzX2F0dHJfY2F0Y2hfcmUuJyApPwkgIyAkMyA9IGlkL2NsYXNzIGF0dHJpYnV0ZXMKCQkJCVsgXSoKCQkJCVxuKwoJCQl9eG0nLAoJCQlhcnJheSgkdGhpcywgJ19kb0hlYWRlcnNfY2FsbGJhY2tfYXR4JyksICR0ZXh0KTsKCgkJcmV0dXJuICR0ZXh0OwoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9kb0hlYWRlcnNfY2FsbGJhY2tfc2V0ZXh0KCRtYXRjaGVzKSB7CgkJaWYgKCRtYXRjaGVzWzNdID09ICctJyAmJiBwcmVnX21hdGNoKCd7Xi0gfScsICRtYXRjaGVzWzFdKSkKCQkJcmV0dXJuICRtYXRjaGVzWzBdOwoKCQkkbGV2ZWwgPSAkbWF0Y2hlc1szXXswfSA9PSAnPScgPyAxIDogMjsKCgkJJGRlZmF1bHRJZCA9IGlzX2NhbGxhYmxlKCR0aGlzLT5oZWFkZXJfaWRfZnVuYykgPyBjYWxsX3VzZXJfZnVuYygkdGhpcy0+aGVhZGVyX2lkX2Z1bmMsICRtYXRjaGVzWzFdKSA6IG51bGw7CgoJCSRhdHRyICA9ICR0aGlzLT5kb0V4dHJhQXR0cmlidXRlcygiaCRsZXZlbCIsICRkdW1teSA9JiAkbWF0Y2hlc1syXSwgJGRlZmF1bHRJZCk7CgkJJGJsb2NrID0gIjxoJGxldmVsJGF0dHI+Ii4kdGhpcy0+cnVuU3BhbkdhbXV0KCRtYXRjaGVzWzFdKS4iPC9oJGxldmVsPiI7CgkJcmV0dXJuICJcbiIgLiAkdGhpcy0+aGFzaEJsb2NrKCRibG9jaykgLiAiXG5cbiI7Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gX2RvSGVhZGVyc19jYWxsYmFja19hdHgoJG1hdGNoZXMpIHsKCQkkbGV2ZWwgPSBzdHJsZW4oJG1hdGNoZXNbMV0pOwoKCQkkZGVmYXVsdElkID0gaXNfY2FsbGFibGUoJHRoaXMtPmhlYWRlcl9pZF9mdW5jKSA/IGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5oZWFkZXJfaWRfZnVuYywgJG1hdGNoZXNbMl0pIDogbnVsbDsKCQkkYXR0ciAgPSAkdGhpcy0+ZG9FeHRyYUF0dHJpYnV0ZXMoImgkbGV2ZWwiLCAkZHVtbXkgPSYgJG1hdGNoZXNbM10sICRkZWZhdWx0SWQpOwoJCSRibG9jayA9ICI8aCRsZXZlbCRhdHRyPiIuJHRoaXMtPnJ1blNwYW5HYW11dCgkbWF0Y2hlc1syXSkuIjwvaCRsZXZlbD4iOwoJCXJldHVybiAiXG4iIC4gJHRoaXMtPmhhc2hCbG9jaygkYmxvY2spIC4gIlxuXG4iOwoJfQoKCglwcm90ZWN0ZWQgZnVuY3Rpb24gZG9UYWJsZXMoJHRleHQpIHsKCSMKCSMgRm9ybSBIVE1MIHRhYmxlcy4KCSMKCQkkbGVzc190aGFuX3RhYiA9ICR0aGlzLT50YWJfd2lkdGggLSAxOwoJCSMKCQkjIEZpbmQgdGFibGVzIHdpdGggbGVhZGluZyBwaXBlLgoJCSMKCQkjCXwgSGVhZGVyIDEgfCBIZWFkZXIgMgoJCSMJfCAtLS0tLS0tLSB8IC0tLS0tLS0tCgkJIwl8IENlbGwgMSAgIHwgQ2VsbCAyCgkJIwl8IENlbGwgMyAgIHwgQ2VsbCA0CgkJIwoJCSR0ZXh0ID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCcKCQkJewoJCQkJXgkJCQkJCQkjIFN0YXJ0IG9mIGEgbGluZQoJCQkJWyBdezAsJy4kbGVzc190aGFuX3RhYi4nfQkjIEFsbG93ZWQgd2hpdGVzcGFjZS4KCQkJCVt8XQkJCQkJCQkjIE9wdGlvbmFsIGxlYWRpbmcgcGlwZSAocHJlc2VudCkKCQkJCSguKykgXG4JCQkJCQkjICQxOiBIZWFkZXIgcm93IChhdCBsZWFzdCBvbmUgcGlwZSkKCQkJCQoJCQkJWyBdezAsJy4kbGVzc190aGFuX3RhYi4nfQkjIEFsbG93ZWQgd2hpdGVzcGFjZS4KCQkJCVt8XSAoWyBdKlstOl0rWy18IDpdKikgXG4JIyAkMjogSGVhZGVyIHVuZGVybGluZQoJCQkJCgkJCQkoCQkJCQkJCSMgJDM6IENlbGxzCgkJCQkJKD8+CgkJCQkJCVsgXSoJCQkJIyBBbGxvd2VkIHdoaXRlc3BhY2UuCgkJCQkJCVt8XSAuKiBcbgkJCSMgUm93IGNvbnRlbnQuCgkJCQkJKSoKCQkJCSkKCQkJCSg/PVxufFxaKQkJCQkJIyBTdG9wIGF0IGZpbmFsIGRvdWJsZSBuZXdsaW5lLgoJCQl9eG0nLAoJCQlhcnJheSgkdGhpcywgJ19kb1RhYmxlX2xlYWRpbmdQaXBlX2NhbGxiYWNrJyksICR0ZXh0KTsKCQkKCQkjCgkJIyBGaW5kIHRhYmxlcyB3aXRob3V0IGxlYWRpbmcgcGlwZS4KCQkjCgkJIwlIZWFkZXIgMSB8IEhlYWRlciAyCgkJIwktLS0tLS0tLSB8IC0tLS0tLS0tCgkJIwlDZWxsIDEgICB8IENlbGwgMgoJCSMJQ2VsbCAzICAgfCBDZWxsIDQKCQkjCgkJJHRleHQgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJwoJCQl7CgkJCQleCQkJCQkJCSMgU3RhcnQgb2YgYSBsaW5lCgkJCQlbIF17MCwnLiRsZXNzX3RoYW5fdGFiLid9CSMgQWxsb3dlZCB3aGl0ZXNwYWNlLgoJCQkJKFxTLipbfF0uKikgXG4JCQkJIyAkMTogSGVhZGVyIHJvdyAoYXQgbGVhc3Qgb25lIHBpcGUpCgkJCQkKCQkJCVsgXXswLCcuJGxlc3NfdGhhbl90YWIuJ30JIyBBbGxvd2VkIHdoaXRlc3BhY2UuCgkJCQkoWy06XStbIF0qW3xdWy18IDpdKikgXG4JIyAkMjogSGVhZGVyIHVuZGVybGluZQoJCQkJCgkJCQkoCQkJCQkJCSMgJDM6IENlbGxzCgkJCQkJKD8+CgkJCQkJCS4qIFt8XSAuKiBcbgkJIyBSb3cgY29udGVudAoJCQkJCSkqCgkJCQkpCgkJCQkoPz1cbnxcWikJCQkJCSMgU3RvcCBhdCBmaW5hbCBkb3VibGUgbmV3bGluZS4KCQkJfXhtJywKCQkJYXJyYXkoJHRoaXMsICdfRG9UYWJsZV9jYWxsYmFjaycpLCAkdGV4dCk7CgoJCXJldHVybiAkdGV4dDsKCX0KCXByb3RlY3RlZCBmdW5jdGlvbiBfZG9UYWJsZV9sZWFkaW5nUGlwZV9jYWxsYmFjaygkbWF0Y2hlcykgewoJCSRoZWFkCQk9ICRtYXRjaGVzWzFdOwoJCSR1bmRlcmxpbmUJPSAkbWF0Y2hlc1syXTsKCQkkY29udGVudAk9ICRtYXRjaGVzWzNdOwoJCQoJCSMgUmVtb3ZlIGxlYWRpbmcgcGlwZSBmb3IgZWFjaCByb3cuCgkJJGNvbnRlbnQJPSBwcmVnX3JlcGxhY2UoJy9eICpbfF0vbScsICcnLCAkY29udGVudCk7CgkJCgkJcmV0dXJuICR0aGlzLT5fZG9UYWJsZV9jYWxsYmFjayhhcnJheSgkbWF0Y2hlc1swXSwgJGhlYWQsICR1bmRlcmxpbmUsICRjb250ZW50KSk7Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gX2RvVGFibGVfbWFrZUFsaWduQXR0cigkYWxpZ25uYW1lKQoJewoJCWlmIChlbXB0eSgkdGhpcy0+dGFibGVfYWxpZ25fY2xhc3NfdG1wbCkpCgkJCXJldHVybiAiIGFsaWduPVwiJGFsaWdubmFtZVwiIjsKCgkJJGNsYXNzbmFtZSA9IHN0cl9yZXBsYWNlKCclJScsICRhbGlnbm5hbWUsICR0aGlzLT50YWJsZV9hbGlnbl9jbGFzc190bXBsKTsKCQlyZXR1cm4gIiBjbGFzcz1cIiRjbGFzc25hbWVcIiI7Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gX2RvVGFibGVfY2FsbGJhY2soJG1hdGNoZXMpIHsKCQkkaGVhZAkJPSAkbWF0Y2hlc1sxXTsKCQkkdW5kZXJsaW5lCT0gJG1hdGNoZXNbMl07CgkJJGNvbnRlbnQJPSAkbWF0Y2hlc1szXTsKCgkJIyBSZW1vdmUgYW55IHRhaWxpbmcgcGlwZXMgZm9yIGVhY2ggbGluZS4KCQkkaGVhZAkJPSBwcmVnX3JlcGxhY2UoJy9bfF0gKiQvbScsICcnLCAkaGVhZCk7CgkJJHVuZGVybGluZQk9IHByZWdfcmVwbGFjZSgnL1t8XSAqJC9tJywgJycsICR1bmRlcmxpbmUpOwoJCSRjb250ZW50CT0gcHJlZ19yZXBsYWNlKCcvW3xdICokL20nLCAnJywgJGNvbnRlbnQpOwoJCQoJCSMgUmVhZGluZyBhbGlnbmVtZW50IGZyb20gaGVhZGVyIHVuZGVybGluZS4KCQkkc2VwYXJhdG9ycwk9IHByZWdfc3BsaXQoJy8gKlt8XSAqLycsICR1bmRlcmxpbmUpOwoJCWZvcmVhY2ggKCRzZXBhcmF0b3JzIGFzICRuID0+ICRzKSB7CgkJCWlmIChwcmVnX21hdGNoKCcvXiAqLSs6ICokLycsICRzKSkKCQkJCSRhdHRyWyRuXSA9ICR0aGlzLT5fZG9UYWJsZV9tYWtlQWxpZ25BdHRyKCdyaWdodCcpOwoJCQllbHNlIGlmIChwcmVnX21hdGNoKCcvXiAqOi0rOiAqJC8nLCAkcykpCgkJCQkkYXR0clskbl0gPSAkdGhpcy0+X2RvVGFibGVfbWFrZUFsaWduQXR0cignY2VudGVyJyk7CgkJCWVsc2UgaWYgKHByZWdfbWF0Y2goJy9eICo6LSsgKiQvJywgJHMpKQoJCQkJJGF0dHJbJG5dID0gJHRoaXMtPl9kb1RhYmxlX21ha2VBbGlnbkF0dHIoJ2xlZnQnKTsKCQkJZWxzZQoJCQkJJGF0dHJbJG5dID0gJyc7CgkJfQoJCQoJCSMgUGFyc2luZyBzcGFuIGVsZW1lbnRzLCBpbmNsdWRpbmcgY29kZSBzcGFucywgY2hhcmFjdGVyIGVzY2FwZXMsIAoJCSMgYW5kIGlubGluZSBIVE1MIHRhZ3MsIHNvIHRoYXQgcGlwZXMgaW5zaWRlIHRob3NlIGdldHMgaWdub3JlZC4KCQkkaGVhZAkJPSAkdGhpcy0+cGFyc2VTcGFuKCRoZWFkKTsKCQkkaGVhZGVycwk9IHByZWdfc3BsaXQoJy8gKlt8XSAqLycsICRoZWFkKTsKCQkkY29sX2NvdW50CT0gY291bnQoJGhlYWRlcnMpOwoJCSRhdHRyICAgICAgID0gYXJyYXlfcGFkKCRhdHRyLCAkY29sX2NvdW50LCAnJyk7CgkJCgkJIyBXcml0ZSBjb2x1bW4gaGVhZGVycy4KCQkkdGV4dCA9ICI8dGFibGU+XG4iOwoJCSR0ZXh0IC49ICI8dGhlYWQ+XG4iOwoJCSR0ZXh0IC49ICI8dHI+XG4iOwoJCWZvcmVhY2ggKCRoZWFkZXJzIGFzICRuID0+ICRoZWFkZXIpCgkJCSR0ZXh0IC49ICIgIDx0aCRhdHRyWyRuXT4iLiR0aGlzLT5ydW5TcGFuR2FtdXQodHJpbSgkaGVhZGVyKSkuIjwvdGg+XG4iOwoJCSR0ZXh0IC49ICI8L3RyPlxuIjsKCQkkdGV4dCAuPSAiPC90aGVhZD5cbiI7CgkJCgkJIyBTcGxpdCBjb250ZW50IGJ5IHJvdy4KCQkkcm93cyA9IGV4cGxvZGUoIlxuIiwgdHJpbSgkY29udGVudCwgIlxuIikpOwoJCQoJCSR0ZXh0IC49ICI8dGJvZHk+XG4iOwoJCWZvcmVhY2ggKCRyb3dzIGFzICRyb3cpIHsKCQkJIyBQYXJzaW5nIHNwYW4gZWxlbWVudHMsIGluY2x1ZGluZyBjb2RlIHNwYW5zLCBjaGFyYWN0ZXIgZXNjYXBlcywgCgkJCSMgYW5kIGlubGluZSBIVE1MIHRhZ3MsIHNvIHRoYXQgcGlwZXMgaW5zaWRlIHRob3NlIGdldHMgaWdub3JlZC4KCQkJJHJvdyA9ICR0aGlzLT5wYXJzZVNwYW4oJHJvdyk7CgkJCQoJCQkjIFNwbGl0IHJvdyBieSBjZWxsLgoJCQkkcm93X2NlbGxzID0gcHJlZ19zcGxpdCgnLyAqW3xdICovJywgJHJvdywgJGNvbF9jb3VudCk7CgkJCSRyb3dfY2VsbHMgPSBhcnJheV9wYWQoJHJvd19jZWxscywgJGNvbF9jb3VudCwgJycpOwoJCQkKCQkJJHRleHQgLj0gIjx0cj5cbiI7CgkJCWZvcmVhY2ggKCRyb3dfY2VsbHMgYXMgJG4gPT4gJGNlbGwpCgkJCQkkdGV4dCAuPSAiICA8dGQkYXR0clskbl0+Ii4kdGhpcy0+cnVuU3BhbkdhbXV0KHRyaW0oJGNlbGwpKS4iPC90ZD5cbiI7CgkJCSR0ZXh0IC49ICI8L3RyPlxuIjsKCQl9CgkJJHRleHQgLj0gIjwvdGJvZHk+XG4iOwoJCSR0ZXh0IC49ICI8L3RhYmxlPiI7CgkJCgkJcmV0dXJuICR0aGlzLT5oYXNoQmxvY2soJHRleHQpIC4gIlxuIjsKCX0KCgkKCXByb3RlY3RlZCBmdW5jdGlvbiBkb0RlZkxpc3RzKCR0ZXh0KSB7CgkjCgkjIEZvcm0gSFRNTCBkZWZpbml0aW9uIGxpc3RzLgoJIwoJCSRsZXNzX3RoYW5fdGFiID0gJHRoaXMtPnRhYl93aWR0aCAtIDE7CgoJCSMgUmUtdXNhYmxlIHBhdHRlcm4gdG8gbWF0Y2ggYW55IGVudGlyZSBkbCBsaXN0OgoJCSR3aG9sZV9saXN0X3JlID0gJyg/PgoJCQkoCQkJCQkJCQkjICQxID0gd2hvbGUgbGlzdAoJCQkgICgJCQkJCQkJCSMgJDIKCQkJCVsgXXswLCcuJGxlc3NfdGhhbl90YWIuJ30KCQkJCSgoPz4uKlxTLipcbikrKQkJCQkjICQzID0gZGVmaW5lZCB0ZXJtCgkJCQlcbj8KCQkJCVsgXXswLCcuJGxlc3NfdGhhbl90YWIuJ306WyBdKyAjIGNvbG9uIHN0YXJ0aW5nIGRlZmluaXRpb24KCQkJICApCgkJCSAgKD9zOi4rPykKCQkJICAoCQkJCQkJCQkjICQ0CgkJCQkgIFx6CgkJCQl8CgkJCQkgIFxuezIsfQoJCQkJICAoPz1cUykKCQkJCSAgKD8hCQkJCQkJIyBOZWdhdGl2ZSBsb29rYWhlYWQgZm9yIGFub3RoZXIgdGVybQoJCQkJCVsgXXswLCcuJGxlc3NfdGhhbl90YWIuJ30KCQkJCQkoPzogXFMuKlxuICkrPwkJCSMgZGVmaW5lZCB0ZXJtCgkJCQkJXG4/CgkJCQkJWyBdezAsJy4kbGVzc190aGFuX3RhYi4nfTpbIF0rICMgY29sb24gc3RhcnRpbmcgZGVmaW5pdGlvbgoJCQkJICApCgkJCQkgICg/IQkJCQkJCSMgTmVnYXRpdmUgbG9va2FoZWFkIGZvciBhbm90aGVyIGRlZmluaXRpb24KCQkJCQlbIF17MCwnLiRsZXNzX3RoYW5fdGFiLid9OlsgXSsgIyBjb2xvbiBzdGFydGluZyBkZWZpbml0aW9uCgkJCQkgICkKCQkJICApCgkJCSkKCQkpJzsgLy8gbXgKCgkJJHRleHQgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJ3sKCQkJCSg/PlxBXG4/fCg/PD1cblxuKSkKCQkJCScuJHdob2xlX2xpc3RfcmUuJwoJCQl9bXgnLAoJCQlhcnJheSgkdGhpcywgJ19kb0RlZkxpc3RzX2NhbGxiYWNrJyksICR0ZXh0KTsKCgkJcmV0dXJuICR0ZXh0OwoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9kb0RlZkxpc3RzX2NhbGxiYWNrKCRtYXRjaGVzKSB7CgkJIyBSZS11c2FibGUgcGF0dGVybnMgdG8gbWF0Y2ggbGlzdCBpdGVtIGJ1bGxldHMgYW5kIG51bWJlciBtYXJrZXJzOgoJCSRsaXN0ID0gJG1hdGNoZXNbMV07CgkJCgkJIyBUdXJuIGRvdWJsZSByZXR1cm5zIGludG8gdHJpcGxlIHJldHVybnMsIHNvIHRoYXQgd2UgY2FuIG1ha2UgYQoJCSMgcGFyYWdyYXBoIGZvciB0aGUgbGFzdCBpdGVtIGluIGEgbGlzdCwgaWYgbmVjZXNzYXJ5OgoJCSRyZXN1bHQgPSB0cmltKCR0aGlzLT5wcm9jZXNzRGVmTGlzdEl0ZW1zKCRsaXN0KSk7CgkJJHJlc3VsdCA9ICI8ZGw+XG4iIC4gJHJlc3VsdCAuICJcbjwvZGw+IjsKCQlyZXR1cm4gJHRoaXMtPmhhc2hCbG9jaygkcmVzdWx0KSAuICJcblxuIjsKCX0KCgoJcHJvdGVjdGVkIGZ1bmN0aW9uIHByb2Nlc3NEZWZMaXN0SXRlbXMoJGxpc3Rfc3RyKSB7CgkjCgkjCVByb2Nlc3MgdGhlIGNvbnRlbnRzIG9mIGEgc2luZ2xlIGRlZmluaXRpb24gbGlzdCwgc3BsaXR0aW5nIGl0CgkjCWludG8gaW5kaXZpZHVhbCB0ZXJtIGFuZCBkZWZpbml0aW9uIGxpc3QgaXRlbXMuCgkjCgkJJGxlc3NfdGhhbl90YWIgPSAkdGhpcy0+dGFiX3dpZHRoIC0gMTsKCQkKCQkjIHRyaW0gdHJhaWxpbmcgYmxhbmsgbGluZXM6CgkJJGxpc3Rfc3RyID0gcHJlZ19yZXBsYWNlKCIvXG57Mix9XFx6LyIsICJcbiIsICRsaXN0X3N0cik7CgoJCSMgUHJvY2VzcyBkZWZpbml0aW9uIHRlcm1zLgoJCSRsaXN0X3N0ciA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnewoJCQkoPz5cQVxuP3xcblxuKykJCQkJCSMgbGVhZGluZyBsaW5lCgkJCSgJCQkJCQkJCSMgZGVmaW5pdGlvbiB0ZXJtcyA9ICQxCgkJCQlbIF17MCwnLiRsZXNzX3RoYW5fdGFiLid9CSMgbGVhZGluZyB3aGl0ZXNwYWNlCgkJCQkoPyFcOlsgXXxbIF0pCQkJCSMgbmVnYXRpdmUgbG9va2FoZWFkIGZvciBhIGRlZmluaXRpb24KCQkJCQkJCQkJCQkjICAgbWFyayAoY29sb24pIG9yIG1vcmUgd2hpdGVzcGFjZS4KCQkJCSg/PiBcUy4qIFxuKSs/CQkJCSMgYWN0dWFsIHRlcm0gKG5vdCB3aGl0ZXNwYWNlKS4JCgkJCSkJCQkKCQkJKD89XG4/WyBdezAsM306WyBdKQkJCQkjIGxvb2thaGVhZCBmb3IgZm9sbG93aW5nIGxpbmUgZmVlZCAKCQkJCQkJCQkJCQkjICAgd2l0aCBhIGRlZmluaXRpb24gbWFyay4KCQkJfXhtJywKCQkJYXJyYXkoJHRoaXMsICdfcHJvY2Vzc0RlZkxpc3RJdGVtc19jYWxsYmFja19kdCcpLCAkbGlzdF9zdHIpOwoKCQkjIFByb2Nlc3MgYWN0dWFsIGRlZmluaXRpb25zLgoJCSRsaXN0X3N0ciA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnewoJCQlcbihcbispPwkJCQkJCSMgbGVhZGluZyBsaW5lID0gJDEKCQkJKAkJCQkJCQkJIyBtYXJrZXIgc3BhY2UgPSAkMgoJCQkJWyBdezAsJy4kbGVzc190aGFuX3RhYi4nfQkjIHdoaXRlc3BhY2UgYmVmb3JlIGNvbG9uCgkJCQlcOlsgXSsJCQkJCQkjIGRlZmluaXRpb24gbWFyayAoY29sb24pCgkJCSkKCQkJKCg/czouKz8pKQkJCQkJCSMgZGVmaW5pdGlvbiB0ZXh0ID0gJDMKCQkJKD89IFxuKyAJCQkJCQkjIHN0b3AgYXQgbmV4dCBkZWZpbml0aW9uIG1hcmssCgkJCQkoPzoJCQkJCQkJIyBuZXh0IHRlcm0gb3IgZW5kIG9mIHRleHQKCQkJCQlbIF17MCwnLiRsZXNzX3RoYW5fdGFiLid9IFw6WyBdCXwKCQkJCQk8ZHQ+IHwgXHoKCQkJCSkJCQkJCQkKCQkJKQkJCQkJCgkJCX14bScsCgkJCWFycmF5KCR0aGlzLCAnX3Byb2Nlc3NEZWZMaXN0SXRlbXNfY2FsbGJhY2tfZGQnKSwgJGxpc3Rfc3RyKTsKCgkJcmV0dXJuICRsaXN0X3N0cjsKCX0KCXByb3RlY3RlZCBmdW5jdGlvbiBfcHJvY2Vzc0RlZkxpc3RJdGVtc19jYWxsYmFja19kdCgkbWF0Y2hlcykgewoJCSR0ZXJtcyA9IGV4cGxvZGUoIlxuIiwgdHJpbSgkbWF0Y2hlc1sxXSkpOwoJCSR0ZXh0ID0gJyc7CgkJZm9yZWFjaCAoJHRlcm1zIGFzICR0ZXJtKSB7CgkJCSR0ZXJtID0gJHRoaXMtPnJ1blNwYW5HYW11dCh0cmltKCR0ZXJtKSk7CgkJCSR0ZXh0IC49ICJcbjxkdD4iIC4gJHRlcm0gLiAiPC9kdD4iOwoJCX0KCQlyZXR1cm4gJHRleHQgLiAiXG4iOwoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9wcm9jZXNzRGVmTGlzdEl0ZW1zX2NhbGxiYWNrX2RkKCRtYXRjaGVzKSB7CgkJJGxlYWRpbmdfbGluZQk9ICRtYXRjaGVzWzFdOwoJCSRtYXJrZXJfc3BhY2UJPSAkbWF0Y2hlc1syXTsKCQkkZGVmCQkJPSAkbWF0Y2hlc1szXTsKCgkJaWYgKCRsZWFkaW5nX2xpbmUgfHwgcHJlZ19tYXRjaCgnL1xuezIsfS8nLCAkZGVmKSkgewoJCQkjIFJlcGxhY2UgbWFya2VyIHdpdGggdGhlIGFwcHJvcHJpYXRlIHdoaXRlc3BhY2UgaW5kZW50YXRpb24KCQkJJGRlZiA9IHN0cl9yZXBlYXQoJyAnLCBzdHJsZW4oJG1hcmtlcl9zcGFjZSkpIC4gJGRlZjsKCQkJJGRlZiA9ICR0aGlzLT5ydW5CbG9ja0dhbXV0KCR0aGlzLT5vdXRkZW50KCRkZWYgLiAiXG5cbiIpKTsKCQkJJGRlZiA9ICJcbiIuICRkZWYgLiJcbiI7CgkJfQoJCWVsc2UgewoJCQkkZGVmID0gcnRyaW0oJGRlZik7CgkJCSRkZWYgPSAkdGhpcy0+cnVuU3BhbkdhbXV0KCR0aGlzLT5vdXRkZW50KCRkZWYpKTsKCQl9CgoJCXJldHVybiAiXG48ZGQ+IiAuICRkZWYgLiAiPC9kZD5cbiI7Cgl9CgoKCXByb3RlY3RlZCBmdW5jdGlvbiBkb0ZlbmNlZENvZGVCbG9ja3MoJHRleHQpIHsKCSMKCSMgQWRkaW5nIHRoZSBmZW5jZWQgY29kZSBibG9jayBzeW50YXggdG8gcmVndWxhciBNYXJrZG93bjoKCSMKCSMgfn5+CgkjIENvZGUgYmxvY2sKCSMgfn5+CgkjCgkJJGxlc3NfdGhhbl90YWIgPSAkdGhpcy0+dGFiX3dpZHRoOwoJCQoJCSR0ZXh0ID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCd7CgkJCQkoPzpcbnxcQSkKCQkJCSMgMTogT3BlbmluZyBtYXJrZXIKCQkJCSgKCQkJCQkoPzp+ezMsfXxgezMsfSkgIyAzIG9yIG1vcmUgdGlsZGVzL2JhY2t0aWNrcy4KCQkJCSkKCQkJCVsgXSoKCQkJCSg/OgoJCQkJCVwuPyhbLV86YS16QS1aMC05XSspICMgMjogc3RhbmRhbG9uZSBjbGFzcyBuYW1lCgkJCQl8CgkJCQkJJy4kdGhpcy0+aWRfY2xhc3NfYXR0cl9jYXRjaF9yZS4nICMgMzogRXh0cmEgYXR0cmlidXRlcwoJCQkJKT8KCQkJCVsgXSogXG4gIyBXaGl0ZXNwYWNlIGFuZCBuZXdsaW5lIGZvbGxvd2luZyBtYXJrZXIuCgkJCQkKCQkJCSMgNDogQ29udGVudAoJCQkJKAoJCQkJCSg/PgoJCQkJCQkoPyFcMSBbIF0qIFxuKQkjIE5vdCBhIGNsb3NpbmcgbWFya2VyLgoJCQkJCQkuKlxuKwoJCQkJCSkrCgkJCQkpCgkJCQkKCQkJCSMgQ2xvc2luZyBtYXJrZXIuCgkJCQlcMSBbIF0qICg/PSBcbiApCgkJCX14bScsCgkJCWFycmF5KCR0aGlzLCAnX2RvRmVuY2VkQ29kZUJsb2Nrc19jYWxsYmFjaycpLCAkdGV4dCk7CgoJCXJldHVybiAkdGV4dDsKCX0KCXByb3RlY3RlZCBmdW5jdGlvbiBfZG9GZW5jZWRDb2RlQmxvY2tzX2NhbGxiYWNrKCRtYXRjaGVzKSB7CgkJJGNsYXNzbmFtZSA9JiAkbWF0Y2hlc1syXTsKCQkkYXR0cnMgICAgID0mICRtYXRjaGVzWzNdOwoJCSRjb2RlYmxvY2sgPSAkbWF0Y2hlc1s0XTsKCQkkY29kZWJsb2NrID0gaHRtbHNwZWNpYWxjaGFycygkY29kZWJsb2NrLCBFTlRfTk9RVU9URVMpOwoJCSRjb2RlYmxvY2sgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJy9eXG4rLycsCgkJCWFycmF5KCR0aGlzLCAnX2RvRmVuY2VkQ29kZUJsb2Nrc19uZXdsaW5lcycpLCAkY29kZWJsb2NrKTsKCgkJaWYgKCRjbGFzc25hbWUgIT0gIiIpIHsKCQkJaWYgKCRjbGFzc25hbWV7MH0gPT0gJy4nKQoJCQkJJGNsYXNzbmFtZSA9IHN1YnN0cigkY2xhc3NuYW1lLCAxKTsKCQkJJGF0dHJfc3RyID0gJyBjbGFzcz0iJy4kdGhpcy0+Y29kZV9jbGFzc19wcmVmaXguJGNsYXNzbmFtZS4nIic7CgkJfSBlbHNlIHsKCQkJJGF0dHJfc3RyID0gJHRoaXMtPmRvRXh0cmFBdHRyaWJ1dGVzKCR0aGlzLT5jb2RlX2F0dHJfb25fcHJlID8gInByZSIgOiAiY29kZSIsICRhdHRycyk7CgkJfQoJCSRwcmVfYXR0cl9zdHIgID0gJHRoaXMtPmNvZGVfYXR0cl9vbl9wcmUgPyAkYXR0cl9zdHIgOiAnJzsKCQkkY29kZV9hdHRyX3N0ciA9ICR0aGlzLT5jb2RlX2F0dHJfb25fcHJlID8gJycgOiAkYXR0cl9zdHI7CgkJJGNvZGVibG9jayAgPSAiPHByZSRwcmVfYXR0cl9zdHI+PGNvZGUkY29kZV9hdHRyX3N0cj4kY29kZWJsb2NrPC9jb2RlPjwvcHJlPiI7CgkJCgkJcmV0dXJuICJcblxuIi4kdGhpcy0+aGFzaEJsb2NrKCRjb2RlYmxvY2spLiJcblxuIjsKCX0KCXByb3RlY3RlZCBmdW5jdGlvbiBfZG9GZW5jZWRDb2RlQmxvY2tzX25ld2xpbmVzKCRtYXRjaGVzKSB7CgkJcmV0dXJuIHN0cl9yZXBlYXQoIjxiciR0aGlzLT5lbXB0eV9lbGVtZW50X3N1ZmZpeCIsIAoJCQlzdHJsZW4oJG1hdGNoZXNbMF0pKTsKCX0KCgoJIwoJIyBSZWRlZmluaW5nIGVtcGhhc2lzIG1hcmtlcnMgc28gdGhhdCBlbXBoYXNpcyBieSB1bmRlcnNjb3JlIGRvZXMgbm90CgkjIHdvcmsgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQuCgkjCglwcm90ZWN0ZWQgJGVtX3JlbGlzdCA9IGFycmF5KAoJCScnICA9PiAnKD86KD88IVwqKVwqKD8hXCopfCg/PCFbYS16QS1aMC05X10pXyg/IV8pKSg/IVtcLiw6O10/XHMpJywKCQknKicgPT4gJyg/PCFbXHMqXSlcKig/IVwqKScsCgkJJ18nID0+ICcoPzwhW1xzX10pXyg/IVthLXpBLVowLTlfXSknLAoJCSk7Cglwcm90ZWN0ZWQgJHN0cm9uZ19yZWxpc3QgPSBhcnJheSgKCQknJyAgID0+ICcoPzooPzwhXCopXCpcKig/IVwqKXwoPzwhW2EtekEtWjAtOV9dKV9fKD8hXykpKD8hW1wuLDo7XT9ccyknLAoJCScqKicgPT4gJyg/PCFbXHMqXSlcKlwqKD8hXCopJywKCQknX18nID0+ICcoPzwhW1xzX10pX18oPyFbYS16QS1aMC05X10pJywKCQkpOwoJcHJvdGVjdGVkICRlbV9zdHJvbmdfcmVsaXN0ID0gYXJyYXkoCgkJJycgICAgPT4gJyg/Oig/PCFcKilcKlwqXCooPyFcKil8KD88IVthLXpBLVowLTlfXSlfX18oPyFfKSkoPyFbXC4sOjtdP1xzKScsCgkJJyoqKicgPT4gJyg/PCFbXHMqXSlcKlwqXCooPyFcKiknLAoJCSdfX18nID0+ICcoPzwhW1xzX10pX19fKD8hW2EtekEtWjAtOV9dKScsCgkJKTsKCgoJcHJvdGVjdGVkIGZ1bmN0aW9uIGZvcm1QYXJhZ3JhcGhzKCR0ZXh0KSB7CgkjCgkjCVBhcmFtczoKCSMJCSR0ZXh0IC0gc3RyaW5nIHRvIHByb2Nlc3Mgd2l0aCBodG1sIDxwPiB0YWdzCgkjCgkJIyBTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBsaW5lczoKCQkkdGV4dCA9IHByZWdfcmVwbGFjZSgnL1xBXG4rfFxuK1x6LycsICcnLCAkdGV4dCk7CgkJCgkJJGdyYWZzID0gcHJlZ19zcGxpdCgnL1xuezIsfS8nLCAkdGV4dCwgLTEsIFBSRUdfU1BMSVRfTk9fRU1QVFkpOwoKCQkjCgkJIyBXcmFwIDxwPiB0YWdzIGFuZCB1bmhhc2hpZnkgSFRNTCBibG9ja3MKCQkjCgkJZm9yZWFjaCAoJGdyYWZzIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJCSR2YWx1ZSA9IHRyaW0oJHRoaXMtPnJ1blNwYW5HYW11dCgkdmFsdWUpKTsKCQkJCgkJCSMgQ2hlY2sgaWYgdGhpcyBzaG91bGQgYmUgZW5jbG9zZWQgaW4gYSBwYXJhZ3JhcGguCgkJCSMgQ2xlYW4gdGFnIGhhc2hlcyAmIGJsb2NrIHRhZyBoYXNoZXMgYXJlIGxlZnQgYWxvbmUuCgkJCSRpc19wID0gIXByZWdfbWF0Y2goJy9eQlx4MUFbMC05XStCfF5DXHgxQVswLTldK0MkLycsICR2YWx1ZSk7CgkJCQoJCQlpZiAoJGlzX3ApIHsKCQkJCSR2YWx1ZSA9ICI8cD4kdmFsdWU8L3A+IjsKCQkJfQoJCQkkZ3JhZnNbJGtleV0gPSAkdmFsdWU7CgkJfQoJCQoJCSMgSm9pbiBncmFmcyBpbiBvbmUgdGV4dCwgdGhlbiB1bmhhc2ggSFRNTCB0YWdzLiAKCQkkdGV4dCA9IGltcGxvZGUoIlxuXG4iLCAkZ3JhZnMpOwoJCQoJCSMgRmluaXNoIGJ5IHJlbW92aW5nIGFueSB0YWcgaGFzaGVzIHN0aWxsIHByZXNlbnQgaW4gJHRleHQuCgkJJHRleHQgPSAkdGhpcy0+dW5oYXNoKCR0ZXh0KTsKCQkKCQlyZXR1cm4gJHRleHQ7Cgl9CgkKCQoJIyMjIEZvb3Rub3RlcwoJCglwcm90ZWN0ZWQgZnVuY3Rpb24gc3RyaXBGb290bm90ZXMoJHRleHQpIHsKCSMKCSMgU3RyaXBzIGxpbmsgZGVmaW5pdGlvbnMgZnJvbSB0ZXh0LCBzdG9yZXMgdGhlIFVSTHMgYW5kIHRpdGxlcyBpbgoJIyBoYXNoIHJlZmVyZW5jZXMuCgkjCgkJJGxlc3NfdGhhbl90YWIgPSAkdGhpcy0+dGFiX3dpZHRoIC0gMTsKCgkJIyBMaW5rIGRlZnMgYXJlIGluIHRoZSBmb3JtOiBbXmlkXTogdXJsICJvcHRpb25hbCB0aXRsZSIKCQkkdGV4dCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnewoJCQleWyBdezAsJy4kbGVzc190aGFuX3RhYi4nfVxbXF4oLis/KVxdWyBdPzoJIyBub3RlX2lkID0gJDEKCQkJICBbIF0qCgkJCSAgXG4/CQkJCQkjIG1heWJlICpvbmUqIG5ld2xpbmUKCQkJKAkJCQkJCSMgdGV4dCA9ICQyIChubyBibGFuayBsaW5lcyBhbGxvd2VkKQoJCQkJKD86CQkJCQkKCQkJCQkuKwkJCQkjIGFjdHVhbCB0ZXh0CgkJCQl8CgkJCQkJXG4JCQkJIyBuZXdsaW5lcyBidXQgCgkJCQkJKD8hXFsuKz9cXVsgXT86XHMpIyBuZWdhdGl2ZSBsb29rYWhlYWQgZm9yIGZvb3Rub3RlIG9yIGxpbmsgZGVmaW5pdGlvbiBtYXJrZXIuCgkJCQkJKD8hXG4rWyBdezAsM31cUykjIGVuc3VyZSBsaW5lIGlzIG5vdCBibGFuayBhbmQgZm9sbG93ZWQgCgkJCQkJCQkJCSMgYnkgbm9uLWluZGVudGVkIGNvbnRlbnQKCQkJCSkqCgkJCSkJCQoJCQl9eG0nLAoJCQlhcnJheSgkdGhpcywgJ19zdHJpcEZvb3Rub3Rlc19jYWxsYmFjaycpLAoJCQkkdGV4dCk7CgkJcmV0dXJuICR0ZXh0OwoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9zdHJpcEZvb3Rub3Rlc19jYWxsYmFjaygkbWF0Y2hlcykgewoJCSRub3RlX2lkID0gJHRoaXMtPmZuX2lkX3ByZWZpeCAuICRtYXRjaGVzWzFdOwoJCSR0aGlzLT5mb290bm90ZXNbJG5vdGVfaWRdID0gJHRoaXMtPm91dGRlbnQoJG1hdGNoZXNbMl0pOwoJCXJldHVybiAnJzsgIyBTdHJpbmcgdGhhdCB3aWxsIHJlcGxhY2UgdGhlIGJsb2NrCgl9CgoKCXByb3RlY3RlZCBmdW5jdGlvbiBkb0Zvb3Rub3RlcygkdGV4dCkgewoJIwoJIyBSZXBsYWNlIGZvb3Rub3RlIHJlZmVyZW5jZXMgaW4gJHRleHQgW15pZF0gd2l0aCBhIHNwZWNpYWwgdGV4dC10b2tlbiAKCSMgd2hpY2ggd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgYWN0dWFsIGZvb3Rub3RlIG1hcmtlciBpbiBhcHBlbmRGb290bm90ZXMuCgkjCgkJaWYgKCEkdGhpcy0+aW5fYW5jaG9yKSB7CgkJCSR0ZXh0ID0gcHJlZ19yZXBsYWNlKCd7XFtcXiguKz8pXF19JywgIkZceDFBZm46XFwxXHgxQToiLCAkdGV4dCk7CgkJfQoJCXJldHVybiAkdGV4dDsKCX0KCgkKCXByb3RlY3RlZCBmdW5jdGlvbiBhcHBlbmRGb290bm90ZXMoJHRleHQpIHsKCSMKCSMgQXBwZW5kIGZvb3Rub3RlIGxpc3QgdG8gdGV4dC4KCSMKCQkkdGV4dCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygne0ZceDFBZm46KC4qPylceDFBOn0nLCAKCQkJYXJyYXkoJHRoaXMsICdfYXBwZW5kRm9vdG5vdGVzX2NhbGxiYWNrJyksICR0ZXh0KTsKCQoJCWlmICghZW1wdHkoJHRoaXMtPmZvb3Rub3Rlc19vcmRlcmVkKSkgewoJCQkkdGV4dCAuPSAiXG5cbiI7CgkJCSR0ZXh0IC49ICI8ZGl2IGNsYXNzPVwiZm9vdG5vdGVzXCI+XG4iOwoJCQkkdGV4dCAuPSAiPGhyIi4gJHRoaXMtPmVtcHR5X2VsZW1lbnRfc3VmZml4IC4iXG4iOwoJCQkkdGV4dCAuPSAiPG9sPlxuXG4iOwoKCQkJJGF0dHIgPSAiIjsKCQkJaWYgKCR0aGlzLT5mbl9iYWNrbGlua19jbGFzcyAhPSAiIikgewoJCQkJJGNsYXNzID0gJHRoaXMtPmZuX2JhY2tsaW5rX2NsYXNzOwoJCQkJJGNsYXNzID0gJHRoaXMtPmVuY29kZUF0dHJpYnV0ZSgkY2xhc3MpOwoJCQkJJGF0dHIgLj0gIiBjbGFzcz1cIiRjbGFzc1wiIjsKCQkJfQoJCQlpZiAoJHRoaXMtPmZuX2JhY2tsaW5rX3RpdGxlICE9ICIiKSB7CgkJCQkkdGl0bGUgPSAkdGhpcy0+Zm5fYmFja2xpbmtfdGl0bGU7CgkJCQkkdGl0bGUgPSAkdGhpcy0+ZW5jb2RlQXR0cmlidXRlKCR0aXRsZSk7CgkJCQkkYXR0ciAuPSAiIHRpdGxlPVwiJHRpdGxlXCIiOwoJCQl9CgkJCSRudW0gPSAwOwoJCQkKCQkJd2hpbGUgKCFlbXB0eSgkdGhpcy0+Zm9vdG5vdGVzX29yZGVyZWQpKSB7CgkJCQkkZm9vdG5vdGUgPSByZXNldCgkdGhpcy0+Zm9vdG5vdGVzX29yZGVyZWQpOwoJCQkJJG5vdGVfaWQgPSBrZXkoJHRoaXMtPmZvb3Rub3Rlc19vcmRlcmVkKTsKCQkJCXVuc2V0KCR0aGlzLT5mb290bm90ZXNfb3JkZXJlZFskbm90ZV9pZF0pOwoJCQkJJHJlZl9jb3VudCA9ICR0aGlzLT5mb290bm90ZXNfcmVmX2NvdW50WyRub3RlX2lkXTsKCQkJCXVuc2V0KCR0aGlzLT5mb290bm90ZXNfcmVmX2NvdW50WyRub3RlX2lkXSk7CgkJCQl1bnNldCgkdGhpcy0+Zm9vdG5vdGVzWyRub3RlX2lkXSk7CgkJCQkKCQkJCSRmb290bm90ZSAuPSAiXG4iOyAjIE5lZWQgdG8gYXBwZW5kIG5ld2xpbmUgYmVmb3JlIHBhcnNpbmcuCgkJCQkkZm9vdG5vdGUgPSAkdGhpcy0+cnVuQmxvY2tHYW11dCgiJGZvb3Rub3RlXG4iKTsJCQkJCgkJCQkkZm9vdG5vdGUgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJ3tGXHgxQWZuOiguKj8pXHgxQTp9JywgCgkJCQkJYXJyYXkoJHRoaXMsICdfYXBwZW5kRm9vdG5vdGVzX2NhbGxiYWNrJyksICRmb290bm90ZSk7CgkJCQkKCQkJCSRhdHRyID0gc3RyX3JlcGxhY2UoIiUlIiwgKyskbnVtLCAkYXR0cik7CgkJCQkkbm90ZV9pZCA9ICR0aGlzLT5lbmNvZGVBdHRyaWJ1dGUoJG5vdGVfaWQpOwoKCQkJCSMgUHJlcGFyZSBiYWNrbGluaywgbXVsdGlwbGUgYmFja2xpbmtzIGlmIG11bHRpcGxlIHJlZmVyZW5jZXMKCQkJCSRiYWNrbGluayA9ICI8YSBocmVmPVwiI2ZucmVmOiRub3RlX2lkXCIkYXR0cj4mIzg2MTc7PC9hPiI7CgkJCQlmb3IgKCRyZWZfbnVtID0gMjsgJHJlZl9udW0gPD0gJHJlZl9jb3VudDsgKyskcmVmX251bSkgewoJCQkJCSRiYWNrbGluayAuPSAiIDxhIGhyZWY9XCIjZm5yZWYkcmVmX251bTokbm90ZV9pZFwiJGF0dHI+JiM4NjE3OzwvYT4iOwoJCQkJfQoJCQkJIyBBZGQgYmFja2xpbmsgdG8gbGFzdCBwYXJhZ3JhcGg7IGNyZWF0ZSBuZXcgcGFyYWdyYXBoIGlmIG5lZWRlZC4KCQkJCWlmIChwcmVnX21hdGNoKCd7PC9wPiR9JywgJGZvb3Rub3RlKSkgewoJCQkJCSRmb290bm90ZSA9IHN1YnN0cigkZm9vdG5vdGUsIDAsIC00KSAuICImIzE2MDskYmFja2xpbms8L3A+IjsKCQkJCX0gZWxzZSB7CgkJCQkJJGZvb3Rub3RlIC49ICJcblxuPHA+JGJhY2tsaW5rPC9wPiI7CgkJCQl9CgkJCQkKCQkJCSR0ZXh0IC49ICI8bGkgaWQ9XCJmbjokbm90ZV9pZFwiPlxuIjsKCQkJCSR0ZXh0IC49ICRmb290bm90ZSAuICJcbiI7CgkJCQkkdGV4dCAuPSAiPC9saT5cblxuIjsKCQkJfQoJCQkKCQkJJHRleHQgLj0gIjwvb2w+XG4iOwoJCQkkdGV4dCAuPSAiPC9kaXY+IjsKCQl9CgkJcmV0dXJuICR0ZXh0OwoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9hcHBlbmRGb290bm90ZXNfY2FsbGJhY2soJG1hdGNoZXMpIHsKCQkkbm9kZV9pZCA9ICR0aGlzLT5mbl9pZF9wcmVmaXggLiAkbWF0Y2hlc1sxXTsKCQkKCQkjIENyZWF0ZSBmb290bm90ZSBtYXJrZXIgb25seSBpZiBpdCBoYXMgYSBjb3JyZXNwb25kaW5nIGZvb3Rub3RlICphbmQqCgkJIyB0aGUgZm9vdG5vdGUgaGFzbid0IGJlZW4gdXNlZCBieSBhbm90aGVyIG1hcmtlci4KCQlpZiAoaXNzZXQoJHRoaXMtPmZvb3Rub3Rlc1skbm9kZV9pZF0pKSB7CgkJCSRudW0gPSYgJHRoaXMtPmZvb3Rub3Rlc19udW1iZXJzWyRub2RlX2lkXTsKCQkJaWYgKCFpc3NldCgkbnVtKSkgewoJCQkJIyBUcmFuc2ZlciBmb290bm90ZSBjb250ZW50IHRvIHRoZSBvcmRlcmVkIGxpc3QgYW5kIGdpdmUgaXQgaXRzCgkJCQkjIG51bWJlcgoJCQkJJHRoaXMtPmZvb3Rub3Rlc19vcmRlcmVkWyRub2RlX2lkXSA9ICR0aGlzLT5mb290bm90ZXNbJG5vZGVfaWRdOwoJCQkJJHRoaXMtPmZvb3Rub3Rlc19yZWZfY291bnRbJG5vZGVfaWRdID0gMTsKCQkJCSRudW0gPSAkdGhpcy0+Zm9vdG5vdGVfY291bnRlcisrOwoJCQkJJHJlZl9jb3VudF9tYXJrID0gJyc7CgkJCX0gZWxzZSB7CgkJCQkkcmVmX2NvdW50X21hcmsgPSAkdGhpcy0+Zm9vdG5vdGVzX3JlZl9jb3VudFskbm9kZV9pZF0gKz0gMTsKCQkJfQoKCQkJJGF0dHIgPSAiIjsKCQkJaWYgKCR0aGlzLT5mbl9saW5rX2NsYXNzICE9ICIiKSB7CgkJCQkkY2xhc3MgPSAkdGhpcy0+Zm5fbGlua19jbGFzczsKCQkJCSRjbGFzcyA9ICR0aGlzLT5lbmNvZGVBdHRyaWJ1dGUoJGNsYXNzKTsKCQkJCSRhdHRyIC49ICIgY2xhc3M9XCIkY2xhc3NcIiI7CgkJCX0KCQkJaWYgKCR0aGlzLT5mbl9saW5rX3RpdGxlICE9ICIiKSB7CgkJCQkkdGl0bGUgPSAkdGhpcy0+Zm5fbGlua190aXRsZTsKCQkJCSR0aXRsZSA9ICR0aGlzLT5lbmNvZGVBdHRyaWJ1dGUoJHRpdGxlKTsKCQkJCSRhdHRyIC49ICIgdGl0bGU9XCIkdGl0bGVcIiI7CgkJCX0KCQkJCgkJCSRhdHRyID0gc3RyX3JlcGxhY2UoIiUlIiwgJG51bSwgJGF0dHIpOwoJCQkkbm9kZV9pZCA9ICR0aGlzLT5lbmNvZGVBdHRyaWJ1dGUoJG5vZGVfaWQpOwoJCQkKCQkJcmV0dXJuCgkJCQkiPHN1cCBpZD1cImZucmVmJHJlZl9jb3VudF9tYXJrOiRub2RlX2lkXCI+Ii4KCQkJCSI8YSBocmVmPVwiI2ZuOiRub2RlX2lkXCIkYXR0cj4kbnVtPC9hPiIuCgkJCQkiPC9zdXA+IjsKCQl9CgkJCgkJcmV0dXJuICJbXiIuJG1hdGNoZXNbMV0uIl0iOwoJfQoJCQoJCgkjIyMgQWJicmV2aWF0aW9ucyAjIyMKCQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHN0cmlwQWJicmV2aWF0aW9ucygkdGV4dCkgewoJIwoJIyBTdHJpcHMgYWJicmV2aWF0aW9ucyBmcm9tIHRleHQsIHN0b3JlcyB0aXRsZXMgaW4gaGFzaCByZWZlcmVuY2VzLgoJIwoJCSRsZXNzX3RoYW5fdGFiID0gJHRoaXMtPnRhYl93aWR0aCAtIDE7CgoJCSMgTGluayBkZWZzIGFyZSBpbiB0aGUgZm9ybTogW2lkXSo6IHVybCAib3B0aW9uYWwgdGl0bGUiCgkJJHRleHQgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJ3sKCQkJXlsgXXswLCcuJGxlc3NfdGhhbl90YWIuJ31cKlxbKC4rPylcXVsgXT86CSMgYWJicl9pZCA9ICQxCgkJCSguKikJCQkJCSMgdGV4dCA9ICQyIChubyBibGFuayBsaW5lcyBhbGxvd2VkKQkKCQkJfXhtJywKCQkJYXJyYXkoJHRoaXMsICdfc3RyaXBBYmJyZXZpYXRpb25zX2NhbGxiYWNrJyksCgkJCSR0ZXh0KTsKCQlyZXR1cm4gJHRleHQ7Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gX3N0cmlwQWJicmV2aWF0aW9uc19jYWxsYmFjaygkbWF0Y2hlcykgewoJCSRhYmJyX3dvcmQgPSAkbWF0Y2hlc1sxXTsKCQkkYWJicl9kZXNjID0gJG1hdGNoZXNbMl07CgkJaWYgKCR0aGlzLT5hYmJyX3dvcmRfcmUpCgkJCSR0aGlzLT5hYmJyX3dvcmRfcmUgLj0gJ3wnOwoJCSR0aGlzLT5hYmJyX3dvcmRfcmUgLj0gcHJlZ19xdW90ZSgkYWJicl93b3JkKTsKCQkkdGhpcy0+YWJicl9kZXNjaXB0aW9uc1skYWJicl93b3JkXSA9IHRyaW0oJGFiYnJfZGVzYyk7CgkJcmV0dXJuICcnOyAjIFN0cmluZyB0aGF0IHdpbGwgcmVwbGFjZSB0aGUgYmxvY2sKCX0KCQoJCglwcm90ZWN0ZWQgZnVuY3Rpb24gZG9BYmJyZXZpYXRpb25zKCR0ZXh0KSB7CgkjCgkjIEZpbmQgZGVmaW5lZCBhYmJyZXZpYXRpb25zIGluIHRleHQgYW5kIHdyYXAgdGhlbSBpbiA8YWJicj4gZWxlbWVudHMuCgkjCgkJaWYgKCR0aGlzLT5hYmJyX3dvcmRfcmUpIHsKCQkJLy8gY2Fubm90IHVzZSB0aGUgL3ggbW9kaWZpZXIgYmVjYXVzZSBhYmJyX3dvcmRfcmUgbWF5IAoJCQkvLyBjb250YWluIHNpZ25pZmljYW50IHNwYWNlczoKCQkJJHRleHQgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJ3snLgoJCQkJJyg/PCFbXHdceDFBXSknLgoJCQkJJyg/OicuJHRoaXMtPmFiYnJfd29yZF9yZS4nKScuCgkJCQknKD8hW1x3XHgxQV0pJy4KCQkJCSd9JywgCgkJCQlhcnJheSgkdGhpcywgJ19kb0FiYnJldmlhdGlvbnNfY2FsbGJhY2snKSwgJHRleHQpOwoJCX0KCQlyZXR1cm4gJHRleHQ7Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gX2RvQWJicmV2aWF0aW9uc19jYWxsYmFjaygkbWF0Y2hlcykgewoJCSRhYmJyID0gJG1hdGNoZXNbMF07CgkJaWYgKGlzc2V0KCR0aGlzLT5hYmJyX2Rlc2NpcHRpb25zWyRhYmJyXSkpIHsKCQkJJGRlc2MgPSAkdGhpcy0+YWJicl9kZXNjaXB0aW9uc1skYWJicl07CgkJCWlmIChlbXB0eSgkZGVzYykpIHsKCQkJCXJldHVybiAkdGhpcy0+aGFzaFBhcnQoIjxhYmJyPiRhYmJyPC9hYmJyPiIpOwoJCQl9IGVsc2UgewoJCQkJJGRlc2MgPSAkdGhpcy0+ZW5jb2RlQXR0cmlidXRlKCRkZXNjKTsKCQkJCXJldHVybiAkdGhpcy0+aGFzaFBhcnQoIjxhYmJyIHRpdGxlPVwiJGRlc2NcIj4kYWJicjwvYWJicj4iKTsKCQkJfQoJCX0gZWxzZSB7CgkJCXJldHVybiAkbWF0Y2hlc1swXTsKCQl9Cgl9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/Engines/Michelf/MarkdownInterface.inc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMgVXNlIHRoaXMgZmlsZSBpZiB5b3UgY2Fubm90IHVzZSBjbGFzcyBhdXRvbG9hZGluZy4gSXQgd2lsbCBpbmNsdWRlIGFsbCB0aGUKIyBmaWxlcyBuZWVkZWQgZm9yIHRoZSBNYXJrZG93bkludGVyZmFjZSBpbnRlcmZhY2UuCiMKIyBUYWtlIGEgbG9vayBhdCB0aGUgUFNSLTAtY29tcGF0aWJsZSBjbGFzcyBhdXRvbG9hZGluZyBpbXBsZW1lbnRhdGlvbgojIGluIHRoZSBSZWFkbWUucGhwIGZpbGUgaWYgeW91IHdhbnQgYSBzaW1wbGUgYXV0b2xvYWRlciBzZXR1cC4KCnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvTWFya2Rvd25JbnRlcmZhY2UucGhwJzsK]]></data>
	</file>
	<file>
	  <filename>/lib/Engines/Michelf/MarkdownInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIwojIE1hcmtkb3duICAtICBBIHRleHQtdG8tSFRNTCBjb252ZXJzaW9uIHRvb2wgZm9yIHdlYiB3cml0ZXJzCiMKIyBQSFAgTWFya2Rvd24KIyBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxNSBNaWNoZWwgRm9ydGluCiMgPGh0dHBzOi8vbWljaGVsZi5jYS9wcm9qZWN0cy9waHAtbWFya2Rvd24vPgojCiMgT3JpZ2luYWwgTWFya2Rvd24KIyBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNiBKb2huIEdydWJlcgojIDxodHRwOi8vZGFyaW5nZmlyZWJhbGwubmV0L3Byb2plY3RzL21hcmtkb3duLz4KIwpuYW1lc3BhY2UgTWljaGVsZjsKCgojCiMgTWFya2Rvd24gTWFya2Rvd24gSW50ZXJmYWNlCiMKCmludGVyZmFjZSBNYXJrZG93bkludGVyZmFjZSB7CgogICMKICAjIEluaXRpYWxpemUgdGhlIG1hcmtkb3duIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiBpdHMgdHJhbnNmb3JtIG1ldGhvZC4KICAjIFRoaXMgd2lsbCB3b3JrIGZpbmUgZm9yIGRlcml2ZWQgY2xhc3NlcyB0b28uCiAgIwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVmYXVsdFRyYW5zZm9ybSgkdGV4dCk7CgogICMKICAjIE1haW4gZnVuY3Rpb24uIFBlcmZvcm1zIHNvbWUgcHJlcHJvY2Vzc2luZyBvbiB0aGUgaW5wdXQgdGV4dAogICMgYW5kIHBhc3MgaXQgdGhyb3VnaCB0aGUgZG9jdW1lbnQgZ2FtdXQuCiAgIwogIHB1YmxpYyBmdW5jdGlvbiB0cmFuc2Zvcm0oJHRleHQpOwoKfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/Engines/Parsedown/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/Engines/Parsedown/LICENSE.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTMgRW1hbnVpbCBSdXNldiwgZXJ1c2V2LmNvbQoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgp0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgp0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCnVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mCnRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywKc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUgpDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIKSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4=]]></data>
	</file>
	<file>
	  <filename>/lib/Engines/Parsedown/Parsedown.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMKIwojIFBhcnNlZG93bgojIGh0dHA6Ly9wYXJzZWRvd24ub3JnCiMKIyAoYykgRW1hbnVpbCBSdXNldgojIGh0dHA6Ly9lcnVzZXYuY29tCiMKIyBGb3IgdGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiwgdmlldyB0aGUgTElDRU5TRSBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkCiMgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgojCiMKCmNsYXNzIFBhcnNlZG93bgp7CiAgICAjIH4KCiAgICBjb25zdCB2ZXJzaW9uID0gJzEuNS4xJzsKCiAgICAjIH4KCiAgICBmdW5jdGlvbiB0ZXh0KCR0ZXh0KQogICAgewogICAgICAgICMgbWFrZSBzdXJlIG5vIGRlZmluaXRpb25zIGFyZSBzZXQKICAgICAgICAkdGhpcy0+RGVmaW5pdGlvbkRhdGEgPSBhcnJheSgpOwoKICAgICAgICAjIHN0YW5kYXJkaXplIGxpbmUgYnJlYWtzCiAgICAgICAgJHRleHQgPSBzdHJfcmVwbGFjZShhcnJheSgiXHJcbiIsICJcciIpLCAiXG4iLCAkdGV4dCk7CgogICAgICAgICMgcmVtb3ZlIHN1cnJvdW5kaW5nIGxpbmUgYnJlYWtzCiAgICAgICAgJHRleHQgPSB0cmltKCR0ZXh0LCAiXG4iKTsKCiAgICAgICAgIyBzcGxpdCB0ZXh0IGludG8gbGluZXMKICAgICAgICAkbGluZXMgPSBleHBsb2RlKCJcbiIsICR0ZXh0KTsKCiAgICAgICAgIyBpdGVyYXRlIHRocm91Z2ggbGluZXMgdG8gaWRlbnRpZnkgYmxvY2tzCiAgICAgICAgJG1hcmt1cCA9ICR0aGlzLT5saW5lcygkbGluZXMpOwoKICAgICAgICAjIHRyaW0gbGluZSBicmVha3MKICAgICAgICAkbWFya3VwID0gdHJpbSgkbWFya3VwLCAiXG4iKTsKCiAgICAgICAgcmV0dXJuICRtYXJrdXA7CiAgICB9CgogICAgIwogICAgIyBTZXR0ZXJzCiAgICAjCgogICAgZnVuY3Rpb24gc2V0QnJlYWtzRW5hYmxlZCgkYnJlYWtzRW5hYmxlZCkKICAgIHsKICAgICAgICAkdGhpcy0+YnJlYWtzRW5hYmxlZCA9ICRicmVha3NFbmFibGVkOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHJvdGVjdGVkICRicmVha3NFbmFibGVkOwoKICAgIGZ1bmN0aW9uIHNldE1hcmt1cEVzY2FwZWQoJG1hcmt1cEVzY2FwZWQpCiAgICB7CiAgICAgICAgJHRoaXMtPm1hcmt1cEVzY2FwZWQgPSAkbWFya3VwRXNjYXBlZDsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHByb3RlY3RlZCAkbWFya3VwRXNjYXBlZDsKCiAgICBmdW5jdGlvbiBzZXRVcmxzTGlua2VkKCR1cmxzTGlua2VkKQogICAgewogICAgICAgICR0aGlzLT51cmxzTGlua2VkID0gJHVybHNMaW5rZWQ7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwcm90ZWN0ZWQgJHVybHNMaW5rZWQgPSB0cnVlOwoKICAgICMKICAgICMgTGluZXMKICAgICMKCiAgICBwcm90ZWN0ZWQgJEJsb2NrVHlwZXMgPSBhcnJheSgKICAgICAgICAnIycgPT4gYXJyYXkoJ0hlYWRlcicpLAogICAgICAgICcqJyA9PiBhcnJheSgnUnVsZScsICdMaXN0JyksCiAgICAgICAgJysnID0+IGFycmF5KCdMaXN0JyksCiAgICAgICAgJy0nID0+IGFycmF5KCdTZXRleHRIZWFkZXInLCAnVGFibGUnLCAnUnVsZScsICdMaXN0JyksCiAgICAgICAgJzAnID0+IGFycmF5KCdMaXN0JyksCiAgICAgICAgJzEnID0+IGFycmF5KCdMaXN0JyksCiAgICAgICAgJzInID0+IGFycmF5KCdMaXN0JyksCiAgICAgICAgJzMnID0+IGFycmF5KCdMaXN0JyksCiAgICAgICAgJzQnID0+IGFycmF5KCdMaXN0JyksCiAgICAgICAgJzUnID0+IGFycmF5KCdMaXN0JyksCiAgICAgICAgJzYnID0+IGFycmF5KCdMaXN0JyksCiAgICAgICAgJzcnID0+IGFycmF5KCdMaXN0JyksCiAgICAgICAgJzgnID0+IGFycmF5KCdMaXN0JyksCiAgICAgICAgJzknID0+IGFycmF5KCdMaXN0JyksCiAgICAgICAgJzonID0+IGFycmF5KCdUYWJsZScpLAogICAgICAgICc8JyA9PiBhcnJheSgnQ29tbWVudCcsICdNYXJrdXAnKSwKICAgICAgICAnPScgPT4gYXJyYXkoJ1NldGV4dEhlYWRlcicpLAogICAgICAgICc+JyA9PiBhcnJheSgnUXVvdGUnKSwKICAgICAgICAnWycgPT4gYXJyYXkoJ1JlZmVyZW5jZScpLAogICAgICAgICdfJyA9PiBhcnJheSgnUnVsZScpLAogICAgICAgICdgJyA9PiBhcnJheSgnRmVuY2VkQ29kZScpLAogICAgICAgICd8JyA9PiBhcnJheSgnVGFibGUnKSwKICAgICAgICAnficgPT4gYXJyYXkoJ0ZlbmNlZENvZGUnKSwKICAgICk7CgogICAgIyB+CgogICAgcHJvdGVjdGVkICREZWZpbml0aW9uVHlwZXMgPSBhcnJheSgKICAgICAgICAnWycgPT4gYXJyYXkoJ1JlZmVyZW5jZScpLAogICAgKTsKCiAgICAjIH4KCiAgICBwcm90ZWN0ZWQgJHVubWFya2VkQmxvY2tUeXBlcyA9IGFycmF5KAogICAgICAgICdDb2RlJywKICAgICk7CgogICAgIwogICAgIyBCbG9ja3MKICAgICMKCiAgICBwcml2YXRlIGZ1bmN0aW9uIGxpbmVzKGFycmF5ICRsaW5lcykKICAgIHsKICAgICAgICAkQ3VycmVudEJsb2NrID0gbnVsbDsKCiAgICAgICAgZm9yZWFjaCAoJGxpbmVzIGFzICRsaW5lKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGNob3AoJGxpbmUpID09PSAnJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRDdXJyZW50QmxvY2spKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRDdXJyZW50QmxvY2tbJ2ludGVycnVwdGVkJ10gPSB0cnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc3RycG9zKCRsaW5lLCAiXHQiKSAhPT0gZmFsc2UpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoIlx0IiwgJGxpbmUpOwoKICAgICAgICAgICAgICAgICRsaW5lID0gJHBhcnRzWzBdOwoKICAgICAgICAgICAgICAgIHVuc2V0KCRwYXJ0c1swXSk7CgogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHBhcnRzIGFzICRwYXJ0KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRzaG9ydGFnZSA9IDQgLSBtYl9zdHJsZW4oJGxpbmUsICd1dGYtOCcpICUgNDsKCiAgICAgICAgICAgICAgICAgICAgJGxpbmUgLj0gc3RyX3JlcGVhdCgnICcsICRzaG9ydGFnZSk7CiAgICAgICAgICAgICAgICAgICAgJGxpbmUgLj0gJHBhcnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRpbmRlbnQgPSAwOwoKICAgICAgICAgICAgd2hpbGUgKGlzc2V0KCRsaW5lWyRpbmRlbnRdKSBhbmQgJGxpbmVbJGluZGVudF0gPT09ICcgJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJGluZGVudCArKzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRleHQgPSAkaW5kZW50ID4gMCA/IHN1YnN0cigkbGluZSwgJGluZGVudCkgOiAkbGluZTsKCiAgICAgICAgICAgICMgfgoKICAgICAgICAgICAgJExpbmUgPSBhcnJheSgnYm9keScgPT4gJGxpbmUsICdpbmRlbnQnID0+ICRpbmRlbnQsICd0ZXh0JyA9PiAkdGV4dCk7CgogICAgICAgICAgICAjIH4KCiAgICAgICAgICAgIGlmIChpc3NldCgkQ3VycmVudEJsb2NrWydpbmNvbXBsZXRlJ10pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkQmxvY2sgPSAkdGhpcy0+eydibG9jaycuJEN1cnJlbnRCbG9ja1sndHlwZSddLidDb250aW51ZSd9KCRMaW5lLCAkQ3VycmVudEJsb2NrKTsKCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJEJsb2NrKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkQ3VycmVudEJsb2NrID0gJEJsb2NrOwoKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kX2V4aXN0cygkdGhpcywgJ2Jsb2NrJy4kQ3VycmVudEJsb2NrWyd0eXBlJ10uJ0NvbXBsZXRlJykpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkQ3VycmVudEJsb2NrID0gJHRoaXMtPnsnYmxvY2snLiRDdXJyZW50QmxvY2tbJ3R5cGUnXS4nQ29tcGxldGUnfSgkQ3VycmVudEJsb2NrKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHVuc2V0KCRDdXJyZW50QmxvY2tbJ2luY29tcGxldGUnXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgfgoKICAgICAgICAgICAgJG1hcmtlciA9ICR0ZXh0WzBdOwoKICAgICAgICAgICAgIyB+CgogICAgICAgICAgICAkYmxvY2tUeXBlcyA9ICR0aGlzLT51bm1hcmtlZEJsb2NrVHlwZXM7CgogICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPkJsb2NrVHlwZXNbJG1hcmtlcl0pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+QmxvY2tUeXBlc1skbWFya2VyXSBhcyAkYmxvY2tUeXBlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRibG9ja1R5cGVzIFtdPSAkYmxvY2tUeXBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjCiAgICAgICAgICAgICMgfgoKICAgICAgICAgICAgZm9yZWFjaCAoJGJsb2NrVHlwZXMgYXMgJGJsb2NrVHlwZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJEJsb2NrID0gJHRoaXMtPnsnYmxvY2snLiRibG9ja1R5cGV9KCRMaW5lLCAkQ3VycmVudEJsb2NrKTsKCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJEJsb2NrKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkQmxvY2tbJ3R5cGUnXSA9ICRibG9ja1R5cGU7CgogICAgICAgICAgICAgICAgICAgIGlmICggISBpc3NldCgkQmxvY2tbJ2lkZW50aWZpZWQnXSkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkQmxvY2tzIFtdPSAkQ3VycmVudEJsb2NrOwoKICAgICAgICAgICAgICAgICAgICAgICAgJEJsb2NrWydpZGVudGlmaWVkJ10gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZF9leGlzdHMoJHRoaXMsICdibG9jaycuJGJsb2NrVHlwZS4nQ29udGludWUnKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRCbG9ja1snaW5jb21wbGV0ZSddID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRDdXJyZW50QmxvY2sgPSAkQmxvY2s7CgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIDI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgfgoKICAgICAgICAgICAgaWYgKGlzc2V0KCRDdXJyZW50QmxvY2spIGFuZCAhIGlzc2V0KCRDdXJyZW50QmxvY2tbJ3R5cGUnXSkgYW5kICEgaXNzZXQoJEN1cnJlbnRCbG9ja1snaW50ZXJydXB0ZWQnXSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRDdXJyZW50QmxvY2tbJ2VsZW1lbnQnXVsndGV4dCddIC49ICJcbiIuJHRleHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkQmxvY2tzIFtdPSAkQ3VycmVudEJsb2NrOwoKICAgICAgICAgICAgICAgICRDdXJyZW50QmxvY2sgPSAkdGhpcy0+cGFyYWdyYXBoKCRMaW5lKTsKCiAgICAgICAgICAgICAgICAkQ3VycmVudEJsb2NrWydpZGVudGlmaWVkJ10gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIH4KCiAgICAgICAgaWYgKGlzc2V0KCRDdXJyZW50QmxvY2tbJ2luY29tcGxldGUnXSkgYW5kIG1ldGhvZF9leGlzdHMoJHRoaXMsICdibG9jaycuJEN1cnJlbnRCbG9ja1sndHlwZSddLidDb21wbGV0ZScpKQogICAgICAgIHsKICAgICAgICAgICAgJEN1cnJlbnRCbG9jayA9ICR0aGlzLT57J2Jsb2NrJy4kQ3VycmVudEJsb2NrWyd0eXBlJ10uJ0NvbXBsZXRlJ30oJEN1cnJlbnRCbG9jayk7CiAgICAgICAgfQoKICAgICAgICAjIH4KCiAgICAgICAgJEJsb2NrcyBbXT0gJEN1cnJlbnRCbG9jazsKCiAgICAgICAgdW5zZXQoJEJsb2Nrc1swXSk7CgogICAgICAgICMgfgoKICAgICAgICAkbWFya3VwID0gJyc7CgogICAgICAgIGZvcmVhY2ggKCRCbG9ja3MgYXMgJEJsb2NrKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRCbG9ja1snaGlkZGVuJ10pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJG1hcmt1cCAuPSAiXG4iOwogICAgICAgICAgICAkbWFya3VwIC49IGlzc2V0KCRCbG9ja1snbWFya3VwJ10pID8gJEJsb2NrWydtYXJrdXAnXSA6ICR0aGlzLT5lbGVtZW50KCRCbG9ja1snZWxlbWVudCddKTsKICAgICAgICB9CgogICAgICAgICRtYXJrdXAgLj0gIlxuIjsKCiAgICAgICAgIyB+CgogICAgICAgIHJldHVybiAkbWFya3VwOwogICAgfQoKICAgICMKICAgICMgQ29kZQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBibG9ja0NvZGUoJExpbmUsICRCbG9jayA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRCbG9jaykgYW5kICEgaXNzZXQoJEJsb2NrWyd0eXBlJ10pIGFuZCAhIGlzc2V0KCRCbG9ja1snaW50ZXJydXB0ZWQnXSkpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoJExpbmVbJ2luZGVudCddID49IDQpCiAgICAgICAgewogICAgICAgICAgICAkdGV4dCA9IHN1YnN0cigkTGluZVsnYm9keSddLCA0KTsKCiAgICAgICAgICAgICRCbG9jayA9IGFycmF5KAogICAgICAgICAgICAgICAgJ2VsZW1lbnQnID0+IGFycmF5KAogICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAncHJlJywKICAgICAgICAgICAgICAgICAgICAnaGFuZGxlcicgPT4gJ2VsZW1lbnQnLAogICAgICAgICAgICAgICAgICAgICd0ZXh0JyA9PiBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICdjb2RlJywKICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQnID0+ICR0ZXh0LAogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRCbG9jazsKICAgICAgICB9CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJsb2NrQ29kZUNvbnRpbnVlKCRMaW5lLCAkQmxvY2spCiAgICB7CiAgICAgICAgaWYgKCRMaW5lWydpbmRlbnQnXSA+PSA0KQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRCbG9ja1snaW50ZXJydXB0ZWQnXSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRCbG9ja1snZWxlbWVudCddWyd0ZXh0J11bJ3RleHQnXSAuPSAiXG4iOwoKICAgICAgICAgICAgICAgIHVuc2V0KCRCbG9ja1snaW50ZXJydXB0ZWQnXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRCbG9ja1snZWxlbWVudCddWyd0ZXh0J11bJ3RleHQnXSAuPSAiXG4iOwoKICAgICAgICAgICAgJHRleHQgPSBzdWJzdHIoJExpbmVbJ2JvZHknXSwgNCk7CgogICAgICAgICAgICAkQmxvY2tbJ2VsZW1lbnQnXVsndGV4dCddWyd0ZXh0J10gLj0gJHRleHQ7CgogICAgICAgICAgICByZXR1cm4gJEJsb2NrOwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmxvY2tDb2RlQ29tcGxldGUoJEJsb2NrKQogICAgewogICAgICAgICR0ZXh0ID0gJEJsb2NrWydlbGVtZW50J11bJ3RleHQnXVsndGV4dCddOwoKICAgICAgICAkdGV4dCA9IGh0bWxzcGVjaWFsY2hhcnMoJHRleHQsIEVOVF9OT1FVT1RFUywgJ1VURi04Jyk7CgogICAgICAgICRCbG9ja1snZWxlbWVudCddWyd0ZXh0J11bJ3RleHQnXSA9ICR0ZXh0OwoKICAgICAgICByZXR1cm4gJEJsb2NrOwogICAgfQoKICAgICMKICAgICMgQ29tbWVudAoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBibG9ja0NvbW1lbnQoJExpbmUpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5tYXJrdXBFc2NhcGVkKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRMaW5lWyd0ZXh0J11bM10pIGFuZCAkTGluZVsndGV4dCddWzNdID09PSAnLScgYW5kICRMaW5lWyd0ZXh0J11bMl0gPT09ICctJyBhbmQgJExpbmVbJ3RleHQnXVsxXSA9PT0gJyEnKQogICAgICAgIHsKICAgICAgICAgICAgJEJsb2NrID0gYXJyYXkoCiAgICAgICAgICAgICAgICAnbWFya3VwJyA9PiAkTGluZVsnYm9keSddLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goJy8tLT4kLycsICRMaW5lWyd0ZXh0J10pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkQmxvY2tbJ2Nsb3NlZCddID0gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRCbG9jazsKICAgICAgICB9CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJsb2NrQ29tbWVudENvbnRpbnVlKCRMaW5lLCBhcnJheSAkQmxvY2spCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRCbG9ja1snY2xvc2VkJ10pKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJEJsb2NrWydtYXJrdXAnXSAuPSAiXG4iIC4gJExpbmVbJ2JvZHknXTsKCiAgICAgICAgaWYgKHByZWdfbWF0Y2goJy8tLT4kLycsICRMaW5lWyd0ZXh0J10pKQogICAgICAgIHsKICAgICAgICAgICAgJEJsb2NrWydjbG9zZWQnXSA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJEJsb2NrOwogICAgfQoKICAgICMKICAgICMgRmVuY2VkIENvZGUKCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmxvY2tGZW5jZWRDb2RlKCRMaW5lKQogICAgewogICAgICAgIGlmIChwcmVnX21hdGNoKCcvXihbJy4kTGluZVsndGV4dCddWzBdLiddezMsfSlbIF0qKFtcdy1dKyk/WyBdKiQvJywgJExpbmVbJ3RleHQnXSwgJG1hdGNoZXMpKQogICAgICAgIHsKICAgICAgICAgICAgJEVsZW1lbnQgPSBhcnJheSgKICAgICAgICAgICAgICAgICduYW1lJyA9PiAnY29kZScsCiAgICAgICAgICAgICAgICAndGV4dCcgPT4gJycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoaXNzZXQoJG1hdGNoZXNbMl0pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkY2xhc3MgPSAnbGFuZ3VhZ2UtJy4kbWF0Y2hlc1syXTsKCiAgICAgICAgICAgICAgICAkRWxlbWVudFsnYXR0cmlidXRlcyddID0gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ2NsYXNzJyA9PiAkY2xhc3MsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkQmxvY2sgPSBhcnJheSgKICAgICAgICAgICAgICAgICdjaGFyJyA9PiAkTGluZVsndGV4dCddWzBdLAogICAgICAgICAgICAgICAgJ2VsZW1lbnQnID0+IGFycmF5KAogICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAncHJlJywKICAgICAgICAgICAgICAgICAgICAnaGFuZGxlcicgPT4gJ2VsZW1lbnQnLAogICAgICAgICAgICAgICAgICAgICd0ZXh0JyA9PiAkRWxlbWVudCwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJEJsb2NrOwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmxvY2tGZW5jZWRDb2RlQ29udGludWUoJExpbmUsICRCbG9jaykKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJEJsb2NrWydjb21wbGV0ZSddKSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkQmxvY2tbJ2ludGVycnVwdGVkJ10pKQogICAgICAgIHsKICAgICAgICAgICAgJEJsb2NrWydlbGVtZW50J11bJ3RleHQnXVsndGV4dCddIC49ICJcbiI7CgogICAgICAgICAgICB1bnNldCgkQmxvY2tbJ2ludGVycnVwdGVkJ10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9eJy4kQmxvY2tbJ2NoYXInXS4nezMsfVsgXSokLycsICRMaW5lWyd0ZXh0J10pKQogICAgICAgIHsKICAgICAgICAgICAgJEJsb2NrWydlbGVtZW50J11bJ3RleHQnXVsndGV4dCddID0gc3Vic3RyKCRCbG9ja1snZWxlbWVudCddWyd0ZXh0J11bJ3RleHQnXSwgMSk7CgogICAgICAgICAgICAkQmxvY2tbJ2NvbXBsZXRlJ10gPSB0cnVlOwoKICAgICAgICAgICAgcmV0dXJuICRCbG9jazsKICAgICAgICB9CgogICAgICAgICRCbG9ja1snZWxlbWVudCddWyd0ZXh0J11bJ3RleHQnXSAuPSAiXG4iLiRMaW5lWydib2R5J107OwoKICAgICAgICByZXR1cm4gJEJsb2NrOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBibG9ja0ZlbmNlZENvZGVDb21wbGV0ZSgkQmxvY2spCiAgICB7CiAgICAgICAgJHRleHQgPSAkQmxvY2tbJ2VsZW1lbnQnXVsndGV4dCddWyd0ZXh0J107CgogICAgICAgICR0ZXh0ID0gaHRtbHNwZWNpYWxjaGFycygkdGV4dCwgRU5UX05PUVVPVEVTLCAnVVRGLTgnKTsKCiAgICAgICAgJEJsb2NrWydlbGVtZW50J11bJ3RleHQnXVsndGV4dCddID0gJHRleHQ7CgogICAgICAgIHJldHVybiAkQmxvY2s7CiAgICB9CgogICAgIwogICAgIyBIZWFkZXIKCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmxvY2tIZWFkZXIoJExpbmUpCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRMaW5lWyd0ZXh0J11bMV0pKQogICAgICAgIHsKICAgICAgICAgICAgJGxldmVsID0gMTsKCiAgICAgICAgICAgIHdoaWxlIChpc3NldCgkTGluZVsndGV4dCddWyRsZXZlbF0pIGFuZCAkTGluZVsndGV4dCddWyRsZXZlbF0gPT09ICcjJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJGxldmVsICsrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGxldmVsID4gNikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGV4dCA9IHRyaW0oJExpbmVbJ3RleHQnXSwgJyMgJyk7CgogICAgICAgICAgICAkQmxvY2sgPSBhcnJheSgKICAgICAgICAgICAgICAgICdlbGVtZW50JyA9PiBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnbmFtZScgPT4gJ2gnIC4gbWluKDYsICRsZXZlbCksCiAgICAgICAgICAgICAgICAgICAgJ3RleHQnID0+ICR0ZXh0LAogICAgICAgICAgICAgICAgICAgICdoYW5kbGVyJyA9PiAnbGluZScsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRCbG9jazsKICAgICAgICB9CiAgICB9CgogICAgIwogICAgIyBMaXN0CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJsb2NrTGlzdCgkTGluZSkKICAgIHsKICAgICAgICBsaXN0KCRuYW1lLCAkcGF0dGVybikgPSAkTGluZVsndGV4dCddWzBdIDw9ICctJyA/IGFycmF5KCd1bCcsICdbKistXScpIDogYXJyYXkoJ29sJywgJ1swLTldK1suXScpOwoKICAgICAgICBpZiAocHJlZ19tYXRjaCgnL14oJy4kcGF0dGVybi4nWyBdKykoLiopLycsICRMaW5lWyd0ZXh0J10sICRtYXRjaGVzKSkKICAgICAgICB7CiAgICAgICAgICAgICRCbG9jayA9IGFycmF5KAogICAgICAgICAgICAgICAgJ2luZGVudCcgPT4gJExpbmVbJ2luZGVudCddLAogICAgICAgICAgICAgICAgJ3BhdHRlcm4nID0+ICRwYXR0ZXJuLAogICAgICAgICAgICAgICAgJ2VsZW1lbnQnID0+IGFycmF5KAogICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAkbmFtZSwKICAgICAgICAgICAgICAgICAgICAnaGFuZGxlcicgPT4gJ2VsZW1lbnRzJywKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkQmxvY2tbJ2xpJ10gPSBhcnJheSgKICAgICAgICAgICAgICAgICduYW1lJyA9PiAnbGknLAogICAgICAgICAgICAgICAgJ2hhbmRsZXInID0+ICdsaScsCiAgICAgICAgICAgICAgICAndGV4dCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJG1hdGNoZXNbMl0sCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJEJsb2NrWydlbGVtZW50J11bJ3RleHQnXSBbXT0gJiAkQmxvY2tbJ2xpJ107CgogICAgICAgICAgICByZXR1cm4gJEJsb2NrOwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmxvY2tMaXN0Q29udGludWUoJExpbmUsIGFycmF5ICRCbG9jaykKICAgIHsKICAgICAgICBpZiAoJEJsb2NrWydpbmRlbnQnXSA9PT0gJExpbmVbJ2luZGVudCddIGFuZCBwcmVnX21hdGNoKCcvXicuJEJsb2NrWydwYXR0ZXJuJ10uJyg/OlsgXSsoLiopfCQpLycsICRMaW5lWyd0ZXh0J10sICRtYXRjaGVzKSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChpc3NldCgkQmxvY2tbJ2ludGVycnVwdGVkJ10pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkQmxvY2tbJ2xpJ11bJ3RleHQnXSBbXT0gJyc7CgogICAgICAgICAgICAgICAgdW5zZXQoJEJsb2NrWydpbnRlcnJ1cHRlZCddKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdW5zZXQoJEJsb2NrWydsaSddKTsKCiAgICAgICAgICAgICR0ZXh0ID0gaXNzZXQoJG1hdGNoZXNbMV0pID8gJG1hdGNoZXNbMV0gOiAnJzsKCiAgICAgICAgICAgICRCbG9ja1snbGknXSA9IGFycmF5KAogICAgICAgICAgICAgICAgJ25hbWUnID0+ICdsaScsCiAgICAgICAgICAgICAgICAnaGFuZGxlcicgPT4gJ2xpJywKICAgICAgICAgICAgICAgICd0ZXh0JyA9PiBhcnJheSgKICAgICAgICAgICAgICAgICAgICAkdGV4dCwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkQmxvY2tbJ2VsZW1lbnQnXVsndGV4dCddIFtdPSAmICRCbG9ja1snbGknXTsKCiAgICAgICAgICAgIHJldHVybiAkQmxvY2s7CiAgICAgICAgfQoKICAgICAgICBpZiAoJExpbmVbJ3RleHQnXVswXSA9PT0gJ1snIGFuZCAkdGhpcy0+YmxvY2tSZWZlcmVuY2UoJExpbmUpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRCbG9jazsKICAgICAgICB9CgogICAgICAgIGlmICggISBpc3NldCgkQmxvY2tbJ2ludGVycnVwdGVkJ10pKQogICAgICAgIHsKICAgICAgICAgICAgJHRleHQgPSBwcmVnX3JlcGxhY2UoJy9eWyBdezAsNH0vJywgJycsICRMaW5lWydib2R5J10pOwoKICAgICAgICAgICAgJEJsb2NrWydsaSddWyd0ZXh0J10gW109ICR0ZXh0OwoKICAgICAgICAgICAgcmV0dXJuICRCbG9jazsKICAgICAgICB9CgogICAgICAgIGlmICgkTGluZVsnaW5kZW50J10gPiAwKQogICAgICAgIHsKICAgICAgICAgICAgJEJsb2NrWydsaSddWyd0ZXh0J10gW109ICcnOwoKICAgICAgICAgICAgJHRleHQgPSBwcmVnX3JlcGxhY2UoJy9eWyBdezAsNH0vJywgJycsICRMaW5lWydib2R5J10pOwoKICAgICAgICAgICAgJEJsb2NrWydsaSddWyd0ZXh0J10gW109ICR0ZXh0OwoKICAgICAgICAgICAgdW5zZXQoJEJsb2NrWydpbnRlcnJ1cHRlZCddKTsKCiAgICAgICAgICAgIHJldHVybiAkQmxvY2s7CiAgICAgICAgfQogICAgfQoKICAgICMKICAgICMgUXVvdGUKCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmxvY2tRdW90ZSgkTGluZSkKICAgIHsKICAgICAgICBpZiAocHJlZ19tYXRjaCgnL14+WyBdPyguKikvJywgJExpbmVbJ3RleHQnXSwgJG1hdGNoZXMpKQogICAgICAgIHsKICAgICAgICAgICAgJEJsb2NrID0gYXJyYXkoCiAgICAgICAgICAgICAgICAnZWxlbWVudCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICdibG9ja3F1b3RlJywKICAgICAgICAgICAgICAgICAgICAnaGFuZGxlcicgPT4gJ2xpbmVzJywKICAgICAgICAgICAgICAgICAgICAndGV4dCcgPT4gKGFycmF5KSAkbWF0Y2hlc1sxXSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJEJsb2NrOwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmxvY2tRdW90ZUNvbnRpbnVlKCRMaW5lLCBhcnJheSAkQmxvY2spCiAgICB7CiAgICAgICAgaWYgKCRMaW5lWyd0ZXh0J11bMF0gPT09ICc+JyBhbmQgcHJlZ19tYXRjaCgnL14+WyBdPyguKikvJywgJExpbmVbJ3RleHQnXSwgJG1hdGNoZXMpKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRCbG9ja1snaW50ZXJydXB0ZWQnXSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRCbG9ja1snZWxlbWVudCddWyd0ZXh0J10gW109ICcnOwoKICAgICAgICAgICAgICAgIHVuc2V0KCRCbG9ja1snaW50ZXJydXB0ZWQnXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRCbG9ja1snZWxlbWVudCddWyd0ZXh0J10gW109ICRtYXRjaGVzWzFdOwoKICAgICAgICAgICAgcmV0dXJuICRCbG9jazsKICAgICAgICB9CgogICAgICAgIGlmICggISBpc3NldCgkQmxvY2tbJ2ludGVycnVwdGVkJ10pKQogICAgICAgIHsKICAgICAgICAgICAgJEJsb2NrWydlbGVtZW50J11bJ3RleHQnXSBbXT0gJExpbmVbJ3RleHQnXTsKCiAgICAgICAgICAgIHJldHVybiAkQmxvY2s7CiAgICAgICAgfQogICAgfQoKICAgICMKICAgICMgUnVsZQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBibG9ja1J1bGUoJExpbmUpCiAgICB7CiAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9eKFsnLiRMaW5lWyd0ZXh0J11bMF0uJ10pKFsgXSpcMSl7Mix9WyBdKiQvJywgJExpbmVbJ3RleHQnXSkpCiAgICAgICAgewogICAgICAgICAgICAkQmxvY2sgPSBhcnJheSgKICAgICAgICAgICAgICAgICdlbGVtZW50JyA9PiBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnbmFtZScgPT4gJ2hyJwogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiAkQmxvY2s7CiAgICAgICAgfQogICAgfQoKICAgICMKICAgICMgU2V0ZXh0CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJsb2NrU2V0ZXh0SGVhZGVyKCRMaW5lLCBhcnJheSAkQmxvY2sgPSBudWxsKQogICAgewogICAgICAgIGlmICggISBpc3NldCgkQmxvY2spIG9yIGlzc2V0KCRCbG9ja1sndHlwZSddKSBvciBpc3NldCgkQmxvY2tbJ2ludGVycnVwdGVkJ10pKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNob3AoJExpbmVbJ3RleHQnXSwgJExpbmVbJ3RleHQnXVswXSkgPT09ICcnKQogICAgICAgIHsKICAgICAgICAgICAgJEJsb2NrWydlbGVtZW50J11bJ25hbWUnXSA9ICRMaW5lWyd0ZXh0J11bMF0gPT09ICc9JyA/ICdoMScgOiAnaDInOwoKICAgICAgICAgICAgcmV0dXJuICRCbG9jazsKICAgICAgICB9CiAgICB9CgogICAgIwogICAgIyBNYXJrdXAKCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmxvY2tNYXJrdXAoJExpbmUpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5tYXJrdXBFc2NhcGVkKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9ePChcdyopKD86WyBdKicuJHRoaXMtPnJlZ2V4SHRtbEF0dHJpYnV0ZS4nKSpbIF0qKFwvKT8+LycsICRMaW5lWyd0ZXh0J10sICRtYXRjaGVzKSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChpbl9hcnJheSgkbWF0Y2hlc1sxXSwgJHRoaXMtPnRleHRMZXZlbEVsZW1lbnRzKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkQmxvY2sgPSBhcnJheSgKICAgICAgICAgICAgICAgICduYW1lJyA9PiAkbWF0Y2hlc1sxXSwKICAgICAgICAgICAgICAgICdkZXB0aCcgPT4gMCwKICAgICAgICAgICAgICAgICdtYXJrdXAnID0+ICRMaW5lWyd0ZXh0J10sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkbGVuZ3RoID0gc3RybGVuKCRtYXRjaGVzWzBdKTsKCiAgICAgICAgICAgICRyZW1haW5kZXIgPSBzdWJzdHIoJExpbmVbJ3RleHQnXSwgJGxlbmd0aCk7CgogICAgICAgICAgICBpZiAodHJpbSgkcmVtYWluZGVyKSA9PT0gJycpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkbWF0Y2hlc1syXSkgb3IgaW5fYXJyYXkoJG1hdGNoZXNbMV0sICR0aGlzLT52b2lkRWxlbWVudHMpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRCbG9ja1snY2xvc2VkJ10gPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICAkQmxvY2tbJ3ZvaWQnXSA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJG1hdGNoZXNbMl0pIG9yIGluX2FycmF5KCRtYXRjaGVzWzFdLCAkdGhpcy0+dm9pZEVsZW1lbnRzKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goJy88XC8nLiRtYXRjaGVzWzFdLic+WyBdKiQvaScsICRyZW1haW5kZXIpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRCbG9ja1snY2xvc2VkJ10gPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gJEJsb2NrOwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmxvY2tNYXJrdXBDb250aW51ZSgkTGluZSwgYXJyYXkgJEJsb2NrKQogICAgewogICAgICAgIGlmIChpc3NldCgkQmxvY2tbJ2Nsb3NlZCddKSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChwcmVnX21hdGNoKCcvXjwnLiRCbG9ja1snbmFtZSddLicoPzpbIF0qJy4kdGhpcy0+cmVnZXhIdG1sQXR0cmlidXRlLicpKlsgXSo+L2knLCAkTGluZVsndGV4dCddKSkgIyBvcGVuCiAgICAgICAgewogICAgICAgICAgICAkQmxvY2tbJ2RlcHRoJ10gKys7CiAgICAgICAgfQoKICAgICAgICBpZiAocHJlZ19tYXRjaCgnLyguKj8pPFwvJy4kQmxvY2tbJ25hbWUnXS4nPlsgXSokL2knLCAkTGluZVsndGV4dCddLCAkbWF0Y2hlcykpICMgY2xvc2UKICAgICAgICB7CiAgICAgICAgICAgIGlmICgkQmxvY2tbJ2RlcHRoJ10gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkQmxvY2tbJ2RlcHRoJ10gLS07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkQmxvY2tbJ2Nsb3NlZCddID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRCbG9ja1snaW50ZXJydXB0ZWQnXSkpCiAgICAgICAgewogICAgICAgICAgICAkQmxvY2tbJ21hcmt1cCddIC49ICJcbiI7CgogICAgICAgICAgICB1bnNldCgkQmxvY2tbJ2ludGVycnVwdGVkJ10pOwogICAgICAgIH0KCiAgICAgICAgJEJsb2NrWydtYXJrdXAnXSAuPSAiXG4iLiRMaW5lWydib2R5J107CgogICAgICAgIHJldHVybiAkQmxvY2s7CiAgICB9CgogICAgIwogICAgIyBSZWZlcmVuY2UKCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmxvY2tSZWZlcmVuY2UoJExpbmUpCiAgICB7CiAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9eXFsoLis/KVxdOlsgXSo8PyhcUys/KT4/KD86WyBdK1siXCcoXSguKylbIlwnKV0pP1sgXSokLycsICRMaW5lWyd0ZXh0J10sICRtYXRjaGVzKSkKICAgICAgICB7CiAgICAgICAgICAgICRpZCA9IHN0cnRvbG93ZXIoJG1hdGNoZXNbMV0pOwoKICAgICAgICAgICAgJERhdGEgPSBhcnJheSgKICAgICAgICAgICAgICAgICd1cmwnID0+ICRtYXRjaGVzWzJdLAogICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiBudWxsLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKGlzc2V0KCRtYXRjaGVzWzNdKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJERhdGFbJ3RpdGxlJ10gPSAkbWF0Y2hlc1szXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPkRlZmluaXRpb25EYXRhWydSZWZlcmVuY2UnXVskaWRdID0gJERhdGE7CgogICAgICAgICAgICAkQmxvY2sgPSBhcnJheSgKICAgICAgICAgICAgICAgICdoaWRkZW4nID0+IHRydWUsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJEJsb2NrOwogICAgICAgIH0KICAgIH0KCiAgICAjCiAgICAjIFRhYmxlCgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJsb2NrVGFibGUoJExpbmUsIGFycmF5ICRCbG9jayA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCAhIGlzc2V0KCRCbG9jaykgb3IgaXNzZXQoJEJsb2NrWyd0eXBlJ10pIG9yIGlzc2V0KCRCbG9ja1snaW50ZXJydXB0ZWQnXSkpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RycG9zKCRCbG9ja1snZWxlbWVudCddWyd0ZXh0J10sICd8JykgIT09IGZhbHNlIGFuZCBjaG9wKCRMaW5lWyd0ZXh0J10sICcgLTp8JykgPT09ICcnKQogICAgICAgIHsKICAgICAgICAgICAgJGFsaWdubWVudHMgPSBhcnJheSgpOwoKICAgICAgICAgICAgJGRpdmlkZXIgPSAkTGluZVsndGV4dCddOwoKICAgICAgICAgICAgJGRpdmlkZXIgPSB0cmltKCRkaXZpZGVyKTsKICAgICAgICAgICAgJGRpdmlkZXIgPSB0cmltKCRkaXZpZGVyLCAnfCcpOwoKICAgICAgICAgICAgJGRpdmlkZXJDZWxscyA9IGV4cGxvZGUoJ3wnLCAkZGl2aWRlcik7CgogICAgICAgICAgICBmb3JlYWNoICgkZGl2aWRlckNlbGxzIGFzICRkaXZpZGVyQ2VsbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJGRpdmlkZXJDZWxsID0gdHJpbSgkZGl2aWRlckNlbGwpOwoKICAgICAgICAgICAgICAgIGlmICgkZGl2aWRlckNlbGwgPT09ICcnKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRhbGlnbm1lbnQgPSBudWxsOwoKICAgICAgICAgICAgICAgIGlmICgkZGl2aWRlckNlbGxbMF0gPT09ICc6JykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkYWxpZ25tZW50ID0gJ2xlZnQnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzdWJzdHIoJGRpdmlkZXJDZWxsLCAtIDEpID09PSAnOicpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJGFsaWdubWVudCA9ICRhbGlnbm1lbnQgPT09ICdsZWZ0JyA/ICdjZW50ZXInIDogJ3JpZ2h0JzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkYWxpZ25tZW50cyBbXT0gJGFsaWdubWVudDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB+CgogICAgICAgICAgICAkSGVhZGVyRWxlbWVudHMgPSBhcnJheSgpOwoKICAgICAgICAgICAgJGhlYWRlciA9ICRCbG9ja1snZWxlbWVudCddWyd0ZXh0J107CgogICAgICAgICAgICAkaGVhZGVyID0gdHJpbSgkaGVhZGVyKTsKICAgICAgICAgICAgJGhlYWRlciA9IHRyaW0oJGhlYWRlciwgJ3wnKTsKCiAgICAgICAgICAgICRoZWFkZXJDZWxscyA9IGV4cGxvZGUoJ3wnLCAkaGVhZGVyKTsKCiAgICAgICAgICAgIGZvcmVhY2ggKCRoZWFkZXJDZWxscyBhcyAkaW5kZXggPT4gJGhlYWRlckNlbGwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRoZWFkZXJDZWxsID0gdHJpbSgkaGVhZGVyQ2VsbCk7CgogICAgICAgICAgICAgICAgJEhlYWRlckVsZW1lbnQgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnbmFtZScgPT4gJ3RoJywKICAgICAgICAgICAgICAgICAgICAndGV4dCcgPT4gJGhlYWRlckNlbGwsCiAgICAgICAgICAgICAgICAgICAgJ2hhbmRsZXInID0+ICdsaW5lJywKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhbGlnbm1lbnRzWyRpbmRleF0pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRhbGlnbm1lbnQgPSAkYWxpZ25tZW50c1skaW5kZXhdOwoKICAgICAgICAgICAgICAgICAgICAkSGVhZGVyRWxlbWVudFsnYXR0cmlidXRlcyddID0gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgICdzdHlsZScgPT4gJ3RleHQtYWxpZ246ICcuJGFsaWdubWVudC4nOycsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkSGVhZGVyRWxlbWVudHMgW109ICRIZWFkZXJFbGVtZW50OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIH4KCiAgICAgICAgICAgICRCbG9jayA9IGFycmF5KAogICAgICAgICAgICAgICAgJ2FsaWdubWVudHMnID0+ICRhbGlnbm1lbnRzLAogICAgICAgICAgICAgICAgJ2lkZW50aWZpZWQnID0+IHRydWUsCiAgICAgICAgICAgICAgICAnZWxlbWVudCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICd0YWJsZScsCiAgICAgICAgICAgICAgICAgICAgJ2hhbmRsZXInID0+ICdlbGVtZW50cycsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJEJsb2NrWydlbGVtZW50J11bJ3RleHQnXSBbXT0gYXJyYXkoCiAgICAgICAgICAgICAgICAnbmFtZScgPT4gJ3RoZWFkJywKICAgICAgICAgICAgICAgICdoYW5kbGVyJyA9PiAnZWxlbWVudHMnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJEJsb2NrWydlbGVtZW50J11bJ3RleHQnXSBbXT0gYXJyYXkoCiAgICAgICAgICAgICAgICAnbmFtZScgPT4gJ3Rib2R5JywKICAgICAgICAgICAgICAgICdoYW5kbGVyJyA9PiAnZWxlbWVudHMnLAogICAgICAgICAgICAgICAgJ3RleHQnID0+IGFycmF5KCksCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkQmxvY2tbJ2VsZW1lbnQnXVsndGV4dCddWzBdWyd0ZXh0J10gW109IGFycmF5KAogICAgICAgICAgICAgICAgJ25hbWUnID0+ICd0cicsCiAgICAgICAgICAgICAgICAnaGFuZGxlcicgPT4gJ2VsZW1lbnRzJywKICAgICAgICAgICAgICAgICd0ZXh0JyA9PiAkSGVhZGVyRWxlbWVudHMsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJEJsb2NrOwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmxvY2tUYWJsZUNvbnRpbnVlKCRMaW5lLCBhcnJheSAkQmxvY2spCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRCbG9ja1snaW50ZXJydXB0ZWQnXSkpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoJExpbmVbJ3RleHQnXVswXSA9PT0gJ3wnIG9yIHN0cnBvcygkTGluZVsndGV4dCddLCAnfCcpKQogICAgICAgIHsKICAgICAgICAgICAgJEVsZW1lbnRzID0gYXJyYXkoKTsKCiAgICAgICAgICAgICRyb3cgPSAkTGluZVsndGV4dCddOwoKICAgICAgICAgICAgJHJvdyA9IHRyaW0oJHJvdyk7CiAgICAgICAgICAgICRyb3cgPSB0cmltKCRyb3csICd8Jyk7CgogICAgICAgICAgICBwcmVnX21hdGNoX2FsbCgnLyg/OihcXFxcW3xdKXxbXnxgXXxgW15gXStgfGApKy8nLCAkcm93LCAkbWF0Y2hlcyk7CgogICAgICAgICAgICBmb3JlYWNoICgkbWF0Y2hlc1swXSBhcyAkaW5kZXggPT4gJGNlbGwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRjZWxsID0gdHJpbSgkY2VsbCk7CgogICAgICAgICAgICAgICAgJEVsZW1lbnQgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnbmFtZScgPT4gJ3RkJywKICAgICAgICAgICAgICAgICAgICAnaGFuZGxlcicgPT4gJ2xpbmUnLAogICAgICAgICAgICAgICAgICAgICd0ZXh0JyA9PiAkY2VsbCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRCbG9ja1snYWxpZ25tZW50cyddWyRpbmRleF0pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRFbGVtZW50WydhdHRyaWJ1dGVzJ10gPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgJ3N0eWxlJyA9PiAndGV4dC1hbGlnbjogJy4kQmxvY2tbJ2FsaWdubWVudHMnXVskaW5kZXhdLic7JywKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRFbGVtZW50cyBbXT0gJEVsZW1lbnQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRFbGVtZW50ID0gYXJyYXkoCiAgICAgICAgICAgICAgICAnbmFtZScgPT4gJ3RyJywKICAgICAgICAgICAgICAgICdoYW5kbGVyJyA9PiAnZWxlbWVudHMnLAogICAgICAgICAgICAgICAgJ3RleHQnID0+ICRFbGVtZW50cywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRCbG9ja1snZWxlbWVudCddWyd0ZXh0J11bMV1bJ3RleHQnXSBbXT0gJEVsZW1lbnQ7CgogICAgICAgICAgICByZXR1cm4gJEJsb2NrOwogICAgICAgIH0KICAgIH0KCiAgICAjCiAgICAjIH4KICAgICMKCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcGFyYWdyYXBoKCRMaW5lKQogICAgewogICAgICAgICRCbG9jayA9IGFycmF5KAogICAgICAgICAgICAnZWxlbWVudCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAnbmFtZScgPT4gJ3AnLAogICAgICAgICAgICAgICAgJ3RleHQnID0+ICRMaW5lWyd0ZXh0J10sCiAgICAgICAgICAgICAgICAnaGFuZGxlcicgPT4gJ2xpbmUnLAogICAgICAgICAgICApLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkQmxvY2s7CiAgICB9CgogICAgIwogICAgIyBJbmxpbmUgRWxlbWVudHMKICAgICMKCiAgICBwcm90ZWN0ZWQgJElubGluZVR5cGVzID0gYXJyYXkoCiAgICAgICAgJyInID0+IGFycmF5KCdTcGVjaWFsQ2hhcmFjdGVyJyksCiAgICAgICAgJyEnID0+IGFycmF5KCdJbWFnZScpLAogICAgICAgICcmJyA9PiBhcnJheSgnU3BlY2lhbENoYXJhY3RlcicpLAogICAgICAgICcqJyA9PiBhcnJheSgnRW1waGFzaXMnKSwKICAgICAgICAnOicgPT4gYXJyYXkoJ1VybCcpLAogICAgICAgICc8JyA9PiBhcnJheSgnVXJsVGFnJywgJ0VtYWlsVGFnJywgJ01hcmt1cCcsICdTcGVjaWFsQ2hhcmFjdGVyJyksCiAgICAgICAgJz4nID0+IGFycmF5KCdTcGVjaWFsQ2hhcmFjdGVyJyksCiAgICAgICAgJ1snID0+IGFycmF5KCdMaW5rJyksCiAgICAgICAgJ18nID0+IGFycmF5KCdFbXBoYXNpcycpLAogICAgICAgICdgJyA9PiBhcnJheSgnQ29kZScpLAogICAgICAgICd+JyA9PiBhcnJheSgnU3RyaWtldGhyb3VnaCcpLAogICAgICAgICdcXCcgPT4gYXJyYXkoJ0VzY2FwZVNlcXVlbmNlJyksCiAgICApOwoKICAgICMgfgoKICAgIHByb3RlY3RlZCAkaW5saW5lTWFya2VyTGlzdCA9ICchIipfJls6PD5gflxcJzsKCiAgICAjCiAgICAjIH4KICAgICMKCiAgICBwdWJsaWMgZnVuY3Rpb24gbGluZSgkdGV4dCkKICAgIHsKICAgICAgICAkbWFya3VwID0gJyc7CgogICAgICAgICR1bmV4YW1pbmVkVGV4dCA9ICR0ZXh0OwoKICAgICAgICAkbWFya2VyUG9zaXRpb24gPSAwOwoKICAgICAgICB3aGlsZSAoJGV4Y2VycHQgPSBzdHJwYnJrKCR1bmV4YW1pbmVkVGV4dCwgJHRoaXMtPmlubGluZU1hcmtlckxpc3QpKQogICAgICAgIHsKICAgICAgICAgICAgJG1hcmtlciA9ICRleGNlcnB0WzBdOwoKICAgICAgICAgICAgJG1hcmtlclBvc2l0aW9uICs9IHN0cnBvcygkdW5leGFtaW5lZFRleHQsICRtYXJrZXIpOwoKICAgICAgICAgICAgJEV4Y2VycHQgPSBhcnJheSgndGV4dCcgPT4gJGV4Y2VycHQsICdjb250ZXh0JyA9PiAkdGV4dCk7CgogICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+SW5saW5lVHlwZXNbJG1hcmtlcl0gYXMgJGlubGluZVR5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRJbmxpbmUgPSAkdGhpcy0+eydpbmxpbmUnLiRpbmxpbmVUeXBlfSgkRXhjZXJwdCk7CgogICAgICAgICAgICAgICAgaWYgKCAhIGlzc2V0KCRJbmxpbmUpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkSW5saW5lWydwb3NpdGlvbiddKSBhbmQgJElubGluZVsncG9zaXRpb24nXSA+ICRtYXJrZXJQb3NpdGlvbikgIyBwb3NpdGlvbiBpcyBhaGVhZCBvZiBtYXJrZXIKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICEgaXNzZXQoJElubGluZVsncG9zaXRpb24nXSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJElubGluZVsncG9zaXRpb24nXSA9ICRtYXJrZXJQb3NpdGlvbjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdW5tYXJrZWRUZXh0ID0gc3Vic3RyKCR0ZXh0LCAwLCAkSW5saW5lWydwb3NpdGlvbiddKTsKCiAgICAgICAgICAgICAgICAkbWFya3VwIC49ICR0aGlzLT51bm1hcmtlZFRleHQoJHVubWFya2VkVGV4dCk7CgogICAgICAgICAgICAgICAgJG1hcmt1cCAuPSBpc3NldCgkSW5saW5lWydtYXJrdXAnXSkgPyAkSW5saW5lWydtYXJrdXAnXSA6ICR0aGlzLT5lbGVtZW50KCRJbmxpbmVbJ2VsZW1lbnQnXSk7CgogICAgICAgICAgICAgICAgJHRleHQgPSBzdWJzdHIoJHRleHQsICRJbmxpbmVbJ3Bvc2l0aW9uJ10gKyAkSW5saW5lWydleHRlbnQnXSk7CgogICAgICAgICAgICAgICAgJHVuZXhhbWluZWRUZXh0ID0gJHRleHQ7CgogICAgICAgICAgICAgICAgJG1hcmtlclBvc2l0aW9uID0gMDsKCiAgICAgICAgICAgICAgICBjb250aW51ZSAyOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdW5leGFtaW5lZFRleHQgPSBzdWJzdHIoJGV4Y2VycHQsIDEpOwoKICAgICAgICAgICAgJG1hcmtlclBvc2l0aW9uICsrOwogICAgICAgIH0KCiAgICAgICAgJG1hcmt1cCAuPSAkdGhpcy0+dW5tYXJrZWRUZXh0KCR0ZXh0KTsKCiAgICAgICAgcmV0dXJuICRtYXJrdXA7CiAgICB9CgogICAgIwogICAgIyB+CiAgICAjCgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGlubGluZUNvZGUoJEV4Y2VycHQpCiAgICB7CiAgICAgICAgJG1hcmtlciA9ICRFeGNlcnB0Wyd0ZXh0J11bMF07CgogICAgICAgIGlmIChwcmVnX21hdGNoKCcvXignLiRtYXJrZXIuJyspWyBdKiguKz8pWyBdKig/PCEnLiRtYXJrZXIuJylcMSg/IScuJG1hcmtlci4nKS9zJywgJEV4Y2VycHRbJ3RleHQnXSwgJG1hdGNoZXMpKQogICAgICAgIHsKICAgICAgICAgICAgJHRleHQgPSAkbWF0Y2hlc1syXTsKICAgICAgICAgICAgJHRleHQgPSBodG1sc3BlY2lhbGNoYXJzKCR0ZXh0LCBFTlRfTk9RVU9URVMsICdVVEYtOCcpOwogICAgICAgICAgICAkdGV4dCA9IHByZWdfcmVwbGFjZSgiL1sgXSpcbi8iLCAnICcsICR0ZXh0KTsKCiAgICAgICAgICAgIHJldHVybiBhcnJheSgKICAgICAgICAgICAgICAgICdleHRlbnQnID0+IHN0cmxlbigkbWF0Y2hlc1swXSksCiAgICAgICAgICAgICAgICAnZWxlbWVudCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICdjb2RlJywKICAgICAgICAgICAgICAgICAgICAndGV4dCcgPT4gJHRleHQsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gaW5saW5lRW1haWxUYWcoJEV4Y2VycHQpCiAgICB7CiAgICAgICAgaWYgKHN0cnBvcygkRXhjZXJwdFsndGV4dCddLCAnPicpICE9PSBmYWxzZSBhbmQgcHJlZ19tYXRjaCgnL148KChtYWlsdG86KT9cUys/QFxTKz8pPi9pJywgJEV4Y2VycHRbJ3RleHQnXSwgJG1hdGNoZXMpKQogICAgICAgIHsKICAgICAgICAgICAgJHVybCA9ICRtYXRjaGVzWzFdOwoKICAgICAgICAgICAgaWYgKCAhIGlzc2V0KCRtYXRjaGVzWzJdKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHVybCA9ICdtYWlsdG86JyAuICR1cmw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBhcnJheSgKICAgICAgICAgICAgICAgICdleHRlbnQnID0+IHN0cmxlbigkbWF0Y2hlc1swXSksCiAgICAgICAgICAgICAgICAnZWxlbWVudCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICdhJywKICAgICAgICAgICAgICAgICAgICAndGV4dCcgPT4gJG1hdGNoZXNbMV0sCiAgICAgICAgICAgICAgICAgICAgJ2F0dHJpYnV0ZXMnID0+IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAnaHJlZicgPT4gJHVybCwKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGlubGluZUVtcGhhc2lzKCRFeGNlcnB0KQogICAgewogICAgICAgIGlmICggISBpc3NldCgkRXhjZXJwdFsndGV4dCddWzFdKSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRtYXJrZXIgPSAkRXhjZXJwdFsndGV4dCddWzBdOwoKICAgICAgICBpZiAoJEV4Y2VycHRbJ3RleHQnXVsxXSA9PT0gJG1hcmtlciBhbmQgcHJlZ19tYXRjaCgkdGhpcy0+U3Ryb25nUmVnZXhbJG1hcmtlcl0sICRFeGNlcnB0Wyd0ZXh0J10sICRtYXRjaGVzKSkKICAgICAgICB7CiAgICAgICAgICAgICRlbXBoYXNpcyA9ICdzdHJvbmcnOwogICAgICAgIH0KICAgICAgICBlbHNlaWYgKHByZWdfbWF0Y2goJHRoaXMtPkVtUmVnZXhbJG1hcmtlcl0sICRFeGNlcnB0Wyd0ZXh0J10sICRtYXRjaGVzKSkKICAgICAgICB7CiAgICAgICAgICAgICRlbXBoYXNpcyA9ICdlbSc7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHJldHVybiBhcnJheSgKICAgICAgICAgICAgJ2V4dGVudCcgPT4gc3RybGVuKCRtYXRjaGVzWzBdKSwKICAgICAgICAgICAgJ2VsZW1lbnQnID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ25hbWUnID0+ICRlbXBoYXNpcywKICAgICAgICAgICAgICAgICdoYW5kbGVyJyA9PiAnbGluZScsCiAgICAgICAgICAgICAgICAndGV4dCcgPT4gJG1hdGNoZXNbMV0sCiAgICAgICAgICAgICksCiAgICAgICAgKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gaW5saW5lRXNjYXBlU2VxdWVuY2UoJEV4Y2VycHQpCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRFeGNlcnB0Wyd0ZXh0J11bMV0pIGFuZCBpbl9hcnJheSgkRXhjZXJwdFsndGV4dCddWzFdLCAkdGhpcy0+c3BlY2lhbENoYXJhY3RlcnMpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgICAgICAgJ21hcmt1cCcgPT4gJEV4Y2VycHRbJ3RleHQnXVsxXSwKICAgICAgICAgICAgICAgICdleHRlbnQnID0+IDIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBpbmxpbmVJbWFnZSgkRXhjZXJwdCkKICAgIHsKICAgICAgICBpZiAoICEgaXNzZXQoJEV4Y2VycHRbJ3RleHQnXVsxXSkgb3IgJEV4Y2VycHRbJ3RleHQnXVsxXSAhPT0gJ1snKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJEV4Y2VycHRbJ3RleHQnXT0gc3Vic3RyKCRFeGNlcnB0Wyd0ZXh0J10sIDEpOwoKICAgICAgICAkTGluayA9ICR0aGlzLT5pbmxpbmVMaW5rKCRFeGNlcnB0KTsKCiAgICAgICAgaWYgKCRMaW5rID09PSBudWxsKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJElubGluZSA9IGFycmF5KAogICAgICAgICAgICAnZXh0ZW50JyA9PiAkTGlua1snZXh0ZW50J10gKyAxLAogICAgICAgICAgICAnZWxlbWVudCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAnbmFtZScgPT4gJ2ltZycsCiAgICAgICAgICAgICAgICAnYXR0cmlidXRlcycgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ3NyYycgPT4gJExpbmtbJ2VsZW1lbnQnXVsnYXR0cmlidXRlcyddWydocmVmJ10sCiAgICAgICAgICAgICAgICAgICAgJ2FsdCcgPT4gJExpbmtbJ2VsZW1lbnQnXVsndGV4dCddLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKSwKICAgICAgICApOwoKICAgICAgICAkSW5saW5lWydlbGVtZW50J11bJ2F0dHJpYnV0ZXMnXSArPSAkTGlua1snZWxlbWVudCddWydhdHRyaWJ1dGVzJ107CgogICAgICAgIHVuc2V0KCRJbmxpbmVbJ2VsZW1lbnQnXVsnYXR0cmlidXRlcyddWydocmVmJ10pOwoKICAgICAgICByZXR1cm4gJElubGluZTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gaW5saW5lTGluaygkRXhjZXJwdCkKICAgIHsKICAgICAgICAkRWxlbWVudCA9IGFycmF5KAogICAgICAgICAgICAnbmFtZScgPT4gJ2EnLAogICAgICAgICAgICAnaGFuZGxlcicgPT4gJ2xpbmUnLAogICAgICAgICAgICAndGV4dCcgPT4gbnVsbCwKICAgICAgICAgICAgJ2F0dHJpYnV0ZXMnID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ2hyZWYnID0+IG51bGwsCiAgICAgICAgICAgICAgICAndGl0bGUnID0+IG51bGwsCiAgICAgICAgICAgICksCiAgICAgICAgKTsKCiAgICAgICAgJGV4dGVudCA9IDA7CgogICAgICAgICRyZW1haW5kZXIgPSAkRXhjZXJwdFsndGV4dCddOwoKICAgICAgICBpZiAocHJlZ19tYXRjaCgnL1xbKCg/OlteXVtdfCg/UikpKilcXS8nLCAkcmVtYWluZGVyLCAkbWF0Y2hlcykpCiAgICAgICAgewogICAgICAgICAgICAkRWxlbWVudFsndGV4dCddID0gJG1hdGNoZXNbMV07CgogICAgICAgICAgICAkZXh0ZW50ICs9IHN0cmxlbigkbWF0Y2hlc1swXSk7CgogICAgICAgICAgICAkcmVtYWluZGVyID0gc3Vic3RyKCRyZW1haW5kZXIsICRleHRlbnQpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAocHJlZ19tYXRjaCgnL15bKF0oKD86W14gKCldfFsoXVteICldK1spXSkrKSg/OlsgXSsoIlteIl0qInxcJ1teXCddKlwnKSk/WyldLycsICRyZW1haW5kZXIsICRtYXRjaGVzKSkKICAgICAgICB7CiAgICAgICAgICAgICRFbGVtZW50WydhdHRyaWJ1dGVzJ11bJ2hyZWYnXSA9ICRtYXRjaGVzWzFdOwoKICAgICAgICAgICAgaWYgKGlzc2V0KCRtYXRjaGVzWzJdKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJEVsZW1lbnRbJ2F0dHJpYnV0ZXMnXVsndGl0bGUnXSA9IHN1YnN0cigkbWF0Y2hlc1syXSwgMSwgLSAxKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGV4dGVudCArPSBzdHJsZW4oJG1hdGNoZXNbMF0pOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnL15ccypcWyguKj8pXF0vJywgJHJlbWFpbmRlciwgJG1hdGNoZXMpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkZGVmaW5pdGlvbiA9ICRtYXRjaGVzWzFdID8gJG1hdGNoZXNbMV0gOiAkRWxlbWVudFsndGV4dCddOwogICAgICAgICAgICAgICAgJGRlZmluaXRpb24gPSBzdHJ0b2xvd2VyKCRkZWZpbml0aW9uKTsKCiAgICAgICAgICAgICAgICAkZXh0ZW50ICs9IHN0cmxlbigkbWF0Y2hlc1swXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkZGVmaW5pdGlvbiA9IHN0cnRvbG93ZXIoJEVsZW1lbnRbJ3RleHQnXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggISBpc3NldCgkdGhpcy0+RGVmaW5pdGlvbkRhdGFbJ1JlZmVyZW5jZSddWyRkZWZpbml0aW9uXSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJERlZmluaXRpb24gPSAkdGhpcy0+RGVmaW5pdGlvbkRhdGFbJ1JlZmVyZW5jZSddWyRkZWZpbml0aW9uXTsKCiAgICAgICAgICAgICRFbGVtZW50WydhdHRyaWJ1dGVzJ11bJ2hyZWYnXSA9ICREZWZpbml0aW9uWyd1cmwnXTsKICAgICAgICAgICAgJEVsZW1lbnRbJ2F0dHJpYnV0ZXMnXVsndGl0bGUnXSA9ICREZWZpbml0aW9uWyd0aXRsZSddOwogICAgICAgIH0KCiAgICAgICAgJEVsZW1lbnRbJ2F0dHJpYnV0ZXMnXVsnaHJlZiddID0gc3RyX3JlcGxhY2UoYXJyYXkoJyYnLCAnPCcpLCBhcnJheSgnJmFtcDsnLCAnJmx0OycpLCAkRWxlbWVudFsnYXR0cmlidXRlcyddWydocmVmJ10pOwoKICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgICdleHRlbnQnID0+ICRleHRlbnQsCiAgICAgICAgICAgICdlbGVtZW50JyA9PiAkRWxlbWVudCwKICAgICAgICApOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBpbmxpbmVNYXJrdXAoJEV4Y2VycHQpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5tYXJrdXBFc2NhcGVkIG9yIHN0cnBvcygkRXhjZXJwdFsndGV4dCddLCAnPicpID09PSBmYWxzZSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmICgkRXhjZXJwdFsndGV4dCddWzFdID09PSAnLycgYW5kIHByZWdfbWF0Y2goJy9ePFwvXHcqWyBdKj4vcycsICRFeGNlcnB0Wyd0ZXh0J10sICRtYXRjaGVzKSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgKICAgICAgICAgICAgICAgICdtYXJrdXAnID0+ICRtYXRjaGVzWzBdLAogICAgICAgICAgICAgICAgJ2V4dGVudCcgPT4gc3RybGVuKCRtYXRjaGVzWzBdKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICgkRXhjZXJwdFsndGV4dCddWzFdID09PSAnIScgYW5kIHByZWdfbWF0Y2goJy9ePCEtLS0/W14+LV0oPzotP1teLV0pKi0tPi9zJywgJEV4Y2VycHRbJ3RleHQnXSwgJG1hdGNoZXMpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgICAgICAgJ21hcmt1cCcgPT4gJG1hdGNoZXNbMF0sCiAgICAgICAgICAgICAgICAnZXh0ZW50JyA9PiBzdHJsZW4oJG1hdGNoZXNbMF0pLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRFeGNlcnB0Wyd0ZXh0J11bMV0gIT09ICcgJyBhbmQgcHJlZ19tYXRjaCgnL148XHcqKD86WyBdKicuJHRoaXMtPnJlZ2V4SHRtbEF0dHJpYnV0ZS4nKSpbIF0qXC8/Pi9zJywgJEV4Y2VycHRbJ3RleHQnXSwgJG1hdGNoZXMpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgICAgICAgJ21hcmt1cCcgPT4gJG1hdGNoZXNbMF0sCiAgICAgICAgICAgICAgICAnZXh0ZW50JyA9PiBzdHJsZW4oJG1hdGNoZXNbMF0pLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gaW5saW5lU3BlY2lhbENoYXJhY3RlcigkRXhjZXJwdCkKICAgIHsKICAgICAgICBpZiAoJEV4Y2VycHRbJ3RleHQnXVswXSA9PT0gJyYnIGFuZCAhIHByZWdfbWF0Y2goJy9eJiM/XHcrOy8nLCAkRXhjZXJwdFsndGV4dCddKSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgKICAgICAgICAgICAgICAgICdtYXJrdXAnID0+ICcmYW1wOycsCiAgICAgICAgICAgICAgICAnZXh0ZW50JyA9PiAxLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJFNwZWNpYWxDaGFyYWN0ZXIgPSBhcnJheSgnPicgPT4gJ2d0JywgJzwnID0+ICdsdCcsICciJyA9PiAncXVvdCcpOwoKICAgICAgICBpZiAoaXNzZXQoJFNwZWNpYWxDaGFyYWN0ZXJbJEV4Y2VycHRbJ3RleHQnXVswXV0pKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgICAgICAgJ21hcmt1cCcgPT4gJyYnLiRTcGVjaWFsQ2hhcmFjdGVyWyRFeGNlcnB0Wyd0ZXh0J11bMF1dLic7JywKICAgICAgICAgICAgICAgICdleHRlbnQnID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBpbmxpbmVTdHJpa2V0aHJvdWdoKCRFeGNlcnB0KQogICAgewogICAgICAgIGlmICggISBpc3NldCgkRXhjZXJwdFsndGV4dCddWzFdKSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmICgkRXhjZXJwdFsndGV4dCddWzFdID09PSAnficgYW5kIHByZWdfbWF0Y2goJy9efn4oPz1cUykoLis/KSg/PD1cUyl+fi8nLCAkRXhjZXJwdFsndGV4dCddLCAkbWF0Y2hlcykpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgICAgICAnZXh0ZW50JyA9PiBzdHJsZW4oJG1hdGNoZXNbMF0pLAogICAgICAgICAgICAgICAgJ2VsZW1lbnQnID0+IGFycmF5KAogICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAnZGVsJywKICAgICAgICAgICAgICAgICAgICAndGV4dCcgPT4gJG1hdGNoZXNbMV0sCiAgICAgICAgICAgICAgICAgICAgJ2hhbmRsZXInID0+ICdsaW5lJywKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBpbmxpbmVVcmwoJEV4Y2VycHQpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT51cmxzTGlua2VkICE9PSB0cnVlIG9yICEgaXNzZXQoJEV4Y2VycHRbJ3RleHQnXVsyXSkgb3IgJEV4Y2VycHRbJ3RleHQnXVsyXSAhPT0gJy8nKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9cYmh0dHBzPzpbXC9dezJ9W15cczxdK1xiXC8qL3VpJywgJEV4Y2VycHRbJ2NvbnRleHQnXSwgJG1hdGNoZXMsIFBSRUdfT0ZGU0VUX0NBUFRVUkUpKQogICAgICAgIHsKICAgICAgICAgICAgJElubGluZSA9IGFycmF5KAogICAgICAgICAgICAgICAgJ2V4dGVudCcgPT4gc3RybGVuKCRtYXRjaGVzWzBdWzBdKSwKICAgICAgICAgICAgICAgICdwb3NpdGlvbicgPT4gJG1hdGNoZXNbMF1bMV0sCiAgICAgICAgICAgICAgICAnZWxlbWVudCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICdhJywKICAgICAgICAgICAgICAgICAgICAndGV4dCcgPT4gJG1hdGNoZXNbMF1bMF0sCiAgICAgICAgICAgICAgICAgICAgJ2F0dHJpYnV0ZXMnID0+IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAnaHJlZicgPT4gJG1hdGNoZXNbMF1bMF0sCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJElubGluZTsKICAgICAgICB9CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGlubGluZVVybFRhZygkRXhjZXJwdCkKICAgIHsKICAgICAgICBpZiAoc3RycG9zKCRFeGNlcnB0Wyd0ZXh0J10sICc+JykgIT09IGZhbHNlIGFuZCBwcmVnX21hdGNoKCcvXjwoXHcrOlwvezJ9W14gPl0rKT4vaScsICRFeGNlcnB0Wyd0ZXh0J10sICRtYXRjaGVzKSkKICAgICAgICB7CiAgICAgICAgICAgICR1cmwgPSBzdHJfcmVwbGFjZShhcnJheSgnJicsICc8JyksIGFycmF5KCcmYW1wOycsICcmbHQ7JyksICRtYXRjaGVzWzFdKTsKCiAgICAgICAgICAgIHJldHVybiBhcnJheSgKICAgICAgICAgICAgICAgICdleHRlbnQnID0+IHN0cmxlbigkbWF0Y2hlc1swXSksCiAgICAgICAgICAgICAgICAnZWxlbWVudCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICdhJywKICAgICAgICAgICAgICAgICAgICAndGV4dCcgPT4gJHVybCwKICAgICAgICAgICAgICAgICAgICAnYXR0cmlidXRlcycgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgICdocmVmJyA9PiAkdXJsLAogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIH4KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gdW5tYXJrZWRUZXh0KCR0ZXh0KQogICAgewogICAgICAgIGlmICgkdGhpcy0+YnJlYWtzRW5hYmxlZCkKICAgICAgICB7CiAgICAgICAgICAgICR0ZXh0ID0gcHJlZ19yZXBsYWNlKCcvWyBdKlxuLycsICI8YnIgLz5cbiIsICR0ZXh0KTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgJHRleHQgPSBwcmVnX3JlcGxhY2UoJy8oPzpbIF1bIF0rfFsgXSpcXFxcKVxuLycsICI8YnIgLz5cbiIsICR0ZXh0KTsKICAgICAgICAgICAgJHRleHQgPSBzdHJfcmVwbGFjZSgiIFxuIiwgIlxuIiwgJHRleHQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0ZXh0OwogICAgfQoKICAgICMKICAgICMgSGFuZGxlcnMKICAgICMKCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZWxlbWVudChhcnJheSAkRWxlbWVudCkKICAgIHsKICAgICAgICAkbWFya3VwID0gJzwnLiRFbGVtZW50WyduYW1lJ107CgogICAgICAgIGlmIChpc3NldCgkRWxlbWVudFsnYXR0cmlidXRlcyddKSkKICAgICAgICB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRFbGVtZW50WydhdHRyaWJ1dGVzJ10gYXMgJG5hbWUgPT4gJHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoJHZhbHVlID09PSBudWxsKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRtYXJrdXAgLj0gJyAnLiRuYW1lLic9IicuJHZhbHVlLiciJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRFbGVtZW50Wyd0ZXh0J10pKQogICAgICAgIHsKICAgICAgICAgICAgJG1hcmt1cCAuPSAnPic7CgogICAgICAgICAgICBpZiAoaXNzZXQoJEVsZW1lbnRbJ2hhbmRsZXInXSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRtYXJrdXAgLj0gJHRoaXMtPnskRWxlbWVudFsnaGFuZGxlciddfSgkRWxlbWVudFsndGV4dCddKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRtYXJrdXAgLj0gJEVsZW1lbnRbJ3RleHQnXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJG1hcmt1cCAuPSAnPC8nLiRFbGVtZW50WyduYW1lJ10uJz4nOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAkbWFya3VwIC49ICcgLz4nOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRtYXJrdXA7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGVsZW1lbnRzKGFycmF5ICRFbGVtZW50cykKICAgIHsKICAgICAgICAkbWFya3VwID0gJyc7CgogICAgICAgIGZvcmVhY2ggKCRFbGVtZW50cyBhcyAkRWxlbWVudCkKICAgICAgICB7CiAgICAgICAgICAgICRtYXJrdXAgLj0gIlxuIiAuICR0aGlzLT5lbGVtZW50KCRFbGVtZW50KTsKICAgICAgICB9CgogICAgICAgICRtYXJrdXAgLj0gIlxuIjsKCiAgICAgICAgcmV0dXJuICRtYXJrdXA7CiAgICB9CgogICAgIyB+CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxpKCRsaW5lcykKICAgIHsKICAgICAgICAkbWFya3VwID0gJHRoaXMtPmxpbmVzKCRsaW5lcyk7CgogICAgICAgICR0cmltbWVkTWFya3VwID0gdHJpbSgkbWFya3VwKTsKCiAgICAgICAgaWYgKCAhIGluX2FycmF5KCcnLCAkbGluZXMpIGFuZCBzdWJzdHIoJHRyaW1tZWRNYXJrdXAsIDAsIDMpID09PSAnPHA+JykKICAgICAgICB7CiAgICAgICAgICAgICRtYXJrdXAgPSAkdHJpbW1lZE1hcmt1cDsKICAgICAgICAgICAgJG1hcmt1cCA9IHN1YnN0cigkbWFya3VwLCAzKTsKCiAgICAgICAgICAgICRwb3NpdGlvbiA9IHN0cnBvcygkbWFya3VwLCAiPC9wPiIpOwoKICAgICAgICAgICAgJG1hcmt1cCA9IHN1YnN0cl9yZXBsYWNlKCRtYXJrdXAsICcnLCAkcG9zaXRpb24sIDQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRtYXJrdXA7CiAgICB9CgogICAgIwogICAgIyBEZXByZWNhdGVkIE1ldGhvZHMKICAgICMKCiAgICBmdW5jdGlvbiBwYXJzZSgkdGV4dCkKICAgIHsKICAgICAgICAkbWFya3VwID0gJHRoaXMtPnRleHQoJHRleHQpOwoKICAgICAgICByZXR1cm4gJG1hcmt1cDsKICAgIH0KCiAgICAjCiAgICAjIFN0YXRpYyBNZXRob2RzCiAgICAjCgogICAgc3RhdGljIGZ1bmN0aW9uIGluc3RhbmNlKCRuYW1lID0gJ2RlZmF1bHQnKQogICAgewogICAgICAgIGlmIChpc3NldChzZWxmOjokaW5zdGFuY2VzWyRuYW1lXSkpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6JGluc3RhbmNlc1skbmFtZV07CiAgICAgICAgfQoKICAgICAgICAkaW5zdGFuY2UgPSBuZXcgc2VsZigpOwoKICAgICAgICBzZWxmOjokaW5zdGFuY2VzWyRuYW1lXSA9ICRpbnN0YW5jZTsKCiAgICAgICAgcmV0dXJuICRpbnN0YW5jZTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyAkaW5zdGFuY2VzID0gYXJyYXkoKTsKCiAgICAjCiAgICAjIEZpZWxkcwogICAgIwoKICAgIHByb3RlY3RlZCAkRGVmaW5pdGlvbkRhdGE7CgogICAgIwogICAgIyBSZWFkLU9ubHkKCiAgICBwcm90ZWN0ZWQgJHNwZWNpYWxDaGFyYWN0ZXJzID0gYXJyYXkoCiAgICAgICAgJ1xcJywgJ2AnLCAnKicsICdfJywgJ3snLCAnfScsICdbJywgJ10nLCAnKCcsICcpJywgJz4nLCAnIycsICcrJywgJy0nLCAnLicsICchJywgJ3wnLAogICAgKTsKCiAgICBwcm90ZWN0ZWQgJFN0cm9uZ1JlZ2V4ID0gYXJyYXkoCiAgICAgICAgJyonID0+ICcvXlsqXXsyfSgoPzpcXFxcXCp8W14qXXxbKl1bXipdKlsqXSkrPylbKl17Mn0oPyFbKl0pL3MnLAogICAgICAgICdfJyA9PiAnL15fXygoPzpcXFxcX3xbXl9dfF9bXl9dKl8pKz8pX18oPyFfKS91cycsCiAgICApOwoKICAgIHByb3RlY3RlZCAkRW1SZWdleCA9IGFycmF5KAogICAgICAgICcqJyA9PiAnL15bKl0oKD86XFxcXFwqfFteKl18WypdWypdW14qXSs/WypdWypdKSs/KVsqXSg/IVsqXSkvcycsCiAgICAgICAgJ18nID0+ICcvXl8oKD86XFxcXF98W15fXXxfX1teX10qX18pKz8pXyg/IV8pXGIvdXMnLAogICAgKTsKCiAgICBwcm90ZWN0ZWQgJHJlZ2V4SHRtbEF0dHJpYnV0ZSA9ICdbYS16QS1aXzpdW1x3Oi4tXSooPzpccyo9XHMqKD86W14iXCc9PD5gXHNdK3wiW14iXSoifFwnW15cJ10qXCcpKT8nOwoKICAgIHByb3RlY3RlZCAkdm9pZEVsZW1lbnRzID0gYXJyYXkoCiAgICAgICAgJ2FyZWEnLCAnYmFzZScsICdicicsICdjb2wnLCAnY29tbWFuZCcsICdlbWJlZCcsICdocicsICdpbWcnLCAnaW5wdXQnLCAnbGluaycsICdtZXRhJywgJ3BhcmFtJywgJ3NvdXJjZScsCiAgICApOwoKICAgIHByb3RlY3RlZCAkdGV4dExldmVsRWxlbWVudHMgPSBhcnJheSgKICAgICAgICAnYScsICdicicsICdiZG8nLCAnYWJicicsICdibGluaycsICduZXh0aWQnLCAnYWNyb255bScsICdiYXNlZm9udCcsCiAgICAgICAgJ2InLCAnZW0nLCAnYmlnJywgJ2NpdGUnLCAnc21hbGwnLCAnc3BhY2VyJywgJ2xpc3RpbmcnLAogICAgICAgICdpJywgJ3JwJywgJ2RlbCcsICdjb2RlJywgICAgICAgICAgJ3N0cmlrZScsICdtYXJxdWVlJywKICAgICAgICAncScsICdydCcsICdpbnMnLCAnZm9udCcsICAgICAgICAgICdzdHJvbmcnLAogICAgICAgICdzJywgJ3R0JywgJ3N1YicsICdtYXJrJywKICAgICAgICAndScsICd4bScsICdzdXAnLCAnbm9icicsCiAgICAgICAgICAgICAgICAgICAndmFyJywgJ3J1YnknLAogICAgICAgICAgICAgICAgICAgJ3dicicsICdzcGFuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAndGltZScsCiAgICApOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/Engines/Parsedown/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyMgUGFyc2Vkb3duCgpbIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vdHJhdmlzL2VydXNldi9wYXJzZWRvd24vbWFzdGVyLnN2Zz9zdHlsZT1mbGF0LXNxdWFyZSldKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9lcnVzZXYvcGFyc2Vkb3duKQo8IS0tWyFbVG90YWwgRG93bmxvYWRzXShodHRwOi8vaW1nLnNoaWVsZHMuaW8vcGFja2FnaXN0L2R0L2VydXNldi9wYXJzZWRvd24uc3ZnP3N0eWxlPWZsYXQtc3F1YXJlKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL2VydXNldi9wYXJzZWRvd24pLS0+CgpCZXR0ZXIgTWFya2Rvd24gTWFya2Rvd24gaW4gUEhQCgpbU2VlIERlbW9dKGh0dHA6Ly9wYXJzZWRvd24ub3JnL2RlbW8pCgojIyMgRmVhdHVyZXMKCiogW0Zhc3RdKGh0dHA6Ly9wYXJzZWRvd24ub3JnL3NwZWVkKQoqIFtDb25zaXN0ZW50XShodHRwOi8vcGFyc2Vkb3duLm9yZy9jb25zaXN0ZW5jeSkKKiBbR2l0SHViIGZsYXZvcmVkXShodHRwczovL2hlbHAuZ2l0aHViLmNvbS9hcnRpY2xlcy9naXRodWItZmxhdm9yZWQtbWFya2Rvd24pCiogW1Rlc3RlZF0oaHR0cDovL3BhcnNlZG93bi5vcmcvdGVzdHMvKSBpbiBQSFAgNS4zLCA1LjQsIDUuNSwgNS42IGFuZCBbSEhWTV0oaHR0cDovL3d3dy5oaHZtLmNvbS8pCiogW0V4dGVuc2libGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9lcnVzZXYvcGFyc2Vkb3duL3dpa2kvV3JpdGluZy1FeHRlbnNpb25zKQoqIFtNYXJrZG93biBFeHRyYSBleHRlbnNpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9lcnVzZXYvcGFyc2Vkb3duLWV4dHJhKQoKIyMjIEluc3RhbGxhdGlvbgoKSW5jbHVkZSBgUGFyc2Vkb3duLnBocGAgb3IgaW5zdGFsbCBbdGhlIGNvbXBvc2VyIHBhY2thZ2VdKGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9lcnVzZXYvcGFyc2Vkb3duKS4KCiMjIyBFeGFtcGxlCgpgYGAgcGhwCiRQYXJzZWRvd24gPSBuZXcgUGFyc2Vkb3duKCk7CgplY2hvICRQYXJzZWRvd24tPnRleHQoJ0hlbGxvIF9QYXJzZWRvd25fIScpOyAjIHByaW50czogPHA+SGVsbG8gPGVtPlBhcnNlZG93bjwvZW0+ITwvcD4KYGBgCgpNb3JlIGV4YW1wbGVzIGluIFt0aGUgd2lraV0oaHR0cHM6Ly9naXRodWIuY29tL2VydXNldi9wYXJzZWRvd24vd2lraS9Vc2FnZSkgYW5kIGluIFt0aGlzIHZpZGVvIHR1dG9yaWFsXShodHRwOi8veW91dHUuYmUvd1laQlk4REVpa0kpLgoKIyMjIFF1ZXN0aW9ucwoKKipIb3cgZG9lcyBQYXJzZWRvd24gd29yaz8qKgoKSXQgdHJpZXMgdG8gcmVhZCBNYXJrZG93biBsaWtlIGEgaHVtYW4uIEZpcnN0LCBpdCBsb29rcyBhdCB0aGUgbGluZXMuIEl04oCZcyBpbnRlcmVzdGVkIGluIGhvdyB0aGUgbGluZXMgc3RhcnQuIFRoaXMgaGVscHMgaXQgcmVjb2duaXNlIGJsb2Nrcy4gSXQga25vd3MsIGZvciBleGFtcGxlLCB0aGF0IGlmIGEgbGluZSBzdGFydCB3aXRoIGEgYC1gIHRoZW4gaXQgcGVyaGFwcyBiZWxvbmcgdG8gYSBsaXN0LiBPbmNlIGl0IHJlY29nbmlzZXMgdGhlIGJsb2NrcywgaXQgY29udGludWVzIHRvIHRoZSBjb250ZW50LiBBcyBpdCByZWFkcywgaXQgd2F0Y2hlcyBvdXQgZm9yIHNwZWNpYWwgY2hhcmFjdGVycy4gVGhpcyBoZWxwcyBpdCByZWNvZ25pc2UgaW5saW5lIGVsZW1lbnRzIChvciBpbmxpbmVzKS4KCldlIGNhbGwgdGhpcyBhcHByb2FjaCAibGluZSBiYXNlZCIuIFdlIGJlbGlldmUgdGhhdCBQYXJzZWRvd24gaXMgdGhlIGZpcnN0IE1hcmtkb3duIG1hcmtkb3duIHRvIHVzZSBpdC4gU2luY2UgdGhlIHJlbGVhc2Ugb2YgUGFyc2Vkb3duLCBvdGhlciBkZXZlbG9wZXJzIGhhdmUgdXNlZCB0aGUgc2FtZSBhcHByb2FjaCB0byBkZXZlbG9wIG90aGVyIE1hcmtkb3duIG1hcmtkb3ducyBpbiBQSFAgYW5kIGluIG90aGVyIGxhbmd1YWdlcy4KCioqSXMgaXQgY29tcGxpYW50IHdpdGggQ29tbW9uTWFyaz8qKgoKSXQgcGFzc2VzIG1vc3Qgb2YgdGhlIENvbW1vbk1hcmsgdGVzdHMuIE1vc3Qgb2YgdGhlIHRlc3RzIHRoYXQgZG9uJ3QgcGFzcyBkZWFsIHdpdGggY2FzZXMgdGhhdCBhcmUgcXVpdGUgdW5jb21tb24uIFN0aWxsLCBhcyBDb21tb25NYXJrIG1hdHVyZXMsIGNvbXBsaWFuY2Ugc2hvdWxkIGltcHJvdmUuCgoqKldobyB1c2VzIGl0PyoqCgpbcGhwRG9jdW1lbnRvcl0oaHR0cDovL3d3dy5waHBkb2Mub3JnLyksIFtPY3RvYmVyIENNU10oaHR0cDovL29jdG9iZXJjbXMuY29tLyksIFtCb2x0IENNU10oaHR0cDovL2JvbHQuY20vKSwgW0tpcmJ5IENNU10oaHR0cDovL2dldGtpcmJ5LmNvbS8pLCBbR3JhdiBDTVNdKGh0dHA6Ly9nZXRncmF2Lm9yZy8pLCBbU3RhdGFtaWMgQ01TXShodHRwOi8vd3d3LnN0YXRhbWljLmNvbS8pLCAgW1Jhc3BiZXJyeVBpLm9yZ10oaHR0cDovL3d3dy5yYXNwYmVycnlwaS5vcmcvKSBhbmQgW21vcmVdKGh0dHBzOi8vd3d3LnZlcnNpb25leWUuY29tL3BocC9lcnVzZXY6cGFyc2Vkb3duL3JlZmVyZW5jZXMpLgoKKipIb3cgY2FuIEkgaGVscD8qKgoKVXNlIGl0LCBzdGFyIGl0LCBzaGFyZSBpdCBhbmQgaWYgeW91IGZlZWwgZ2VuZXJvdXMsIFtkb25hdGUgc29tZSBtb25leV0oaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9jZ2ktYmluL3dlYnNjcj9jbWQ9X3MteGNsaWNrJmhvc3RlZF9idXR0b25faWQ9NTI4UDNOWlFNUDhOMikuCg==]]></data>
	</file>
	<file>
	  <filename>/lib/fonts/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/fonts/fontawesome-webfont.ttf</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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BwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHgAAABgAAAAQAAAAGAAAABAAAAAcAAAAGgAAABoAAAAcAAAAEAAAABwAAAAaAAHoFgAAABgAAAAYAAAAGgAAABwAAAAQAAAAGAgABBQAAmgUAAFoGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAQAYAAAAGgAA1BoAANQcAAAAGAAAABgAADQWAAAAFgAAABoAAegYAAAAGAAAABwAAAAWAAAAHAAAABwAAAAcAABAFgAAABoAAAAcAAAAHAAAABgAAAAcAAFoHAABaB4AAAAaAAAAGgAAAB4AAAAMAAEAHAAAACAAAAAYAAAAGAAAABwAAAAcAAAAHgAAABwAAAAYAAAAGAAAAA4AAAAcAAAAGgAAABgAAAASAAAAHAAAABgAAAAaAAAAGAAAABoAAAAYAAAAFgAAABYAAAAUAAAAGAAAABoAALAQAAF8GAAAABoAAAAeAAAAFgAAABgAAAAcAAAAHAABABgAAAgcAAAAHAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAaAABUHAAAABYAABQcAAAAGAAAAB4AAAAaAABAHgAAABoAAcwcAAAEHAAAABYAABAYAAAAGAAAABgAAAAcAAAAHAAAPBwAAAAYAAAAGgAAABoAAGwcAAEAGAAAABgAAAAYAAAAJAAAAB4AAAAQAAAAEAAAAAoAAQAKAAAAGgAAABAAAAAQAAAAEAAAABwAAAAYAAAAGAAAABwAAKAcAAAAHAAAABwAAAAOAAAEHAAAABoAAAAcAAAAEAAAABwAAAAeAAAAHgAAABYAAAAWAAAAHAAAABwAAQAeAAAAFgAAABgAAAAWAAAAFgAAAB4AAQAcAAAAHgAAABoAAQAYAAAAGAAAABAAALQQAAA0EgABNBIAATQKAAC0CgAANBIAATQSAAE0HgAAAB4AAAASAAAADAAAABgAAAAaAAAAGgAAABwAAQAYAAAAHAAAABoAAAAaAAAAHgAAABwAAAAcAAAAGAAAABgAAAAYAAAAHgAAAB4AAAAcAAEAHAABABoAADQeAAC0HAAAABoAAAgWAAAIGgAAABAAAAAaAAAAEAABgAoAAAAKAAGIGAAAFBgAABQeAAAEGgAAABIAAAAWAAA0FAAAABoAAAAWAAAMGgAAkBwAAAAYAAAAGAAAABgAAAAYAAAAFgAAABwAADAcAAAAEgAAABgAAAAWAAAABgAAABgAAAAYAAAAHAAA2BgAAAAWAAAAEAAADBAAAAwYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABAAAAAQAAAAEAAA0A4IAAAQDAAQFAAAABwAAAAUAADgGAAAABgAAAAaAACIGgAAiBwAAIgcAACIGAAAiBgAAIgaAAAAGgAAABgAAAAYAABsFgAAFBgAAAAcAAAAHAABABgAACwYAAAAGAAAABgAAAAWAAAAGAAAABAAARAYAAAADAAADAwAAAwcAAEAHAAAABYAAAAaAAAAFgAAABgAACwYAAAAGAAAABQAALAYAAAAFAAAABAAAAAYAAAAHAAAsBgAAAAcAAEAGgAAgB4D//wcAAAAGAAAABYAAAAUAABUGAAAABgAAAAYAAAAGAAAABoAAAAYAAAAEgAAABYAAAAiAAAAGgAAABgAAAAcAAAAHAAAACAAAAAkAAAAGAABtBgAAAAcAAAAGAAAABgAAAAeAAAAGAAAACAAAAAYAAAAH9gApBgAAAAYAAAAGAAAABwAAAAYAAAAFAABABoAAAAMAAEAHAAAACQAAAAgAAAAGAAAABwAAAAYAAAAHAAAQCAAAAAgAAAAGAAAgBgAAAAQAAAAJAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAACcHAAAACAAAAAcAAAAHAAAgBwAAEwcAAAAGAAAABwAARAYAAAAFAAA5BwAAEggAAAAHAAAABwAAAAYAAAAGAAAABwAAPgUAABgGAAAABgAAAAYAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAABkHAABkBgAAWQgAAAAIAAAqBwAAAAYAAAkHAAB3CQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACAAADggAAA4FgAAABgAAAAYAAAAHAAAABwAAAAcAAAAIAAAABwAAAAgAAAAHAAAABgAAAAgAAAAIAAAACQAAAAYAAAAIAAAABQAACwgAAAAGAAAABgAAAAYAAAAIAAAABgAAAAYAAAAIAAAACAAAAAYAAAAIAAAACAAAAAaAAAAGgAAACAAAAAgAABMGAAAACQAAAAYAAAAHAAAABQAAAgYAAAAFAAAA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AAAAAwABBAkAAQAWAF4AAwABBAkAAgAOAHQAAwABBAkAAwAuAIIAAwABBAkABAAmALAAAwABBAkABQAkANYAAwABBAkABgAWAPoAAwABBAkABwCiARAAAwABBAkACAAYAbIAAwABBAkACQAUAcoAAwABBAkACwAqAd4AAwABBAkADgA8AggAAwABBAkAyAAWAkQAAwABBAkAyQAwAloAAwABBAkAygAIAooAAwABBAkAywAKApIAAwABBAnZAwAaApwAQwBvAHAAeQByAGkAZwBoAHQAIABEAGEAdgBlACAARwBhAG4AZAB5ACAAMgAwADEANQAuACAAQQBsAGwAIAByAGkAZwBoAHQAcwAgAHIAZQBzAGUAcgB2AGUAZAAuAEYAbwBuAHQAQQB3AGUAcwBvAG0AZQBSAGUAZwB1AGwAYQByAHAAeQByAHMAOgAgAEYAbwBuAHQAQQB3AGUAcwBvAG0AZQA6ACAAMgAwADEAMgBGAG8AbgB0AEEAdwBlAHMAbwBtAGUAIABSAGUAZwB1AGwAYQByAFYAZQByAHMAaQBvAG4AIAA0AC4ANAAuADEAIAAyADAAMQA1AEYAbwBuAHQAQQB3AGUAcwBvAG0AZQBQAGwAZQBhAHMAZQAgAHIAZQBmAGUAcgAgAHQAbwAgAHQAaABlACAAQwBvAHAAeQByAGkAZwBoAHQAIABzAGUAYwB0AGkAbwBuACAAZgBvAHIAIAB0AGgAZQAgAGYAbwBuAHQAIAB0AHIAYQBkAGUAbQBhAHIAawAgAGEAdAB0AHIAaQBiAHUAdABpAG8AbgAgAG4AbwB0AGkAYwBlAHMALgBGAG8AcgB0ACAAQQB3AGUAcwBvAG0AZQBEAGEAdgBlACAARwBhAG4AZAB5AGgAdAB0AHAAOgAvAC8AZgBvAG4AdABhAHcAZQBzAG8AbQBlAC4AaQBvAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABhAHcAZQBzAG8AbQBlAC4AaQBvAC8AbABpAGMAZQBuAHMAZQAvAFcAZQBiAGYAbwBuAHQAIAAxAC4AMABGAHIAaQAgAE4AbwB2ACAAMgAwACAAMQA2ADoAMQA4ADoAMwAzACAAMgAwADEANQBrAGUAZQBwAG8AcgBpAG8AbgBGAG8AbgB0ACAAUwBxAHUAaQByAHIAZQBsAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChwAAAAEAAgADAQIAjgCLAIoAjQCQAJEBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwCMAJIAjwEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiASMBJAElASYBJwEoASkBKgErASwBLQEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgFbAVwBXQFeAV8BYAFhAWIBYwFkAWUBZgFnAWgBaQFqAWsBbAFtAW4BbwFwAXEADgDvAA0BcgFzAXQBdQF2AXcBeAF5AXoBewF8AX0BfgF/AYABgQGCAYMBhAGFAYYBhwGIAYkBigGLAYwBjQGOAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AbkBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAdQB1QHWAdcB2AHZAdoB2wHcAd0B3gHfAeAB4QHiAeMB5AHlAeYB5wHoAekB6gHrAewB7QHuAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6AfsB/AH9Af4B/wIAAgECAgIDAgQCBQIGAgcCCAIJAgoCCwIMAg0CDgIPAhACEQISAhMCFAIVAhYCFwAiAhgCGQIaAhsCHAIdAh4CHwIgAiECIgIjAiQCJQImAicCKAIpAioCKwIsAi0CLgIvAjACMQIyAjMCNAI1AjYCNwI4AjkCOgI7AjwCPQI+Aj8CQAJBAkICQwJEAkUCRgJHAkgCSQJKAksCTAJNAk4CTwJQAlECUgJTAlQCVQJWAlcCWAJZAloCWwJcAl0CXgJfAmACYQJiANICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLcAt0C3gLfAuAC4QLiAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1AJQHdW5pMDBBMAd1bmkyMDAwB3VuaTIwMDEHdW5pMjAwMgd1bmkyMDAzB3VuaTIwMDQHdW5pMjAwNQd1bmkyMDA2B3VuaTIwMDcHdW5pMjAwOAd1bmkyMDA5B3VuaTIwMEEHdW5pMjAyRgd1bmkyMDVGB3VuaTI1RkMFZ2xhc3MFbXVzaWMGc2VhcmNoCGVudmVsb3BlBWhlYXJ0BHN0YXIKc3Rhcl9lbXB0eQR1c2VyBGZpbG0IdGhfbGFyZ2UCdGgHdGhfbGlzdAJvawZyZW1vdmUHem9vbV9pbgh6b29tX291dANvZmYGc2lnbmFsA2NvZwV0cmFzaARob21lCGZpbGVfYWx0BHRpbWUEcm9hZAxkb3dubG9hZF9hbHQIZG93bmxvYWQGdXBsb2FkBWluYm94C3BsYXlfY2lyY2xlBnJlcGVhdAdyZWZyZXNoCGxpc3RfYWx0BGxvY2sEZmxhZwpoZWFkcGhvbmVzCnZvbHVtZV9vZmYLdm9sdW1lX2Rvd24Jdm9sdW1lX3VwBnFyY29kZQdiYXJjb2RlA3RhZwR0YWdzBGJvb2sIYm9va21hcmsFcHJpbnQGY2FtZXJhBGZvbnQEYm9sZAZpdGFsaWMLdGV4dF9oZWlnaHQKdGV4dF93aWR0aAphbGlnbl9sZWZ0DGFsaWduX2NlbnRlcgthbGlnbl9yaWdodA1hbGlnbl9qdXN0aWZ5BGxpc3QLaW5kZW50X2xlZnQMaW5kZW50X3JpZ2h0DmZhY2V0aW1lX3ZpZGVvB3BpY3R1cmUGcGVuY2lsCm1hcF9tYXJrZXIGYWRqdXN0BHRpbnQEZWRpdAVzaGFyZQVjaGVjawRtb3ZlDXN0ZXBfYmFja3dhcmQNZmFzdF9iYWNrd2FyZAhiYWNrd2FyZARwbGF5BXBhdXNlBHN0b3AHZm9yd2FyZAxmYXN0X2ZvcndhcmQMc3RlcF9mb3J3YXJkBWVqZWN0DGNoZXZyb25fbGVmdA1jaGV2cm9uX3JpZ2h0CXBsdXNfc2lnbgptaW51c19zaWduC3JlbW92ZV9zaWduB29rX3NpZ24NcXVlc3Rpb25fc2lnbglpbmZvX3NpZ24Kc2NyZWVuc2hvdA1yZW1vdmVfY2lyY2xlCW9rX2NpcmNsZQpiYW5fY2lyY2xlCmFycm93X2xlZnQLYXJyb3dfcmlnaHQIYXJyb3dfdXAKYXJyb3dfZG93bglzaGFyZV9hbHQLcmVzaXplX2Z1bGwMcmVzaXplX3NtYWxsEGV4Y2xhbWF0aW9uX3NpZ24EZ2lmdARsZWFmBGZpcmUIZXllX29wZW4JZXllX2Nsb3NlDHdhcm5pbmdfc2lnbgVwbGFuZQhjYWxlbmRhcgZyYW5kb20HY29tbWVudAZtYWduZXQKY2hldnJvbl91cAxjaGV2cm9uX2Rvd24HcmV0d2VldA1zaG9wcGluZ19jYXJ0DGZvbGRlcl9jbG9zZQtmb2xkZXJfb3Blbg9yZXNpemVfdmVydGljYWwRcmVzaXplX2hvcml6b250YWwJYmFyX2NoYXJ0DHR3aXR0ZXJfc2lnbg1mYWNlYm9va19zaWduDGNhbWVyYV9yZXRybwNrZXkEY29ncwhjb21tZW50cw10aHVtYnNfdXBfYWx0D3RodW1ic19kb3duX2FsdAlzdGFyX2hhbGYLaGVhcnRfZW1wdHkHc2lnbm91dA1saW5rZWRpbl9zaWduB3B1c2hwaW4NZXh0ZXJuYWxfbGluawZzaWduaW4GdHJvcGh5C2dpdGh1Yl9zaWduCnVwbG9hZF9hbHQFbGVtb24FcGhvbmULY2hlY2tfZW1wdHkOYm9va21hcmtfZW1wdHkKcGhvbmVfc2lnbgd0d2l0dGVyCGZhY2Vib29rBmdpdGh1YgZ1bmxvY2sLY3JlZGl0X2NhcmQDcnNzA2hkZAhidWxsaG9ybgRiZWxsC2NlcnRpZmljYXRlCmhhbmRfcmlnaHQJaGFuZF9sZWZ0B2hhbmRfdXAJaGFuZF9kb3duEWNpcmNsZV9hcnJvd19sZWZ0EmNpcmNsZV9hcnJvd19yaWdodA9jaXJjbGVfYXJyb3dfdXARY2lyY2xlX2Fycm93X2Rvd24FZ2xvYmUGd3JlbmNoBXRhc2tzBmZpbHRlcglicmllZmNhc2UKZnVsbHNjcmVlbgVncm91cARsaW5rBWNsb3VkBmJlYWtlcgNjdXQEY29weQpwYXBlcl9jbGlwBHNhdmUKc2lnbl9ibGFuawdyZW9yZGVyAnVsAm9sDXN0cmlrZXRocm91Z2gJdW5kZXJsaW5lBXRhYmxlBW1hZ2ljBXRydWNrCXBpbnRlcmVzdA5waW50ZXJlc3Rfc2lnbhBnb29nbGVfcGx1c19zaWduC2dvb2dsZV9wbHVzBW1vbmV5CmNhcmV0X2Rvd24IY2FyZXRfdXAKY2FyZXRfbGVmdAtjYXJldF9yaWdodAdjb2x1bW5zBHNvcnQJc29ydF9kb3duB3NvcnRfdXAMZW52ZWxvcGVfYWx0CGxpbmtlZGluBHVuZG8FbGVnYWwJZGFzaGJvYXJkC2NvbW1lbnRfYWx0DGNvbW1lbnRzX2FsdARib2x0B3NpdGVtYXAIdW1icmVsbGEFcGFzdGUKbGlnaHRfYnVsYghleGNoYW5nZQ5jbG91ZF9kb3dubG9hZAxjbG91ZF91cGxvYWQHdXNlcl9tZAtzdGV0aG9zY29wZQhzdWl0Y2FzZQhiZWxsX2FsdAZjb2ZmZWUEZm9vZA1maWxlX3RleHRfYWx0CGJ1aWxkaW5nCGhvc3BpdGFsCWFtYnVsYW5jZQZtZWRraXQLZmlnaHRlcl9qZXQEYmVlcgZoX3NpZ24EZjBmZRFkb3VibGVfYW5nbGVfbGVmdBJkb3VibGVfYW5nbGVfcmlnaHQPZG91YmxlX2FuZ2xlX3VwEWRvdWJsZV9hbmdsZV9kb3duCmFuZ2xlX2xlZnQLYW5nbGVfcmlnaHQIYW5nbGVfdXAKYW5nbGVfZG93bgdkZXNrdG9wBmxhcHRvcAZ0YWJsZXQMbW9iaWxlX3Bob25lDGNpcmNsZV9ibGFuawpxdW90ZV9sZWZ0C3F1b3RlX3JpZ2h0B3NwaW5uZXIGY2lyY2xlBXJlcGx5CmdpdGh1Yl9hbHQQZm9sZGVyX2Nsb3NlX2FsdA9mb2xkZXJfb3Blbl9hbHQKZXhwYW5kX2FsdAxjb2xsYXBzZV9hbHQFc21pbGUFZnJvd24DbWVoB2dhbWVwYWQIa2V5Ym9hcmQIZmxhZ19hbHQOZmxhZ19jaGVja2VyZWQIdGVybWluYWwEY29kZQlyZXBseV9hbGwPc3Rhcl9oYWxmX2VtcHR5DmxvY2F0aW9uX2Fycm93BGNyb3AJY29kZV9mb3JrBnVubGluawRfMjc5C2V4Y2xhbWF0aW9uC3N1cGVyc2NyaXB0CXN1YnNjcmlwdARfMjgzDHB1enpsZV9waWVjZQptaWNyb3Bob25lDm1pY3JvcGhvbmVfb2ZmBnNoaWVsZA5jYWxlbmRhcl9lbXB0eRFmaXJlX2V4dGluZ3Vpc2hlcgZyb2NrZXQGbWF4Y2RuEWNoZXZyb25fc2lnbl9sZWZ0EmNoZXZyb25fc2lnbl9yaWdodA9jaGV2cm9uX3NpZ25fdXARY2hldnJvbl9zaWduX2Rvd24FaHRtbDUEY3NzMwZhbmNob3IKdW5sb2NrX2FsdAhidWxsc2V5ZRNlbGxpcHNpc19ob3Jpem9udGFsEWVsbGlwc2lzX3ZlcnRpY2FsBF8zMDMJcGxheV9zaWduBnRpY2tldA5taW51c19zaWduX2FsdAtjaGVja19taW51cwhsZXZlbF91cApsZXZlbF9kb3duCmNoZWNrX3NpZ24JZWRpdF9zaWduBF8zMTIKc2hhcmVfc2lnbgdjb21wYXNzCGNvbGxhcHNlDGNvbGxhcHNlX3RvcARfMzE3A2V1cgNnYnADdXNkA2lucgNqcHkDcnViA2tydwNidGMEZmlsZQlmaWxlX3RleHQQc29ydF9ieV9hbHBoYWJldARfMzI5EnNvcnRfYnlfYXR0cmlidXRlcxZzb3J0X2J5X2F0dHJpYnV0ZXNfYWx0DXNvcnRfYnlfb3JkZXIRc29ydF9ieV9vcmRlcl9hbHQEXzMzNARfMzM1DHlvdXR1YmVfc2lnbgd5b3V0dWJlBHhpbmcJeGluZ19zaWduDHlvdXR1YmVfcGxheQdkcm9wYm94DXN0YWNrZXhjaGFuZ2UJaW5zdGFncmFtBmZsaWNrcgNhZG4EZjE3MQ5iaXRidWNrZXRfc2lnbgZ0dW1ibHILdHVtYmxyX3NpZ24PbG9uZ19hcnJvd19kb3duDWxvbmdfYXJyb3dfdXAPbG9uZ19hcnJvd19sZWZ0EGxvbmdfYXJyb3dfcmlnaHQHd2luZG93cwdhbmRyb2lkBWxpbnV4B2RyaWJibGUFc2t5cGUKZm91cnNxdWFyZQZ0cmVsbG8GZmVtYWxlBG1hbGUGZ2l0dGlwA3N1bgRfMzY2B2FyY2hpdmUDYnVnAnZrBXdlaWJvBnJlbnJlbgRfMzcyDnN0YWNrX2V4Y2hhbmdlBF8zNzQVYXJyb3dfY2lyY2xlX2FsdF9sZWZ0BF8zNzYOZG90X2NpcmNsZV9hbHQEXzM3OAx2aW1lb19zcXVhcmUEXzM4MA1wbHVzX3NxdWFyZV9vBF8zODIEXzM4MwRfMzg0BF8zODUEXzM4NgRfMzg3BF8zODgEXzM4OQd1bmlGMUEwBGYxYTEEXzM5MgRfMzkzBGYxYTQEXzM5NQRfMzk2BF8zOTcEXzM5OARfMzk5BF80MDAEZjFhYgRfNDAyBF80MDMEXzQwNAd1bmlGMUIxBF80MDYEXzQwNwRfNDA4BF80MDkEXzQxMARfNDExBF80MTIEXzQxMwRfNDE0BF80MTUEXzQxNgRfNDE3BF80MTgEXzQxOQd1bmlGMUMwB3VuaUYxQzEEXzQyMgRfNDIzBF80MjQEXzQyNQRfNDI2BF80MjcEXzQyOARfNDI5BF80MzAEXzQzMQRfNDMyBF80MzMEXzQzNAd1bmlGMUQwB3VuaUYxRDEHdW5pRjFEMgRfNDM4BF80MzkHdW5pRjFENQd1bmlGMUQ2B3VuaUYxRDcEXzQ0MwRfNDQ0BF80NDUEXzQ0NgRfNDQ3BF80NDgEXzQ0OQd1bmlGMUUwBF80NTEEXzQ1MgRfNDUzBF80NTQEXzQ1NQRfNDU2BF80NTcEXzQ1OARfNDU5BF80NjAEXzQ2MQRfNDYyBF80NjMEXzQ2NAd1bmlGMUYwBF80NjYEXzQ2NwRmMWYzBF80NjkEXzQ3MARfNDcxBF80NzIEXzQ3MwRfNDc0BF80NzUEXzQ3NgRmMWZjBF80NzgEXzQ3OQRfNDgwBF80ODEEXzQ4MgRfNDgzBF80ODQEXzQ4NQRfNDg2BF80ODcEXzQ4OARfNDg5BF80OTAEXzQ5MQRfNDkyBF80OTMEXzQ5NARmMjEwBF80OTYEZjIxMgRfNDk4BF80OTkEXzUwMARfNTAxBF81MDIEXzUwMwRfNTA0BF81MDUEXzUwNgRfNTA3BF81MDgEXzUwOQV2ZW51cwRfNTExBF81MTIEXzUxMwRfNTE0BF81MTUEXzUxNgRfNTE3BF81MTgEXzUxOQRfNTIwBF81MjEEXzUyMgRfNTIzBF81MjQEXzUyNQRfNTI2BF81MjcEXzUyOARfNTI5BF81MzAEXzUzMQRfNTMyBF81MzMEXzUzNARfNTM1BF81MzYEXzUzNwRfNTM4BF81MzkEXzU0MARfNTQxBF81NDIEXzU0MwRfNTQ0BF81NDUEXzU0NgRfNTQ3BF81NDgEXzU0OQRfNTUwBF81NTEEXzU1MgRfNTUzBF81NTQEXzU1NQRfNTU2BF81NTcEXzU1OARfNTU5BF81NjAEXzU2MQRfNTYyBF81NjMEXzU2NARfNTY1BF81NjYEXzU2NwRfNTY4BF81NjkEZjI2MARmMjYxBF81NzIEZjI2MwRfNTc0BF81NzUEXzU3NgRfNTc3BF81NzgEXzU3OQRfNTgwBF81ODEEXzU4MgRfNTgzBF81ODQEXzU4NQRfNTg2BF81ODcEXzU4OARfNTg5BF81OTAEXzU5MQRfNTkyBF81OTMEXzU5NARfNTk1BF81OTYEXzU5NwRfNTk4BGYyN2UHdW5pRjI4MAd1bmlGMjgxBF82MDIEXzYwMwRfNjA0B3VuaUYyODUHdW5pRjI4NgRfNjA3BF82MDgEXzYwOQRfNjEwBF82MTEEXzYxMgRfNjEzBF82MTQEXzYxNQRfNjE2BF82MTcEXzYxOARfNjE5BF82MjAEXzYyMQRfNjIyBF82MjMEXzYyNARfNjI1BF82MjYEXzYyNwRfNjI4BF82MjkAAVZPjikAAA==]]></data>
	</file>
	<file>
	  <filename>/lib/fonts/fontawesome-webfont.woff</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/lib/fonts/fontawesome-webfont.woff2</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/lib/fonts/FontAwesome.otf</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[T1RUTwAKAIAAAwAgQ0ZGILunUj8AAACsAAGZ20VQQVIAGwAqAAGaiAAAADBPUy8yiDJ6VQABmrgAAABgY21hcEwujK4AAZsYAAAC9GhlYWQF38zuAAGeDAAAADZoaGVhDwMKbgABnkQAAAAkaG10eHepFnwAAZ5oAAAJyG1heHACdlAAAAGoMAAAAAZuYW1lJ3j1BgABqDgAAAQfcG9zdAADAAAAAaxYAAAAIAEABAMAAQEBDEZvbnRBd2Vzb21lAAEBAUP4EAD6hAH6hQL6hQP4GASLDAOLDASK+5UcCQAcBgEFHqAAVYA2/4uLHqAAVYA2/4uLDAccLXIPHC2aEaUdAAGDoBICawIAAQAGAAsAEQAZAB4AIgAsADAANAA8AD4ARQBHAE0AVABcAF8AZQBoAG0AcQB5AH0AgQCNAJUAmwCgAKsAsQC4AMAAxADIANIA3ADnAPAA9gD9AQABBAEIARABFQEbAR8BIwEpATQBPgFIAVQBXwFsAXABewGHAZUBnAGiAawBsgG2AboBvwHEAcgB1QHiAeoB7gHzAfcB/gIKAhYCGwInAjQCPQJHAlICWQJmAm8CeQKGAo8CmQKjAq4CtgLAAskC1ALgAvAC9AL4AvwDBAMNAxkDHgMmAywDMwM5A0MDTwNWA2MDbwN6A4kDmgOjA68DvAPIA8sDzwPXA+QD8wP8BAcEDgQbBCIELwQ1BDsERgRQBFUEWgRlBHMEfQSEBIwEkgSYBKMEpgSpBLEEtQTABMoE0wTaBOME9AUGBRUFJgUrBTEFNgU8BUUFTwVXBV8FaAVtBXEFdgV8BX8FgwWNBZEFmwWiBaQFpgWzBbwFwQXGBcsF1AXiBfIF/QYCBgwGFAYeBikGMAY0Bj0GRAZQBlgGXAZhBmoGdQaBBoUGjAaUBpkGowarBrkGxQbMBtcG3wbnBu0G8Qb+BwYHDgcXBx0HKAcsBzIHNgdHB1kHaAd5B4MHjgeWB6AHpwetB7MHvwfLB9UH4AfnB+0H8gf8CAwIGwglCDEINgg7CD4IRQhNCFUIYwhrCG8IeAiHCJUImQiiCKgIrAi3CMIIywjPCNsI5QjzCPkJBwkYCR4JJAk1CUcJVglnCWwJcAl2CYAJiAmbCawJsAm5Cb8JzQnYCeAJ6gn0Cf0KAQoLChIKGgomCioKLQowCjMKNgo5CjwKPwpCCkYKTwpfCmMKdQqLCpgKqQqtCrEKvQrECsgK0QrdCuQK8Qr6CwALAwsHCxULGwsmCzULQgtRC2ELZgttC3QLeQuAC4ULjwuVC5sLnwulC6gLrAuzC7YLuAu9C8MLxwvVC9kL7gvyDAAMBAwQDBQMIQwlDCkMLQwxDDUMOQw9DEEMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhwyLDI8MkwyXDJsMnwyjDKcMqwyvDLMMtwy7DL8MxgzNDNEM1QzZDN0M4QzlDOkM7QzxDPUM+Qz9DQENCA0PDRYNGg0eDSUNLA0zDTcNOw0/DUMNRw1LDU8NVg1aDV4NYg1mDWoNbg1yDXYNeg1+DYINhg2KDY4NlQ2ZDZ0NoQ2lDakNrQ2xDbUNuQ29DcENxQ3JDc0N0Q3VDdkN3Q3hDeUN6Q3tDfEN9Q35Df0OAQ4FDgkODQ4RDhUOGQ4dDiEOJQ4pDi0OMQ41DjkOPQ5BDkUOSg5ODlIOVg5aDl4OYg5mDmoObg5yDnYOeg5+DoIOhg6KDo4Okg6WDpoOng6iDqYOqg6uDrIOtg66Dr4Owg7GDsoOzg7SDtYO2g7eDuIO5g7qDu4O8g72DvoO/g8CDwYPCg8ODxIPFg8aDx4PIg8mDyoPLg8yDzYPOg8+D0IPRg9KD04PUg9WD1oPXg9iD2YPag9uD3IPdg96D34Pgg+GD4oPjg+SD5YPmg+eD6IPpg+qD64PtQ+8D8APxA/ID88P1g/aD94P4g/mD+oP7g/yD/YP+g/+EAIQBhAKEA4QEhAWEBoQHhAiECYQKhAuEDIQYRBsZ2xhc3NtdXNpY3NlYXJjaGVudmVsb3BlaGVhcnRzdGFyc3Rhcl9lbXB0eXVzZXJmaWxtdGhfbGFyZ2V0aHRoX2xpc3Rva3JlbW92ZXpvb21faW56b29tX291dG9mZnNpZ25hbGNvZ3RyYXNoaG9tZWZpbGVfYWx0dGltZXJvYWRkb3dubG9hZF9hbHRkb3dubG9hZHVwbG9hZGluYm94cGxheV9jaXJjbGVyZXBlYXRyZWZyZXNobGlzdF9hbHRsb2NrZmxhZ2hlYWRwaG9uZXN2b2x1bWVfb2Zmdm9sdW1lX2Rvd252b2x1bWVfdXBxcmNvZGViYXJjb2RldGFndGFnc2Jvb2tib29rbWFya3ByaW50Y2FtZXJhZm9udGJvbGRpdGFsaWN0ZXh0X2hlaWdodHRleHRfd2lkdGhhbGlnbl9sZWZ0YWxpZ25fY2VudGVyYWxpZ25fcmlnaHRhbGlnbl9qdXN0aWZ5bGlzdGluZGVudF9sZWZ0aW5kZW50X3JpZ2h0ZmFjZXRpbWVfdmlkZW9waWN0dXJlcGVuY2lsbWFwX21hcmtlcmFkanVzdHRpbnRlZGl0c2hhcmVjaGVja21vdmVzdGVwX2JhY2t3YXJkZmFzdF9iYWNrd2FyZGJhY2t3YXJkcGxheXBhdXNlc3RvcGZvcndhcmRmYXN0X2ZvcndhcmRzdGVwX2ZvcndhcmRlamVjdGNoZXZyb25fbGVmdGNoZXZyb25fcmlnaHRwbHVzX3NpZ25taW51c19zaWducmVtb3ZlX3NpZ25va19zaWducXVlc3Rpb25fc2lnbmluZm9fc2lnbnNjcmVlbnNob3RyZW1vdmVfY2lyY2xlb2tfY2lyY2xlYmFuX2NpcmNsZWFycm93X2xlZnRhcnJvd19yaWdodGFycm93X3VwYXJyb3dfZG93bnNoYXJlX2FsdHJlc2l6ZV9mdWxscmVzaXplX3NtYWxsZXhjbGFtYXRpb25fc2lnbmdpZnRsZWFmZmlyZWV5ZV9vcGVuZXllX2Nsb3Nld2FybmluZ19zaWducGxhbmVjYWxlbmRhcnJhbmRvbWNvbW1lbnRtYWduZXRjaGV2cm9uX3VwY2hldnJvbl9kb3ducmV0d2VldHNob3BwaW5nX2NhcnRmb2xkZXJfY2xvc2Vmb2xkZXJfb3BlbnJlc2l6ZV92ZXJ0aWNhbHJlc2l6ZV9ob3Jpem9udGFsYmFyX2NoYXJ0dHdpdHRlcl9zaWduZmFjZWJvb2tfc2lnbmNhbWVyYV9yZXRyb2tleWNvZ3Njb21tZW50c3RodW1ic191cF9hbHR0aHVtYnNfZG93bl9hbHRzdGFyX2hhbGZoZWFydF9lbXB0eXNpZ25vdXRsaW5rZWRpbl9zaWducHVzaHBpbmV4dGVybmFsX2xpbmtzaWduaW50cm9waHlnaXRodWJfc2lnbnVwbG9hZF9hbHRsZW1vbnBob25lY2hlY2tfZW1wdHlib29rbWFya19lbXB0eXBob25lX3NpZ250d2l0dGVyZmFjZWJvb2tnaXRodWJ1bmxvY2tjcmVkaXRfY2FyZHJzc2hkZGJ1bGxob3JuYmVsbGNlcnRpZmljYXRlaGFuZF9yaWdodGhhbmRfbGVmdGhhbmRfdXBoYW5kX2Rvd25jaXJjbGVfYXJyb3dfbGVmdGNpcmNsZV9hcnJvd19yaWdodGNpcmNsZV9hcnJvd191cGNpcmNsZV9hcnJvd19kb3duZ2xvYmV3cmVuY2h0YXNrc2ZpbHRlcmJyaWVmY2FzZWZ1bGxzY3JlZW5ub3RlcXVhbGluZmluaXR5bGVzc2VxdWFsZ3JvdXBsaW5rY2xvdWRiZWFrZXJjdXRjb3B5cGFwZXJfY2xpcHNhdmVzaWduX2JsYW5rcmVvcmRlcnVsb2xzdHJpa2V0aHJvdWdodW5kZXJsaW5ldGFibGVtYWdpY3RydWNrcGludGVyZXN0cGludGVyZXN0X3NpZ25nb29nbGVfcGx1c19zaWduZ29vZ2xlX3BsdXNtb25leWNhcmV0X2Rvd25jYXJldF91cGNhcmV0X2xlZnRjYXJldF9yaWdodGNvbHVtbnNzb3J0c29ydF9kb3duc29ydF91cGVudmVsb3BlX2FsdGxpbmtlZGludW5kb2xlZ2FsZGFzaGJvYXJkY29tbWVudF9hbHRjb21tZW50c19hbHRib2x0c2l0ZW1hcHVtYnJlbGxhcGFzdGVsaWdodF9idWxiZXhjaGFuZ2VjbG91ZF9kb3dubG9hZGNsb3VkX3VwbG9hZHVzZXJfbWRzdGV0aG9zY29wZXN1aXRjYXNlYmVsbF9hbHRjb2ZmZWVmb29kZmlsZV90ZXh0X2FsdGJ1aWxkaW5naG9zcGl0YWxhbWJ1bGFuY2VtZWRraXRmaWdodGVyX2pldGJlZXJoX3NpZ25mMGZlZG91YmxlX2FuZ2xlX2xlZnRkb3VibGVfYW5nbGVfcmlnaHRkb3VibGVfYW5nbGVfdXBkb3VibGVfYW5nbGVfZG93bmFuZ2xlX2xlZnRhbmdsZV9yaWdodGFuZ2xlX3VwYW5nbGVfZG93bmRlc2t0b3BsYXB0b3B0YWJsZXRtb2JpbGVfcGhvbmVjaXJjbGVfYmxhbmtxdW90ZV9sZWZ0cXVvdGVfcmlnaHRzcGlubmVyY2lyY2xlcmVwbHlnaXRodWJfYWx0Zm9sZGVyX2Nsb3NlX2FsdGZvbGRlcl9vcGVuX2FsdGV4cGFuZF9hbHRjb2xsYXBzZV9hbHRzbWlsZWZyb3dubWVoZ2FtZXBhZGtleWJvYXJkZmxhZ19hbHRmbGFnX2NoZWNrZXJlZHRlcm1pbmFsY29kZXJlcGx5X2FsbHN0YXJfaGFsZl9lbXB0eWxvY2F0aW9uX2Fycm93Y3JvcGNvZGVfZm9ya3VubGlua18yNzlleGNsYW1hdGlvbnN1cGVyc2NyaXB0c3Vic2NyaXB0XzI4M3B1enpsZV9waWVjZW1pY3JvcGhvbmVtaWNyb3Bob25lX29mZnNoaWVsZGNhbGVuZGFyX2VtcHR5ZmlyZV9leHRpbmd1aXNoZXJyb2NrZXRtYXhjZG5jaGV2cm9uX3NpZ25fbGVmdGNoZXZyb25fc2lnbl9yaWdodGNoZXZyb25fc2lnbl91cGNoZXZyb25fc2lnbl9kb3duaHRtbDVjc3MzYW5jaG9ydW5sb2NrX2FsdGJ1bGxzZXllZWxsaXBzaXNfaG9yaXpvbnRhbGVsbGlwc2lzX3ZlcnRpY2FsXzMwM3BsYXlfc2lnbnRpY2tldG1pbnVzX3NpZ25fYWx0Y2hlY2tfbWludXNsZXZlbF91cGxldmVsX2Rvd25jaGVja19zaWduZWRpdF9zaWduXzMxMnNoYXJlX3NpZ25jb21wYXNzY29sbGFwc2Vjb2xsYXBzZV90b3BfMzE3ZXVyZ2JwdXNkaW5yanB5cnVia3J3YnRjZmlsZWZpbGVfdGV4dHNvcnRfYnlfYWxwaGFiZXRfMzI5c29ydF9ieV9hdHRyaWJ1dGVzc29ydF9ieV9hdHRyaWJ1dGVzX2FsdHNvcnRfYnlfb3JkZXJzb3J0X2J5X29yZGVyX2FsdF8zMzRfMzM1eW91dHViZV9zaWdueW91dHViZXhpbmd4aW5nX3NpZ255b3V0dWJlX3BsYXlkcm9wYm94c3RhY2tleGNoYW5nZWluc3RhZ3JhbWZsaWNrcmFkbmYxNzFiaXRidWNrZXRfc2lnbnR1bWJscnR1bWJscl9zaWdubG9uZ19hcnJvd19kb3dubG9uZ19hcnJvd191cGxvbmdfYXJyb3dfbGVmdGxvbmdfYXJyb3dfcmlnaHRhcHBsZXdpbmRvd3NhbmRyb2lkbGludXhkcmliYmxlc2t5cGVmb3Vyc3F1YXJldHJlbGxvZmVtYWxlbWFsZWdpdHRpcHN1bl8zNjZhcmNoaXZlYnVndmt3ZWlib3JlbnJlbl8zNzJzdGFja19leGNoYW5nZV8zNzRhcnJvd19jaXJjbGVfYWx0X2xlZnRfMzc2ZG90X2NpcmNsZV9hbHRfMzc4dmltZW9fc3F1YXJlXzM4MHBsdXNfc3F1YXJlX29fMzgyXzM4M18zODRfMzg1XzM4Nl8zODdfMzg4XzM4OXVuaUYxQTBmMWExXzM5Ml8zOTNmMWE0XzM5NV8zOTZfMzk3XzM5OF8zOTlfNDAwZjFhYl80MDJfNDAzXzQwNHVuaUYxQjFfNDA2XzQwN180MDhfNDA5XzQxMF80MTFfNDEyXzQxM180MTRfNDE1XzQxNl80MTdfNDE4XzQxOXVuaUYxQzB1bmlGMUMxXzQyMl80MjNfNDI0XzQyNV80MjZfNDI3XzQyOF80MjlfNDMwXzQzMV80MzJfNDMzXzQzNHVuaUYxRDB1bmlGMUQxdW5pRjFEMl80MzhfNDM5dW5pRjFENXVuaUYxRDZ1bmlGMUQ3XzQ0M180NDRfNDQ1XzQ0Nl80NDdfNDQ4XzQ0OXVuaUYxRTBfNDUxXzQ1Ml80NTNfNDU0XzQ1NV80NTZfNDU3XzQ1OF80NTlfNDYwXzQ2MV80NjJfNDYzXzQ2NHVuaUYxRjBfNDY2XzQ2N2YxZjNfNDY5XzQ3MF80NzFfNDcyXzQ3M180NzRfNDc1XzQ3NmYxZmNfNDc4XzQ3OV80ODBfNDgxXzQ4Ml80ODNfNDg0XzQ4NV80ODZfNDg3XzQ4OF80ODlfNDkwXzQ5MV80OTJfNDkzXzQ5NGYyMTBfNDk2ZjIxMl80OThfNDk5XzUwMF81MDFfNTAyXzUwM181MDRfNTA1XzUwNl81MDdfNTA4XzUwOXZlbnVzXzUxMV81MTJfNTEzXzUxNF81MTVfNTE2XzUxN181MThfNTE5XzUyMF81MjFfNTIyXzUyM181MjRfNTI1XzUyNl81MjdfNTI4XzUyOV81MzBfNTMxXzUzMl81MzNfNTM0XzUzNV81MzZfNTM3XzUzOF81MzlfNTQwXzU0MV81NDJfNTQzXzU0NF81NDVfNTQ2XzU0N181NDhfNTQ5XzU1MF81NTFfNTUyXzU1M181NTRfNTU1XzU1Nl81NTdfNTU4XzU1OV81NjBfNTYxXzU2Ml81NjNfNTY0XzU2NV81NjZfNTY3XzU2OF81Njlm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BoAAAAYAAAAHAAAABgAAAAWAAAAGgAAaBgAAAAYAAAAHgAAyBoAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAcAAAAEgAAABwAAQAaAAAADAAAABIAAAAaAAAAFgAAABwAAAAYAAAAHgAAABoD//wUAAAAGgAAAB4AAAAaAAAAFgAAABAAAAAcAAAAGAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHgAAABgAAAAQAAAAGAAAABAAAAAcAAAAGgAAABoAAAAcAAAAEAAAABwAAAAaAAHoFgAAABgAAAAYAAAAGgAAABwAAAAQAAAAGAv//BQAAmgUAAFoGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAQAYAAAAGgAA1BoAANQcAAAAGAAAABgAADQYAAAAGAAAABwAAAAWAAAAHAAAABwAAAAcAAAAFgAAABoAAAAcAAAAHAAAABgAAAAcAAFoHAABaB4AAAAaAAAAGgAAAB4AAAAMAAEAHAAAACAAAAAYAAAAGAAAABwAAAAcAAAAHgAAABwAAAAYAAAAGAAAAA4AAAAcAAAAGgAAABgAAAASAAAAHAAAABgAAAAaAAAAGAAAABoAAAAYAAAAFgAAABYAAAAUAAAAGAAAABoAALAQAAF8GAAAABoAAAAeAAAAFgAAABgAAAAcAAAAHAABABgD//wcAAAAHAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAaAABUHAAAABYAAAAcAAAAGAAAABwAAAAcAAAAHAAAAB4AAAAaAABAHgAAABoAAZgcAAAAHAAAABYAABAYAAAAGAAAABgAAAAcAAAAHAAAPBwAAAAYAAAAGgAAABoAAGwcAAEAGAAAABgAAAAYAAAAJAAAAB4AAAAQAAAAEAAAAAoAAQAKAAAAGgAAABAAAAAQAAAAEAAAABwAAAAYAAAAGAAAABwAAKAcAAAAHAAAABwAAAAOAAAAHAAAABoAAAAcAAAAEAAAABwAAAAeAAAAHgAAABYAAAAWAAAAHAAAABwAAQAeAAAAFgAAABgAAAAWAAAAFgAAAB4AAQAcAAAAHgAAABoAAQAYAAAAGAAAABAAALQQAAA0EgABNBIAATQKAAC0CgAANBIAATQSAAE0HgAAAB4AAAASAAAADAAAABgAAAAaAAAAGgAAABwAAQAYAAAAHAAAABoAAAAaAAAAHgAAABwAAAAcAAAAGAAAABgAAAAYAAAAHgAAAB4AAAAcAAEAHAABABoAADQeAAC0HAAAABoAAAAWAAAAGgAAABAAAAAaAAAACgAAAAoAAYgYAAAUGAAAFB4AAAAaAAAAEgAAABYAADQUAAAAGgAAABYAAAAaAACAHAAAABgAAAAYAAAAGAAAABgAAAAWAAAAHAAAMBwAAAASAAAAGAAAABYAAAAGAAAAGAAAABgAAAAcAADUGAAAABYAAAAQAAAAEAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAEAAAABAAAAAQAAC0DggAABAMAAAUAAAAHAAAABQAAOAYAAAAGAAAABoAAHwaAAB8HAAAfBwAAHwYAAB8GAAAfBoAAAAaAAAAGAAAABgAAGwWAAAAGAAAABwAAAAcAAEAGAAALBgAAAAYAAAAGAAAABYAAAAYAAAAEAABEBgAAAAMAAAADAAAABwAAQAcAAAAFgAAABoAAAAWAAAAGAAAGBgAAAAYAAAAFAAAsBgAAAAUAAAAEAAAABgAAAAcAACoGAAAABwAAQAaAACAHgP//BwAAAAYAAAAFgAAABQAAFQYAAAAGAAAABgAAAAYAAAAGgAAABgAAAASAAAAFgAAACIAAAAaAAAAGAAAABwAAAAcAAAAIAAAACQAAAAYAAG0GAAAABwAAAAYAAAAGAAAAB4AAAAYAAAAIAAAABgAAAAf2ACkGAAAABgAAAAYAAAAHAAAABgAAAAUAAEAGgAAAAwAAQAcAAAAJAAAACAAAAAYAAAAHAAAABgAAAAcAABAIAAAACAAAAAYAACAGAAAABAAAAAkAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAJwcAAAAIAAAABwAAAAcAACAHAAASBwAAAAYAAAAHAABEBgAAAAUAADkHAAASCAAAAAcAAAAHAP//BgAAAAYAAAAHAAA+BQAAGAYAAAAGAAAABgAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAEAcAAGQGAABVCAAAAAgAACoHAAAABgAACAcAAHEJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAIAAAOCAAADgWAAAAGAAAABgAAAAcAAAAHAAAABwAAAAgAAAAHAAAACAAAAAcAAAAGAAAACAAAAAgAAAAJAAAABgAAAAgAAAAFAAALCAAAAAYAAAAGAAAABgAAAAgAAAAGAAAABgAAAAgAAAAIAAAABgAAAAgAAAAIAAAABoAAAAaAAAAIAAAACAAAEwYAAAAJAAAABgAAAAcAAAAFAAAABgAAAAUAAAAGAAAABwAAAAcAAAAHgP//CAAAAAYAAAAFAAAACAAAAAUAAAAFAAAABwAAAAcAAAAGAAAABQAAAAYAAAAHAAAACAAAAAgAAAAIAAAABgAAAAYAAAAGAAAABwAAAAYAAAAI+ABSCQAAAAcAAAAJAAAACQAAAAkAAAAJAAAACQAAAAUAAAAEAAAACAAAAAkAAAAGAAAABgAAAAkAAAAJAAAABwAAAAkAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAHAAAABwAAAAgAAAAIAAAABwAAAAYAAAAHtQAABwAAAAcAAAAIAABABwAAAAkAAAAFAABlBgAAAAa4AAAJAAAABwAAAAcAAAAHAAAABwAAAAcAAAAIAAAABwAAFgYAAA0HAAAcBwAAAAcAAAAHAAAABwAAAAcAAAAEAAAABwAAJQgAAAAHAAAABwAAAAcAAAAEAAAABwAAUgYAAAAGAAAABwAAAAcAAEUJAAAABwAAAAcAACAHAAAACQAAAAcAAAAJAAAABgAAJAYAAAAGAAAABgAAAAYAAAAHAP//CAAAAAcAACAGAABrBAAAKAYAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAACdgAAAAAAFwEaAAEAAAAAAAAALwAAAAEAAAAAAAEACwAvAAEAAAAAAAMAFwA6AAEAAAAAAAQACwAvAAEAAAAAAAUAEgBRAAEAAAAAAAYACwAvAAEAAAAAAAcAUQBjAAEAAAAAAAgADAC0AAEAAAAAAAkACgDAAAEAAAAAAAsAFQDKAAEAAAAAAA4AHgDfAAMAAQQJAAAAXgD9AAMAAQQJAAEAFgFbAAMAAQQJAAIADgFxAAMAAQQJAAMALgF/AAMAAQQJAAQAFgFbAAMAAQQJAAUAJAGtAAMAAQQJAAYAFgFbAAMAAQQJAAcAogHRAAMAAQQJAAgAGAJzAAMAAQQJAAkAFAKLAAMAAQQJAAsAKgKfAAMAAQQJAA4APALJQ29weXJpZ2h0IERhdmUgR2FuZHkgMjAxNS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5Gb250QXdlc29tZXB5cnM6IEZvbnRBd2Vzb21lOiAyMDEyVmVyc2lvbiA0LjQuMSAyMDE1UGxlYXNlIHJlZmVyIHRvIHRoZSBDb3B5cmlnaHQgc2VjdGlvbiBmb3IgdGhlIGZvbnQgdHJhZGVtYXJrIGF0dHJpYnV0aW9uIG5vdGljZXMuRm9ydCBBd2Vzb21lRGF2ZSBHYW5keWh0dHA6Ly9mb250YXdlc29tZS5pb2h0dHA6Ly9mb250YXdlc29tZS5pby9saWNlbnNlLwBDAG8AcAB5AHIAaQBnAGgAdAAgAEQAYQB2AGUAIABHAGEAbgBkAHkAIAAyADAAMQA1AC4AIABBAGwAbAAgAHIAaQBnAGgAdABzACAAcgBlAHMAZQByAHYAZQBkAC4ARgBvAG4AdABBAHcAZQBzAG8AbQBlAFIAZQBnAHUAbABhAHIAcAB5AHIAcwA6ACAARgBvAG4AdABBAHcAZQBzAG8AbQBlADoAIAAyADAAMQAyAFYAZQByAHMAaQBvAG4AIAA0AC4ANAAuADEAIAAyADAAMQA1AFAAbABlAGEAcwBlACAAcgBlAGYAZQByACAAdABvACAAdABoAGUAIABDAG8AcAB5AHIAaQBnAGgAdAAgAHMAZQBjAHQAaQBvAG4AIABmAG8AcgAgAHQAaABlACAAZgBvAG4AdAAgAHQAcgBhAGQAZQBtAGEAcgBrACAAYQB0AHQAcgBpAGIAdQB0AGkAbwBuACAAbgBvAHQAaQBjAGUAcwAuAEYAbwByAHQAIABBAHcAZQBzAG8AbQBlAEQAYQB2AGUAIABHAGEAbgBkAHkAaAB0AHQAcAA6AC8ALwBmAG8AbgB0AGEAdwBlAHMAbwBtAGUALgBpAG8AaAB0AHQAcAA6AC8ALwBmAG8AbgB0AGEAdwBlAHMAbwBtAGUALgBpAG8ALwBsAGkAYwBlAG4AcwBlAC8AAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=]]></data>
	</file>
	<file>
	  <filename>/lib/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lib/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/js/codemirror.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnMKLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHA6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFCgovLyBUaGlzIGlzIENvZGVNaXJyb3IgKGh0dHA6Ly9jb2RlbWlycm9yLm5ldCksIGEgY29kZSBlZGl0b3IKLy8gaW1wbGVtZW50ZWQgaW4gSmF2YVNjcmlwdCBvbiB0b3Agb2YgdGhlIGJyb3dzZXIncyBET00uCi8vCi8vIFlvdSBjYW4gZmluZCBzb21lIHRlY2huaWNhbCBiYWNrZ3JvdW5kIGZvciBzb21lIG9mIHRoZSBjb2RlIGJlbG93Ci8vIGF0IGh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvYmxvZy8jY20taW50ZXJuYWxzIC4KCihmdW5jdGlvbihtb2QpIHsKICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgdHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IikgLy8gQ29tbW9uSlMKICAgIG1vZHVsZS5leHBvcnRzID0gbW9kKCk7CiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQpIC8vIEFNRAogICAgcmV0dXJuIGRlZmluZShbXSwgbW9kKTsKICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52CiAgICB0aGlzLkNvZGVNaXJyb3IgPSBtb2QoKTsKfSkoZnVuY3Rpb24oKSB7CiAgInVzZSBzdHJpY3QiOwoKICAvLyBCUk9XU0VSIFNOSUZGSU5HCgogIC8vIEtsdWRnZXMgZm9yIGJ1Z3MgYW5kIGJlaGF2aW9yIGRpZmZlcmVuY2VzIHRoYXQgY2FuJ3QgYmUgZmVhdHVyZQogIC8vIGRldGVjdGVkIGFyZSBlbmFibGVkIGJhc2VkIG9uIHVzZXJBZ2VudCBldGMgc25pZmZpbmcuCiAgdmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7CiAgdmFyIHBsYXRmb3JtID0gbmF2aWdhdG9yLnBsYXRmb3JtOwoKICB2YXIgZ2Vja28gPSAvZ2Vja29cL1xkL2kudGVzdCh1c2VyQWdlbnQpOwogIHZhciBpZV91cHRvMTAgPSAvTVNJRSBcZC8udGVzdCh1c2VyQWdlbnQpOwogIHZhciBpZV8xMXVwID0gL1RyaWRlbnRcLyg/Ols3LTldfFxkezIsfSlcLi4qcnY6KFxkKykvLmV4ZWModXNlckFnZW50KTsKICB2YXIgaWUgPSBpZV91cHRvMTAgfHwgaWVfMTF1cDsKICB2YXIgaWVfdmVyc2lvbiA9IGllICYmIChpZV91cHRvMTAgPyBkb2N1bWVudC5kb2N1bWVudE1vZGUgfHwgNiA6IGllXzExdXBbMV0pOwogIHZhciB3ZWJraXQgPSAvV2ViS2l0XC8vLnRlc3QodXNlckFnZW50KTsKICB2YXIgcXR3ZWJraXQgPSB3ZWJraXQgJiYgL1F0XC9cZCtcLlxkKy8udGVzdCh1c2VyQWdlbnQpOwogIHZhciBjaHJvbWUgPSAvQ2hyb21lXC8vLnRlc3QodXNlckFnZW50KTsKICB2YXIgcHJlc3RvID0gL09wZXJhXC8vLnRlc3QodXNlckFnZW50KTsKICB2YXIgc2FmYXJpID0gL0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpOwogIHZhciBtYWNfZ2VNb3VudGFpbkxpb24gPSAvTWFjIE9TIFggMVxkXEQoWzgtOV18XGRcZClcRC8udGVzdCh1c2VyQWdlbnQpOwogIHZhciBwaGFudG9tID0gL1BoYW50b21KUy8udGVzdCh1c2VyQWdlbnQpOwoKICB2YXIgaW9zID0gL0FwcGxlV2ViS2l0Ly50ZXN0KHVzZXJBZ2VudCkgJiYgL01vYmlsZVwvXHcrLy50ZXN0KHVzZXJBZ2VudCk7CiAgLy8gVGhpcyBpcyB3b2VmdWxseSBpbmNvbXBsZXRlLiBTdWdnZXN0aW9ucyBmb3IgYWx0ZXJuYXRpdmUgbWV0aG9kcyB3ZWxjb21lLgogIHZhciBtb2JpbGUgPSBpb3MgfHwgL0FuZHJvaWR8d2ViT1N8QmxhY2tCZXJyeXxPcGVyYSBNaW5pfE9wZXJhIE1vYml8SUVNb2JpbGUvaS50ZXN0KHVzZXJBZ2VudCk7CiAgdmFyIG1hYyA9IGlvcyB8fCAvTWFjLy50ZXN0KHBsYXRmb3JtKTsKICB2YXIgd2luZG93cyA9IC93aW4vaS50ZXN0KHBsYXRmb3JtKTsKCiAgdmFyIHByZXN0b192ZXJzaW9uID0gcHJlc3RvICYmIHVzZXJBZ2VudC5tYXRjaCgvVmVyc2lvblwvKFxkKlwuXGQqKS8pOwogIGlmIChwcmVzdG9fdmVyc2lvbikgcHJlc3RvX3ZlcnNpb24gPSBOdW1iZXIocHJlc3RvX3ZlcnNpb25bMV0pOwogIGlmIChwcmVzdG9fdmVyc2lvbiAmJiBwcmVzdG9fdmVyc2lvbiA+PSAxNSkgeyBwcmVzdG8gPSBmYWxzZTsgd2Via2l0ID0gdHJ1ZTsgfQogIC8vIFNvbWUgYnJvd3NlcnMgdXNlIHRoZSB3cm9uZyBldmVudCBwcm9wZXJ0aWVzIHRvIHNpZ25hbCBjbWQvY3RybCBvbiBPUyBYCiAgdmFyIGZsaXBDdHJsQ21kID0gbWFjICYmIChxdHdlYmtpdCB8fCBwcmVzdG8gJiYgKHByZXN0b192ZXJzaW9uID09IG51bGwgfHwgcHJlc3RvX3ZlcnNpb24gPCAxMi4xMSkpOwogIHZhciBjYXB0dXJlUmlnaHRDbGljayA9IGdlY2tvIHx8IChpZSAmJiBpZV92ZXJzaW9uID49IDkpOwoKICAvLyBPcHRpbWl6ZSBzb21lIGNvZGUgd2hlbiB0aGVzZSBmZWF0dXJlcyBhcmUgbm90IHVzZWQuCiAgdmFyIHNhd1JlYWRPbmx5U3BhbnMgPSBmYWxzZSwgc2F3Q29sbGFwc2VkU3BhbnMgPSBmYWxzZTsKCiAgLy8gRURJVE9SIENPTlNUUlVDVE9SCgogIC8vIEEgQ29kZU1pcnJvciBpbnN0YW5jZSByZXByZXNlbnRzIGFuIGVkaXRvci4gVGhpcyBpcyB0aGUgb2JqZWN0CiAgLy8gdGhhdCB1c2VyIGNvZGUgaXMgdXN1YWxseSBkZWFsaW5nIHdpdGguCgogIGZ1bmN0aW9uIENvZGVNaXJyb3IocGxhY2UsIG9wdGlvbnMpIHsKICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDb2RlTWlycm9yKSkgcmV0dXJuIG5ldyBDb2RlTWlycm9yKHBsYWNlLCBvcHRpb25zKTsKCiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID0gb3B0aW9ucyA/IGNvcHlPYmoob3B0aW9ucykgOiB7fTsKICAgIC8vIERldGVybWluZSBlZmZlY3RpdmUgb3B0aW9ucyBiYXNlZCBvbiBnaXZlbiB2YWx1ZXMgYW5kIGRlZmF1bHRzLgogICAgY29weU9iaihkZWZhdWx0cywgb3B0aW9ucywgZmFsc2UpOwogICAgc2V0R3V0dGVyc0ZvckxpbmVOdW1iZXJzKG9wdGlvbnMpOwoKICAgIHZhciBkb2MgPSBvcHRpb25zLnZhbHVlOwogICAgaWYgKHR5cGVvZiBkb2MgPT0gInN0cmluZyIpIGRvYyA9IG5ldyBEb2MoZG9jLCBvcHRpb25zLm1vZGUsIG51bGwsIG9wdGlvbnMubGluZVNlcGFyYXRvcik7CiAgICB0aGlzLmRvYyA9IGRvYzsKCiAgICB2YXIgaW5wdXQgPSBuZXcgQ29kZU1pcnJvci5pbnB1dFN0eWxlc1tvcHRpb25zLmlucHV0U3R5bGVdKHRoaXMpOwogICAgdmFyIGRpc3BsYXkgPSB0aGlzLmRpc3BsYXkgPSBuZXcgRGlzcGxheShwbGFjZSwgZG9jLCBpbnB1dCk7CiAgICBkaXNwbGF5LndyYXBwZXIuQ29kZU1pcnJvciA9IHRoaXM7CiAgICB1cGRhdGVHdXR0ZXJzKHRoaXMpOwogICAgdGhlbWVDaGFuZ2VkKHRoaXMpOwogICAgaWYgKG9wdGlvbnMubGluZVdyYXBwaW5nKQogICAgICB0aGlzLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLXdyYXAiOwogICAgaWYgKG9wdGlvbnMuYXV0b2ZvY3VzICYmICFtb2JpbGUpIGRpc3BsYXkuaW5wdXQuZm9jdXMoKTsKICAgIGluaXRTY3JvbGxiYXJzKHRoaXMpOwoKICAgIHRoaXMuc3RhdGUgPSB7CiAgICAgIGtleU1hcHM6IFtdLCAgLy8gc3RvcmVzIG1hcHMgYWRkZWQgYnkgYWRkS2V5TWFwCiAgICAgIG92ZXJsYXlzOiBbXSwgLy8gaGlnaGxpZ2h0aW5nIG92ZXJsYXlzLCBhcyBhZGRlZCBieSBhZGRPdmVybGF5CiAgICAgIG1vZGVHZW46IDAsICAgLy8gYnVtcGVkIHdoZW4gbW9kZS9vdmVybGF5IGNoYW5nZXMsIHVzZWQgdG8gaW52YWxpZGF0ZSBoaWdobGlnaHRpbmcgaW5mbwogICAgICBvdmVyd3JpdGU6IGZhbHNlLAogICAgICBkZWxheWluZ0JsdXJFdmVudDogZmFsc2UsCiAgICAgIGZvY3VzZWQ6IGZhbHNlLAogICAgICBzdXBwcmVzc0VkaXRzOiBmYWxzZSwgLy8gdXNlZCB0byBkaXNhYmxlIGVkaXRpbmcgZHVyaW5nIGtleSBoYW5kbGVycyB3aGVuIGluIHJlYWRPbmx5IG1vZGUKICAgICAgcGFzdGVJbmNvbWluZzogZmFsc2UsIGN1dEluY29taW5nOiBmYWxzZSwgLy8gaGVscCByZWNvZ25pemUgcGFzdGUvY3V0IGVkaXRzIGluIGlucHV0LnBvbGwKICAgICAgc2VsZWN0aW5nVGV4dDogZmFsc2UsCiAgICAgIGRyYWdnaW5nVGV4dDogZmFsc2UsCiAgICAgIGhpZ2hsaWdodDogbmV3IERlbGF5ZWQoKSwgLy8gc3RvcmVzIGhpZ2hsaWdodCB3b3JrZXIgdGltZW91dAogICAgICBrZXlTZXE6IG51bGwsICAvLyBVbmZpbmlzaGVkIGtleSBzZXF1ZW5jZQogICAgICBzcGVjaWFsQ2hhcnM6IG51bGwKICAgIH07CgogICAgdmFyIGNtID0gdGhpczsKCiAgICAvLyBPdmVycmlkZSBtYWdpYyB0ZXh0YXJlYSBjb250ZW50IHJlc3RvcmUgdGhhdCBJRSBzb21ldGltZXMgZG9lcwogICAgLy8gb24gb3VyIGhpZGRlbiB0ZXh0YXJlYSBvbiByZWxvYWQKICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgMTEpIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNtLmRpc3BsYXkuaW5wdXQucmVzZXQodHJ1ZSk7IH0sIDIwKTsKCiAgICByZWdpc3RlckV2ZW50SGFuZGxlcnModGhpcyk7CiAgICBlbnN1cmVHbG9iYWxIYW5kbGVycygpOwoKICAgIHN0YXJ0T3BlcmF0aW9uKHRoaXMpOwogICAgdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7CiAgICBhdHRhY2hEb2ModGhpcywgZG9jKTsKCiAgICBpZiAoKG9wdGlvbnMuYXV0b2ZvY3VzICYmICFtb2JpbGUpIHx8IGNtLmhhc0ZvY3VzKCkpCiAgICAgIHNldFRpbWVvdXQoYmluZChvbkZvY3VzLCB0aGlzKSwgMjApOwogICAgZWxzZQogICAgICBvbkJsdXIodGhpcyk7CgogICAgZm9yICh2YXIgb3B0IGluIG9wdGlvbkhhbmRsZXJzKSBpZiAob3B0aW9uSGFuZGxlcnMuaGFzT3duUHJvcGVydHkob3B0KSkKICAgICAgb3B0aW9uSGFuZGxlcnNbb3B0XSh0aGlzLCBvcHRpb25zW29wdF0sIEluaXQpOwogICAgbWF5YmVVcGRhdGVMaW5lTnVtYmVyV2lkdGgodGhpcyk7CiAgICBpZiAob3B0aW9ucy5maW5pc2hJbml0KSBvcHRpb25zLmZpbmlzaEluaXQodGhpcyk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRIb29rcy5sZW5ndGg7ICsraSkgaW5pdEhvb2tzW2ldKHRoaXMpOwogICAgZW5kT3BlcmF0aW9uKHRoaXMpOwogICAgLy8gU3VwcHJlc3Mgb3B0aW1pemVsZWdpYmlsaXR5IGluIFdlYmtpdCwgc2luY2UgaXQgYnJlYWtzIHRleHQKICAgIC8vIG1lYXN1cmluZyBvbiBsaW5lIHdyYXBwaW5nIGJvdW5kYXJpZXMuCiAgICBpZiAod2Via2l0ICYmIG9wdGlvbnMubGluZVdyYXBwaW5nICYmCiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkaXNwbGF5LmxpbmVEaXYpLnRleHRSZW5kZXJpbmcgPT0gIm9wdGltaXplbGVnaWJpbGl0eSIpCiAgICAgIGRpc3BsYXkubGluZURpdi5zdHlsZS50ZXh0UmVuZGVyaW5nID0gImF1dG8iOwogIH0KCiAgLy8gRElTUExBWSBDT05TVFJVQ1RPUgoKICAvLyBUaGUgZGlzcGxheSBoYW5kbGVzIHRoZSBET00gaW50ZWdyYXRpb24sIGJvdGggZm9yIGlucHV0IHJlYWRpbmcKICAvLyBhbmQgY29udGVudCBkcmF3aW5nLiBJdCBob2xkcyByZWZlcmVuY2VzIHRvIERPTSBub2RlcyBhbmQKICAvLyBkaXNwbGF5LXJlbGF0ZWQgc3RhdGUuCgogIGZ1bmN0aW9uIERpc3BsYXkocGxhY2UsIGRvYywgaW5wdXQpIHsKICAgIHZhciBkID0gdGhpczsKICAgIHRoaXMuaW5wdXQgPSBpbnB1dDsKCiAgICAvLyBDb3ZlcnMgYm90dG9tLXJpZ2h0IHNxdWFyZSB3aGVuIGJvdGggc2Nyb2xsYmFycyBhcmUgcHJlc2VudC4KICAgIGQuc2Nyb2xsYmFyRmlsbGVyID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIik7CiAgICBkLnNjcm9sbGJhckZpbGxlci5zZXRBdHRyaWJ1dGUoImNtLW5vdC1jb250ZW50IiwgInRydWUiKTsKICAgIC8vIENvdmVycyBib3R0b20gb2YgZ3V0dGVyIHdoZW4gY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIgaXMgb24KICAgIC8vIGFuZCBoIHNjcm9sbGJhciBpcyBwcmVzZW50LgogICAgZC5ndXR0ZXJGaWxsZXIgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWd1dHRlci1maWxsZXIiKTsKICAgIGQuZ3V0dGVyRmlsbGVyLnNldEF0dHJpYnV0ZSgiY20tbm90LWNvbnRlbnQiLCAidHJ1ZSIpOwogICAgLy8gV2lsbCBjb250YWluIHRoZSBhY3R1YWwgY29kZSwgcG9zaXRpb25lZCB0byBjb3ZlciB0aGUgdmlld3BvcnQuCiAgICBkLmxpbmVEaXYgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWNvZGUiKTsKICAgIC8vIEVsZW1lbnRzIGFyZSBhZGRlZCB0byB0aGVzZSB0byByZXByZXNlbnQgc2VsZWN0aW9uIGFuZCBjdXJzb3JzLgogICAgZC5zZWxlY3Rpb25EaXYgPSBlbHQoImRpdiIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogcmVsYXRpdmU7IHotaW5kZXg6IDEiKTsKICAgIGQuY3Vyc29yRGl2ID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1jdXJzb3JzIik7CiAgICAvLyBBIHZpc2liaWxpdHk6IGhpZGRlbiBlbGVtZW50IHVzZWQgdG8gZmluZCB0aGUgc2l6ZSBvZiB0aGluZ3MuCiAgICBkLm1lYXN1cmUgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLW1lYXN1cmUiKTsKICAgIC8vIFdoZW4gbGluZXMgb3V0c2lkZSBvZiB0aGUgdmlld3BvcnQgYXJlIG1lYXN1cmVkLCB0aGV5IGFyZSBkcmF3biBpbiB0aGlzLgogICAgZC5saW5lTWVhc3VyZSA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3ItbWVhc3VyZSIpOwogICAgLy8gV3JhcHMgZXZlcnl0aGluZyB0aGF0IG5lZWRzIHRvIGV4aXN0IGluc2lkZSB0aGUgdmVydGljYWxseS1wYWRkZWQgY29vcmRpbmF0ZSBzeXN0ZW0KICAgIGQubGluZVNwYWNlID0gZWx0KCJkaXYiLCBbZC5tZWFzdXJlLCBkLmxpbmVNZWFzdXJlLCBkLnNlbGVjdGlvbkRpdiwgZC5jdXJzb3JEaXYsIGQubGluZURpdl0sCiAgICAgICAgICAgICAgICAgICAgICBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlOyBvdXRsaW5lOiBub25lIik7CiAgICAvLyBNb3ZlZCBhcm91bmQgaXRzIHBhcmVudCB0byBjb3ZlciB2aXNpYmxlIHZpZXcuCiAgICBkLm1vdmVyID0gZWx0KCJkaXYiLCBbZWx0KCJkaXYiLCBbZC5saW5lU3BhY2VdLCAiQ29kZU1pcnJvci1saW5lcyIpXSwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZSIpOwogICAgLy8gU2V0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIGRvY3VtZW50LCBhbGxvd2luZyBzY3JvbGxpbmcuCiAgICBkLnNpemVyID0gZWx0KCJkaXYiLCBbZC5tb3Zlcl0sICJDb2RlTWlycm9yLXNpemVyIik7CiAgICBkLnNpemVyV2lkdGggPSBudWxsOwogICAgLy8gQmVoYXZpb3Igb2YgZWx0cyB3aXRoIG92ZXJmbG93OiBhdXRvIGFuZCBwYWRkaW5nIGlzCiAgICAvLyBpbmNvbnNpc3RlbnQgYWNyb3NzIGJyb3dzZXJzLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoZQogICAgLy8gc2Nyb2xsYWJsZSBhcmVhIGlzIGJpZyBlbm91Z2guCiAgICBkLmhlaWdodEZvcmNlciA9IGVsdCgiZGl2IiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiBhYnNvbHV0ZTsgaGVpZ2h0OiAiICsgc2Nyb2xsZXJHYXAgKyAicHg7IHdpZHRoOiAxcHg7Iik7CiAgICAvLyBXaWxsIGNvbnRhaW4gdGhlIGd1dHRlcnMsIGlmIGFueS4KICAgIGQuZ3V0dGVycyA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3ItZ3V0dGVycyIpOwogICAgZC5saW5lR3V0dGVyID0gbnVsbDsKICAgIC8vIEFjdHVhbCBzY3JvbGxhYmxlIGVsZW1lbnQuCiAgICBkLnNjcm9sbGVyID0gZWx0KCJkaXYiLCBbZC5zaXplciwgZC5oZWlnaHRGb3JjZXIsIGQuZ3V0dGVyc10sICJDb2RlTWlycm9yLXNjcm9sbCIpOwogICAgZC5zY3JvbGxlci5zZXRBdHRyaWJ1dGUoInRhYkluZGV4IiwgIi0xIik7CiAgICAvLyBUaGUgZWxlbWVudCBpbiB3aGljaCB0aGUgZWRpdG9yIGxpdmVzLgogICAgZC53cmFwcGVyID0gZWx0KCJkaXYiLCBbZC5zY3JvbGxiYXJGaWxsZXIsIGQuZ3V0dGVyRmlsbGVyLCBkLnNjcm9sbGVyXSwgIkNvZGVNaXJyb3IiKTsKCiAgICAvLyBXb3JrIGFyb3VuZCBJRTcgei1pbmRleCBidWcgKG5vdCBwZXJmZWN0LCBoZW5jZSBJRTcgbm90IHJlYWxseSBiZWluZyBzdXBwb3J0ZWQpCiAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDgpIHsgZC5ndXR0ZXJzLnN0eWxlLnpJbmRleCA9IC0xOyBkLnNjcm9sbGVyLnN0eWxlLnBhZGRpbmdSaWdodCA9IDA7IH0KICAgIGlmICghd2Via2l0ICYmICEoZ2Vja28gJiYgbW9iaWxlKSkgZC5zY3JvbGxlci5kcmFnZ2FibGUgPSB0cnVlOwoKICAgIGlmIChwbGFjZSkgewogICAgICBpZiAocGxhY2UuYXBwZW5kQ2hpbGQpIHBsYWNlLmFwcGVuZENoaWxkKGQud3JhcHBlcik7CiAgICAgIGVsc2UgcGxhY2UoZC53cmFwcGVyKTsKICAgIH0KCiAgICAvLyBDdXJyZW50IHJlbmRlcmVkIHJhbmdlIChtYXkgYmUgYmlnZ2VyIHRoYW4gdGhlIHZpZXcgd2luZG93KS4KICAgIGQudmlld0Zyb20gPSBkLnZpZXdUbyA9IGRvYy5maXJzdDsKICAgIGQucmVwb3J0ZWRWaWV3RnJvbSA9IGQucmVwb3J0ZWRWaWV3VG8gPSBkb2MuZmlyc3Q7CiAgICAvLyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVuZGVyZWQgbGluZXMuCiAgICBkLnZpZXcgPSBbXTsKICAgIGQucmVuZGVyZWRWaWV3ID0gbnVsbDsKICAgIC8vIEhvbGRzIGluZm8gYWJvdXQgYSBzaW5nbGUgcmVuZGVyZWQgbGluZSB3aGVuIGl0IHdhcyByZW5kZXJlZAogICAgLy8gZm9yIG1lYXN1cmVtZW50LCB3aGlsZSBub3QgaW4gdmlldy4KICAgIGQuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGw7CiAgICAvLyBFbXB0eSBzcGFjZSAoaW4gcGl4ZWxzKSBhYm92ZSB0aGUgdmlldwogICAgZC52aWV3T2Zmc2V0ID0gMDsKICAgIGQubGFzdFdyYXBIZWlnaHQgPSBkLmxhc3RXcmFwV2lkdGggPSAwOwogICAgZC51cGRhdGVMaW5lTnVtYmVycyA9IG51bGw7CgogICAgZC5uYXRpdmVCYXJXaWR0aCA9IGQuYmFySGVpZ2h0ID0gZC5iYXJXaWR0aCA9IDA7CiAgICBkLnNjcm9sbGJhcnNDbGlwcGVkID0gZmFsc2U7CgogICAgLy8gVXNlZCB0byBvbmx5IHJlc2l6ZSB0aGUgbGluZSBudW1iZXIgZ3V0dGVyIHdoZW4gbmVjZXNzYXJ5ICh3aGVuCiAgICAvLyB0aGUgYW1vdW50IG9mIGxpbmVzIGNyb3NzZXMgYSBib3VuZGFyeSB0aGF0IG1ha2VzIGl0cyB3aWR0aCBjaGFuZ2UpCiAgICBkLmxpbmVOdW1XaWR0aCA9IGQubGluZU51bUlubmVyV2lkdGggPSBkLmxpbmVOdW1DaGFycyA9IG51bGw7CiAgICAvLyBTZXQgdG8gdHJ1ZSB3aGVuIGEgbm9uLWhvcml6b250YWwtc2Nyb2xsaW5nIGxpbmUgd2lkZ2V0IGlzCiAgICAvLyBhZGRlZC4gQXMgYW4gb3B0aW1pemF0aW9uLCBsaW5lIHdpZGdldCBhbGlnbmluZyBpcyBza2lwcGVkIHdoZW4KICAgIC8vIHRoaXMgaXMgZmFsc2UuCiAgICBkLmFsaWduV2lkZ2V0cyA9IGZhbHNlOwoKICAgIGQuY2FjaGVkQ2hhcldpZHRoID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0gZC5jYWNoZWRQYWRkaW5nSCA9IG51bGw7CgogICAgLy8gVHJhY2tzIHRoZSBtYXhpbXVtIGxpbmUgbGVuZ3RoIHNvIHRoYXQgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyCiAgICAvLyBjYW4gYmUga2VwdCBzdGF0aWMgd2hlbiBzY3JvbGxpbmcuCiAgICBkLm1heExpbmUgPSBudWxsOwogICAgZC5tYXhMaW5lTGVuZ3RoID0gMDsKICAgIGQubWF4TGluZUNoYW5nZWQgPSBmYWxzZTsKCiAgICAvLyBVc2VkIGZvciBtZWFzdXJpbmcgd2hlZWwgc2Nyb2xsaW5nIGdyYW51bGFyaXR5CiAgICBkLndoZWVsRFggPSBkLndoZWVsRFkgPSBkLndoZWVsU3RhcnRYID0gZC53aGVlbFN0YXJ0WSA9IG51bGw7CgogICAgLy8gVHJ1ZSB3aGVuIHNoaWZ0IGlzIGhlbGQgZG93bi4KICAgIGQuc2hpZnQgPSBmYWxzZTsKCiAgICAvLyBVc2VkIHRvIHRyYWNrIHdoZXRoZXIgYW55dGhpbmcgaGFwcGVuZWQgc2luY2UgdGhlIGNvbnRleHQgbWVudQogICAgLy8gd2FzIG9wZW5lZC4KICAgIGQuc2VsRm9yQ29udGV4dE1lbnUgPSBudWxsOwoKICAgIGQuYWN0aXZlVG91Y2ggPSBudWxsOwoKICAgIGlucHV0LmluaXQoZCk7CiAgfQoKICAvLyBTVEFURSBVUERBVEVTCgogIC8vIFVzZWQgdG8gZ2V0IHRoZSBlZGl0b3IgaW50byBhIGNvbnNpc3RlbnQgc3RhdGUgYWdhaW4gd2hlbiBvcHRpb25zIGNoYW5nZS4KCiAgZnVuY3Rpb24gbG9hZE1vZGUoY20pIHsKICAgIGNtLmRvYy5tb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNtLm9wdGlvbnMsIGNtLmRvYy5tb2RlT3B0aW9uKTsKICAgIHJlc2V0TW9kZVN0YXRlKGNtKTsKICB9CgogIGZ1bmN0aW9uIHJlc2V0TW9kZVN0YXRlKGNtKSB7CiAgICBjbS5kb2MuaXRlcihmdW5jdGlvbihsaW5lKSB7CiAgICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIGxpbmUuc3RhdGVBZnRlciA9IG51bGw7CiAgICAgIGlmIChsaW5lLnN0eWxlcykgbGluZS5zdHlsZXMgPSBudWxsOwogICAgfSk7CiAgICBjbS5kb2MuZnJvbnRpZXIgPSBjbS5kb2MuZmlyc3Q7CiAgICBzdGFydFdvcmtlcihjbSwgMTAwKTsKICAgIGNtLnN0YXRlLm1vZGVHZW4rKzsKICAgIGlmIChjbS5jdXJPcCkgcmVnQ2hhbmdlKGNtKTsKICB9CgogIGZ1bmN0aW9uIHdyYXBwaW5nQ2hhbmdlZChjbSkgewogICAgaWYgKGNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7CiAgICAgIGFkZENsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgIkNvZGVNaXJyb3Itd3JhcCIpOwogICAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoID0gIiI7CiAgICAgIGNtLmRpc3BsYXkuc2l6ZXJXaWR0aCA9IG51bGw7CiAgICB9IGVsc2UgewogICAgICBybUNsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgIkNvZGVNaXJyb3Itd3JhcCIpOwogICAgICBmaW5kTWF4TGluZShjbSk7CiAgICB9CiAgICBlc3RpbWF0ZUxpbmVIZWlnaHRzKGNtKTsKICAgIHJlZ0NoYW5nZShjbSk7CiAgICBjbGVhckNhY2hlcyhjbSk7CiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dXBkYXRlU2Nyb2xsYmFycyhjbSk7fSwgMTAwKTsKICB9CgogIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGVzdGltYXRlcyB0aGUgaGVpZ2h0IG9mIGEgbGluZSwgdG8gdXNlIGFzCiAgLy8gZmlyc3QgYXBwcm94aW1hdGlvbiB1bnRpbCB0aGUgbGluZSBiZWNvbWVzIHZpc2libGUgKGFuZCBpcyB0aHVzCiAgLy8gcHJvcGVybHkgbWVhc3VyYWJsZSkuCiAgZnVuY3Rpb24gZXN0aW1hdGVIZWlnaHQoY20pIHsKICAgIHZhciB0aCA9IHRleHRIZWlnaHQoY20uZGlzcGxheSksIHdyYXBwaW5nID0gY20ub3B0aW9ucy5saW5lV3JhcHBpbmc7CiAgICB2YXIgcGVyTGluZSA9IHdyYXBwaW5nICYmIE1hdGgubWF4KDUsIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGggLyBjaGFyV2lkdGgoY20uZGlzcGxheSkgLSAzKTsKICAgIHJldHVybiBmdW5jdGlvbihsaW5lKSB7CiAgICAgIGlmIChsaW5lSXNIaWRkZW4oY20uZG9jLCBsaW5lKSkgcmV0dXJuIDA7CgogICAgICB2YXIgd2lkZ2V0c0hlaWdodCA9IDA7CiAgICAgIGlmIChsaW5lLndpZGdldHMpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZS53aWRnZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGxpbmUud2lkZ2V0c1tpXS5oZWlnaHQpIHdpZGdldHNIZWlnaHQgKz0gbGluZS53aWRnZXRzW2ldLmhlaWdodDsKICAgICAgfQoKICAgICAgaWYgKHdyYXBwaW5nKQogICAgICAgIHJldHVybiB3aWRnZXRzSGVpZ2h0ICsgKE1hdGguY2VpbChsaW5lLnRleHQubGVuZ3RoIC8gcGVyTGluZSkgfHwgMSkgKiB0aDsKICAgICAgZWxzZQogICAgICAgIHJldHVybiB3aWRnZXRzSGVpZ2h0ICsgdGg7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSkgewogICAgdmFyIGRvYyA9IGNtLmRvYywgZXN0ID0gZXN0aW1hdGVIZWlnaHQoY20pOwogICAgZG9jLml0ZXIoZnVuY3Rpb24obGluZSkgewogICAgICB2YXIgZXN0SGVpZ2h0ID0gZXN0KGxpbmUpOwogICAgICBpZiAoZXN0SGVpZ2h0ICE9IGxpbmUuaGVpZ2h0KSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGVzdEhlaWdodCk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHRoZW1lQ2hhbmdlZChjbSkgewogICAgY20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSA9IGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgvXHMqY20tcy1cUysvZywgIiIpICsKICAgICAgY20ub3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxccylccyovZywgIiBjbS1zLSIpOwogICAgY2xlYXJDYWNoZXMoY20pOwogIH0KCiAgZnVuY3Rpb24gZ3V0dGVyc0NoYW5nZWQoY20pIHsKICAgIHVwZGF0ZUd1dHRlcnMoY20pOwogICAgcmVnQ2hhbmdlKGNtKTsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXthbGlnbkhvcml6b250YWxseShjbSk7fSwgMjApOwogIH0KCiAgLy8gUmVidWlsZCB0aGUgZ3V0dGVyIGVsZW1lbnRzLCBlbnN1cmUgdGhlIG1hcmdpbiB0byB0aGUgbGVmdCBvZiB0aGUKICAvLyBjb2RlIG1hdGNoZXMgdGhlaXIgd2lkdGguCiAgZnVuY3Rpb24gdXBkYXRlR3V0dGVycyhjbSkgewogICAgdmFyIGd1dHRlcnMgPSBjbS5kaXNwbGF5Lmd1dHRlcnMsIHNwZWNzID0gY20ub3B0aW9ucy5ndXR0ZXJzOwogICAgcmVtb3ZlQ2hpbGRyZW4oZ3V0dGVycyk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwZWNzLmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciBndXR0ZXJDbGFzcyA9IHNwZWNzW2ldOwogICAgICB2YXIgZ0VsdCA9IGd1dHRlcnMuYXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1ndXR0ZXIgIiArIGd1dHRlckNsYXNzKSk7CiAgICAgIGlmIChndXR0ZXJDbGFzcyA9PSAiQ29kZU1pcnJvci1saW5lbnVtYmVycyIpIHsKICAgICAgICBjbS5kaXNwbGF5LmxpbmVHdXR0ZXIgPSBnRWx0OwogICAgICAgIGdFbHQuc3R5bGUud2lkdGggPSAoY20uZGlzcGxheS5saW5lTnVtV2lkdGggfHwgMSkgKyAicHgiOwogICAgICB9CiAgICB9CiAgICBndXR0ZXJzLnN0eWxlLmRpc3BsYXkgPSBpID8gIiIgOiAibm9uZSI7CiAgICB1cGRhdGVHdXR0ZXJTcGFjZShjbSk7CiAgfQoKICBmdW5jdGlvbiB1cGRhdGVHdXR0ZXJTcGFjZShjbSkgewogICAgdmFyIHdpZHRoID0gY20uZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoOwogICAgY20uZGlzcGxheS5zaXplci5zdHlsZS5tYXJnaW5MZWZ0ID0gd2lkdGggKyAicHgiOwogIH0KCiAgLy8gQ29tcHV0ZSB0aGUgY2hhcmFjdGVyIGxlbmd0aCBvZiBhIGxpbmUsIHRha2luZyBpbnRvIGFjY291bnQKICAvLyBjb2xsYXBzZWQgcmFuZ2VzIChzZWUgbWFya1RleHQpIHRoYXQgbWlnaHQgaGlkZSBwYXJ0cywgYW5kIGpvaW4KICAvLyBvdGhlciBsaW5lcyBvbnRvIGl0LgogIGZ1bmN0aW9uIGxpbmVMZW5ndGgobGluZSkgewogICAgaWYgKGxpbmUuaGVpZ2h0ID09IDApIHJldHVybiAwOwogICAgdmFyIGxlbiA9IGxpbmUudGV4dC5sZW5ndGgsIG1lcmdlZCwgY3VyID0gbGluZTsKICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRTdGFydChjdXIpKSB7CiAgICAgIHZhciBmb3VuZCA9IG1lcmdlZC5maW5kKDAsIHRydWUpOwogICAgICBjdXIgPSBmb3VuZC5mcm9tLmxpbmU7CiAgICAgIGxlbiArPSBmb3VuZC5mcm9tLmNoIC0gZm91bmQudG8uY2g7CiAgICB9CiAgICBjdXIgPSBsaW5lOwogICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChjdXIpKSB7CiAgICAgIHZhciBmb3VuZCA9IG1lcmdlZC5maW5kKDAsIHRydWUpOwogICAgICBsZW4gLT0gY3VyLnRleHQubGVuZ3RoIC0gZm91bmQuZnJvbS5jaDsKICAgICAgY3VyID0gZm91bmQudG8ubGluZTsKICAgICAgbGVuICs9IGN1ci50ZXh0Lmxlbmd0aCAtIGZvdW5kLnRvLmNoOwogICAgfQogICAgcmV0dXJuIGxlbjsKICB9CgogIC8vIEZpbmQgdGhlIGxvbmdlc3QgbGluZSBpbiB0aGUgZG9jdW1lbnQuCiAgZnVuY3Rpb24gZmluZE1heExpbmUoY20pIHsKICAgIHZhciBkID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jOwogICAgZC5tYXhMaW5lID0gZ2V0TGluZShkb2MsIGRvYy5maXJzdCk7CiAgICBkLm1heExpbmVMZW5ndGggPSBsaW5lTGVuZ3RoKGQubWF4TGluZSk7CiAgICBkLm1heExpbmVDaGFuZ2VkID0gdHJ1ZTsKICAgIGRvYy5pdGVyKGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgdmFyIGxlbiA9IGxpbmVMZW5ndGgobGluZSk7CiAgICAgIGlmIChsZW4gPiBkLm1heExpbmVMZW5ndGgpIHsKICAgICAgICBkLm1heExpbmVMZW5ndGggPSBsZW47CiAgICAgICAgZC5tYXhMaW5lID0gbGluZTsKICAgICAgfQogICAgfSk7CiAgfQoKICAvLyBNYWtlIHN1cmUgdGhlIGd1dHRlcnMgb3B0aW9ucyBjb250YWlucyB0aGUgZWxlbWVudAogIC8vICJDb2RlTWlycm9yLWxpbmVudW1iZXJzIiB3aGVuIHRoZSBsaW5lTnVtYmVycyBvcHRpb24gaXMgdHJ1ZS4KICBmdW5jdGlvbiBzZXRHdXR0ZXJzRm9yTGluZU51bWJlcnMob3B0aW9ucykgewogICAgdmFyIGZvdW5kID0gaW5kZXhPZihvcHRpb25zLmd1dHRlcnMsICJDb2RlTWlycm9yLWxpbmVudW1iZXJzIik7CiAgICBpZiAoZm91bmQgPT0gLTEgJiYgb3B0aW9ucy5saW5lTnVtYmVycykgewogICAgICBvcHRpb25zLmd1dHRlcnMgPSBvcHRpb25zLmd1dHRlcnMuY29uY2F0KFsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdKTsKICAgIH0gZWxzZSBpZiAoZm91bmQgPiAtMSAmJiAhb3B0aW9ucy5saW5lTnVtYmVycykgewogICAgICBvcHRpb25zLmd1dHRlcnMgPSBvcHRpb25zLmd1dHRlcnMuc2xpY2UoMCk7CiAgICAgIG9wdGlvbnMuZ3V0dGVycy5zcGxpY2UoZm91bmQsIDEpOwogICAgfQogIH0KCiAgLy8gU0NST0xMQkFSUwoKICAvLyBQcmVwYXJlIERPTSByZWFkcyBuZWVkZWQgdG8gdXBkYXRlIHRoZSBzY3JvbGxiYXJzLiBEb25lIGluIG9uZQogIC8vIHNob3QgdG8gbWluaW1pemUgdXBkYXRlL21lYXN1cmUgcm91bmR0cmlwcy4KICBmdW5jdGlvbiBtZWFzdXJlRm9yU2Nyb2xsYmFycyhjbSkgewogICAgdmFyIGQgPSBjbS5kaXNwbGF5LCBndXR0ZXJXID0gZC5ndXR0ZXJzLm9mZnNldFdpZHRoOwogICAgdmFyIGRvY0ggPSBNYXRoLnJvdW5kKGNtLmRvYy5oZWlnaHQgKyBwYWRkaW5nVmVydChjbS5kaXNwbGF5KSk7CiAgICByZXR1cm4gewogICAgICBjbGllbnRIZWlnaHQ6IGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LAogICAgICB2aWV3SGVpZ2h0OiBkLndyYXBwZXIuY2xpZW50SGVpZ2h0LAogICAgICBzY3JvbGxXaWR0aDogZC5zY3JvbGxlci5zY3JvbGxXaWR0aCwgY2xpZW50V2lkdGg6IGQuc2Nyb2xsZXIuY2xpZW50V2lkdGgsCiAgICAgIHZpZXdXaWR0aDogZC53cmFwcGVyLmNsaWVudFdpZHRoLAogICAgICBiYXJMZWZ0OiBjbS5vcHRpb25zLmZpeGVkR3V0dGVyID8gZ3V0dGVyVyA6IDAsCiAgICAgIGRvY0hlaWdodDogZG9jSCwKICAgICAgc2Nyb2xsSGVpZ2h0OiBkb2NIICsgc2Nyb2xsR2FwKGNtKSArIGQuYmFySGVpZ2h0LAogICAgICBuYXRpdmVCYXJXaWR0aDogZC5uYXRpdmVCYXJXaWR0aCwKICAgICAgZ3V0dGVyV2lkdGg6IGd1dHRlclcKICAgIH07CiAgfQoKICBmdW5jdGlvbiBOYXRpdmVTY3JvbGxiYXJzKHBsYWNlLCBzY3JvbGwsIGNtKSB7CiAgICB0aGlzLmNtID0gY207CiAgICB2YXIgdmVydCA9IHRoaXMudmVydCA9IGVsdCgiZGl2IiwgW2VsdCgiZGl2IiwgbnVsbCwgbnVsbCwgIm1pbi13aWR0aDogMXB4IildLCAiQ29kZU1pcnJvci12c2Nyb2xsYmFyIik7CiAgICB2YXIgaG9yaXogPSB0aGlzLmhvcml6ID0gZWx0KCJkaXYiLCBbZWx0KCJkaXYiLCBudWxsLCBudWxsLCAiaGVpZ2h0OiAxMDAlOyBtaW4taGVpZ2h0OiAxcHgiKV0sICJDb2RlTWlycm9yLWhzY3JvbGxiYXIiKTsKICAgIHBsYWNlKHZlcnQpOyBwbGFjZShob3Jpeik7CgogICAgb24odmVydCwgInNjcm9sbCIsIGZ1bmN0aW9uKCkgewogICAgICBpZiAodmVydC5jbGllbnRIZWlnaHQpIHNjcm9sbCh2ZXJ0LnNjcm9sbFRvcCwgInZlcnRpY2FsIik7CiAgICB9KTsKICAgIG9uKGhvcml6LCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7CiAgICAgIGlmIChob3Jpei5jbGllbnRXaWR0aCkgc2Nyb2xsKGhvcml6LnNjcm9sbExlZnQsICJob3Jpem9udGFsIik7CiAgICB9KTsKCiAgICB0aGlzLmNoZWNrZWRaZXJvV2lkdGggPSBmYWxzZTsKICAgIC8vIE5lZWQgdG8gc2V0IGEgbWluaW11bSB3aWR0aCB0byBzZWUgdGhlIHNjcm9sbGJhciBvbiBJRTcgKGJ1dCBtdXN0IG5vdCBzZXQgaXQgb24gSUU4KS4KICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOCkgdGhpcy5ob3Jpei5zdHlsZS5taW5IZWlnaHQgPSB0aGlzLnZlcnQuc3R5bGUubWluV2lkdGggPSAiMThweCI7CiAgfQoKICBOYXRpdmVTY3JvbGxiYXJzLnByb3RvdHlwZSA9IGNvcHlPYmooewogICAgdXBkYXRlOiBmdW5jdGlvbihtZWFzdXJlKSB7CiAgICAgIHZhciBuZWVkc0ggPSBtZWFzdXJlLnNjcm9sbFdpZHRoID4gbWVhc3VyZS5jbGllbnRXaWR0aCArIDE7CiAgICAgIHZhciBuZWVkc1YgPSBtZWFzdXJlLnNjcm9sbEhlaWdodCA+IG1lYXN1cmUuY2xpZW50SGVpZ2h0ICsgMTsKICAgICAgdmFyIHNXaWR0aCA9IG1lYXN1cmUubmF0aXZlQmFyV2lkdGg7CgogICAgICBpZiAobmVlZHNWKSB7CiAgICAgICAgdGhpcy52ZXJ0LnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgICAgIHRoaXMudmVydC5zdHlsZS5ib3R0b20gPSBuZWVkc0ggPyBzV2lkdGggKyAicHgiIDogIjAiOwogICAgICAgIHZhciB0b3RhbEhlaWdodCA9IG1lYXN1cmUudmlld0hlaWdodCAtIChuZWVkc0ggPyBzV2lkdGggOiAwKTsKICAgICAgICAvLyBBIGJ1ZyBpbiBJRTggY2FuIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgbmVnYXRpdmUsIHNvIGd1YXJkIGl0LgogICAgICAgIHRoaXMudmVydC5maXJzdENoaWxkLnN0eWxlLmhlaWdodCA9CiAgICAgICAgICBNYXRoLm1heCgwLCBtZWFzdXJlLnNjcm9sbEhlaWdodCAtIG1lYXN1cmUuY2xpZW50SGVpZ2h0ICsgdG90YWxIZWlnaHQpICsgInB4IjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnZlcnQuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICAgIHRoaXMudmVydC5maXJzdENoaWxkLnN0eWxlLmhlaWdodCA9ICIwIjsKICAgICAgfQoKICAgICAgaWYgKG5lZWRzSCkgewogICAgICAgIHRoaXMuaG9yaXouc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICAgICAgdGhpcy5ob3Jpei5zdHlsZS5yaWdodCA9IG5lZWRzViA/IHNXaWR0aCArICJweCIgOiAiMCI7CiAgICAgICAgdGhpcy5ob3Jpei5zdHlsZS5sZWZ0ID0gbWVhc3VyZS5iYXJMZWZ0ICsgInB4IjsKICAgICAgICB2YXIgdG90YWxXaWR0aCA9IG1lYXN1cmUudmlld1dpZHRoIC0gbWVhc3VyZS5iYXJMZWZ0IC0gKG5lZWRzViA/IHNXaWR0aCA6IDApOwogICAgICAgIHRoaXMuaG9yaXouZmlyc3RDaGlsZC5zdHlsZS53aWR0aCA9CiAgICAgICAgICAobWVhc3VyZS5zY3JvbGxXaWR0aCAtIG1lYXN1cmUuY2xpZW50V2lkdGggKyB0b3RhbFdpZHRoKSArICJweCI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5ob3Jpei5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgICAgdGhpcy5ob3Jpei5maXJzdENoaWxkLnN0eWxlLndpZHRoID0gIjAiOwogICAgICB9CgogICAgICBpZiAoIXRoaXMuY2hlY2tlZFplcm9XaWR0aCAmJiBtZWFzdXJlLmNsaWVudEhlaWdodCA+IDApIHsKICAgICAgICBpZiAoc1dpZHRoID09IDApIHRoaXMuemVyb1dpZHRoSGFjaygpOwogICAgICAgIHRoaXMuY2hlY2tlZFplcm9XaWR0aCA9IHRydWU7CiAgICAgIH0KCiAgICAgIHJldHVybiB7cmlnaHQ6IG5lZWRzViA/IHNXaWR0aCA6IDAsIGJvdHRvbTogbmVlZHNIID8gc1dpZHRoIDogMH07CiAgICB9LAogICAgc2V0U2Nyb2xsTGVmdDogZnVuY3Rpb24ocG9zKSB7CiAgICAgIGlmICh0aGlzLmhvcml6LnNjcm9sbExlZnQgIT0gcG9zKSB0aGlzLmhvcml6LnNjcm9sbExlZnQgPSBwb3M7CiAgICAgIGlmICh0aGlzLmRpc2FibGVIb3JpeikgdGhpcy5lbmFibGVaZXJvV2lkdGhCYXIodGhpcy5ob3JpeiwgdGhpcy5kaXNhYmxlSG9yaXopOwogICAgfSwKICAgIHNldFNjcm9sbFRvcDogZnVuY3Rpb24ocG9zKSB7CiAgICAgIGlmICh0aGlzLnZlcnQuc2Nyb2xsVG9wICE9IHBvcykgdGhpcy52ZXJ0LnNjcm9sbFRvcCA9IHBvczsKICAgICAgaWYgKHRoaXMuZGlzYWJsZVZlcnQpIHRoaXMuZW5hYmxlWmVyb1dpZHRoQmFyKHRoaXMudmVydCwgdGhpcy5kaXNhYmxlVmVydCk7CiAgICB9LAogICAgemVyb1dpZHRoSGFjazogZnVuY3Rpb24oKSB7CiAgICAgIHZhciB3ID0gbWFjICYmICFtYWNfZ2VNb3VudGFpbkxpb24gPyAiMTJweCIgOiAiMThweCI7CiAgICAgIHRoaXMuaG9yaXouc3R5bGUuaGVpZ2h0ID0gdGhpcy52ZXJ0LnN0eWxlLndpZHRoID0gdzsKICAgICAgdGhpcy5ob3Jpei5zdHlsZS5wb2ludGVyRXZlbnRzID0gdGhpcy52ZXJ0LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAibm9uZSI7CiAgICAgIHRoaXMuZGlzYWJsZUhvcml6ID0gbmV3IERlbGF5ZWQ7CiAgICAgIHRoaXMuZGlzYWJsZVZlcnQgPSBuZXcgRGVsYXllZDsKICAgIH0sCiAgICBlbmFibGVaZXJvV2lkdGhCYXI6IGZ1bmN0aW9uKGJhciwgZGVsYXkpIHsKICAgICAgYmFyLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAiYXV0byI7CiAgICAgIGZ1bmN0aW9uIG1heWJlRGlzYWJsZSgpIHsKICAgICAgICAvLyBUbyBmaW5kIG91dCB3aGV0aGVyIHRoZSBzY3JvbGxiYXIgaXMgc3RpbGwgdmlzaWJsZSwgd2UKICAgICAgICAvLyBjaGVjayB3aGV0aGVyIHRoZSBlbGVtZW50IHVuZGVyIHRoZSBwaXhlbCBpbiB0aGUgYm90dG9tCiAgICAgICAgLy8gbGVmdCBjb3JuZXIgb2YgdGhlIHNjcm9sbGJhciBib3ggaXMgdGhlIHNjcm9sbGJhciBib3gKICAgICAgICAvLyBpdHNlbGYgKHdoZW4gdGhlIGJhciBpcyBzdGlsbCB2aXNpYmxlKSBvciBpdHMgZmlsbGVyIGNoaWxkCiAgICAgICAgLy8gKHdoZW4gdGhlIGJhciBpcyBoaWRkZW4pLiBJZiBpdCBpcyBzdGlsbCB2aXNpYmxlLCB3ZSBrZWVwCiAgICAgICAgLy8gaXQgZW5hYmxlZCwgaWYgaXQncyBoaWRkZW4sIHdlIGRpc2FibGUgcG9pbnRlciBldmVudHMuCiAgICAgICAgdmFyIGJveCA9IGJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICB2YXIgZWx0ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChib3gubGVmdCArIDEsIGJveC5ib3R0b20gLSAxKTsKICAgICAgICBpZiAoZWx0ICE9IGJhcikgYmFyLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAibm9uZSI7CiAgICAgICAgZWxzZSBkZWxheS5zZXQoMTAwMCwgbWF5YmVEaXNhYmxlKTsKICAgICAgfQogICAgICBkZWxheS5zZXQoMTAwMCwgbWF5YmVEaXNhYmxlKTsKICAgIH0sCiAgICBjbGVhcjogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLmhvcml6LnBhcmVudE5vZGU7CiAgICAgIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmhvcml6KTsKICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMudmVydCk7CiAgICB9CiAgfSwgTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUpOwoKICBmdW5jdGlvbiBOdWxsU2Nyb2xsYmFycygpIHt9CgogIE51bGxTY3JvbGxiYXJzLnByb3RvdHlwZSA9IGNvcHlPYmooewogICAgdXBkYXRlOiBmdW5jdGlvbigpIHsgcmV0dXJuIHtib3R0b206IDAsIHJpZ2h0OiAwfTsgfSwKICAgIHNldFNjcm9sbExlZnQ6IGZ1bmN0aW9uKCkge30sCiAgICBzZXRTY3JvbGxUb3A6IGZ1bmN0aW9uKCkge30sCiAgICBjbGVhcjogZnVuY3Rpb24oKSB7fQogIH0sIE51bGxTY3JvbGxiYXJzLnByb3RvdHlwZSk7CgogIENvZGVNaXJyb3Iuc2Nyb2xsYmFyTW9kZWwgPSB7Im5hdGl2ZSI6IE5hdGl2ZVNjcm9sbGJhcnMsICJudWxsIjogTnVsbFNjcm9sbGJhcnN9OwoKICBmdW5jdGlvbiBpbml0U2Nyb2xsYmFycyhjbSkgewogICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsYmFycykgewogICAgICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuY2xlYXIoKTsKICAgICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcykKICAgICAgICBybUNsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgY20uZGlzcGxheS5zY3JvbGxiYXJzLmFkZENsYXNzKTsKICAgIH0KCiAgICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMgPSBuZXcgQ29kZU1pcnJvci5zY3JvbGxiYXJNb2RlbFtjbS5vcHRpb25zLnNjcm9sbGJhclN0eWxlXShmdW5jdGlvbihub2RlKSB7CiAgICAgIGNtLmRpc3BsYXkud3JhcHBlci5pbnNlcnRCZWZvcmUobm9kZSwgY20uZGlzcGxheS5zY3JvbGxiYXJGaWxsZXIpOwogICAgICAvLyBQcmV2ZW50IGNsaWNrcyBpbiB0aGUgc2Nyb2xsYmFycyBmcm9tIGtpbGxpbmcgZm9jdXMKICAgICAgb24obm9kZSwgIm1vdXNlZG93biIsIGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkKSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjbS5kaXNwbGF5LmlucHV0LmZvY3VzKCk7IH0sIDApOwogICAgICB9KTsKICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoImNtLW5vdC1jb250ZW50IiwgInRydWUiKTsKICAgIH0sIGZ1bmN0aW9uKHBvcywgYXhpcykgewogICAgICBpZiAoYXhpcyA9PSAiaG9yaXpvbnRhbCIpIHNldFNjcm9sbExlZnQoY20sIHBvcyk7CiAgICAgIGVsc2Ugc2V0U2Nyb2xsVG9wKGNtLCBwb3MpOwogICAgfSwgY20pOwogICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcykKICAgICAgYWRkQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MpOwogIH0KCiAgZnVuY3Rpb24gdXBkYXRlU2Nyb2xsYmFycyhjbSwgbWVhc3VyZSkgewogICAgaWYgKCFtZWFzdXJlKSBtZWFzdXJlID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pOwogICAgdmFyIHN0YXJ0V2lkdGggPSBjbS5kaXNwbGF5LmJhcldpZHRoLCBzdGFydEhlaWdodCA9IGNtLmRpc3BsYXkuYmFySGVpZ2h0OwogICAgdXBkYXRlU2Nyb2xsYmFyc0lubmVyKGNtLCBtZWFzdXJlKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNCAmJiBzdGFydFdpZHRoICE9IGNtLmRpc3BsYXkuYmFyV2lkdGggfHwgc3RhcnRIZWlnaHQgIT0gY20uZGlzcGxheS5iYXJIZWlnaHQ7IGkrKykgewogICAgICBpZiAoc3RhcnRXaWR0aCAhPSBjbS5kaXNwbGF5LmJhcldpZHRoICYmIGNtLm9wdGlvbnMubGluZVdyYXBwaW5nKQogICAgICAgIHVwZGF0ZUhlaWdodHNJblZpZXdwb3J0KGNtKTsKICAgICAgdXBkYXRlU2Nyb2xsYmFyc0lubmVyKGNtLCBtZWFzdXJlRm9yU2Nyb2xsYmFycyhjbSkpOwogICAgICBzdGFydFdpZHRoID0gY20uZGlzcGxheS5iYXJXaWR0aDsgc3RhcnRIZWlnaHQgPSBjbS5kaXNwbGF5LmJhckhlaWdodDsKICAgIH0KICB9CgogIC8vIFJlLXN5bmNocm9uaXplIHRoZSBmYWtlIHNjcm9sbGJhcnMgd2l0aCB0aGUgYWN0dWFsIHNpemUgb2YgdGhlCiAgLy8gY29udGVudC4KICBmdW5jdGlvbiB1cGRhdGVTY3JvbGxiYXJzSW5uZXIoY20sIG1lYXN1cmUpIHsKICAgIHZhciBkID0gY20uZGlzcGxheTsKICAgIHZhciBzaXplcyA9IGQuc2Nyb2xsYmFycy51cGRhdGUobWVhc3VyZSk7CgogICAgZC5zaXplci5zdHlsZS5wYWRkaW5nUmlnaHQgPSAoZC5iYXJXaWR0aCA9IHNpemVzLnJpZ2h0KSArICJweCI7CiAgICBkLnNpemVyLnN0eWxlLnBhZGRpbmdCb3R0b20gPSAoZC5iYXJIZWlnaHQgPSBzaXplcy5ib3R0b20pICsgInB4IjsKCiAgICBpZiAoc2l6ZXMucmlnaHQgJiYgc2l6ZXMuYm90dG9tKSB7CiAgICAgIGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQgPSBzaXplcy5ib3R0b20gKyAicHgiOwogICAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS53aWR0aCA9IHNpemVzLnJpZ2h0ICsgInB4IjsKICAgIH0gZWxzZSBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICBpZiAoc2l6ZXMuYm90dG9tICYmIGNtLm9wdGlvbnMuY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIgJiYgY20ub3B0aW9ucy5maXhlZEd1dHRlcikgewogICAgICBkLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgICAgZC5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVpZ2h0ID0gc2l6ZXMuYm90dG9tICsgInB4IjsKICAgICAgZC5ndXR0ZXJGaWxsZXIuc3R5bGUud2lkdGggPSBtZWFzdXJlLmd1dHRlcldpZHRoICsgInB4IjsKICAgIH0gZWxzZSBkLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgfQoKICAvLyBDb21wdXRlIHRoZSBsaW5lcyB0aGF0IGFyZSB2aXNpYmxlIGluIGEgZ2l2ZW4gdmlld3BvcnQgKGRlZmF1bHRzCiAgLy8gdGhlIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbikuIHZpZXdwb3J0IG1heSBjb250YWluIHRvcCwKICAvLyBoZWlnaHQsIGFuZCBlbnN1cmUgKHNlZSBvcC5zY3JvbGxUb1BvcykgcHJvcGVydGllcy4KICBmdW5jdGlvbiB2aXNpYmxlTGluZXMoZGlzcGxheSwgZG9jLCB2aWV3cG9ydCkgewogICAgdmFyIHRvcCA9IHZpZXdwb3J0ICYmIHZpZXdwb3J0LnRvcCAhPSBudWxsID8gTWF0aC5tYXgoMCwgdmlld3BvcnQudG9wKSA6IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wOwogICAgdG9wID0gTWF0aC5mbG9vcih0b3AgLSBwYWRkaW5nVG9wKGRpc3BsYXkpKTsKICAgIHZhciBib3R0b20gPSB2aWV3cG9ydCAmJiB2aWV3cG9ydC5ib3R0b20gIT0gbnVsbCA/IHZpZXdwb3J0LmJvdHRvbSA6IHRvcCArIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7CgogICAgdmFyIGZyb20gPSBsaW5lQXRIZWlnaHQoZG9jLCB0b3ApLCB0byA9IGxpbmVBdEhlaWdodChkb2MsIGJvdHRvbSk7CiAgICAvLyBFbnN1cmUgaXMgYSB7ZnJvbToge2xpbmUsIGNofSwgdG86IHtsaW5lLCBjaH19IG9iamVjdCwgYW5kCiAgICAvLyBmb3JjZXMgdGhvc2UgbGluZXMgaW50byB0aGUgdmlld3BvcnQgKGlmIHBvc3NpYmxlKS4KICAgIGlmICh2aWV3cG9ydCAmJiB2aWV3cG9ydC5lbnN1cmUpIHsKICAgICAgdmFyIGVuc3VyZUZyb20gPSB2aWV3cG9ydC5lbnN1cmUuZnJvbS5saW5lLCBlbnN1cmVUbyA9IHZpZXdwb3J0LmVuc3VyZS50by5saW5lOwogICAgICBpZiAoZW5zdXJlRnJvbSA8IGZyb20pIHsKICAgICAgICBmcm9tID0gZW5zdXJlRnJvbTsKICAgICAgICB0byA9IGxpbmVBdEhlaWdodChkb2MsIGhlaWdodEF0TGluZShnZXRMaW5lKGRvYywgZW5zdXJlRnJvbSkpICsgZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCk7CiAgICAgIH0gZWxzZSBpZiAoTWF0aC5taW4oZW5zdXJlVG8sIGRvYy5sYXN0TGluZSgpKSA+PSB0bykgewogICAgICAgIGZyb20gPSBsaW5lQXRIZWlnaHQoZG9jLCBoZWlnaHRBdExpbmUoZ2V0TGluZShkb2MsIGVuc3VyZVRvKSkgLSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0KTsKICAgICAgICB0byA9IGVuc3VyZVRvOwogICAgICB9CiAgICB9CiAgICByZXR1cm4ge2Zyb206IGZyb20sIHRvOiBNYXRoLm1heCh0bywgZnJvbSArIDEpfTsKICB9CgogIC8vIExJTkUgTlVNQkVSUwoKICAvLyBSZS1hbGlnbiBsaW5lIG51bWJlcnMgYW5kIGd1dHRlciBtYXJrcyB0byBjb21wZW5zYXRlIGZvcgogIC8vIGhvcml6b250YWwgc2Nyb2xsaW5nLgogIGZ1bmN0aW9uIGFsaWduSG9yaXpvbnRhbGx5KGNtKSB7CiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHZpZXcgPSBkaXNwbGF5LnZpZXc7CiAgICBpZiAoIWRpc3BsYXkuYWxpZ25XaWRnZXRzICYmICghZGlzcGxheS5ndXR0ZXJzLmZpcnN0Q2hpbGQgfHwgIWNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIpKSByZXR1cm47CiAgICB2YXIgY29tcCA9IGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGRpc3BsYXkpIC0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ICsgY20uZG9jLnNjcm9sbExlZnQ7CiAgICB2YXIgZ3V0dGVyVyA9IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCwgbGVmdCA9IGNvbXAgKyAicHgiOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSBpZiAoIXZpZXdbaV0uaGlkZGVuKSB7CiAgICAgIGlmIChjbS5vcHRpb25zLmZpeGVkR3V0dGVyICYmIHZpZXdbaV0uZ3V0dGVyKQogICAgICAgIHZpZXdbaV0uZ3V0dGVyLnN0eWxlLmxlZnQgPSBsZWZ0OwogICAgICB2YXIgYWxpZ24gPSB2aWV3W2ldLmFsaWduYWJsZTsKICAgICAgaWYgKGFsaWduKSBmb3IgKHZhciBqID0gMDsgaiA8IGFsaWduLmxlbmd0aDsgaisrKQogICAgICAgIGFsaWduW2pdLnN0eWxlLmxlZnQgPSBsZWZ0OwogICAgfQogICAgaWYgKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIpCiAgICAgIGRpc3BsYXkuZ3V0dGVycy5zdHlsZS5sZWZ0ID0gKGNvbXAgKyBndXR0ZXJXKSArICJweCI7CiAgfQoKICAvLyBVc2VkIHRvIGVuc3VyZSB0aGF0IHRoZSBsaW5lIG51bWJlciBndXR0ZXIgaXMgc3RpbGwgdGhlIHJpZ2h0CiAgLy8gc2l6ZSBmb3IgdGhlIGN1cnJlbnQgZG9jdW1lbnQgc2l6ZS4gUmV0dXJucyB0cnVlIHdoZW4gYW4gdXBkYXRlCiAgLy8gaXMgbmVlZGVkLgogIGZ1bmN0aW9uIG1heWJlVXBkYXRlTGluZU51bWJlcldpZHRoKGNtKSB7CiAgICBpZiAoIWNtLm9wdGlvbnMubGluZU51bWJlcnMpIHJldHVybiBmYWxzZTsKICAgIHZhciBkb2MgPSBjbS5kb2MsIGxhc3QgPSBsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGRvYy5maXJzdCArIGRvYy5zaXplIC0gMSksIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwogICAgaWYgKGxhc3QubGVuZ3RoICE9IGRpc3BsYXkubGluZU51bUNoYXJzKSB7CiAgICAgIHZhciB0ZXN0ID0gZGlzcGxheS5tZWFzdXJlLmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgW2VsdCgiZGl2IiwgbGFzdCldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiKSk7CiAgICAgIHZhciBpbm5lclcgPSB0ZXN0LmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGgsIHBhZGRpbmcgPSB0ZXN0Lm9mZnNldFdpZHRoIC0gaW5uZXJXOwogICAgICBkaXNwbGF5LmxpbmVHdXR0ZXIuc3R5bGUud2lkdGggPSAiIjsKICAgICAgZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCA9IE1hdGgubWF4KGlubmVyVywgZGlzcGxheS5saW5lR3V0dGVyLm9mZnNldFdpZHRoIC0gcGFkZGluZykgKyAxOwogICAgICBkaXNwbGF5LmxpbmVOdW1XaWR0aCA9IGRpc3BsYXkubGluZU51bUlubmVyV2lkdGggKyBwYWRkaW5nOwogICAgICBkaXNwbGF5LmxpbmVOdW1DaGFycyA9IGRpc3BsYXkubGluZU51bUlubmVyV2lkdGggPyBsYXN0Lmxlbmd0aCA6IC0xOwogICAgICBkaXNwbGF5LmxpbmVHdXR0ZXIuc3R5bGUud2lkdGggPSBkaXNwbGF5LmxpbmVOdW1XaWR0aCArICJweCI7CiAgICAgIHVwZGF0ZUd1dHRlclNwYWNlKGNtKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiBsaW5lTnVtYmVyRm9yKG9wdGlvbnMsIGkpIHsKICAgIHJldHVybiBTdHJpbmcob3B0aW9ucy5saW5lTnVtYmVyRm9ybWF0dGVyKGkgKyBvcHRpb25zLmZpcnN0TGluZU51bWJlcikpOwogIH0KCiAgLy8gQ29tcHV0ZXMgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ICsgZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoLAogIC8vIGJ1dCB1c2luZyBnZXRCb3VuZGluZ0NsaWVudFJlY3QgdG8gZ2V0IGEgc3ViLXBpeGVsLWFjY3VyYXRlCiAgLy8gcmVzdWx0LgogIGZ1bmN0aW9uIGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGRpc3BsYXkpIHsKICAgIHJldHVybiBkaXNwbGF5LnNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBkaXNwbGF5LnNpemVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7CiAgfQoKICAvLyBESVNQTEFZIERSQVdJTkcKCiAgZnVuY3Rpb24gRGlzcGxheVVwZGF0ZShjbSwgdmlld3BvcnQsIGZvcmNlKSB7CiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7CgogICAgdGhpcy52aWV3cG9ydCA9IHZpZXdwb3J0OwogICAgLy8gU3RvcmUgc29tZSB2YWx1ZXMgdGhhdCB3ZSdsbCBuZWVkIGxhdGVyIChidXQgZG9uJ3Qgd2FudCB0byBmb3JjZSBhIHJlbGF5b3V0IGZvcikKICAgIHRoaXMudmlzaWJsZSA9IHZpc2libGVMaW5lcyhkaXNwbGF5LCBjbS5kb2MsIHZpZXdwb3J0KTsKICAgIHRoaXMuZWRpdG9ySXNIaWRkZW4gPSAhZGlzcGxheS53cmFwcGVyLm9mZnNldFdpZHRoOwogICAgdGhpcy53cmFwcGVySGVpZ2h0ID0gZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKICAgIHRoaXMud3JhcHBlcldpZHRoID0gZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoOwogICAgdGhpcy5vbGREaXNwbGF5V2lkdGggPSBkaXNwbGF5V2lkdGgoY20pOwogICAgdGhpcy5mb3JjZSA9IGZvcmNlOwogICAgdGhpcy5kaW1zID0gZ2V0RGltZW5zaW9ucyhjbSk7CiAgICB0aGlzLmV2ZW50cyA9IFtdOwogIH0KCiAgRGlzcGxheVVwZGF0ZS5wcm90b3R5cGUuc2lnbmFsID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkgewogICAgaWYgKGhhc0hhbmRsZXIoZW1pdHRlciwgdHlwZSkpCiAgICAgIHRoaXMuZXZlbnRzLnB1c2goYXJndW1lbnRzKTsKICB9OwogIERpc3BsYXlVcGRhdGUucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9uKCkgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmV2ZW50cy5sZW5ndGg7IGkrKykKICAgICAgc2lnbmFsLmFwcGx5KG51bGwsIHRoaXMuZXZlbnRzW2ldKTsKICB9OwoKICBmdW5jdGlvbiBtYXliZUNsaXBTY3JvbGxiYXJzKGNtKSB7CiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7CiAgICBpZiAoIWRpc3BsYXkuc2Nyb2xsYmFyc0NsaXBwZWQgJiYgZGlzcGxheS5zY3JvbGxlci5vZmZzZXRXaWR0aCkgewogICAgICBkaXNwbGF5Lm5hdGl2ZUJhcldpZHRoID0gZGlzcGxheS5zY3JvbGxlci5vZmZzZXRXaWR0aCAtIGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGg7CiAgICAgIGRpc3BsYXkuaGVpZ2h0Rm9yY2VyLnN0eWxlLmhlaWdodCA9IHNjcm9sbEdhcChjbSkgKyAicHgiOwogICAgICBkaXNwbGF5LnNpemVyLnN0eWxlLm1hcmdpbkJvdHRvbSA9IC1kaXNwbGF5Lm5hdGl2ZUJhcldpZHRoICsgInB4IjsKICAgICAgZGlzcGxheS5zaXplci5zdHlsZS5ib3JkZXJSaWdodFdpZHRoID0gc2Nyb2xsR2FwKGNtKSArICJweCI7CiAgICAgIGRpc3BsYXkuc2Nyb2xsYmFyc0NsaXBwZWQgPSB0cnVlOwogICAgfQogIH0KCiAgLy8gRG9lcyB0aGUgYWN0dWFsIHVwZGF0aW5nIG9mIHRoZSBsaW5lIGRpc3BsYXkuIEJhaWxzIG91dAogIC8vIChyZXR1cm5pbmcgZmFsc2UpIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0byBiZSBkb25lIGFuZCBmb3JjZWQgaXMKICAvLyBmYWxzZS4KICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5SWZOZWVkZWQoY20sIHVwZGF0ZSkgewogICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2M7CgogICAgaWYgKHVwZGF0ZS5lZGl0b3JJc0hpZGRlbikgewogICAgICByZXNldFZpZXcoY20pOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLy8gQmFpbCBvdXQgaWYgdGhlIHZpc2libGUgYXJlYSBpcyBhbHJlYWR5IHJlbmRlcmVkIGFuZCBub3RoaW5nIGNoYW5nZWQuCiAgICBpZiAoIXVwZGF0ZS5mb3JjZSAmJgogICAgICAgIHVwZGF0ZS52aXNpYmxlLmZyb20gPj0gZGlzcGxheS52aWV3RnJvbSAmJiB1cGRhdGUudmlzaWJsZS50byA8PSBkaXNwbGF5LnZpZXdUbyAmJgogICAgICAgIChkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID09IG51bGwgfHwgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA+PSBkaXNwbGF5LnZpZXdUbykgJiYKICAgICAgICBkaXNwbGF5LnJlbmRlcmVkVmlldyA9PSBkaXNwbGF5LnZpZXcgJiYgY291bnREaXJ0eVZpZXcoY20pID09IDApCiAgICAgIHJldHVybiBmYWxzZTsKCiAgICBpZiAobWF5YmVVcGRhdGVMaW5lTnVtYmVyV2lkdGgoY20pKSB7CiAgICAgIHJlc2V0VmlldyhjbSk7CiAgICAgIHVwZGF0ZS5kaW1zID0gZ2V0RGltZW5zaW9ucyhjbSk7CiAgICB9CgogICAgLy8gQ29tcHV0ZSBhIHN1aXRhYmxlIG5ldyB2aWV3cG9ydCAoZnJvbSAmIHRvKQogICAgdmFyIGVuZCA9IGRvYy5maXJzdCArIGRvYy5zaXplOwogICAgdmFyIGZyb20gPSBNYXRoLm1heCh1cGRhdGUudmlzaWJsZS5mcm9tIC0gY20ub3B0aW9ucy52aWV3cG9ydE1hcmdpbiwgZG9jLmZpcnN0KTsKICAgIHZhciB0byA9IE1hdGgubWluKGVuZCwgdXBkYXRlLnZpc2libGUudG8gKyBjbS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTsKICAgIGlmIChkaXNwbGF5LnZpZXdGcm9tIDwgZnJvbSAmJiBmcm9tIC0gZGlzcGxheS52aWV3RnJvbSA8IDIwKSBmcm9tID0gTWF0aC5tYXgoZG9jLmZpcnN0LCBkaXNwbGF5LnZpZXdGcm9tKTsKICAgIGlmIChkaXNwbGF5LnZpZXdUbyA+IHRvICYmIGRpc3BsYXkudmlld1RvIC0gdG8gPCAyMCkgdG8gPSBNYXRoLm1pbihlbmQsIGRpc3BsYXkudmlld1RvKTsKICAgIGlmIChzYXdDb2xsYXBzZWRTcGFucykgewogICAgICBmcm9tID0gdmlzdWFsTGluZU5vKGNtLmRvYywgZnJvbSk7CiAgICAgIHRvID0gdmlzdWFsTGluZUVuZE5vKGNtLmRvYywgdG8pOwogICAgfQoKICAgIHZhciBkaWZmZXJlbnQgPSBmcm9tICE9IGRpc3BsYXkudmlld0Zyb20gfHwgdG8gIT0gZGlzcGxheS52aWV3VG8gfHwKICAgICAgZGlzcGxheS5sYXN0V3JhcEhlaWdodCAhPSB1cGRhdGUud3JhcHBlckhlaWdodCB8fCBkaXNwbGF5Lmxhc3RXcmFwV2lkdGggIT0gdXBkYXRlLndyYXBwZXJXaWR0aDsKICAgIGFkanVzdFZpZXcoY20sIGZyb20sIHRvKTsKCiAgICBkaXNwbGF5LnZpZXdPZmZzZXQgPSBoZWlnaHRBdExpbmUoZ2V0TGluZShjbS5kb2MsIGRpc3BsYXkudmlld0Zyb20pKTsKICAgIC8vIFBvc2l0aW9uIHRoZSBtb3ZlciBkaXYgdG8gYWxpZ24gd2l0aCB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24KICAgIGNtLmRpc3BsYXkubW92ZXIuc3R5bGUudG9wID0gZGlzcGxheS52aWV3T2Zmc2V0ICsgInB4IjsKCiAgICB2YXIgdG9VcGRhdGUgPSBjb3VudERpcnR5VmlldyhjbSk7CiAgICBpZiAoIWRpZmZlcmVudCAmJiB0b1VwZGF0ZSA9PSAwICYmICF1cGRhdGUuZm9yY2UgJiYgZGlzcGxheS5yZW5kZXJlZFZpZXcgPT0gZGlzcGxheS52aWV3ICYmCiAgICAgICAgKGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPT0gbnVsbCB8fCBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID49IGRpc3BsYXkudmlld1RvKSkKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIC8vIEZvciBiaWcgY2hhbmdlcywgd2UgaGlkZSB0aGUgZW5jbG9zaW5nIGVsZW1lbnQgZHVyaW5nIHRoZQogICAgLy8gdXBkYXRlLCBzaW5jZSB0aGF0IHNwZWVkcyB1cCB0aGUgb3BlcmF0aW9ucyBvbiBtb3N0IGJyb3dzZXJzLgogICAgdmFyIGZvY3VzZWQgPSBhY3RpdmVFbHQoKTsKICAgIGlmICh0b1VwZGF0ZSA+IDQpIGRpc3BsYXkubGluZURpdi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgcGF0Y2hEaXNwbGF5KGNtLCBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzLCB1cGRhdGUuZGltcyk7CiAgICBpZiAodG9VcGRhdGUgPiA0KSBkaXNwbGF5LmxpbmVEaXYuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgZGlzcGxheS5yZW5kZXJlZFZpZXcgPSBkaXNwbGF5LnZpZXc7CiAgICAvLyBUaGVyZSBtaWdodCBoYXZlIGJlZW4gYSB3aWRnZXQgd2l0aCBhIGZvY3VzZWQgZWxlbWVudCB0aGF0IGdvdAogICAgLy8gaGlkZGVuIG9yIHVwZGF0ZWQsIGlmIHNvIHJlLWZvY3VzIGl0LgogICAgaWYgKGZvY3VzZWQgJiYgYWN0aXZlRWx0KCkgIT0gZm9jdXNlZCAmJiBmb2N1c2VkLm9mZnNldEhlaWdodCkgZm9jdXNlZC5mb2N1cygpOwoKICAgIC8vIFByZXZlbnQgc2VsZWN0aW9uIGFuZCBjdXJzb3JzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCB0aGUgc2Nyb2xsCiAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0LgogICAgcmVtb3ZlQ2hpbGRyZW4oZGlzcGxheS5jdXJzb3JEaXYpOwogICAgcmVtb3ZlQ2hpbGRyZW4oZGlzcGxheS5zZWxlY3Rpb25EaXYpOwogICAgZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmhlaWdodCA9IGRpc3BsYXkuc2l6ZXIuc3R5bGUubWluSGVpZ2h0ID0gMDsKCiAgICBpZiAoZGlmZmVyZW50KSB7CiAgICAgIGRpc3BsYXkubGFzdFdyYXBIZWlnaHQgPSB1cGRhdGUud3JhcHBlckhlaWdodDsKICAgICAgZGlzcGxheS5sYXN0V3JhcFdpZHRoID0gdXBkYXRlLndyYXBwZXJXaWR0aDsKICAgICAgc3RhcnRXb3JrZXIoY20sIDQwMCk7CiAgICB9CgogICAgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA9IG51bGw7CgogICAgcmV0dXJuIHRydWU7CiAgfQoKICBmdW5jdGlvbiBwb3N0VXBkYXRlRGlzcGxheShjbSwgdXBkYXRlKSB7CiAgICB2YXIgdmlld3BvcnQgPSB1cGRhdGUudmlld3BvcnQ7CiAgICBmb3IgKHZhciBmaXJzdCA9IHRydWU7OyBmaXJzdCA9IGZhbHNlKSB7CiAgICAgIGlmICghZmlyc3QgfHwgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nIHx8IHVwZGF0ZS5vbGREaXNwbGF5V2lkdGggPT0gZGlzcGxheVdpZHRoKGNtKSkgewogICAgICAgIC8vIENsaXAgZm9yY2VkIHZpZXdwb3J0IHRvIGFjdHVhbCBzY3JvbGxhYmxlIGFyZWEuCiAgICAgICAgaWYgKHZpZXdwb3J0ICYmIHZpZXdwb3J0LnRvcCAhPSBudWxsKQogICAgICAgICAgdmlld3BvcnQgPSB7dG9wOiBNYXRoLm1pbihjbS5kb2MuaGVpZ2h0ICsgcGFkZGluZ1ZlcnQoY20uZGlzcGxheSkgLSBkaXNwbGF5SGVpZ2h0KGNtKSwgdmlld3BvcnQudG9wKX07CiAgICAgICAgLy8gVXBkYXRlZCBsaW5lIGhlaWdodHMgbWlnaHQgcmVzdWx0IGluIHRoZSBkcmF3biBhcmVhIG5vdAogICAgICAgIC8vIGFjdHVhbGx5IGNvdmVyaW5nIHRoZSB2aWV3cG9ydC4gS2VlcCBsb29waW5nIHVudGlsIGl0IGRvZXMuCiAgICAgICAgdXBkYXRlLnZpc2libGUgPSB2aXNpYmxlTGluZXMoY20uZGlzcGxheSwgY20uZG9jLCB2aWV3cG9ydCk7CiAgICAgICAgaWYgKHVwZGF0ZS52aXNpYmxlLmZyb20gPj0gY20uZGlzcGxheS52aWV3RnJvbSAmJiB1cGRhdGUudmlzaWJsZS50byA8PSBjbS5kaXNwbGF5LnZpZXdUbykKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmICghdXBkYXRlRGlzcGxheUlmTmVlZGVkKGNtLCB1cGRhdGUpKSBicmVhazsKICAgICAgdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pOwogICAgICB2YXIgYmFyTWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKTsKICAgICAgdXBkYXRlU2VsZWN0aW9uKGNtKTsKICAgICAgc2V0RG9jdW1lbnRIZWlnaHQoY20sIGJhck1lYXN1cmUpOwogICAgICB1cGRhdGVTY3JvbGxiYXJzKGNtLCBiYXJNZWFzdXJlKTsKICAgIH0KCiAgICB1cGRhdGUuc2lnbmFsKGNtLCAidXBkYXRlIiwgY20pOwogICAgaWYgKGNtLmRpc3BsYXkudmlld0Zyb20gIT0gY20uZGlzcGxheS5yZXBvcnRlZFZpZXdGcm9tIHx8IGNtLmRpc3BsYXkudmlld1RvICE9IGNtLmRpc3BsYXkucmVwb3J0ZWRWaWV3VG8pIHsKICAgICAgdXBkYXRlLnNpZ25hbChjbSwgInZpZXdwb3J0Q2hhbmdlIiwgY20sIGNtLmRpc3BsYXkudmlld0Zyb20sIGNtLmRpc3BsYXkudmlld1RvKTsKICAgICAgY20uZGlzcGxheS5yZXBvcnRlZFZpZXdGcm9tID0gY20uZGlzcGxheS52aWV3RnJvbTsgY20uZGlzcGxheS5yZXBvcnRlZFZpZXdUbyA9IGNtLmRpc3BsYXkudmlld1RvOwogICAgfQogIH0KCiAgZnVuY3Rpb24gdXBkYXRlRGlzcGxheVNpbXBsZShjbSwgdmlld3BvcnQpIHsKICAgIHZhciB1cGRhdGUgPSBuZXcgRGlzcGxheVVwZGF0ZShjbSwgdmlld3BvcnQpOwogICAgaWYgKHVwZGF0ZURpc3BsYXlJZk5lZWRlZChjbSwgdXBkYXRlKSkgewogICAgICB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSk7CiAgICAgIHBvc3RVcGRhdGVEaXNwbGF5KGNtLCB1cGRhdGUpOwogICAgICB2YXIgYmFyTWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKTsKICAgICAgdXBkYXRlU2VsZWN0aW9uKGNtKTsKICAgICAgc2V0RG9jdW1lbnRIZWlnaHQoY20sIGJhck1lYXN1cmUpOwogICAgICB1cGRhdGVTY3JvbGxiYXJzKGNtLCBiYXJNZWFzdXJlKTsKICAgICAgdXBkYXRlLmZpbmlzaCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gc2V0RG9jdW1lbnRIZWlnaHQoY20sIG1lYXN1cmUpIHsKICAgIGNtLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluSGVpZ2h0ID0gbWVhc3VyZS5kb2NIZWlnaHQgKyAicHgiOwogICAgdmFyIHRvdGFsID0gbWVhc3VyZS5kb2NIZWlnaHQgKyBjbS5kaXNwbGF5LmJhckhlaWdodDsKICAgIGNtLmRpc3BsYXkuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcCA9IHRvdGFsICsgInB4IjsKICAgIGNtLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5oZWlnaHQgPSBNYXRoLm1heCh0b3RhbCArIHNjcm9sbEdhcChjbSksIG1lYXN1cmUuY2xpZW50SGVpZ2h0KSArICJweCI7CiAgfQoKICAvLyBSZWFkIHRoZSBhY3R1YWwgaGVpZ2h0cyBvZiB0aGUgcmVuZGVyZWQgbGluZXMsIGFuZCB1cGRhdGUgdGhlaXIKICAvLyBzdG9yZWQgaGVpZ2h0cyB0byBtYXRjaC4KICBmdW5jdGlvbiB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSkgewogICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwogICAgdmFyIHByZXZCb3R0b20gPSBkaXNwbGF5LmxpbmVEaXYub2Zmc2V0VG9wOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwbGF5LnZpZXcubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGN1ciA9IGRpc3BsYXkudmlld1tpXSwgaGVpZ2h0OwogICAgICBpZiAoY3VyLmhpZGRlbikgY29udGludWU7CiAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOCkgewogICAgICAgIHZhciBib3QgPSBjdXIubm9kZS5vZmZzZXRUb3AgKyBjdXIubm9kZS5vZmZzZXRIZWlnaHQ7CiAgICAgICAgaGVpZ2h0ID0gYm90IC0gcHJldkJvdHRvbTsKICAgICAgICBwcmV2Qm90dG9tID0gYm90OwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBib3ggPSBjdXIubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBoZWlnaHQgPSBib3guYm90dG9tIC0gYm94LnRvcDsKICAgICAgfQogICAgICB2YXIgZGlmZiA9IGN1ci5saW5lLmhlaWdodCAtIGhlaWdodDsKICAgICAgaWYgKGhlaWdodCA8IDIpIGhlaWdodCA9IHRleHRIZWlnaHQoZGlzcGxheSk7CiAgICAgIGlmIChkaWZmID4gLjAwMSB8fCBkaWZmIDwgLS4wMDEpIHsKICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGN1ci5saW5lLCBoZWlnaHQpOwogICAgICAgIHVwZGF0ZVdpZGdldEhlaWdodChjdXIubGluZSk7CiAgICAgICAgaWYgKGN1ci5yZXN0KSBmb3IgKHZhciBqID0gMDsgaiA8IGN1ci5yZXN0Lmxlbmd0aDsgaisrKQogICAgICAgICAgdXBkYXRlV2lkZ2V0SGVpZ2h0KGN1ci5yZXN0W2pdKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8gUmVhZCBhbmQgc3RvcmUgdGhlIGhlaWdodCBvZiBsaW5lIHdpZGdldHMgYXNzb2NpYXRlZCB3aXRoIHRoZQogIC8vIGdpdmVuIGxpbmUuCiAgZnVuY3Rpb24gdXBkYXRlV2lkZ2V0SGVpZ2h0KGxpbmUpIHsKICAgIGlmIChsaW5lLndpZGdldHMpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZS53aWRnZXRzLmxlbmd0aDsgKytpKQogICAgICBsaW5lLndpZGdldHNbaV0uaGVpZ2h0ID0gbGluZS53aWRnZXRzW2ldLm5vZGUub2Zmc2V0SGVpZ2h0OwogIH0KCiAgLy8gRG8gYSBidWxrLXJlYWQgb2YgdGhlIERPTSBwb3NpdGlvbnMgYW5kIHNpemVzIG5lZWRlZCB0byBkcmF3IHRoZQogIC8vIHZpZXcsIHNvIHRoYXQgd2UgZG9uJ3QgaW50ZXJsZWF2ZSByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHRoZSBET00uCiAgZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhjbSkgewogICAgdmFyIGQgPSBjbS5kaXNwbGF5LCBsZWZ0ID0ge30sIHdpZHRoID0ge307CiAgICB2YXIgZ3V0dGVyTGVmdCA9IGQuZ3V0dGVycy5jbGllbnRMZWZ0OwogICAgZm9yICh2YXIgbiA9IGQuZ3V0dGVycy5maXJzdENoaWxkLCBpID0gMDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcsICsraSkgewogICAgICBsZWZ0W2NtLm9wdGlvbnMuZ3V0dGVyc1tpXV0gPSBuLm9mZnNldExlZnQgKyBuLmNsaWVudExlZnQgKyBndXR0ZXJMZWZ0OwogICAgICB3aWR0aFtjbS5vcHRpb25zLmd1dHRlcnNbaV1dID0gbi5jbGllbnRXaWR0aDsKICAgIH0KICAgIHJldHVybiB7Zml4ZWRQb3M6IGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGQpLAogICAgICAgICAgICBndXR0ZXJUb3RhbFdpZHRoOiBkLmd1dHRlcnMub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIGd1dHRlckxlZnQ6IGxlZnQsCiAgICAgICAgICAgIGd1dHRlcldpZHRoOiB3aWR0aCwKICAgICAgICAgICAgd3JhcHBlcldpZHRoOiBkLndyYXBwZXIuY2xpZW50V2lkdGh9OwogIH0KCiAgLy8gU3luYyB0aGUgYWN0dWFsIGRpc3BsYXkgRE9NIHN0cnVjdHVyZSB3aXRoIGRpc3BsYXkudmlldywgcmVtb3ZpbmcKICAvLyBub2RlcyBmb3IgbGluZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHZpZXcsIGFuZCBjcmVhdGluZyB0aGUgb25lcwogIC8vIHRoYXQgYXJlIG5vdCB0aGVyZSB5ZXQsIGFuZCB1cGRhdGluZyB0aGUgb25lcyB0aGF0IGFyZSBvdXQgb2YKICAvLyBkYXRlLgogIGZ1bmN0aW9uIHBhdGNoRGlzcGxheShjbSwgdXBkYXRlTnVtYmVyc0Zyb20sIGRpbXMpIHsKICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgbGluZU51bWJlcnMgPSBjbS5vcHRpb25zLmxpbmVOdW1iZXJzOwogICAgdmFyIGNvbnRhaW5lciA9IGRpc3BsYXkubGluZURpdiwgY3VyID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7CgogICAgZnVuY3Rpb24gcm0obm9kZSkgewogICAgICB2YXIgbmV4dCA9IG5vZGUubmV4dFNpYmxpbmc7CiAgICAgIC8vIFdvcmtzIGFyb3VuZCBhIHRocm93LXNjcm9sbCBidWcgaW4gT1MgWCBXZWJraXQKICAgICAgaWYgKHdlYmtpdCAmJiBtYWMgJiYgY20uZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXQgPT0gbm9kZSkKICAgICAgICBub2RlLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgIGVsc2UKICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQoKICAgIHZhciB2aWV3ID0gZGlzcGxheS52aWV3LCBsaW5lTiA9IGRpc3BsYXkudmlld0Zyb207CiAgICAvLyBMb29wIG92ZXIgdGhlIGVsZW1lbnRzIGluIHRoZSB2aWV3LCBzeW5jaW5nIGN1ciAodGhlIERPTSBub2RlcwogICAgLy8gaW4gZGlzcGxheS5saW5lRGl2KSB3aXRoIHRoZSB2aWV3IGFzIHdlIGdvLgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBsaW5lVmlldyA9IHZpZXdbaV07CiAgICAgIGlmIChsaW5lVmlldy5oaWRkZW4pIHsKICAgICAgfSBlbHNlIGlmICghbGluZVZpZXcubm9kZSB8fCBsaW5lVmlldy5ub2RlLnBhcmVudE5vZGUgIT0gY29udGFpbmVyKSB7IC8vIE5vdCBkcmF3biB5ZXQKICAgICAgICB2YXIgbm9kZSA9IGJ1aWxkTGluZUVsZW1lbnQoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcyk7CiAgICAgICAgY29udGFpbmVyLmluc2VydEJlZm9yZShub2RlLCBjdXIpOwogICAgICB9IGVsc2UgeyAvLyBBbHJlYWR5IGRyYXduCiAgICAgICAgd2hpbGUgKGN1ciAhPSBsaW5lVmlldy5ub2RlKSBjdXIgPSBybShjdXIpOwogICAgICAgIHZhciB1cGRhdGVOdW1iZXIgPSBsaW5lTnVtYmVycyAmJiB1cGRhdGVOdW1iZXJzRnJvbSAhPSBudWxsICYmCiAgICAgICAgICB1cGRhdGVOdW1iZXJzRnJvbSA8PSBsaW5lTiAmJiBsaW5lVmlldy5saW5lTnVtYmVyOwogICAgICAgIGlmIChsaW5lVmlldy5jaGFuZ2VzKSB7CiAgICAgICAgICBpZiAoaW5kZXhPZihsaW5lVmlldy5jaGFuZ2VzLCAiZ3V0dGVyIikgPiAtMSkgdXBkYXRlTnVtYmVyID0gZmFsc2U7CiAgICAgICAgICB1cGRhdGVMaW5lRm9yQ2hhbmdlcyhjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKTsKICAgICAgICB9CiAgICAgICAgaWYgKHVwZGF0ZU51bWJlcikgewogICAgICAgICAgcmVtb3ZlQ2hpbGRyZW4obGluZVZpZXcubGluZU51bWJlcik7CiAgICAgICAgICBsaW5lVmlldy5saW5lTnVtYmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGxpbmVOdW1iZXJGb3IoY20ub3B0aW9ucywgbGluZU4pKSk7CiAgICAgICAgfQogICAgICAgIGN1ciA9IGxpbmVWaWV3Lm5vZGUubmV4dFNpYmxpbmc7CiAgICAgIH0KICAgICAgbGluZU4gKz0gbGluZVZpZXcuc2l6ZTsKICAgIH0KICAgIHdoaWxlIChjdXIpIGN1ciA9IHJtKGN1cik7CiAgfQoKICAvLyBXaGVuIGFuIGFzcGVjdCBvZiBhIGxpbmUgY2hhbmdlcywgYSBzdHJpbmcgaXMgYWRkZWQgdG8KICAvLyBsaW5lVmlldy5jaGFuZ2VzLiBUaGlzIHVwZGF0ZXMgdGhlIHJlbGV2YW50IHBhcnQgb2YgdGhlIGxpbmUncwogIC8vIERPTSBzdHJ1Y3R1cmUuCiAgZnVuY3Rpb24gdXBkYXRlTGluZUZvckNoYW5nZXMoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcykgewogICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaW5lVmlldy5jaGFuZ2VzLmxlbmd0aDsgaisrKSB7CiAgICAgIHZhciB0eXBlID0gbGluZVZpZXcuY2hhbmdlc1tqXTsKICAgICAgaWYgKHR5cGUgPT0gInRleHQiKSB1cGRhdGVMaW5lVGV4dChjbSwgbGluZVZpZXcpOwogICAgICBlbHNlIGlmICh0eXBlID09ICJndXR0ZXIiKSB1cGRhdGVMaW5lR3V0dGVyKGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpOwogICAgICBlbHNlIGlmICh0eXBlID09ICJjbGFzcyIpIHVwZGF0ZUxpbmVDbGFzc2VzKGxpbmVWaWV3KTsKICAgICAgZWxzZSBpZiAodHlwZSA9PSAid2lkZ2V0IikgdXBkYXRlTGluZVdpZGdldHMoY20sIGxpbmVWaWV3LCBkaW1zKTsKICAgIH0KICAgIGxpbmVWaWV3LmNoYW5nZXMgPSBudWxsOwogIH0KCiAgLy8gTGluZXMgd2l0aCBndXR0ZXIgZWxlbWVudHMsIHdpZGdldHMgb3IgYSBiYWNrZ3JvdW5kIGNsYXNzIG5lZWQgdG8KICAvLyBiZSB3cmFwcGVkLCBhbmQgaGF2ZSB0aGUgZXh0cmEgZWxlbWVudHMgYWRkZWQgdG8gdGhlIHdyYXBwZXIgZGl2CiAgZnVuY3Rpb24gZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpIHsKICAgIGlmIChsaW5lVmlldy5ub2RlID09IGxpbmVWaWV3LnRleHQpIHsKICAgICAgbGluZVZpZXcubm9kZSA9IGVsdCgiZGl2IiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZSIpOwogICAgICBpZiAobGluZVZpZXcudGV4dC5wYXJlbnROb2RlKQogICAgICAgIGxpbmVWaWV3LnRleHQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobGluZVZpZXcubm9kZSwgbGluZVZpZXcudGV4dCk7CiAgICAgIGxpbmVWaWV3Lm5vZGUuYXBwZW5kQ2hpbGQobGluZVZpZXcudGV4dCk7CiAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOCkgbGluZVZpZXcubm9kZS5zdHlsZS56SW5kZXggPSAyOwogICAgfQogICAgcmV0dXJuIGxpbmVWaWV3Lm5vZGU7CiAgfQoKICBmdW5jdGlvbiB1cGRhdGVMaW5lQmFja2dyb3VuZChsaW5lVmlldykgewogICAgdmFyIGNscyA9IGxpbmVWaWV3LmJnQ2xhc3MgPyBsaW5lVmlldy5iZ0NsYXNzICsgIiAiICsgKGxpbmVWaWV3LmxpbmUuYmdDbGFzcyB8fCAiIikgOiBsaW5lVmlldy5saW5lLmJnQ2xhc3M7CiAgICBpZiAoY2xzKSBjbHMgKz0gIiBDb2RlTWlycm9yLWxpbmViYWNrZ3JvdW5kIjsKICAgIGlmIChsaW5lVmlldy5iYWNrZ3JvdW5kKSB7CiAgICAgIGlmIChjbHMpIGxpbmVWaWV3LmJhY2tncm91bmQuY2xhc3NOYW1lID0gY2xzOwogICAgICBlbHNlIHsgbGluZVZpZXcuYmFja2dyb3VuZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGxpbmVWaWV3LmJhY2tncm91bmQpOyBsaW5lVmlldy5iYWNrZ3JvdW5kID0gbnVsbDsgfQogICAgfSBlbHNlIGlmIChjbHMpIHsKICAgICAgdmFyIHdyYXAgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7CiAgICAgIGxpbmVWaWV3LmJhY2tncm91bmQgPSB3cmFwLmluc2VydEJlZm9yZShlbHQoImRpdiIsIG51bGwsIGNscyksIHdyYXAuZmlyc3RDaGlsZCk7CiAgICB9CiAgfQoKICAvLyBXcmFwcGVyIGFyb3VuZCBidWlsZExpbmVDb250ZW50IHdoaWNoIHdpbGwgcmV1c2UgdGhlIHN0cnVjdHVyZQogIC8vIGluIGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCB3aGVuIHBvc3NpYmxlLgogIGZ1bmN0aW9uIGdldExpbmVDb250ZW50KGNtLCBsaW5lVmlldykgewogICAgdmFyIGV4dCA9IGNtLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZDsKICAgIGlmIChleHQgJiYgZXh0LmxpbmUgPT0gbGluZVZpZXcubGluZSkgewogICAgICBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgPSBudWxsOwogICAgICBsaW5lVmlldy5tZWFzdXJlID0gZXh0Lm1lYXN1cmU7CiAgICAgIHJldHVybiBleHQuYnVpbHQ7CiAgICB9CiAgICByZXR1cm4gYnVpbGRMaW5lQ29udGVudChjbSwgbGluZVZpZXcpOwogIH0KCiAgLy8gUmVkcmF3IHRoZSBsaW5lJ3MgdGV4dC4gSW50ZXJhY3RzIHdpdGggdGhlIGJhY2tncm91bmQgYW5kIHRleHQKICAvLyBjbGFzc2VzIGJlY2F1c2UgdGhlIG1vZGUgbWF5IG91dHB1dCB0b2tlbnMgdGhhdCBpbmZsdWVuY2UgdGhlc2UKICAvLyBjbGFzc2VzLgogIGZ1bmN0aW9uIHVwZGF0ZUxpbmVUZXh0KGNtLCBsaW5lVmlldykgewogICAgdmFyIGNscyA9IGxpbmVWaWV3LnRleHQuY2xhc3NOYW1lOwogICAgdmFyIGJ1aWx0ID0gZ2V0TGluZUNvbnRlbnQoY20sIGxpbmVWaWV3KTsKICAgIGlmIChsaW5lVmlldy50ZXh0ID09IGxpbmVWaWV3Lm5vZGUpIGxpbmVWaWV3Lm5vZGUgPSBidWlsdC5wcmU7CiAgICBsaW5lVmlldy50ZXh0LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGJ1aWx0LnByZSwgbGluZVZpZXcudGV4dCk7CiAgICBsaW5lVmlldy50ZXh0ID0gYnVpbHQucHJlOwogICAgaWYgKGJ1aWx0LmJnQ2xhc3MgIT0gbGluZVZpZXcuYmdDbGFzcyB8fCBidWlsdC50ZXh0Q2xhc3MgIT0gbGluZVZpZXcudGV4dENsYXNzKSB7CiAgICAgIGxpbmVWaWV3LmJnQ2xhc3MgPSBidWlsdC5iZ0NsYXNzOwogICAgICBsaW5lVmlldy50ZXh0Q2xhc3MgPSBidWlsdC50ZXh0Q2xhc3M7CiAgICAgIHVwZGF0ZUxpbmVDbGFzc2VzKGxpbmVWaWV3KTsKICAgIH0gZWxzZSBpZiAoY2xzKSB7CiAgICAgIGxpbmVWaWV3LnRleHQuY2xhc3NOYW1lID0gY2xzOwogICAgfQogIH0KCiAgZnVuY3Rpb24gdXBkYXRlTGluZUNsYXNzZXMobGluZVZpZXcpIHsKICAgIHVwZGF0ZUxpbmVCYWNrZ3JvdW5kKGxpbmVWaWV3KTsKICAgIGlmIChsaW5lVmlldy5saW5lLndyYXBDbGFzcykKICAgICAgZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpLmNsYXNzTmFtZSA9IGxpbmVWaWV3LmxpbmUud3JhcENsYXNzOwogICAgZWxzZSBpZiAobGluZVZpZXcubm9kZSAhPSBsaW5lVmlldy50ZXh0KQogICAgICBsaW5lVmlldy5ub2RlLmNsYXNzTmFtZSA9ICIiOwogICAgdmFyIHRleHRDbGFzcyA9IGxpbmVWaWV3LnRleHRDbGFzcyA/IGxpbmVWaWV3LnRleHRDbGFzcyArICIgIiArIChsaW5lVmlldy5saW5lLnRleHRDbGFzcyB8fCAiIikgOiBsaW5lVmlldy5saW5lLnRleHRDbGFzczsKICAgIGxpbmVWaWV3LnRleHQuY2xhc3NOYW1lID0gdGV4dENsYXNzIHx8ICIiOwogIH0KCiAgZnVuY3Rpb24gdXBkYXRlTGluZUd1dHRlcihjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKSB7CiAgICBpZiAobGluZVZpZXcuZ3V0dGVyKSB7CiAgICAgIGxpbmVWaWV3Lm5vZGUucmVtb3ZlQ2hpbGQobGluZVZpZXcuZ3V0dGVyKTsKICAgICAgbGluZVZpZXcuZ3V0dGVyID0gbnVsbDsKICAgIH0KICAgIGlmIChsaW5lVmlldy5ndXR0ZXJCYWNrZ3JvdW5kKSB7CiAgICAgIGxpbmVWaWV3Lm5vZGUucmVtb3ZlQ2hpbGQobGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCk7CiAgICAgIGxpbmVWaWV3Lmd1dHRlckJhY2tncm91bmQgPSBudWxsOwogICAgfQogICAgaWYgKGxpbmVWaWV3LmxpbmUuZ3V0dGVyQ2xhc3MpIHsKICAgICAgdmFyIHdyYXAgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7CiAgICAgIGxpbmVWaWV3Lmd1dHRlckJhY2tncm91bmQgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWd1dHRlci1iYWNrZ3JvdW5kICIgKyBsaW5lVmlldy5saW5lLmd1dHRlckNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZWZ0OiAiICsgKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyBkaW1zLmZpeGVkUG9zIDogLWRpbXMuZ3V0dGVyVG90YWxXaWR0aCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweDsgd2lkdGg6ICIgKyBkaW1zLmd1dHRlclRvdGFsV2lkdGggKyAicHgiKTsKICAgICAgd3JhcC5pbnNlcnRCZWZvcmUobGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCwgbGluZVZpZXcudGV4dCk7CiAgICB9CiAgICB2YXIgbWFya2VycyA9IGxpbmVWaWV3LmxpbmUuZ3V0dGVyTWFya2VyczsKICAgIGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJzIHx8IG1hcmtlcnMpIHsKICAgICAgdmFyIHdyYXAgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7CiAgICAgIHZhciBndXR0ZXJXcmFwID0gbGluZVZpZXcuZ3V0dGVyID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlciIsICJsZWZ0OiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyBkaW1zLmZpeGVkUG9zIDogLWRpbXMuZ3V0dGVyVG90YWxXaWR0aCkgKyAicHgiKTsKICAgICAgY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKGd1dHRlcldyYXApOwogICAgICB3cmFwLmluc2VydEJlZm9yZShndXR0ZXJXcmFwLCBsaW5lVmlldy50ZXh0KTsKICAgICAgaWYgKGxpbmVWaWV3LmxpbmUuZ3V0dGVyQ2xhc3MpCiAgICAgICAgZ3V0dGVyV3JhcC5jbGFzc05hbWUgKz0gIiAiICsgbGluZVZpZXcubGluZS5ndXR0ZXJDbGFzczsKICAgICAgaWYgKGNtLm9wdGlvbnMubGluZU51bWJlcnMgJiYgKCFtYXJrZXJzIHx8ICFtYXJrZXJzWyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIl0pKQogICAgICAgIGxpbmVWaWV3LmxpbmVOdW1iZXIgPSBndXR0ZXJXcmFwLmFwcGVuZENoaWxkKAogICAgICAgICAgZWx0KCJkaXYiLCBsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGxpbmVOKSwKICAgICAgICAgICAgICAiQ29kZU1pcnJvci1saW5lbnVtYmVyIENvZGVNaXJyb3ItZ3V0dGVyLWVsdCIsCiAgICAgICAgICAgICAgImxlZnQ6ICIgKyBkaW1zLmd1dHRlckxlZnRbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSArICJweDsgd2lkdGg6ICIKICAgICAgICAgICAgICArIGNtLmRpc3BsYXkubGluZU51bUlubmVyV2lkdGggKyAicHgiKSk7CiAgICAgIGlmIChtYXJrZXJzKSBmb3IgKHZhciBrID0gMDsgayA8IGNtLm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7ICsraykgewogICAgICAgIHZhciBpZCA9IGNtLm9wdGlvbnMuZ3V0dGVyc1trXSwgZm91bmQgPSBtYXJrZXJzLmhhc093blByb3BlcnR5KGlkKSAmJiBtYXJrZXJzW2lkXTsKICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICBndXR0ZXJXcmFwLmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgW2ZvdW5kXSwgIkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCIsICJsZWZ0OiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbXMuZ3V0dGVyTGVmdFtpZF0gKyAicHg7IHdpZHRoOiAiICsgZGltcy5ndXR0ZXJXaWR0aFtpZF0gKyAicHgiKSk7CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIHVwZGF0ZUxpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcykgewogICAgaWYgKGxpbmVWaWV3LmFsaWduYWJsZSkgbGluZVZpZXcuYWxpZ25hYmxlID0gbnVsbDsKICAgIGZvciAodmFyIG5vZGUgPSBsaW5lVmlldy5ub2RlLmZpcnN0Q2hpbGQsIG5leHQ7IG5vZGU7IG5vZGUgPSBuZXh0KSB7CiAgICAgIHZhciBuZXh0ID0gbm9kZS5uZXh0U2libGluZzsKICAgICAgaWYgKG5vZGUuY2xhc3NOYW1lID09ICJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKQogICAgICAgIGxpbmVWaWV3Lm5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7CiAgICB9CiAgICBpbnNlcnRMaW5lV2lkZ2V0cyhjbSwgbGluZVZpZXcsIGRpbXMpOwogIH0KCiAgLy8gQnVpbGQgYSBsaW5lJ3MgRE9NIHJlcHJlc2VudGF0aW9uIGZyb20gc2NyYXRjaAogIGZ1bmN0aW9uIGJ1aWxkTGluZUVsZW1lbnQoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcykgewogICAgdmFyIGJ1aWx0ID0gZ2V0TGluZUNvbnRlbnQoY20sIGxpbmVWaWV3KTsKICAgIGxpbmVWaWV3LnRleHQgPSBsaW5lVmlldy5ub2RlID0gYnVpbHQucHJlOwogICAgaWYgKGJ1aWx0LmJnQ2xhc3MpIGxpbmVWaWV3LmJnQ2xhc3MgPSBidWlsdC5iZ0NsYXNzOwogICAgaWYgKGJ1aWx0LnRleHRDbGFzcykgbGluZVZpZXcudGV4dENsYXNzID0gYnVpbHQudGV4dENsYXNzOwoKICAgIHVwZGF0ZUxpbmVDbGFzc2VzKGxpbmVWaWV3KTsKICAgIHVwZGF0ZUxpbmVHdXR0ZXIoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcyk7CiAgICBpbnNlcnRMaW5lV2lkZ2V0cyhjbSwgbGluZVZpZXcsIGRpbXMpOwogICAgcmV0dXJuIGxpbmVWaWV3Lm5vZGU7CiAgfQoKICAvLyBBIGxpbmVWaWV3IG1heSBjb250YWluIG11bHRpcGxlIGxvZ2ljYWwgbGluZXMgKHdoZW4gbWVyZ2VkIGJ5CiAgLy8gY29sbGFwc2VkIHNwYW5zKS4gVGhlIHdpZGdldHMgZm9yIGFsbCBvZiB0aGVtIG5lZWQgdG8gYmUgZHJhd24uCiAgZnVuY3Rpb24gaW5zZXJ0TGluZVdpZGdldHMoY20sIGxpbmVWaWV3LCBkaW1zKSB7CiAgICBpbnNlcnRMaW5lV2lkZ2V0c0ZvcihjbSwgbGluZVZpZXcubGluZSwgbGluZVZpZXcsIGRpbXMsIHRydWUpOwogICAgaWYgKGxpbmVWaWV3LnJlc3QpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZVZpZXcucmVzdC5sZW5ndGg7IGkrKykKICAgICAgaW5zZXJ0TGluZVdpZGdldHNGb3IoY20sIGxpbmVWaWV3LnJlc3RbaV0sIGxpbmVWaWV3LCBkaW1zLCBmYWxzZSk7CiAgfQoKICBmdW5jdGlvbiBpbnNlcnRMaW5lV2lkZ2V0c0ZvcihjbSwgbGluZSwgbGluZVZpZXcsIGRpbXMsIGFsbG93QWJvdmUpIHsKICAgIGlmICghbGluZS53aWRnZXRzKSByZXR1cm47CiAgICB2YXIgd3JhcCA9IGVuc3VyZUxpbmVXcmFwcGVkKGxpbmVWaWV3KTsKICAgIGZvciAodmFyIGkgPSAwLCB3cyA9IGxpbmUud2lkZ2V0czsgaSA8IHdzLmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciB3aWRnZXQgPSB3c1tpXSwgbm9kZSA9IGVsdCgiZGl2IiwgW3dpZGdldC5ub2RlXSwgIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpOwogICAgICBpZiAoIXdpZGdldC5oYW5kbGVNb3VzZUV2ZW50cykgbm9kZS5zZXRBdHRyaWJ1dGUoImNtLWlnbm9yZS1ldmVudHMiLCAidHJ1ZSIpOwogICAgICBwb3NpdGlvbkxpbmVXaWRnZXQod2lkZ2V0LCBub2RlLCBsaW5lVmlldywgZGltcyk7CiAgICAgIGNtLmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0YWJsZShub2RlKTsKICAgICAgaWYgKGFsbG93QWJvdmUgJiYgd2lkZ2V0LmFib3ZlKQogICAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKG5vZGUsIGxpbmVWaWV3Lmd1dHRlciB8fCBsaW5lVmlldy50ZXh0KTsKICAgICAgZWxzZQogICAgICAgIHdyYXAuYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgIHNpZ25hbExhdGVyKHdpZGdldCwgInJlZHJhdyIpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcG9zaXRpb25MaW5lV2lkZ2V0KHdpZGdldCwgbm9kZSwgbGluZVZpZXcsIGRpbXMpIHsKICAgIGlmICh3aWRnZXQubm9IU2Nyb2xsKSB7CiAgICAgIChsaW5lVmlldy5hbGlnbmFibGUgfHwgKGxpbmVWaWV3LmFsaWduYWJsZSA9IFtdKSkucHVzaChub2RlKTsKICAgICAgdmFyIHdpZHRoID0gZGltcy53cmFwcGVyV2lkdGg7CiAgICAgIG5vZGUuc3R5bGUubGVmdCA9IGRpbXMuZml4ZWRQb3MgKyAicHgiOwogICAgICBpZiAoIXdpZGdldC5jb3Zlckd1dHRlcikgewogICAgICAgIHdpZHRoIC09IGRpbXMuZ3V0dGVyVG90YWxXaWR0aDsKICAgICAgICBub2RlLnN0eWxlLnBhZGRpbmdMZWZ0ID0gZGltcy5ndXR0ZXJUb3RhbFdpZHRoICsgInB4IjsKICAgICAgfQogICAgICBub2RlLnN0eWxlLndpZHRoID0gd2lkdGggKyAicHgiOwogICAgfQogICAgaWYgKHdpZGdldC5jb3Zlckd1dHRlcikgewogICAgICBub2RlLnN0eWxlLnpJbmRleCA9IDU7CiAgICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwogICAgICBpZiAoIXdpZGdldC5ub0hTY3JvbGwpIG5vZGUuc3R5bGUubWFyZ2luTGVmdCA9IC1kaW1zLmd1dHRlclRvdGFsV2lkdGggKyAicHgiOwogICAgfQogIH0KCiAgLy8gUE9TSVRJT04gT0JKRUNUCgogIC8vIEEgUG9zIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwb3NpdGlvbiB3aXRoaW4gdGhlIHRleHQuCiAgdmFyIFBvcyA9IENvZGVNaXJyb3IuUG9zID0gZnVuY3Rpb24obGluZSwgY2gpIHsKICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQb3MpKSByZXR1cm4gbmV3IFBvcyhsaW5lLCBjaCk7CiAgICB0aGlzLmxpbmUgPSBsaW5lOyB0aGlzLmNoID0gY2g7CiAgfTsKCiAgLy8gQ29tcGFyZSB0d28gcG9zaXRpb25zLCByZXR1cm4gMCBpZiB0aGV5IGFyZSB0aGUgc2FtZSwgYSBuZWdhdGl2ZQogIC8vIG51bWJlciB3aGVuIGEgaXMgbGVzcywgYW5kIGEgcG9zaXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KICB2YXIgY21wID0gQ29kZU1pcnJvci5jbXBQb3MgPSBmdW5jdGlvbihhLCBiKSB7IHJldHVybiBhLmxpbmUgLSBiLmxpbmUgfHwgYS5jaCAtIGIuY2g7IH07CgogIGZ1bmN0aW9uIGNvcHlQb3MoeCkge3JldHVybiBQb3MoeC5saW5lLCB4LmNoKTt9CiAgZnVuY3Rpb24gbWF4UG9zKGEsIGIpIHsgcmV0dXJuIGNtcChhLCBiKSA8IDAgPyBiIDogYTsgfQogIGZ1bmN0aW9uIG1pblBvcyhhLCBiKSB7IHJldHVybiBjbXAoYSwgYikgPCAwID8gYSA6IGI7IH0KCiAgLy8gSU5QVVQgSEFORExJTkcKCiAgZnVuY3Rpb24gZW5zdXJlRm9jdXMoY20pIHsKICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCkgeyBjbS5kaXNwbGF5LmlucHV0LmZvY3VzKCk7IG9uRm9jdXMoY20pOyB9CiAgfQoKICBmdW5jdGlvbiBpc1JlYWRPbmx5KGNtKSB7CiAgICByZXR1cm4gY20ub3B0aW9ucy5yZWFkT25seSB8fCBjbS5kb2MuY2FudEVkaXQ7CiAgfQoKICAvLyBUaGlzIHdpbGwgYmUgc2V0IHRvIGFuIGFycmF5IG9mIHN0cmluZ3Mgd2hlbiBjb3B5aW5nLCBzbyB0aGF0LAogIC8vIHdoZW4gcGFzdGluZywgd2Uga25vdyB3aGF0IGtpbmQgb2Ygc2VsZWN0aW9ucyB0aGUgY29waWVkIHRleHQKICAvLyB3YXMgbWFkZSBvdXQgb2YuCiAgdmFyIGxhc3RDb3BpZWQgPSBudWxsOwoKICBmdW5jdGlvbiBhcHBseVRleHRJbnB1dChjbSwgaW5zZXJ0ZWQsIGRlbGV0ZWQsIHNlbCwgb3JpZ2luKSB7CiAgICB2YXIgZG9jID0gY20uZG9jOwogICAgY20uZGlzcGxheS5zaGlmdCA9IGZhbHNlOwogICAgaWYgKCFzZWwpIHNlbCA9IGRvYy5zZWw7CgogICAgdmFyIHBhc3RlID0gY20uc3RhdGUucGFzdGVJbmNvbWluZyB8fCBvcmlnaW4gPT0gInBhc3RlIjsKICAgIHZhciB0ZXh0TGluZXMgPSBkb2Muc3BsaXRMaW5lcyhpbnNlcnRlZCksIG11bHRpUGFzdGUgPSBudWxsOwogICAgLy8gV2hlbiBwYXNpbmcgTiBsaW5lcyBpbnRvIE4gc2VsZWN0aW9ucywgaW5zZXJ0IG9uZSBsaW5lIHBlciBzZWxlY3Rpb24KICAgIGlmIChwYXN0ZSAmJiBzZWwucmFuZ2VzLmxlbmd0aCA+IDEpIHsKICAgICAgaWYgKGxhc3RDb3BpZWQgJiYgbGFzdENvcGllZC5qb2luKCJcbiIpID09IGluc2VydGVkKSB7CiAgICAgICAgaWYgKHNlbC5yYW5nZXMubGVuZ3RoICUgbGFzdENvcGllZC5sZW5ndGggPT0gMCkgewogICAgICAgICAgbXVsdGlQYXN0ZSA9IFtdOwogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0Q29waWVkLmxlbmd0aDsgaSsrKQogICAgICAgICAgICBtdWx0aVBhc3RlLnB1c2goZG9jLnNwbGl0TGluZXMobGFzdENvcGllZFtpXSkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh0ZXh0TGluZXMubGVuZ3RoID09IHNlbC5yYW5nZXMubGVuZ3RoKSB7CiAgICAgICAgbXVsdGlQYXN0ZSA9IG1hcCh0ZXh0TGluZXMsIGZ1bmN0aW9uKGwpIHsgcmV0dXJuIFtsXTsgfSk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBOb3JtYWwgYmVoYXZpb3IgaXMgdG8gaW5zZXJ0IHRoZSBuZXcgdGV4dCBpbnRvIGV2ZXJ5IHNlbGVjdGlvbgogICAgZm9yICh2YXIgaSA9IHNlbC5yYW5nZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgdmFyIHJhbmdlID0gc2VsLnJhbmdlc1tpXTsKICAgICAgdmFyIGZyb20gPSByYW5nZS5mcm9tKCksIHRvID0gcmFuZ2UudG8oKTsKICAgICAgaWYgKHJhbmdlLmVtcHR5KCkpIHsKICAgICAgICBpZiAoZGVsZXRlZCAmJiBkZWxldGVkID4gMCkgLy8gSGFuZGxlIGRlbGV0aW9uCiAgICAgICAgICBmcm9tID0gUG9zKGZyb20ubGluZSwgZnJvbS5jaCAtIGRlbGV0ZWQpOwogICAgICAgIGVsc2UgaWYgKGNtLnN0YXRlLm92ZXJ3cml0ZSAmJiAhcGFzdGUpIC8vIEhhbmRsZSBvdmVyd3JpdGUKICAgICAgICAgIHRvID0gUG9zKHRvLmxpbmUsIE1hdGgubWluKGdldExpbmUoZG9jLCB0by5saW5lKS50ZXh0Lmxlbmd0aCwgdG8uY2ggKyBsc3QodGV4dExpbmVzKS5sZW5ndGgpKTsKICAgICAgfQogICAgICB2YXIgdXBkYXRlSW5wdXQgPSBjbS5jdXJPcC51cGRhdGVJbnB1dDsKICAgICAgdmFyIGNoYW5nZUV2ZW50ID0ge2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDogbXVsdGlQYXN0ZSA/IG11bHRpUGFzdGVbaSAlIG11bHRpUGFzdGUubGVuZ3RoXSA6IHRleHRMaW5lcywKICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogb3JpZ2luIHx8IChwYXN0ZSA/ICJwYXN0ZSIgOiBjbS5zdGF0ZS5jdXRJbmNvbWluZyA/ICJjdXQiIDogIitpbnB1dCIpfTsKICAgICAgbWFrZUNoYW5nZShjbS5kb2MsIGNoYW5nZUV2ZW50KTsKICAgICAgc2lnbmFsTGF0ZXIoY20sICJpbnB1dFJlYWQiLCBjbSwgY2hhbmdlRXZlbnQpOwogICAgfQogICAgaWYgKGluc2VydGVkICYmICFwYXN0ZSkKICAgICAgdHJpZ2dlckVsZWN0cmljKGNtLCBpbnNlcnRlZCk7CgogICAgZW5zdXJlQ3Vyc29yVmlzaWJsZShjbSk7CiAgICBjbS5jdXJPcC51cGRhdGVJbnB1dCA9IHVwZGF0ZUlucHV0OwogICAgY20uY3VyT3AudHlwaW5nID0gdHJ1ZTsKICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSBjbS5zdGF0ZS5jdXRJbmNvbWluZyA9IGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gaGFuZGxlUGFzdGUoZSwgY20pIHsKICAgIHZhciBwYXN0ZWQgPSBlLmNsaXBib2FyZERhdGEgJiYgZS5jbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQvcGxhaW4iKTsKICAgIGlmIChwYXN0ZWQpIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAoIWlzUmVhZE9ubHkoY20pICYmICFjbS5vcHRpb25zLmRpc2FibGVJbnB1dCkKICAgICAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsgYXBwbHlUZXh0SW5wdXQoY20sIHBhc3RlZCwgMCwgbnVsbCwgInBhc3RlIik7IH0pOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRyaWdnZXJFbGVjdHJpYyhjbSwgaW5zZXJ0ZWQpIHsKICAgIC8vIFdoZW4gYW4gJ2VsZWN0cmljJyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQsIGltbWVkaWF0ZWx5IHRyaWdnZXIgYSByZWluZGVudAogICAgaWYgKCFjbS5vcHRpb25zLmVsZWN0cmljQ2hhcnMgfHwgIWNtLm9wdGlvbnMuc21hcnRJbmRlbnQpIHJldHVybjsKICAgIHZhciBzZWwgPSBjbS5kb2Muc2VsOwoKICAgIGZvciAodmFyIGkgPSBzZWwucmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIHZhciByYW5nZSA9IHNlbC5yYW5nZXNbaV07CiAgICAgIGlmIChyYW5nZS5oZWFkLmNoID4gMTAwIHx8IChpICYmIHNlbC5yYW5nZXNbaSAtIDFdLmhlYWQubGluZSA9PSByYW5nZS5oZWFkLmxpbmUpKSBjb250aW51ZTsKICAgICAgdmFyIG1vZGUgPSBjbS5nZXRNb2RlQXQocmFuZ2UuaGVhZCk7CiAgICAgIHZhciBpbmRlbnRlZCA9IGZhbHNlOwogICAgICBpZiAobW9kZS5lbGVjdHJpY0NoYXJzKSB7CiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtb2RlLmVsZWN0cmljQ2hhcnMubGVuZ3RoOyBqKyspCiAgICAgICAgICBpZiAoaW5zZXJ0ZWQuaW5kZXhPZihtb2RlLmVsZWN0cmljQ2hhcnMuY2hhckF0KGopKSA+IC0xKSB7CiAgICAgICAgICAgIGluZGVudGVkID0gaW5kZW50TGluZShjbSwgcmFuZ2UuaGVhZC5saW5lLCAic21hcnQiKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobW9kZS5lbGVjdHJpY0lucHV0KSB7CiAgICAgICAgaWYgKG1vZGUuZWxlY3RyaWNJbnB1dC50ZXN0KGdldExpbmUoY20uZG9jLCByYW5nZS5oZWFkLmxpbmUpLnRleHQuc2xpY2UoMCwgcmFuZ2UuaGVhZC5jaCkpKQogICAgICAgICAgaW5kZW50ZWQgPSBpbmRlbnRMaW5lKGNtLCByYW5nZS5oZWFkLmxpbmUsICJzbWFydCIpOwogICAgICB9CiAgICAgIGlmIChpbmRlbnRlZCkgc2lnbmFsTGF0ZXIoY20sICJlbGVjdHJpY0lucHV0IiwgY20sIHJhbmdlLmhlYWQubGluZSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBjb3B5YWJsZVJhbmdlcyhjbSkgewogICAgdmFyIHRleHQgPSBbXSwgcmFuZ2VzID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLmRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBsaW5lID0gY20uZG9jLnNlbC5yYW5nZXNbaV0uaGVhZC5saW5lOwogICAgICB2YXIgbGluZVJhbmdlID0ge2FuY2hvcjogUG9zKGxpbmUsIDApLCBoZWFkOiBQb3MobGluZSArIDEsIDApfTsKICAgICAgcmFuZ2VzLnB1c2gobGluZVJhbmdlKTsKICAgICAgdGV4dC5wdXNoKGNtLmdldFJhbmdlKGxpbmVSYW5nZS5hbmNob3IsIGxpbmVSYW5nZS5oZWFkKSk7CiAgICB9CiAgICByZXR1cm4ge3RleHQ6IHRleHQsIHJhbmdlczogcmFuZ2VzfTsKICB9CgogIGZ1bmN0aW9uIGRpc2FibGVCcm93c2VyTWFnaWMoZmllbGQpIHsKICAgIGZpZWxkLnNldEF0dHJpYnV0ZSgiYXV0b2NvcnJlY3QiLCAib2ZmIik7CiAgICBmaWVsZC5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwgIm9mZiIpOwogICAgZmllbGQuc2V0QXR0cmlidXRlKCJzcGVsbGNoZWNrIiwgImZhbHNlIik7CiAgfQoKICAvLyBURVhUQVJFQSBJTlBVVCBTVFlMRQoKICBmdW5jdGlvbiBUZXh0YXJlYUlucHV0KGNtKSB7CiAgICB0aGlzLmNtID0gY207CiAgICAvLyBTZWUgaW5wdXQucG9sbCBhbmQgaW5wdXQucmVzZXQKICAgIHRoaXMucHJldklucHV0ID0gIiI7CgogICAgLy8gRmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlIGV4cGVjdCBpbnB1dCB0byBhcHBlYXIgcmVhbCBzb29uCiAgICAvLyBub3cgKGFmdGVyIHNvbWUgZXZlbnQgbGlrZSAna2V5cHJlc3MnIG9yICdpbnB1dCcpIGFuZCBhcmUKICAgIC8vIHBvbGxpbmcgaW50ZW5zaXZlbHkuCiAgICB0aGlzLnBvbGxpbmdGYXN0ID0gZmFsc2U7CiAgICAvLyBTZWxmLXJlc2V0dGluZyB0aW1lb3V0IGZvciB0aGUgcG9sbGVyCiAgICB0aGlzLnBvbGxpbmcgPSBuZXcgRGVsYXllZCgpOwogICAgLy8gVHJhY2tzIHdoZW4gaW5wdXQucmVzZXQgaGFzIHB1bnRlZCB0byBqdXN0IHB1dHRpbmcgYSBzaG9ydAogICAgLy8gc3RyaW5nIGludG8gdGhlIHRleHRhcmVhIGluc3RlYWQgb2YgdGhlIGZ1bGwgc2VsZWN0aW9uLgogICAgdGhpcy5pbmFjY3VyYXRlU2VsZWN0aW9uID0gZmFsc2U7CiAgICAvLyBVc2VkIHRvIHdvcmsgYXJvdW5kIElFIGlzc3VlIHdpdGggc2VsZWN0aW9uIGJlaW5nIGZvcmdvdHRlbiB3aGVuIGZvY3VzIG1vdmVzIGF3YXkgZnJvbSB0ZXh0YXJlYQogICAgdGhpcy5oYXNTZWxlY3Rpb24gPSBmYWxzZTsKICAgIHRoaXMuY29tcG9zaW5nID0gbnVsbDsKICB9OwoKICBmdW5jdGlvbiBoaWRkZW5UZXh0YXJlYSgpIHsKICAgIHZhciB0ZSA9IGVsdCgidGV4dGFyZWEiLCBudWxsLCBudWxsLCAicG9zaXRpb246IGFic29sdXRlOyBwYWRkaW5nOiAwOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFlbTsgb3V0bGluZTogbm9uZSIpOwogICAgdmFyIGRpdiA9IGVsdCgiZGl2IiwgW3RlXSwgbnVsbCwgIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7Iik7CiAgICAvLyBUaGUgdGV4dGFyZWEgaXMga2VwdCBwb3NpdGlvbmVkIG5lYXIgdGhlIGN1cnNvciB0byBwcmV2ZW50IHRoZQogICAgLy8gZmFjdCB0aGF0IGl0J2xsIGJlIHNjcm9sbGVkIGludG8gdmlldyBvbiBpbnB1dCBmcm9tIHNjcm9sbGluZwogICAgLy8gb3VyIGZha2UgY3Vyc29yIG91dCBvZiB2aWV3LiBPbiB3ZWJraXQsIHdoZW4gd3JhcD1vZmYsIHBhc3RlIGlzCiAgICAvLyB2ZXJ5IHNsb3cuIFNvIG1ha2UgdGhlIGFyZWEgd2lkZSBpbnN0ZWFkLgogICAgaWYgKHdlYmtpdCkgdGUuc3R5bGUud2lkdGggPSAiMTAwMHB4IjsKICAgIGVsc2UgdGUuc2V0QXR0cmlidXRlKCJ3cmFwIiwgIm9mZiIpOwogICAgLy8gSWYgYm9yZGVyOiAwOyAtLSBpT1MgZmFpbHMgdG8gb3BlbiBrZXlib2FyZCAoaXNzdWUgIzEyODcpCiAgICBpZiAoaW9zKSB0ZS5zdHlsZS5ib3JkZXIgPSAiMXB4IHNvbGlkIGJsYWNrIjsKICAgIGRpc2FibGVCcm93c2VyTWFnaWModGUpOwogICAgcmV0dXJuIGRpdjsKICB9CgogIFRleHRhcmVhSW5wdXQucHJvdG90eXBlID0gY29weU9iaih7CiAgICBpbml0OiBmdW5jdGlvbihkaXNwbGF5KSB7CiAgICAgIHZhciBpbnB1dCA9IHRoaXMsIGNtID0gdGhpcy5jbTsKCiAgICAgIC8vIFdyYXBzIGFuZCBoaWRlcyBpbnB1dCB0ZXh0YXJlYQogICAgICB2YXIgZGl2ID0gdGhpcy53cmFwcGVyID0gaGlkZGVuVGV4dGFyZWEoKTsKICAgICAgLy8gVGhlIHNlbWloaWRkZW4gdGV4dGFyZWEgdGhhdCBpcyBmb2N1c2VkIHdoZW4gdGhlIGVkaXRvciBpcwogICAgICAvLyBmb2N1c2VkLCBhbmQgcmVjZWl2ZXMgaW5wdXQuCiAgICAgIHZhciB0ZSA9IHRoaXMudGV4dGFyZWEgPSBkaXYuZmlyc3RDaGlsZDsKICAgICAgZGlzcGxheS53cmFwcGVyLmluc2VydEJlZm9yZShkaXYsIGRpc3BsYXkud3JhcHBlci5maXJzdENoaWxkKTsKCiAgICAgIC8vIE5lZWRlZCB0byBoaWRlIGJpZyBibHVlIGJsaW5raW5nIGN1cnNvciBvbiBNb2JpbGUgU2FmYXJpIChkb2Vzbid0IHNlZW0gdG8gd29yayBpbiBpT1MgOCBhbnltb3JlKQogICAgICBpZiAoaW9zKSB0ZS5zdHlsZS53aWR0aCA9ICIwcHgiOwoKICAgICAgb24odGUsICJpbnB1dCIsIGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uID49IDkgJiYgaW5wdXQuaGFzU2VsZWN0aW9uKSBpbnB1dC5oYXNTZWxlY3Rpb24gPSBudWxsOwogICAgICAgIGlucHV0LnBvbGwoKTsKICAgICAgfSk7CgogICAgICBvbih0ZSwgInBhc3RlIiwgZnVuY3Rpb24oZSkgewogICAgICAgIGlmIChoYW5kbGVQYXN0ZShlLCBjbSkpIHJldHVybiB0cnVlOwoKICAgICAgICBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID0gdHJ1ZTsKICAgICAgICBpbnB1dC5mYXN0UG9sbCgpOwogICAgICB9KTsKCiAgICAgIGZ1bmN0aW9uIHByZXBhcmVDb3B5Q3V0KGUpIHsKICAgICAgICBpZiAoY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgewogICAgICAgICAgbGFzdENvcGllZCA9IGNtLmdldFNlbGVjdGlvbnMoKTsKICAgICAgICAgIGlmIChpbnB1dC5pbmFjY3VyYXRlU2VsZWN0aW9uKSB7CiAgICAgICAgICAgIGlucHV0LnByZXZJbnB1dCA9ICIiOwogICAgICAgICAgICBpbnB1dC5pbmFjY3VyYXRlU2VsZWN0aW9uID0gZmFsc2U7CiAgICAgICAgICAgIHRlLnZhbHVlID0gbGFzdENvcGllZC5qb2luKCJcbiIpOwogICAgICAgICAgICBzZWxlY3RJbnB1dCh0ZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICghY20ub3B0aW9ucy5saW5lV2lzZUNvcHlDdXQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIHJhbmdlcyA9IGNvcHlhYmxlUmFuZ2VzKGNtKTsKICAgICAgICAgIGxhc3RDb3BpZWQgPSByYW5nZXMudGV4dDsKICAgICAgICAgIGlmIChlLnR5cGUgPT0gImN1dCIpIHsKICAgICAgICAgICAgY20uc2V0U2VsZWN0aW9ucyhyYW5nZXMucmFuZ2VzLCBudWxsLCBzZWxfZG9udFNjcm9sbCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpbnB1dC5wcmV2SW5wdXQgPSAiIjsKICAgICAgICAgICAgdGUudmFsdWUgPSByYW5nZXMudGV4dC5qb2luKCJcbiIpOwogICAgICAgICAgICBzZWxlY3RJbnB1dCh0ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChlLnR5cGUgPT0gImN1dCIpIGNtLnN0YXRlLmN1dEluY29taW5nID0gdHJ1ZTsKICAgICAgfQogICAgICBvbih0ZSwgImN1dCIsIHByZXBhcmVDb3B5Q3V0KTsKICAgICAgb24odGUsICJjb3B5IiwgcHJlcGFyZUNvcHlDdXQpOwoKICAgICAgb24oZGlzcGxheS5zY3JvbGxlciwgInBhc3RlIiwgZnVuY3Rpb24oZSkgewogICAgICAgIGlmIChldmVudEluV2lkZ2V0KGRpc3BsYXksIGUpKSByZXR1cm47CiAgICAgICAgY20uc3RhdGUucGFzdGVJbmNvbWluZyA9IHRydWU7CiAgICAgICAgaW5wdXQuZm9jdXMoKTsKICAgICAgfSk7CgogICAgICAvLyBQcmV2ZW50IG5vcm1hbCBzZWxlY3Rpb24gaW4gdGhlIGVkaXRvciAod2UgaGFuZGxlIG91ciBvd24pCiAgICAgIG9uKGRpc3BsYXkubGluZVNwYWNlLCAic2VsZWN0c3RhcnQiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKCFldmVudEluV2lkZ2V0KGRpc3BsYXksIGUpKSBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICB9KTsKCiAgICAgIG9uKHRlLCAiY29tcG9zaXRpb25zdGFydCIsIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBzdGFydCA9IGNtLmdldEN1cnNvcigiZnJvbSIpOwogICAgICAgIGlmIChpbnB1dC5jb21wb3NpbmcpIGlucHV0LmNvbXBvc2luZy5yYW5nZS5jbGVhcigpCiAgICAgICAgaW5wdXQuY29tcG9zaW5nID0gewogICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgcmFuZ2U6IGNtLm1hcmtUZXh0KHN0YXJ0LCBjbS5nZXRDdXJzb3IoInRvIiksIHtjbGFzc05hbWU6ICJDb2RlTWlycm9yLWNvbXBvc2luZyJ9KQogICAgICAgIH07CiAgICAgIH0pOwogICAgICBvbih0ZSwgImNvbXBvc2l0aW9uZW5kIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGlucHV0LmNvbXBvc2luZykgewogICAgICAgICAgaW5wdXQucG9sbCgpOwogICAgICAgICAgaW5wdXQuY29tcG9zaW5nLnJhbmdlLmNsZWFyKCk7CiAgICAgICAgICBpbnB1dC5jb21wb3NpbmcgPSBudWxsOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAoKICAgIHByZXBhcmVTZWxlY3Rpb246IGZ1bmN0aW9uKCkgewogICAgICAvLyBSZWRyYXcgdGhlIHNlbGVjdGlvbiBhbmQvb3IgY3Vyc29yCiAgICAgIHZhciBjbSA9IHRoaXMuY20sIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2M7CiAgICAgIHZhciByZXN1bHQgPSBwcmVwYXJlU2VsZWN0aW9uKGNtKTsKCiAgICAgIC8vIE1vdmUgdGhlIGhpZGRlbiB0ZXh0YXJlYSBuZWFyIHRoZSBjdXJzb3IgdG8gcHJldmVudCBzY3JvbGxpbmcgYXJ0aWZhY3RzCiAgICAgIGlmIChjbS5vcHRpb25zLm1vdmVJbnB1dFdpdGhDdXJzb3IpIHsKICAgICAgICB2YXIgaGVhZFBvcyA9IGN1cnNvckNvb3JkcyhjbSwgZG9jLnNlbC5wcmltYXJ5KCkuaGVhZCwgImRpdiIpOwogICAgICAgIHZhciB3cmFwT2ZmID0gZGlzcGxheS53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBsaW5lT2ZmID0gZGlzcGxheS5saW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIHJlc3VsdC50ZVRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQgLSAxMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkUG9zLnRvcCArIGxpbmVPZmYudG9wIC0gd3JhcE9mZi50b3ApKTsKICAgICAgICByZXN1bHQudGVMZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoIC0gMTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRQb3MubGVmdCArIGxpbmVPZmYubGVmdCAtIHdyYXBPZmYubGVmdCkpOwogICAgICB9CgogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSwKCiAgICBzaG93U2VsZWN0aW9uOiBmdW5jdGlvbihkcmF3bikgewogICAgICB2YXIgY20gPSB0aGlzLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheTsKICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5jdXJzb3JEaXYsIGRyYXduLmN1cnNvcnMpOwogICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5LnNlbGVjdGlvbkRpdiwgZHJhd24uc2VsZWN0aW9uKTsKICAgICAgaWYgKGRyYXduLnRlVG9wICE9IG51bGwpIHsKICAgICAgICB0aGlzLndyYXBwZXIuc3R5bGUudG9wID0gZHJhd24udGVUb3AgKyAicHgiOwogICAgICAgIHRoaXMud3JhcHBlci5zdHlsZS5sZWZ0ID0gZHJhd24udGVMZWZ0ICsgInB4IjsKICAgICAgfQogICAgfSwKCiAgICAvLyBSZXNldCB0aGUgaW5wdXQgdG8gY29ycmVzcG9uZCB0byB0aGUgc2VsZWN0aW9uIChvciB0byBiZSBlbXB0eSwKICAgIC8vIHdoZW4gbm90IHR5cGluZyBhbmQgbm90aGluZyBpcyBzZWxlY3RlZCkKICAgIHJlc2V0OiBmdW5jdGlvbih0eXBpbmcpIHsKICAgICAgaWYgKHRoaXMuY29udGV4dE1lbnVQZW5kaW5nKSByZXR1cm47CiAgICAgIHZhciBtaW5pbWFsLCBzZWxlY3RlZCwgY20gPSB0aGlzLmNtLCBkb2MgPSBjbS5kb2M7CiAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7CiAgICAgICAgdGhpcy5wcmV2SW5wdXQgPSAiIjsKICAgICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnByaW1hcnkoKTsKICAgICAgICBtaW5pbWFsID0gaGFzQ29weUV2ZW50ICYmCiAgICAgICAgICAocmFuZ2UudG8oKS5saW5lIC0gcmFuZ2UuZnJvbSgpLmxpbmUgPiAxMDAgfHwgKHNlbGVjdGVkID0gY20uZ2V0U2VsZWN0aW9uKCkpLmxlbmd0aCA+IDEwMDApOwogICAgICAgIHZhciBjb250ZW50ID0gbWluaW1hbCA/ICItIiA6IHNlbGVjdGVkIHx8IGNtLmdldFNlbGVjdGlvbigpOwogICAgICAgIHRoaXMudGV4dGFyZWEudmFsdWUgPSBjb250ZW50OwogICAgICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkKSBzZWxlY3RJbnB1dCh0aGlzLnRleHRhcmVhKTsKICAgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5KSB0aGlzLmhhc1NlbGVjdGlvbiA9IGNvbnRlbnQ7CiAgICAgIH0gZWxzZSBpZiAoIXR5cGluZykgewogICAgICAgIHRoaXMucHJldklucHV0ID0gdGhpcy50ZXh0YXJlYS52YWx1ZSA9ICIiOwogICAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uID49IDkpIHRoaXMuaGFzU2VsZWN0aW9uID0gbnVsbDsKICAgICAgfQogICAgICB0aGlzLmluYWNjdXJhdGVTZWxlY3Rpb24gPSBtaW5pbWFsOwogICAgfSwKCiAgICBnZXRGaWVsZDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLnRleHRhcmVhOyB9LAoKICAgIHN1cHBvcnRzVG91Y2g6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0sCgogICAgZm9jdXM6IGZ1bmN0aW9uKCkgewogICAgICBpZiAodGhpcy5jbS5vcHRpb25zLnJlYWRPbmx5ICE9ICJub2N1cnNvciIgJiYgKCFtb2JpbGUgfHwgYWN0aXZlRWx0KCkgIT0gdGhpcy50ZXh0YXJlYSkpIHsKICAgICAgICB0cnkgeyB0aGlzLnRleHRhcmVhLmZvY3VzKCk7IH0KICAgICAgICBjYXRjaCAoZSkge30gLy8gSUU4IHdpbGwgdGhyb3cgaWYgdGhlIHRleHRhcmVhIGlzIGRpc3BsYXk6IG5vbmUgb3Igbm90IGluIERPTQogICAgICB9CiAgICB9LAoKICAgIGJsdXI6IGZ1bmN0aW9uKCkgeyB0aGlzLnRleHRhcmVhLmJsdXIoKTsgfSwKCiAgICByZXNldFBvc2l0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgdGhpcy53cmFwcGVyLnN0eWxlLnRvcCA9IHRoaXMud3JhcHBlci5zdHlsZS5sZWZ0ID0gMDsKICAgIH0sCgogICAgcmVjZWl2ZWRGb2N1czogZnVuY3Rpb24oKSB7IHRoaXMuc2xvd1BvbGwoKTsgfSwKCiAgICAvLyBQb2xsIGZvciBpbnB1dCBjaGFuZ2VzLCB1c2luZyB0aGUgbm9ybWFsIHJhdGUgb2YgcG9sbGluZy4gVGhpcwogICAgLy8gcnVucyBhcyBsb25nIGFzIHRoZSBlZGl0b3IgaXMgZm9jdXNlZC4KICAgIHNsb3dQb2xsOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIGlucHV0ID0gdGhpczsKICAgICAgaWYgKGlucHV0LnBvbGxpbmdGYXN0KSByZXR1cm47CiAgICAgIGlucHV0LnBvbGxpbmcuc2V0KHRoaXMuY20ub3B0aW9ucy5wb2xsSW50ZXJ2YWwsIGZ1bmN0aW9uKCkgewogICAgICAgIGlucHV0LnBvbGwoKTsKICAgICAgICBpZiAoaW5wdXQuY20uc3RhdGUuZm9jdXNlZCkgaW5wdXQuc2xvd1BvbGwoKTsKICAgICAgfSk7CiAgICB9LAoKICAgIC8vIFdoZW4gYW4gZXZlbnQgaGFzIGp1c3QgY29tZSBpbiB0aGF0IGlzIGxpa2VseSB0byBhZGQgb3IgY2hhbmdlCiAgICAvLyBzb21ldGhpbmcgaW4gdGhlIGlucHV0IHRleHRhcmVhLCB3ZSBwb2xsIGZhc3RlciwgdG8gZW5zdXJlIHRoYXQKICAgIC8vIHRoZSBjaGFuZ2UgYXBwZWFycyBvbiB0aGUgc2NyZWVuIHF1aWNrbHkuCiAgICBmYXN0UG9sbDogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBtaXNzZWQgPSBmYWxzZSwgaW5wdXQgPSB0aGlzOwogICAgICBpbnB1dC5wb2xsaW5nRmFzdCA9IHRydWU7CiAgICAgIGZ1bmN0aW9uIHAoKSB7CiAgICAgICAgdmFyIGNoYW5nZWQgPSBpbnB1dC5wb2xsKCk7CiAgICAgICAgaWYgKCFjaGFuZ2VkICYmICFtaXNzZWQpIHttaXNzZWQgPSB0cnVlOyBpbnB1dC5wb2xsaW5nLnNldCg2MCwgcCk7fQogICAgICAgIGVsc2Uge2lucHV0LnBvbGxpbmdGYXN0ID0gZmFsc2U7IGlucHV0LnNsb3dQb2xsKCk7fQogICAgICB9CiAgICAgIGlucHV0LnBvbGxpbmcuc2V0KDIwLCBwKTsKICAgIH0sCgogICAgLy8gUmVhZCBpbnB1dCBmcm9tIHRoZSB0ZXh0YXJlYSwgYW5kIHVwZGF0ZSB0aGUgZG9jdW1lbnQgdG8gbWF0Y2guCiAgICAvLyBXaGVuIHNvbWV0aGluZyBpcyBzZWxlY3RlZCwgaXQgaXMgcHJlc2VudCBpbiB0aGUgdGV4dGFyZWEsIGFuZAogICAgLy8gc2VsZWN0ZWQgKHVubGVzcyBpdCBpcyBodWdlLCBpbiB3aGljaCBjYXNlIGEgcGxhY2Vob2xkZXIgaXMKICAgIC8vIHVzZWQpLiBXaGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQsIHRoZSBjdXJzb3Igc2l0cyBhZnRlciBwcmV2aW91c2x5CiAgICAvLyBzZWVuIHRleHQgKGNhbiBiZSBlbXB0eSksIHdoaWNoIGlzIHN0b3JlZCBpbiBwcmV2SW5wdXQgKHdlIG11c3QKICAgIC8vIG5vdCByZXNldCB0aGUgdGV4dGFyZWEgd2hlbiB0eXBpbmcsIGJlY2F1c2UgdGhhdCBicmVha3MgSU1FKS4KICAgIHBvbGw6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgY20gPSB0aGlzLmNtLCBpbnB1dCA9IHRoaXMudGV4dGFyZWEsIHByZXZJbnB1dCA9IHRoaXMucHJldklucHV0OwogICAgICAvLyBTaW5jZSB0aGlzIGlzIGNhbGxlZCBhICpsb3QqLCB0cnkgdG8gYmFpbCBvdXQgYXMgY2hlYXBseSBhcwogICAgICAvLyBwb3NzaWJsZSB3aGVuIGl0IGlzIGNsZWFyIHRoYXQgbm90aGluZyBoYXBwZW5lZC4gaGFzU2VsZWN0aW9uCiAgICAgIC8vIHdpbGwgYmUgdGhlIGNhc2Ugd2hlbiB0aGVyZSBpcyBhIGxvdCBvZiB0ZXh0IGluIHRoZSB0ZXh0YXJlYSwKICAgICAgLy8gaW4gd2hpY2ggY2FzZSByZWFkaW5nIGl0cyB2YWx1ZSB3b3VsZCBiZSBleHBlbnNpdmUuCiAgICAgIGlmICh0aGlzLmNvbnRleHRNZW51UGVuZGluZyB8fCAhY20uc3RhdGUuZm9jdXNlZCB8fAogICAgICAgICAgKGhhc1NlbGVjdGlvbihpbnB1dCkgJiYgIXByZXZJbnB1dCAmJiAhdGhpcy5jb21wb3NpbmcpIHx8CiAgICAgICAgICBpc1JlYWRPbmx5KGNtKSB8fCBjbS5vcHRpb25zLmRpc2FibGVJbnB1dCB8fCBjbS5zdGF0ZS5rZXlTZXEpCiAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgdmFyIHRleHQgPSBpbnB1dC52YWx1ZTsKICAgICAgLy8gSWYgbm90aGluZyBjaGFuZ2VkLCBiYWlsLgogICAgICBpZiAodGV4dCA9PSBwcmV2SW5wdXQgJiYgIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHJldHVybiBmYWxzZTsKICAgICAgLy8gV29yayBhcm91bmQgbm9uc2Vuc2ljYWwgc2VsZWN0aW9uIHJlc2V0dGluZyBpbiBJRTkvMTAsIGFuZAogICAgICAvLyBpbmV4cGxpY2FibGUgYXBwZWFyYW5jZSBvZiBwcml2YXRlIGFyZWEgdW5pY29kZSBjaGFyYWN0ZXJzIG9uCiAgICAgIC8vIHNvbWUga2V5IGNvbWJvcyBpbiBNYWMgKCMyNjg5KS4KICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0gOSAmJiB0aGlzLmhhc1NlbGVjdGlvbiA9PT0gdGV4dCB8fAogICAgICAgICAgbWFjICYmIC9bXHVmNzAwLVx1ZjdmZl0vLnRlc3QodGV4dCkpIHsKICAgICAgICBjbS5kaXNwbGF5LmlucHV0LnJlc2V0KCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICBpZiAoY20uZG9jLnNlbCA9PSBjbS5kaXNwbGF5LnNlbEZvckNvbnRleHRNZW51KSB7CiAgICAgICAgdmFyIGZpcnN0ID0gdGV4dC5jaGFyQ29kZUF0KDApOwogICAgICAgIGlmIChmaXJzdCA9PSAweDIwMGIgJiYgIXByZXZJbnB1dCkgcHJldklucHV0ID0gIlx1MjAwYiI7CiAgICAgICAgaWYgKGZpcnN0ID09IDB4MjFkYSkgeyB0aGlzLnJlc2V0KCk7IHJldHVybiB0aGlzLmNtLmV4ZWNDb21tYW5kKCJ1bmRvIik7IH0KICAgICAgfQogICAgICAvLyBGaW5kIHRoZSBwYXJ0IG9mIHRoZSBpbnB1dCB0aGF0IGlzIGFjdHVhbGx5IG5ldwogICAgICB2YXIgc2FtZSA9IDAsIGwgPSBNYXRoLm1pbihwcmV2SW5wdXQubGVuZ3RoLCB0ZXh0Lmxlbmd0aCk7CiAgICAgIHdoaWxlIChzYW1lIDwgbCAmJiBwcmV2SW5wdXQuY2hhckNvZGVBdChzYW1lKSA9PSB0ZXh0LmNoYXJDb2RlQXQoc2FtZSkpICsrc2FtZTsKCiAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7CiAgICAgICAgYXBwbHlUZXh0SW5wdXQoY20sIHRleHQuc2xpY2Uoc2FtZSksIHByZXZJbnB1dC5sZW5ndGggLSBzYW1lLAogICAgICAgICAgICAgICAgICAgICAgIG51bGwsIHNlbGYuY29tcG9zaW5nID8gIipjb21wb3NlIiA6IG51bGwpOwoKICAgICAgICAvLyBEb24ndCBsZWF2ZSBsb25nIHRleHQgaW4gdGhlIHRleHRhcmVhLCBzaW5jZSBpdCBtYWtlcyBmdXJ0aGVyIHBvbGxpbmcgc2xvdwogICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA+IDEwMDAgfHwgdGV4dC5pbmRleE9mKCJcbiIpID4gLTEpIGlucHV0LnZhbHVlID0gc2VsZi5wcmV2SW5wdXQgPSAiIjsKICAgICAgICBlbHNlIHNlbGYucHJldklucHV0ID0gdGV4dDsKCiAgICAgICAgaWYgKHNlbGYuY29tcG9zaW5nKSB7CiAgICAgICAgICBzZWxmLmNvbXBvc2luZy5yYW5nZS5jbGVhcigpOwogICAgICAgICAgc2VsZi5jb21wb3NpbmcucmFuZ2UgPSBjbS5tYXJrVGV4dChzZWxmLmNvbXBvc2luZy5zdGFydCwgY20uZ2V0Q3Vyc29yKCJ0byIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiAiQ29kZU1pcnJvci1jb21wb3NpbmcifSk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9LAoKICAgIGVuc3VyZVBvbGxlZDogZnVuY3Rpb24oKSB7CiAgICAgIGlmICh0aGlzLnBvbGxpbmdGYXN0ICYmIHRoaXMucG9sbCgpKSB0aGlzLnBvbGxpbmdGYXN0ID0gZmFsc2U7CiAgICB9LAoKICAgIG9uS2V5UHJlc3M6IGZ1bmN0aW9uKCkgewogICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5KSB0aGlzLmhhc1NlbGVjdGlvbiA9IG51bGw7CiAgICAgIHRoaXMuZmFzdFBvbGwoKTsKICAgIH0sCgogICAgb25Db250ZXh0TWVudTogZnVuY3Rpb24oZSkgewogICAgICB2YXIgaW5wdXQgPSB0aGlzLCBjbSA9IGlucHV0LmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgdGUgPSBpbnB1dC50ZXh0YXJlYTsKICAgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSksIHNjcm9sbFBvcyA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wOwogICAgICBpZiAoIXBvcyB8fCBwcmVzdG8pIHJldHVybjsgLy8gT3BlcmEgaXMgZGlmZmljdWx0LgoKICAgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgdGV4dCBzZWxlY3Rpb24gb25seSBpZiB0aGUgY2xpY2sgaXMgZG9uZSBvdXRzaWRlIG9mIHRoZSBzZWxlY3Rpb24KICAgICAgLy8gYW5kICdyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnUnIG9wdGlvbiBpcyB0cnVlLgogICAgICB2YXIgcmVzZXQgPSBjbS5vcHRpb25zLnJlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudTsKICAgICAgaWYgKHJlc2V0ICYmIGNtLmRvYy5zZWwuY29udGFpbnMocG9zKSA9PSAtMSkKICAgICAgICBvcGVyYXRpb24oY20sIHNldFNlbGVjdGlvbikoY20uZG9jLCBzaW1wbGVTZWxlY3Rpb24ocG9zKSwgc2VsX2RvbnRTY3JvbGwpOwoKICAgICAgdmFyIG9sZENTUyA9IHRlLnN0eWxlLmNzc1RleHQ7CiAgICAgIGlucHV0LndyYXBwZXIuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICB0ZS5zdHlsZS5jc3NUZXh0ID0gInBvc2l0aW9uOiBmaXhlZDsgd2lkdGg6IDMwcHg7IGhlaWdodDogMzBweDsgdG9wOiAiICsgKGUuY2xpZW50WSAtIDUpICsKICAgICAgICAicHg7IGxlZnQ6ICIgKyAoZS5jbGllbnRYIC0gNSkgKyAicHg7IHotaW5kZXg6IDEwMDA7IGJhY2tncm91bmQ6ICIgKwogICAgICAgIChpZSA/ICJyZ2JhKDI1NSwgMjU1LCAyNTUsIC4wNSkiIDogInRyYW5zcGFyZW50IikgKwogICAgICAgICI7IG91dGxpbmU6IG5vbmU7IGJvcmRlci13aWR0aDogMDsgb3V0bGluZTogbm9uZTsgb3ZlcmZsb3c6IGhpZGRlbjsgb3BhY2l0eTogLjA1OyBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NSk7IjsKICAgICAgaWYgKHdlYmtpdCkgdmFyIG9sZFNjcm9sbFkgPSB3aW5kb3cuc2Nyb2xsWTsgLy8gV29yayBhcm91bmQgQ2hyb21lIGlzc3VlICgjMjcxMikKICAgICAgZGlzcGxheS5pbnB1dC5mb2N1cygpOwogICAgICBpZiAod2Via2l0KSB3aW5kb3cuc2Nyb2xsVG8obnVsbCwgb2xkU2Nyb2xsWSk7CiAgICAgIGRpc3BsYXkuaW5wdXQucmVzZXQoKTsKICAgICAgLy8gQWRkcyAiU2VsZWN0IGFsbCIgdG8gY29udGV4dCBtZW51IGluIEZGCiAgICAgIGlmICghY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgdGUudmFsdWUgPSBpbnB1dC5wcmV2SW5wdXQgPSAiICI7CiAgICAgIGlucHV0LmNvbnRleHRNZW51UGVuZGluZyA9IHRydWU7CiAgICAgIGRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPSBjbS5kb2Muc2VsOwogICAgICBjbGVhclRpbWVvdXQoZGlzcGxheS5kZXRlY3RpbmdTZWxlY3RBbGwpOwoKICAgICAgLy8gU2VsZWN0LWFsbCB3aWxsIGJlIGdyZXllZCBvdXQgaWYgdGhlcmUncyBub3RoaW5nIHRvIHNlbGVjdCwgc28KICAgICAgLy8gdGhpcyBhZGRzIGEgemVyby13aWR0aCBzcGFjZSBzbyB0aGF0IHdlIGNhbiBsYXRlciBjaGVjayB3aGV0aGVyCiAgICAgIC8vIGl0IGdvdCBzZWxlY3RlZC4KICAgICAgZnVuY3Rpb24gcHJlcGFyZVNlbGVjdEFsbEhhY2soKSB7CiAgICAgICAgaWYgKHRlLnNlbGVjdGlvblN0YXJ0ICE9IG51bGwpIHsKICAgICAgICAgIHZhciBzZWxlY3RlZCA9IGNtLnNvbWV0aGluZ1NlbGVjdGVkKCk7CiAgICAgICAgICB2YXIgZXh0dmFsID0gIlx1MjAwYiIgKyAoc2VsZWN0ZWQgPyB0ZS52YWx1ZSA6ICIiKTsKICAgICAgICAgIHRlLnZhbHVlID0gIlx1MjFkYSI7IC8vIFVzZWQgdG8gY2F0Y2ggY29udGV4dC1tZW51IHVuZG8KICAgICAgICAgIHRlLnZhbHVlID0gZXh0dmFsOwogICAgICAgICAgaW5wdXQucHJldklucHV0ID0gc2VsZWN0ZWQgPyAiIiA6ICJcdTIwMGIiOwogICAgICAgICAgdGUuc2VsZWN0aW9uU3RhcnQgPSAxOyB0ZS5zZWxlY3Rpb25FbmQgPSBleHR2YWwubGVuZ3RoOwogICAgICAgICAgLy8gUmUtc2V0IHRoaXMsIGluIGNhc2Ugc29tZSBvdGhlciBoYW5kbGVyIHRvdWNoZWQgdGhlCiAgICAgICAgICAvLyBzZWxlY3Rpb24gaW4gdGhlIG1lYW50aW1lLgogICAgICAgICAgZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSA9IGNtLmRvYy5zZWw7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIHJlaGlkZSgpIHsKICAgICAgICBpbnB1dC5jb250ZXh0TWVudVBlbmRpbmcgPSBmYWxzZTsKICAgICAgICBpbnB1dC53cmFwcGVyLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKICAgICAgICB0ZS5zdHlsZS5jc3NUZXh0ID0gb2xkQ1NTOwogICAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOSkgZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbFRvcChkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHNjcm9sbFBvcyk7CgogICAgICAgIC8vIFRyeSB0byBkZXRlY3QgdGhlIHVzZXIgY2hvb3Npbmcgc2VsZWN0LWFsbAogICAgICAgIGlmICh0ZS5zZWxlY3Rpb25TdGFydCAhPSBudWxsKSB7CiAgICAgICAgICBpZiAoIWllIHx8IChpZSAmJiBpZV92ZXJzaW9uIDwgOSkpIHByZXBhcmVTZWxlY3RBbGxIYWNrKCk7CiAgICAgICAgICB2YXIgaSA9IDAsIHBvbGwgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKGRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPT0gY20uZG9jLnNlbCAmJiB0ZS5zZWxlY3Rpb25TdGFydCA9PSAwICYmCiAgICAgICAgICAgICAgICB0ZS5zZWxlY3Rpb25FbmQgPiAwICYmIGlucHV0LnByZXZJbnB1dCA9PSAiXHUyMDBiIikKICAgICAgICAgICAgICBvcGVyYXRpb24oY20sIGNvbW1hbmRzLnNlbGVjdEFsbCkoY20pOwogICAgICAgICAgICBlbHNlIGlmIChpKysgPCAxMCkgZGlzcGxheS5kZXRlY3RpbmdTZWxlY3RBbGwgPSBzZXRUaW1lb3V0KHBvbGwsIDUwMCk7CiAgICAgICAgICAgIGVsc2UgZGlzcGxheS5pbnB1dC5yZXNldCgpOwogICAgICAgICAgfTsKICAgICAgICAgIGRpc3BsYXkuZGV0ZWN0aW5nU2VsZWN0QWxsID0gc2V0VGltZW91dChwb2xsLCAyMDApOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0gOSkgcHJlcGFyZVNlbGVjdEFsbEhhY2soKTsKICAgICAgaWYgKGNhcHR1cmVSaWdodENsaWNrKSB7CiAgICAgICAgZV9zdG9wKGUpOwogICAgICAgIHZhciBtb3VzZXVwID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICBvZmYod2luZG93LCAibW91c2V1cCIsIG1vdXNldXApOwogICAgICAgICAgc2V0VGltZW91dChyZWhpZGUsIDIwKTsKICAgICAgICB9OwogICAgICAgIG9uKHdpbmRvdywgIm1vdXNldXAiLCBtb3VzZXVwKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzZXRUaW1lb3V0KHJlaGlkZSwgNTApOwogICAgICB9CiAgICB9LAoKICAgIHJlYWRPbmx5Q2hhbmdlZDogZnVuY3Rpb24odmFsKSB7CiAgICAgIGlmICghdmFsKSB0aGlzLnJlc2V0KCk7CiAgICB9LAoKICAgIHNldFVuZWRpdGFibGU6IG5vdGhpbmcsCgogICAgbmVlZHNDb250ZW50QXR0cmlidXRlOiBmYWxzZQogIH0sIFRleHRhcmVhSW5wdXQucHJvdG90eXBlKTsKCiAgLy8gQ09OVEVOVEVESVRBQkxFIElOUFVUIFNUWUxFCgogIGZ1bmN0aW9uIENvbnRlbnRFZGl0YWJsZUlucHV0KGNtKSB7CiAgICB0aGlzLmNtID0gY207CiAgICB0aGlzLmxhc3RBbmNob3JOb2RlID0gdGhpcy5sYXN0QW5jaG9yT2Zmc2V0ID0gdGhpcy5sYXN0Rm9jdXNOb2RlID0gdGhpcy5sYXN0Rm9jdXNPZmZzZXQgPSBudWxsOwogICAgdGhpcy5wb2xsaW5nID0gbmV3IERlbGF5ZWQoKTsKICAgIHRoaXMuZ3JhY2VQZXJpb2QgPSBmYWxzZTsKICB9CgogIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZSA9IGNvcHlPYmooewogICAgaW5pdDogZnVuY3Rpb24oZGlzcGxheSkgewogICAgICB2YXIgaW5wdXQgPSB0aGlzLCBjbSA9IGlucHV0LmNtOwogICAgICB2YXIgZGl2ID0gaW5wdXQuZGl2ID0gZGlzcGxheS5saW5lRGl2OwogICAgICBkaXNhYmxlQnJvd3Nlck1hZ2ljKGRpdik7CgogICAgICBvbihkaXYsICJwYXN0ZSIsIGZ1bmN0aW9uKGUpIHsgaGFuZGxlUGFzdGUoZSwgY20pOyB9KQoKICAgICAgb24oZGl2LCAiY29tcG9zaXRpb25zdGFydCIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICB2YXIgZGF0YSA9IGUuZGF0YTsKICAgICAgICBpbnB1dC5jb21wb3NpbmcgPSB7c2VsOiBjbS5kb2Muc2VsLCBkYXRhOiBkYXRhLCBzdGFydERhdGE6IGRhdGF9OwogICAgICAgIGlmICghZGF0YSkgcmV0dXJuOwogICAgICAgIHZhciBwcmltID0gY20uZG9jLnNlbC5wcmltYXJ5KCk7CiAgICAgICAgdmFyIGxpbmUgPSBjbS5nZXRMaW5lKHByaW0uaGVhZC5saW5lKTsKICAgICAgICB2YXIgZm91bmQgPSBsaW5lLmluZGV4T2YoZGF0YSwgTWF0aC5tYXgoMCwgcHJpbS5oZWFkLmNoIC0gZGF0YS5sZW5ndGgpKTsKICAgICAgICBpZiAoZm91bmQgPiAtMSAmJiBmb3VuZCA8PSBwcmltLmhlYWQuY2gpCiAgICAgICAgICBpbnB1dC5jb21wb3Npbmcuc2VsID0gc2ltcGxlU2VsZWN0aW9uKFBvcyhwcmltLmhlYWQubGluZSwgZm91bmQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3MocHJpbS5oZWFkLmxpbmUsIGZvdW5kICsgZGF0YS5sZW5ndGgpKTsKICAgICAgfSk7CiAgICAgIG9uKGRpdiwgImNvbXBvc2l0aW9udXBkYXRlIiwgZnVuY3Rpb24oZSkgewogICAgICAgIGlucHV0LmNvbXBvc2luZy5kYXRhID0gZS5kYXRhOwogICAgICB9KTsKICAgICAgb24oZGl2LCAiY29tcG9zaXRpb25lbmQiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgdmFyIG91cnMgPSBpbnB1dC5jb21wb3Npbmc7CiAgICAgICAgaWYgKCFvdXJzKSByZXR1cm47CiAgICAgICAgaWYgKGUuZGF0YSAhPSBvdXJzLnN0YXJ0RGF0YSAmJiAhL1x1MjAwYi8udGVzdChlLmRhdGEpKQogICAgICAgICAgb3Vycy5kYXRhID0gZS5kYXRhOwogICAgICAgIC8vIE5lZWQgYSBzbWFsbCBkZWxheSB0byBwcmV2ZW50IG90aGVyIGNvZGUgKGlucHV0IGV2ZW50LAogICAgICAgIC8vIHNlbGVjdGlvbiBwb2xsaW5nKSBmcm9tIGRvaW5nIGRhbWFnZSB3aGVuIGZpcmVkIHJpZ2h0IGFmdGVyCiAgICAgICAgLy8gY29tcG9zaXRpb25lbmQuCiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgIGlmICghb3Vycy5oYW5kbGVkKQogICAgICAgICAgICBpbnB1dC5hcHBseUNvbXBvc2l0aW9uKG91cnMpOwogICAgICAgICAgaWYgKGlucHV0LmNvbXBvc2luZyA9PSBvdXJzKQogICAgICAgICAgICBpbnB1dC5jb21wb3NpbmcgPSBudWxsOwogICAgICAgIH0sIDUwKTsKICAgICAgfSk7CgogICAgICBvbihkaXYsICJ0b3VjaHN0YXJ0IiwgZnVuY3Rpb24oKSB7CiAgICAgICAgaW5wdXQuZm9yY2VDb21wb3NpdGlvbkVuZCgpOwogICAgICB9KTsKCiAgICAgIG9uKGRpdiwgImlucHV0IiwgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGlucHV0LmNvbXBvc2luZykgcmV0dXJuOwogICAgICAgIGlmIChpc1JlYWRPbmx5KGNtKSB8fCAhaW5wdXQucG9sbENvbnRlbnQoKSkKICAgICAgICAgIHJ1bkluT3AoaW5wdXQuY20sIGZ1bmN0aW9uKCkge3JlZ0NoYW5nZShjbSk7fSk7CiAgICAgIH0pOwoKICAgICAgZnVuY3Rpb24gb25Db3B5Q3V0KGUpIHsKICAgICAgICBpZiAoY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgewogICAgICAgICAgbGFzdENvcGllZCA9IGNtLmdldFNlbGVjdGlvbnMoKTsKICAgICAgICAgIGlmIChlLnR5cGUgPT0gImN1dCIpIGNtLnJlcGxhY2VTZWxlY3Rpb24oIiIsIG51bGwsICJjdXQiKTsKICAgICAgICB9IGVsc2UgaWYgKCFjbS5vcHRpb25zLmxpbmVXaXNlQ29weUN1dCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgcmFuZ2VzID0gY29weWFibGVSYW5nZXMoY20pOwogICAgICAgICAgbGFzdENvcGllZCA9IHJhbmdlcy50ZXh0OwogICAgICAgICAgaWYgKGUudHlwZSA9PSAiY3V0IikgewogICAgICAgICAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgY20uc2V0U2VsZWN0aW9ucyhyYW5nZXMucmFuZ2VzLCAwLCBzZWxfZG9udFNjcm9sbCk7CiAgICAgICAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbigiIiwgbnVsbCwgImN1dCIpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gaU9TIGV4cG9zZXMgdGhlIGNsaXBib2FyZCBBUEksIGJ1dCBzZWVtcyB0byBkaXNjYXJkIGNvbnRlbnQgaW5zZXJ0ZWQgaW50byBpdAogICAgICAgIGlmIChlLmNsaXBib2FyZERhdGEgJiYgIWlvcykgewogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZS5jbGlwYm9hcmREYXRhLmNsZWFyRGF0YSgpOwogICAgICAgICAgZS5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLCBsYXN0Q29waWVkLmpvaW4oIlxuIikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBPbGQtZmFzaGlvbmVkIGJyaWVmbHktZm9jdXMtYS10ZXh0YXJlYSBoYWNrCiAgICAgICAgICB2YXIga2x1ZGdlID0gaGlkZGVuVGV4dGFyZWEoKSwgdGUgPSBrbHVkZ2UuZmlyc3RDaGlsZDsKICAgICAgICAgIGNtLmRpc3BsYXkubGluZVNwYWNlLmluc2VydEJlZm9yZShrbHVkZ2UsIGNtLmRpc3BsYXkubGluZVNwYWNlLmZpcnN0Q2hpbGQpOwogICAgICAgICAgdGUudmFsdWUgPSBsYXN0Q29waWVkLmpvaW4oIlxuIik7CiAgICAgICAgICB2YXIgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50OwogICAgICAgICAgc2VsZWN0SW5wdXQodGUpOwogICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoa2x1ZGdlKTsKICAgICAgICAgICAgaGFkRm9jdXMuZm9jdXMoKTsKICAgICAgICAgIH0sIDUwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgb24oZGl2LCAiY29weSIsIG9uQ29weUN1dCk7CiAgICAgIG9uKGRpdiwgImN1dCIsIG9uQ29weUN1dCk7CiAgICB9LAoKICAgIHByZXBhcmVTZWxlY3Rpb246IGZ1bmN0aW9uKCkgewogICAgICB2YXIgcmVzdWx0ID0gcHJlcGFyZVNlbGVjdGlvbih0aGlzLmNtLCBmYWxzZSk7CiAgICAgIHJlc3VsdC5mb2N1cyA9IHRoaXMuY20uc3RhdGUuZm9jdXNlZDsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0sCgogICAgc2hvd1NlbGVjdGlvbjogZnVuY3Rpb24oaW5mbykgewogICAgICBpZiAoIWluZm8gfHwgIXRoaXMuY20uZGlzcGxheS52aWV3Lmxlbmd0aCkgcmV0dXJuOwogICAgICBpZiAoaW5mby5mb2N1cykgdGhpcy5zaG93UHJpbWFyeVNlbGVjdGlvbigpOwogICAgICB0aGlzLnNob3dNdWx0aXBsZVNlbGVjdGlvbnMoaW5mbyk7CiAgICB9LAoKICAgIHNob3dQcmltYXJ5U2VsZWN0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKSwgcHJpbSA9IHRoaXMuY20uZG9jLnNlbC5wcmltYXJ5KCk7CiAgICAgIHZhciBjdXJBbmNob3IgPSBkb21Ub1Bvcyh0aGlzLmNtLCBzZWwuYW5jaG9yTm9kZSwgc2VsLmFuY2hvck9mZnNldCk7CiAgICAgIHZhciBjdXJGb2N1cyA9IGRvbVRvUG9zKHRoaXMuY20sIHNlbC5mb2N1c05vZGUsIHNlbC5mb2N1c09mZnNldCk7CiAgICAgIGlmIChjdXJBbmNob3IgJiYgIWN1ckFuY2hvci5iYWQgJiYgY3VyRm9jdXMgJiYgIWN1ckZvY3VzLmJhZCAmJgogICAgICAgICAgY21wKG1pblBvcyhjdXJBbmNob3IsIGN1ckZvY3VzKSwgcHJpbS5mcm9tKCkpID09IDAgJiYKICAgICAgICAgIGNtcChtYXhQb3MoY3VyQW5jaG9yLCBjdXJGb2N1cyksIHByaW0udG8oKSkgPT0gMCkKICAgICAgICByZXR1cm47CgogICAgICB2YXIgc3RhcnQgPSBwb3NUb0RPTSh0aGlzLmNtLCBwcmltLmZyb20oKSk7CiAgICAgIHZhciBlbmQgPSBwb3NUb0RPTSh0aGlzLmNtLCBwcmltLnRvKCkpOwogICAgICBpZiAoIXN0YXJ0ICYmICFlbmQpIHJldHVybjsKCiAgICAgIHZhciB2aWV3ID0gdGhpcy5jbS5kaXNwbGF5LnZpZXc7CiAgICAgIHZhciBvbGQgPSBzZWwucmFuZ2VDb3VudCAmJiBzZWwuZ2V0UmFuZ2VBdCgwKTsKICAgICAgaWYgKCFzdGFydCkgewogICAgICAgIHN0YXJ0ID0ge25vZGU6IHZpZXdbMF0ubWVhc3VyZS5tYXBbMl0sIG9mZnNldDogMH07CiAgICAgIH0gZWxzZSBpZiAoIWVuZCkgeyAvLyBGSVhNRSBkYW5nZXJvdXNseSBoYWNreQogICAgICAgIHZhciBtZWFzdXJlID0gdmlld1t2aWV3Lmxlbmd0aCAtIDFdLm1lYXN1cmU7CiAgICAgICAgdmFyIG1hcCA9IG1lYXN1cmUubWFwcyA/IG1lYXN1cmUubWFwc1ttZWFzdXJlLm1hcHMubGVuZ3RoIC0gMV0gOiBtZWFzdXJlLm1hcDsKICAgICAgICBlbmQgPSB7bm9kZTogbWFwW21hcC5sZW5ndGggLSAxXSwgb2Zmc2V0OiBtYXBbbWFwLmxlbmd0aCAtIDJdIC0gbWFwW21hcC5sZW5ndGggLSAzXX07CiAgICAgIH0KCiAgICAgIHRyeSB7IHZhciBybmcgPSByYW5nZShzdGFydC5ub2RlLCBzdGFydC5vZmZzZXQsIGVuZC5vZmZzZXQsIGVuZC5ub2RlKTsgfQogICAgICBjYXRjaChlKSB7fSAvLyBPdXIgbW9kZWwgb2YgdGhlIERPTSBtaWdodCBiZSBvdXRkYXRlZCwgaW4gd2hpY2ggY2FzZSB0aGUgcmFuZ2Ugd2UgdHJ5IHRvIHNldCBjYW4gYmUgaW1wb3NzaWJsZQogICAgICBpZiAocm5nKSB7CiAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgIHNlbC5hZGRSYW5nZShybmcpOwogICAgICAgIGlmIChvbGQgJiYgc2VsLmFuY2hvck5vZGUgPT0gbnVsbCkgc2VsLmFkZFJhbmdlKG9sZCk7CiAgICAgICAgZWxzZSBpZiAoZ2Vja28pIHRoaXMuc3RhcnRHcmFjZVBlcmlvZCgpOwogICAgICB9CiAgICAgIHRoaXMucmVtZW1iZXJTZWxlY3Rpb24oKTsKICAgIH0sCgogICAgc3RhcnRHcmFjZVBlcmlvZDogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBpbnB1dCA9IHRoaXM7CiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmdyYWNlUGVyaW9kKTsKICAgICAgdGhpcy5ncmFjZVBlcmlvZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgaW5wdXQuZ3JhY2VQZXJpb2QgPSBmYWxzZTsKICAgICAgICBpZiAoaW5wdXQuc2VsZWN0aW9uQ2hhbmdlZCgpKQogICAgICAgICAgaW5wdXQuY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkgeyBpbnB1dC5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsgfSk7CiAgICAgIH0sIDIwKTsKICAgIH0sCgogICAgc2hvd011bHRpcGxlU2VsZWN0aW9uczogZnVuY3Rpb24oaW5mbykgewogICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZCh0aGlzLmNtLmRpc3BsYXkuY3Vyc29yRGl2LCBpbmZvLmN1cnNvcnMpOwogICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZCh0aGlzLmNtLmRpc3BsYXkuc2VsZWN0aW9uRGl2LCBpbmZvLnNlbGVjdGlvbik7CiAgICB9LAoKICAgIHJlbWVtYmVyU2VsZWN0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgdGhpcy5sYXN0QW5jaG9yTm9kZSA9IHNlbC5hbmNob3JOb2RlOyB0aGlzLmxhc3RBbmNob3JPZmZzZXQgPSBzZWwuYW5jaG9yT2Zmc2V0OwogICAgICB0aGlzLmxhc3RGb2N1c05vZGUgPSBzZWwuZm9jdXNOb2RlOyB0aGlzLmxhc3RGb2N1c09mZnNldCA9IHNlbC5mb2N1c09mZnNldDsKICAgIH0sCgogICAgc2VsZWN0aW9uSW5FZGl0b3I6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBpZiAoIXNlbC5yYW5nZUNvdW50KSByZXR1cm4gZmFsc2U7CiAgICAgIHZhciBub2RlID0gc2VsLmdldFJhbmdlQXQoMCkuY29tbW9uQW5jZXN0b3JDb250YWluZXI7CiAgICAgIHJldHVybiBjb250YWlucyh0aGlzLmRpdiwgbm9kZSk7CiAgICB9LAoKICAgIGZvY3VzOiBmdW5jdGlvbigpIHsKICAgICAgaWYgKHRoaXMuY20ub3B0aW9ucy5yZWFkT25seSAhPSAibm9jdXJzb3IiKSB0aGlzLmRpdi5mb2N1cygpOwogICAgfSwKICAgIGJsdXI6IGZ1bmN0aW9uKCkgeyB0aGlzLmRpdi5ibHVyKCk7IH0sCiAgICBnZXRGaWVsZDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmRpdjsgfSwKCiAgICBzdXBwb3J0c1RvdWNoOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0sCgogICAgcmVjZWl2ZWRGb2N1czogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBpbnB1dCA9IHRoaXM7CiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkluRWRpdG9yKCkpCiAgICAgICAgdGhpcy5wb2xsU2VsZWN0aW9uKCk7CiAgICAgIGVsc2UKICAgICAgICBydW5Jbk9wKHRoaXMuY20sIGZ1bmN0aW9uKCkgeyBpbnB1dC5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsgfSk7CgogICAgICBmdW5jdGlvbiBwb2xsKCkgewogICAgICAgIGlmIChpbnB1dC5jbS5zdGF0ZS5mb2N1c2VkKSB7CiAgICAgICAgICBpbnB1dC5wb2xsU2VsZWN0aW9uKCk7CiAgICAgICAgICBpbnB1dC5wb2xsaW5nLnNldChpbnB1dC5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgcG9sbCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMucG9sbGluZy5zZXQodGhpcy5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgcG9sbCk7CiAgICB9LAoKICAgIHNlbGVjdGlvbkNoYW5nZWQ6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICByZXR1cm4gc2VsLmFuY2hvck5vZGUgIT0gdGhpcy5sYXN0QW5jaG9yTm9kZSB8fCBzZWwuYW5jaG9yT2Zmc2V0ICE9IHRoaXMubGFzdEFuY2hvck9mZnNldCB8fAogICAgICAgIHNlbC5mb2N1c05vZGUgIT0gdGhpcy5sYXN0Rm9jdXNOb2RlIHx8IHNlbC5mb2N1c09mZnNldCAhPSB0aGlzLmxhc3RGb2N1c09mZnNldDsKICAgIH0sCgogICAgcG9sbFNlbGVjdGlvbjogZnVuY3Rpb24oKSB7CiAgICAgIGlmICghdGhpcy5jb21wb3NpbmcgJiYgIXRoaXMuZ3JhY2VQZXJpb2QgJiYgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkKCkpIHsKICAgICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpLCBjbSA9IHRoaXMuY207CiAgICAgICAgdGhpcy5yZW1lbWJlclNlbGVjdGlvbigpOwogICAgICAgIHZhciBhbmNob3IgPSBkb21Ub1BvcyhjbSwgc2VsLmFuY2hvck5vZGUsIHNlbC5hbmNob3JPZmZzZXQpOwogICAgICAgIHZhciBoZWFkID0gZG9tVG9Qb3MoY20sIHNlbC5mb2N1c05vZGUsIHNlbC5mb2N1c09mZnNldCk7CiAgICAgICAgaWYgKGFuY2hvciAmJiBoZWFkKSBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsKICAgICAgICAgIHNldFNlbGVjdGlvbihjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihhbmNob3IsIGhlYWQpLCBzZWxfZG9udFNjcm9sbCk7CiAgICAgICAgICBpZiAoYW5jaG9yLmJhZCB8fCBoZWFkLmJhZCkgY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCgogICAgcG9sbENvbnRlbnQ6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgY20gPSB0aGlzLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgc2VsID0gY20uZG9jLnNlbC5wcmltYXJ5KCk7CiAgICAgIHZhciBmcm9tID0gc2VsLmZyb20oKSwgdG8gPSBzZWwudG8oKTsKICAgICAgaWYgKGZyb20ubGluZSA8IGRpc3BsYXkudmlld0Zyb20gfHwgdG8ubGluZSA+IGRpc3BsYXkudmlld1RvIC0gMSkgcmV0dXJuIGZhbHNlOwoKICAgICAgdmFyIGZyb21JbmRleDsKICAgICAgaWYgKGZyb20ubGluZSA9PSBkaXNwbGF5LnZpZXdGcm9tIHx8IChmcm9tSW5kZXggPSBmaW5kVmlld0luZGV4KGNtLCBmcm9tLmxpbmUpKSA9PSAwKSB7CiAgICAgICAgdmFyIGZyb21MaW5lID0gbGluZU5vKGRpc3BsYXkudmlld1swXS5saW5lKTsKICAgICAgICB2YXIgZnJvbU5vZGUgPSBkaXNwbGF5LnZpZXdbMF0ubm9kZTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgZnJvbUxpbmUgPSBsaW5lTm8oZGlzcGxheS52aWV3W2Zyb21JbmRleF0ubGluZSk7CiAgICAgICAgdmFyIGZyb21Ob2RlID0gZGlzcGxheS52aWV3W2Zyb21JbmRleCAtIDFdLm5vZGUubmV4dFNpYmxpbmc7CiAgICAgIH0KICAgICAgdmFyIHRvSW5kZXggPSBmaW5kVmlld0luZGV4KGNtLCB0by5saW5lKTsKICAgICAgaWYgKHRvSW5kZXggPT0gZGlzcGxheS52aWV3Lmxlbmd0aCAtIDEpIHsKICAgICAgICB2YXIgdG9MaW5lID0gZGlzcGxheS52aWV3VG8gLSAxOwogICAgICAgIHZhciB0b05vZGUgPSBkaXNwbGF5LmxpbmVEaXYubGFzdENoaWxkOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciB0b0xpbmUgPSBsaW5lTm8oZGlzcGxheS52aWV3W3RvSW5kZXggKyAxXS5saW5lKSAtIDE7CiAgICAgICAgdmFyIHRvTm9kZSA9IGRpc3BsYXkudmlld1t0b0luZGV4ICsgMV0ubm9kZS5wcmV2aW91c1NpYmxpbmc7CiAgICAgIH0KCiAgICAgIHZhciBuZXdUZXh0ID0gY20uZG9jLnNwbGl0TGluZXMoZG9tVGV4dEJldHdlZW4oY20sIGZyb21Ob2RlLCB0b05vZGUsIGZyb21MaW5lLCB0b0xpbmUpKTsKICAgICAgdmFyIG9sZFRleHQgPSBnZXRCZXR3ZWVuKGNtLmRvYywgUG9zKGZyb21MaW5lLCAwKSwgUG9zKHRvTGluZSwgZ2V0TGluZShjbS5kb2MsIHRvTGluZSkudGV4dC5sZW5ndGgpKTsKICAgICAgd2hpbGUgKG5ld1RleHQubGVuZ3RoID4gMSAmJiBvbGRUZXh0Lmxlbmd0aCA+IDEpIHsKICAgICAgICBpZiAobHN0KG5ld1RleHQpID09IGxzdChvbGRUZXh0KSkgeyBuZXdUZXh0LnBvcCgpOyBvbGRUZXh0LnBvcCgpOyB0b0xpbmUtLTsgfQogICAgICAgIGVsc2UgaWYgKG5ld1RleHRbMF0gPT0gb2xkVGV4dFswXSkgeyBuZXdUZXh0LnNoaWZ0KCk7IG9sZFRleHQuc2hpZnQoKTsgZnJvbUxpbmUrKzsgfQogICAgICAgIGVsc2UgYnJlYWs7CiAgICAgIH0KCiAgICAgIHZhciBjdXRGcm9udCA9IDAsIGN1dEVuZCA9IDA7CiAgICAgIHZhciBuZXdUb3AgPSBuZXdUZXh0WzBdLCBvbGRUb3AgPSBvbGRUZXh0WzBdLCBtYXhDdXRGcm9udCA9IE1hdGgubWluKG5ld1RvcC5sZW5ndGgsIG9sZFRvcC5sZW5ndGgpOwogICAgICB3aGlsZSAoY3V0RnJvbnQgPCBtYXhDdXRGcm9udCAmJiBuZXdUb3AuY2hhckNvZGVBdChjdXRGcm9udCkgPT0gb2xkVG9wLmNoYXJDb2RlQXQoY3V0RnJvbnQpKQogICAgICAgICsrY3V0RnJvbnQ7CiAgICAgIHZhciBuZXdCb3QgPSBsc3QobmV3VGV4dCksIG9sZEJvdCA9IGxzdChvbGRUZXh0KTsKICAgICAgdmFyIG1heEN1dEVuZCA9IE1hdGgubWluKG5ld0JvdC5sZW5ndGggLSAobmV3VGV4dC5sZW5ndGggPT0gMSA/IGN1dEZyb250IDogMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRCb3QubGVuZ3RoIC0gKG9sZFRleHQubGVuZ3RoID09IDEgPyBjdXRGcm9udCA6IDApKTsKICAgICAgd2hpbGUgKGN1dEVuZCA8IG1heEN1dEVuZCAmJgogICAgICAgICAgICAgbmV3Qm90LmNoYXJDb2RlQXQobmV3Qm90Lmxlbmd0aCAtIGN1dEVuZCAtIDEpID09IG9sZEJvdC5jaGFyQ29kZUF0KG9sZEJvdC5sZW5ndGggLSBjdXRFbmQgLSAxKSkKICAgICAgICArK2N1dEVuZDsKCiAgICAgIG5ld1RleHRbbmV3VGV4dC5sZW5ndGggLSAxXSA9IG5ld0JvdC5zbGljZSgwLCBuZXdCb3QubGVuZ3RoIC0gY3V0RW5kKTsKICAgICAgbmV3VGV4dFswXSA9IG5ld1RleHRbMF0uc2xpY2UoY3V0RnJvbnQpOwoKICAgICAgdmFyIGNoRnJvbSA9IFBvcyhmcm9tTGluZSwgY3V0RnJvbnQpOwogICAgICB2YXIgY2hUbyA9IFBvcyh0b0xpbmUsIG9sZFRleHQubGVuZ3RoID8gbHN0KG9sZFRleHQpLmxlbmd0aCAtIGN1dEVuZCA6IDApOwogICAgICBpZiAobmV3VGV4dC5sZW5ndGggPiAxIHx8IG5ld1RleHRbMF0gfHwgY21wKGNoRnJvbSwgY2hUbykpIHsKICAgICAgICByZXBsYWNlUmFuZ2UoY20uZG9jLCBuZXdUZXh0LCBjaEZyb20sIGNoVG8sICIraW5wdXQiKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfSwKCiAgICBlbnN1cmVQb2xsZWQ6IGZ1bmN0aW9uKCkgewogICAgICB0aGlzLmZvcmNlQ29tcG9zaXRpb25FbmQoKTsKICAgIH0sCiAgICByZXNldDogZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMuZm9yY2VDb21wb3NpdGlvbkVuZCgpOwogICAgfSwKICAgIGZvcmNlQ29tcG9zaXRpb25FbmQ6IGZ1bmN0aW9uKCkgewogICAgICBpZiAoIXRoaXMuY29tcG9zaW5nIHx8IHRoaXMuY29tcG9zaW5nLmhhbmRsZWQpIHJldHVybjsKICAgICAgdGhpcy5hcHBseUNvbXBvc2l0aW9uKHRoaXMuY29tcG9zaW5nKTsKICAgICAgdGhpcy5jb21wb3NpbmcuaGFuZGxlZCA9IHRydWU7CiAgICAgIHRoaXMuZGl2LmJsdXIoKTsKICAgICAgdGhpcy5kaXYuZm9jdXMoKTsKICAgIH0sCiAgICBhcHBseUNvbXBvc2l0aW9uOiBmdW5jdGlvbihjb21wb3NpbmcpIHsKICAgICAgaWYgKGlzUmVhZE9ubHkodGhpcy5jbSkpCiAgICAgICAgb3BlcmF0aW9uKHRoaXMuY20sIHJlZ0NoYW5nZSkodGhpcy5jbSkKICAgICAgZWxzZSBpZiAoY29tcG9zaW5nLmRhdGEgJiYgY29tcG9zaW5nLmRhdGEgIT0gY29tcG9zaW5nLnN0YXJ0RGF0YSkKICAgICAgICBvcGVyYXRpb24odGhpcy5jbSwgYXBwbHlUZXh0SW5wdXQpKHRoaXMuY20sIGNvbXBvc2luZy5kYXRhLCAwLCBjb21wb3Npbmcuc2VsKTsKICAgIH0sCgogICAgc2V0VW5lZGl0YWJsZTogZnVuY3Rpb24obm9kZSkgewogICAgICBub2RlLmNvbnRlbnRFZGl0YWJsZSA9ICJmYWxzZSIKICAgIH0sCgogICAgb25LZXlQcmVzczogZnVuY3Rpb24oZSkgewogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGlmICghaXNSZWFkT25seSh0aGlzLmNtKSkKICAgICAgICBvcGVyYXRpb24odGhpcy5jbSwgYXBwbHlUZXh0SW5wdXQpKHRoaXMuY20sIFN0cmluZy5mcm9tQ2hhckNvZGUoZS5jaGFyQ29kZSA9PSBudWxsID8gZS5rZXlDb2RlIDogZS5jaGFyQ29kZSksIDApOwogICAgfSwKCiAgICByZWFkT25seUNoYW5nZWQ6IGZ1bmN0aW9uKHZhbCkgewogICAgICB0aGlzLmRpdi5jb250ZW50RWRpdGFibGUgPSBTdHJpbmcodmFsICE9ICJub2N1cnNvciIpCiAgICB9LAoKICAgIG9uQ29udGV4dE1lbnU6IG5vdGhpbmcsCiAgICByZXNldFBvc2l0aW9uOiBub3RoaW5nLAoKICAgIG5lZWRzQ29udGVudEF0dHJpYnV0ZTogdHJ1ZQogIH0sIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZSk7CgogIGZ1bmN0aW9uIHBvc1RvRE9NKGNtLCBwb3MpIHsKICAgIHZhciB2aWV3ID0gZmluZFZpZXdGb3JMaW5lKGNtLCBwb3MubGluZSk7CiAgICBpZiAoIXZpZXcgfHwgdmlldy5oaWRkZW4pIHJldHVybiBudWxsOwogICAgdmFyIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpOwogICAgdmFyIGluZm8gPSBtYXBGcm9tTGluZVZpZXcodmlldywgbGluZSwgcG9zLmxpbmUpOwoKICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmUpLCBzaWRlID0gImxlZnQiOwogICAgaWYgKG9yZGVyKSB7CiAgICAgIHZhciBwYXJ0UG9zID0gZ2V0QmlkaVBhcnRBdChvcmRlciwgcG9zLmNoKTsKICAgICAgc2lkZSA9IHBhcnRQb3MgJSAyID8gInJpZ2h0IiA6ICJsZWZ0IjsKICAgIH0KICAgIHZhciByZXN1bHQgPSBub2RlQW5kT2Zmc2V0SW5MaW5lTWFwKGluZm8ubWFwLCBwb3MuY2gsIHNpZGUpOwogICAgcmVzdWx0Lm9mZnNldCA9IHJlc3VsdC5jb2xsYXBzZSA9PSAicmlnaHQiID8gcmVzdWx0LmVuZCA6IHJlc3VsdC5zdGFydDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmdW5jdGlvbiBiYWRQb3MocG9zLCBiYWQpIHsgaWYgKGJhZCkgcG9zLmJhZCA9IHRydWU7IHJldHVybiBwb3M7IH0KCiAgZnVuY3Rpb24gZG9tVG9Qb3MoY20sIG5vZGUsIG9mZnNldCkgewogICAgdmFyIGxpbmVOb2RlOwogICAgaWYgKG5vZGUgPT0gY20uZGlzcGxheS5saW5lRGl2KSB7CiAgICAgIGxpbmVOb2RlID0gY20uZGlzcGxheS5saW5lRGl2LmNoaWxkTm9kZXNbb2Zmc2V0XTsKICAgICAgaWYgKCFsaW5lTm9kZSkgcmV0dXJuIGJhZFBvcyhjbS5jbGlwUG9zKFBvcyhjbS5kaXNwbGF5LnZpZXdUbyAtIDEpKSwgdHJ1ZSk7CiAgICAgIG5vZGUgPSBudWxsOyBvZmZzZXQgPSAwOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChsaW5lTm9kZSA9IG5vZGU7OyBsaW5lTm9kZSA9IGxpbmVOb2RlLnBhcmVudE5vZGUpIHsKICAgICAgICBpZiAoIWxpbmVOb2RlIHx8IGxpbmVOb2RlID09IGNtLmRpc3BsYXkubGluZURpdikgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKGxpbmVOb2RlLnBhcmVudE5vZGUgJiYgbGluZU5vZGUucGFyZW50Tm9kZSA9PSBjbS5kaXNwbGF5LmxpbmVEaXYpIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLmRpc3BsYXkudmlldy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgbGluZVZpZXcgPSBjbS5kaXNwbGF5LnZpZXdbaV07CiAgICAgIGlmIChsaW5lVmlldy5ub2RlID09IGxpbmVOb2RlKQogICAgICAgIHJldHVybiBsb2NhdGVOb2RlSW5MaW5lVmlldyhsaW5lVmlldywgbm9kZSwgb2Zmc2V0KTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGxvY2F0ZU5vZGVJbkxpbmVWaWV3KGxpbmVWaWV3LCBub2RlLCBvZmZzZXQpIHsKICAgIHZhciB3cmFwcGVyID0gbGluZVZpZXcudGV4dC5maXJzdENoaWxkLCBiYWQgPSBmYWxzZTsKICAgIGlmICghbm9kZSB8fCAhY29udGFpbnMod3JhcHBlciwgbm9kZSkpIHJldHVybiBiYWRQb3MoUG9zKGxpbmVObyhsaW5lVmlldy5saW5lKSwgMCksIHRydWUpOwogICAgaWYgKG5vZGUgPT0gd3JhcHBlcikgewogICAgICBiYWQgPSB0cnVlOwogICAgICBub2RlID0gd3JhcHBlci5jaGlsZE5vZGVzW29mZnNldF07CiAgICAgIG9mZnNldCA9IDA7CiAgICAgIGlmICghbm9kZSkgewogICAgICAgIHZhciBsaW5lID0gbGluZVZpZXcucmVzdCA/IGxzdChsaW5lVmlldy5yZXN0KSA6IGxpbmVWaWV3LmxpbmU7CiAgICAgICAgcmV0dXJuIGJhZFBvcyhQb3MobGluZU5vKGxpbmUpLCBsaW5lLnRleHQubGVuZ3RoKSwgYmFkKTsKICAgICAgfQogICAgfQoKICAgIHZhciB0ZXh0Tm9kZSA9IG5vZGUubm9kZVR5cGUgPT0gMyA/IG5vZGUgOiBudWxsLCB0b3BOb2RlID0gbm9kZTsKICAgIGlmICghdGV4dE5vZGUgJiYgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxICYmIG5vZGUuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PSAzKSB7CiAgICAgIHRleHROb2RlID0gbm9kZS5maXJzdENoaWxkOwogICAgICBpZiAob2Zmc2V0KSBvZmZzZXQgPSB0ZXh0Tm9kZS5ub2RlVmFsdWUubGVuZ3RoOwogICAgfQogICAgd2hpbGUgKHRvcE5vZGUucGFyZW50Tm9kZSAhPSB3cmFwcGVyKSB0b3BOb2RlID0gdG9wTm9kZS5wYXJlbnROb2RlOwogICAgdmFyIG1lYXN1cmUgPSBsaW5lVmlldy5tZWFzdXJlLCBtYXBzID0gbWVhc3VyZS5tYXBzOwoKICAgIGZ1bmN0aW9uIGZpbmQodGV4dE5vZGUsIHRvcE5vZGUsIG9mZnNldCkgewogICAgICBmb3IgKHZhciBpID0gLTE7IGkgPCAobWFwcyA/IG1hcHMubGVuZ3RoIDogMCk7IGkrKykgewogICAgICAgIHZhciBtYXAgPSBpIDwgMCA/IG1lYXN1cmUubWFwIDogbWFwc1tpXTsKICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hcC5sZW5ndGg7IGogKz0gMykgewogICAgICAgICAgdmFyIGN1ck5vZGUgPSBtYXBbaiArIDJdOwogICAgICAgICAgaWYgKGN1ck5vZGUgPT0gdGV4dE5vZGUgfHwgY3VyTm9kZSA9PSB0b3BOb2RlKSB7CiAgICAgICAgICAgIHZhciBsaW5lID0gbGluZU5vKGkgPCAwID8gbGluZVZpZXcubGluZSA6IGxpbmVWaWV3LnJlc3RbaV0pOwogICAgICAgICAgICB2YXIgY2ggPSBtYXBbal0gKyBvZmZzZXQ7CiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IGN1ck5vZGUgIT0gdGV4dE5vZGUpIGNoID0gbWFwW2ogKyAob2Zmc2V0ID8gMSA6IDApXTsKICAgICAgICAgICAgcmV0dXJuIFBvcyhsaW5lLCBjaCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICB2YXIgZm91bmQgPSBmaW5kKHRleHROb2RlLCB0b3BOb2RlLCBvZmZzZXQpOwogICAgaWYgKGZvdW5kKSByZXR1cm4gYmFkUG9zKGZvdW5kLCBiYWQpOwoKICAgIC8vIEZJWE1FIHRoaXMgaXMgYWxsIHJlYWxseSBzaGFreS4gbWlnaHQgaGFuZGxlIHRoZSBmZXcgY2FzZXMgaXQgbmVlZHMgdG8gaGFuZGxlLCBidXQgbGlrZWx5IHRvIGNhdXNlIHByb2JsZW1zCiAgICBmb3IgKHZhciBhZnRlciA9IHRvcE5vZGUubmV4dFNpYmxpbmcsIGRpc3QgPSB0ZXh0Tm9kZSA/IHRleHROb2RlLm5vZGVWYWx1ZS5sZW5ndGggLSBvZmZzZXQgOiAwOyBhZnRlcjsgYWZ0ZXIgPSBhZnRlci5uZXh0U2libGluZykgewogICAgICBmb3VuZCA9IGZpbmQoYWZ0ZXIsIGFmdGVyLmZpcnN0Q2hpbGQsIDApOwogICAgICBpZiAoZm91bmQpCiAgICAgICAgcmV0dXJuIGJhZFBvcyhQb3MoZm91bmQubGluZSwgZm91bmQuY2ggLSBkaXN0KSwgYmFkKTsKICAgICAgZWxzZQogICAgICAgIGRpc3QgKz0gYWZ0ZXIudGV4dENvbnRlbnQubGVuZ3RoOwogICAgfQogICAgZm9yICh2YXIgYmVmb3JlID0gdG9wTm9kZS5wcmV2aW91c1NpYmxpbmcsIGRpc3QgPSBvZmZzZXQ7IGJlZm9yZTsgYmVmb3JlID0gYmVmb3JlLnByZXZpb3VzU2libGluZykgewogICAgICBmb3VuZCA9IGZpbmQoYmVmb3JlLCBiZWZvcmUuZmlyc3RDaGlsZCwgLTEpOwogICAgICBpZiAoZm91bmQpCiAgICAgICAgcmV0dXJuIGJhZFBvcyhQb3MoZm91bmQubGluZSwgZm91bmQuY2ggKyBkaXN0KSwgYmFkKTsKICAgICAgZWxzZQogICAgICAgIGRpc3QgKz0gYWZ0ZXIudGV4dENvbnRlbnQubGVuZ3RoOwogICAgfQogIH0KCiAgZnVuY3Rpb24gZG9tVGV4dEJldHdlZW4oY20sIGZyb20sIHRvLCBmcm9tTGluZSwgdG9MaW5lKSB7CiAgICB2YXIgdGV4dCA9ICIiLCBjbG9zaW5nID0gZmFsc2UsIGxpbmVTZXAgPSBjbS5kb2MubGluZVNlcGFyYXRvcigpOwogICAgZnVuY3Rpb24gcmVjb2duaXplTWFya2VyKGlkKSB7IHJldHVybiBmdW5jdGlvbihtYXJrZXIpIHsgcmV0dXJuIG1hcmtlci5pZCA9PSBpZDsgfTsgfQogICAgZnVuY3Rpb24gd2Fsayhub2RlKSB7CiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHsKICAgICAgICB2YXIgY21UZXh0ID0gbm9kZS5nZXRBdHRyaWJ1dGUoImNtLXRleHQiKTsKICAgICAgICBpZiAoY21UZXh0ICE9IG51bGwpIHsKICAgICAgICAgIGlmIChjbVRleHQgPT0gIiIpIGNtVGV4dCA9IG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSgvXHUyMDBiL2csICIiKTsKICAgICAgICAgIHRleHQgKz0gY21UZXh0OwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgbWFya2VySUQgPSBub2RlLmdldEF0dHJpYnV0ZSgiY20tbWFya2VyIiksIHJhbmdlOwogICAgICAgIGlmIChtYXJrZXJJRCkgewogICAgICAgICAgdmFyIGZvdW5kID0gY20uZmluZE1hcmtzKFBvcyhmcm9tTGluZSwgMCksIFBvcyh0b0xpbmUgKyAxLCAwKSwgcmVjb2duaXplTWFya2VyKCttYXJrZXJJRCkpOwogICAgICAgICAgaWYgKGZvdW5kLmxlbmd0aCAmJiAocmFuZ2UgPSBmb3VuZFswXS5maW5kKCkpKQogICAgICAgICAgICB0ZXh0ICs9IGdldEJldHdlZW4oY20uZG9jLCByYW5nZS5mcm9tLCByYW5nZS50bykuam9pbihsaW5lU2VwKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSA9PSAiZmFsc2UiKSByZXR1cm47CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspCiAgICAgICAgICB3YWxrKG5vZGUuY2hpbGROb2Rlc1tpXSk7CiAgICAgICAgaWYgKC9eKHByZXxkaXZ8cCkkL2kudGVzdChub2RlLm5vZGVOYW1lKSkKICAgICAgICAgIGNsb3NpbmcgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKG5vZGUubm9kZVR5cGUgPT0gMykgewogICAgICAgIHZhciB2YWwgPSBub2RlLm5vZGVWYWx1ZTsKICAgICAgICBpZiAoIXZhbCkgcmV0dXJuOwogICAgICAgIGlmIChjbG9zaW5nKSB7CiAgICAgICAgICB0ZXh0ICs9IGxpbmVTZXA7CiAgICAgICAgICBjbG9zaW5nID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHRleHQgKz0gdmFsOwogICAgICB9CiAgICB9CiAgICBmb3IgKDs7KSB7CiAgICAgIHdhbGsoZnJvbSk7CiAgICAgIGlmIChmcm9tID09IHRvKSBicmVhazsKICAgICAgZnJvbSA9IGZyb20ubmV4dFNpYmxpbmc7CiAgICB9CiAgICByZXR1cm4gdGV4dDsKICB9CgogIENvZGVNaXJyb3IuaW5wdXRTdHlsZXMgPSB7InRleHRhcmVhIjogVGV4dGFyZWFJbnB1dCwgImNvbnRlbnRlZGl0YWJsZSI6IENvbnRlbnRFZGl0YWJsZUlucHV0fTsKCiAgLy8gU0VMRUNUSU9OIC8gQ1VSU09SCgogIC8vIFNlbGVjdGlvbiBvYmplY3RzIGFyZSBpbW11dGFibGUuIEEgbmV3IG9uZSBpcyBjcmVhdGVkIGV2ZXJ5IHRpbWUKICAvLyB0aGUgc2VsZWN0aW9uIGNoYW5nZXMuIEEgc2VsZWN0aW9uIGlzIG9uZSBvciBtb3JlIG5vbi1vdmVybGFwcGluZwogIC8vIChhbmQgbm9uLXRvdWNoaW5nKSByYW5nZXMsIHNvcnRlZCwgYW5kIGFuIGludGVnZXIgdGhhdCBpbmRpY2F0ZXMKICAvLyB3aGljaCBvbmUgaXMgdGhlIHByaW1hcnkgc2VsZWN0aW9uICh0aGUgb25lIHRoYXQncyBzY3JvbGxlZCBpbnRvCiAgLy8gdmlldywgdGhhdCBnZXRDdXJzb3IgcmV0dXJucywgZXRjKS4KICBmdW5jdGlvbiBTZWxlY3Rpb24ocmFuZ2VzLCBwcmltSW5kZXgpIHsKICAgIHRoaXMucmFuZ2VzID0gcmFuZ2VzOwogICAgdGhpcy5wcmltSW5kZXggPSBwcmltSW5kZXg7CiAgfQoKICBTZWxlY3Rpb24ucHJvdG90eXBlID0gewogICAgcHJpbWFyeTogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLnJhbmdlc1t0aGlzLnByaW1JbmRleF07IH0sCiAgICBlcXVhbHM6IGZ1bmN0aW9uKG90aGVyKSB7CiAgICAgIGlmIChvdGhlciA9PSB0aGlzKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKG90aGVyLnByaW1JbmRleCAhPSB0aGlzLnByaW1JbmRleCB8fCBvdGhlci5yYW5nZXMubGVuZ3RoICE9IHRoaXMucmFuZ2VzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGhlcmUgPSB0aGlzLnJhbmdlc1tpXSwgdGhlcmUgPSBvdGhlci5yYW5nZXNbaV07CiAgICAgICAgaWYgKGNtcChoZXJlLmFuY2hvciwgdGhlcmUuYW5jaG9yKSAhPSAwIHx8IGNtcChoZXJlLmhlYWQsIHRoZXJlLmhlYWQpICE9IDApIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0sCiAgICBkZWVwQ29weTogZnVuY3Rpb24oKSB7CiAgICAgIGZvciAodmFyIG91dCA9IFtdLCBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKQogICAgICAgIG91dFtpXSA9IG5ldyBSYW5nZShjb3B5UG9zKHRoaXMucmFuZ2VzW2ldLmFuY2hvciksIGNvcHlQb3ModGhpcy5yYW5nZXNbaV0uaGVhZCkpOwogICAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihvdXQsIHRoaXMucHJpbUluZGV4KTsKICAgIH0sCiAgICBzb21ldGhpbmdTZWxlY3RlZDogZnVuY3Rpb24oKSB7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyBpKyspCiAgICAgICAgaWYgKCF0aGlzLnJhbmdlc1tpXS5lbXB0eSgpKSByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSwKICAgIGNvbnRhaW5zOiBmdW5jdGlvbihwb3MsIGVuZCkgewogICAgICBpZiAoIWVuZCkgZW5kID0gcG9zOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5yYW5nZXNbaV07CiAgICAgICAgaWYgKGNtcChlbmQsIHJhbmdlLmZyb20oKSkgPj0gMCAmJiBjbXAocG9zLCByYW5nZS50bygpKSA8PSAwKQogICAgICAgICAgcmV0dXJuIGk7CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogIH07CgogIGZ1bmN0aW9uIFJhbmdlKGFuY2hvciwgaGVhZCkgewogICAgdGhpcy5hbmNob3IgPSBhbmNob3I7IHRoaXMuaGVhZCA9IGhlYWQ7CiAgfQoKICBSYW5nZS5wcm90b3R5cGUgPSB7CiAgICBmcm9tOiBmdW5jdGlvbigpIHsgcmV0dXJuIG1pblBvcyh0aGlzLmFuY2hvciwgdGhpcy5oZWFkKTsgfSwKICAgIHRvOiBmdW5jdGlvbigpIHsgcmV0dXJuIG1heFBvcyh0aGlzLmFuY2hvciwgdGhpcy5oZWFkKTsgfSwKICAgIGVtcHR5OiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuaGVhZC5saW5lID09IHRoaXMuYW5jaG9yLmxpbmUgJiYgdGhpcy5oZWFkLmNoID09IHRoaXMuYW5jaG9yLmNoOwogICAgfQogIH07CgogIC8vIFRha2UgYW4gdW5zb3J0ZWQsIHBvdGVudGlhbGx5IG92ZXJsYXBwaW5nIHNldCBvZiByYW5nZXMsIGFuZAogIC8vIGJ1aWxkIGEgc2VsZWN0aW9uIG91dCBvZiBpdC4gJ0NvbnN1bWVzJyByYW5nZXMgYXJyYXkgKG1vZGlmeWluZwogIC8vIGl0KS4KICBmdW5jdGlvbiBub3JtYWxpemVTZWxlY3Rpb24ocmFuZ2VzLCBwcmltSW5kZXgpIHsKICAgIHZhciBwcmltID0gcmFuZ2VzW3ByaW1JbmRleF07CiAgICByYW5nZXMuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBjbXAoYS5mcm9tKCksIGIuZnJvbSgpKTsgfSk7CiAgICBwcmltSW5kZXggPSBpbmRleE9mKHJhbmdlcywgcHJpbSk7CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgY3VyID0gcmFuZ2VzW2ldLCBwcmV2ID0gcmFuZ2VzW2kgLSAxXTsKICAgICAgaWYgKGNtcChwcmV2LnRvKCksIGN1ci5mcm9tKCkpID49IDApIHsKICAgICAgICB2YXIgZnJvbSA9IG1pblBvcyhwcmV2LmZyb20oKSwgY3VyLmZyb20oKSksIHRvID0gbWF4UG9zKHByZXYudG8oKSwgY3VyLnRvKCkpOwogICAgICAgIHZhciBpbnYgPSBwcmV2LmVtcHR5KCkgPyBjdXIuZnJvbSgpID09IGN1ci5oZWFkIDogcHJldi5mcm9tKCkgPT0gcHJldi5oZWFkOwogICAgICAgIGlmIChpIDw9IHByaW1JbmRleCkgLS1wcmltSW5kZXg7CiAgICAgICAgcmFuZ2VzLnNwbGljZSgtLWksIDIsIG5ldyBSYW5nZShpbnYgPyB0byA6IGZyb20sIGludiA/IGZyb20gOiB0bykpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihyYW5nZXMsIHByaW1JbmRleCk7CiAgfQoKICBmdW5jdGlvbiBzaW1wbGVTZWxlY3Rpb24oYW5jaG9yLCBoZWFkKSB7CiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihbbmV3IFJhbmdlKGFuY2hvciwgaGVhZCB8fCBhbmNob3IpXSwgMCk7CiAgfQoKICAvLyBNb3N0IG9mIHRoZSBleHRlcm5hbCBBUEkgY2xpcHMgZ2l2ZW4gcG9zaXRpb25zIHRvIG1ha2Ugc3VyZSB0aGV5CiAgLy8gYWN0dWFsbHkgZXhpc3Qgd2l0aGluIHRoZSBkb2N1bWVudC4KICBmdW5jdGlvbiBjbGlwTGluZShkb2MsIG4pIHtyZXR1cm4gTWF0aC5tYXgoZG9jLmZpcnN0LCBNYXRoLm1pbihuLCBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpKTt9CiAgZnVuY3Rpb24gY2xpcFBvcyhkb2MsIHBvcykgewogICAgaWYgKHBvcy5saW5lIDwgZG9jLmZpcnN0KSByZXR1cm4gUG9zKGRvYy5maXJzdCwgMCk7CiAgICB2YXIgbGFzdCA9IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMTsKICAgIGlmIChwb3MubGluZSA+IGxhc3QpIHJldHVybiBQb3MobGFzdCwgZ2V0TGluZShkb2MsIGxhc3QpLnRleHQubGVuZ3RoKTsKICAgIHJldHVybiBjbGlwVG9MZW4ocG9zLCBnZXRMaW5lKGRvYywgcG9zLmxpbmUpLnRleHQubGVuZ3RoKTsKICB9CiAgZnVuY3Rpb24gY2xpcFRvTGVuKHBvcywgbGluZWxlbikgewogICAgdmFyIGNoID0gcG9zLmNoOwogICAgaWYgKGNoID09IG51bGwgfHwgY2ggPiBsaW5lbGVuKSByZXR1cm4gUG9zKHBvcy5saW5lLCBsaW5lbGVuKTsKICAgIGVsc2UgaWYgKGNoIDwgMCkgcmV0dXJuIFBvcyhwb3MubGluZSwgMCk7CiAgICBlbHNlIHJldHVybiBwb3M7CiAgfQogIGZ1bmN0aW9uIGlzTGluZShkb2MsIGwpIHtyZXR1cm4gbCA+PSBkb2MuZmlyc3QgJiYgbCA8IGRvYy5maXJzdCArIGRvYy5zaXplO30KICBmdW5jdGlvbiBjbGlwUG9zQXJyYXkoZG9jLCBhcnJheSkgewogICAgZm9yICh2YXIgb3V0ID0gW10sIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIG91dFtpXSA9IGNsaXBQb3MoZG9jLCBhcnJheVtpXSk7CiAgICByZXR1cm4gb3V0OwogIH0KCiAgLy8gU0VMRUNUSU9OIFVQREFURVMKCiAgLy8gVGhlICdzY3JvbGwnIHBhcmFtZXRlciBnaXZlbiB0byBtYW55IG9mIHRoZXNlIGluZGljYXRlZCB3aGV0aGVyCiAgLy8gdGhlIG5ldyBjdXJzb3IgcG9zaXRpb24gc2hvdWxkIGJlIHNjcm9sbGVkIGludG8gdmlldyBhZnRlcgogIC8vIG1vZGlmeWluZyB0aGUgc2VsZWN0aW9uLgoKICAvLyBJZiBzaGlmdCBpcyBoZWxkIG9yIHRoZSBleHRlbmQgZmxhZyBpcyBzZXQsIGV4dGVuZHMgYSByYW5nZSB0bwogIC8vIGluY2x1ZGUgYSBnaXZlbiBwb3NpdGlvbiAoYW5kIG9wdGlvbmFsbHkgYSBzZWNvbmQgcG9zaXRpb24pLgogIC8vIE90aGVyd2lzZSwgc2ltcGx5IHJldHVybnMgdGhlIHJhbmdlIGJldHdlZW4gdGhlIGdpdmVuIHBvc2l0aW9ucy4KICAvLyBVc2VkIGZvciBjdXJzb3IgbW90aW9uIGFuZCBzdWNoLgogIGZ1bmN0aW9uIGV4dGVuZFJhbmdlKGRvYywgcmFuZ2UsIGhlYWQsIG90aGVyKSB7CiAgICBpZiAoZG9jLmNtICYmIGRvYy5jbS5kaXNwbGF5LnNoaWZ0IHx8IGRvYy5leHRlbmQpIHsKICAgICAgdmFyIGFuY2hvciA9IHJhbmdlLmFuY2hvcjsKICAgICAgaWYgKG90aGVyKSB7CiAgICAgICAgdmFyIHBvc0JlZm9yZSA9IGNtcChoZWFkLCBhbmNob3IpIDwgMDsKICAgICAgICBpZiAocG9zQmVmb3JlICE9IChjbXAob3RoZXIsIGFuY2hvcikgPCAwKSkgewogICAgICAgICAgYW5jaG9yID0gaGVhZDsKICAgICAgICAgIGhlYWQgPSBvdGhlcjsKICAgICAgICB9IGVsc2UgaWYgKHBvc0JlZm9yZSAhPSAoY21wKGhlYWQsIG90aGVyKSA8IDApKSB7CiAgICAgICAgICBoZWFkID0gb3RoZXI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBuZXcgUmFuZ2UoYW5jaG9yLCBoZWFkKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgUmFuZ2Uob3RoZXIgfHwgaGVhZCwgaGVhZCk7CiAgICB9CiAgfQoKICAvLyBFeHRlbmQgdGhlIHByaW1hcnkgc2VsZWN0aW9uIHJhbmdlLCBkaXNjYXJkIHRoZSByZXN0LgogIGZ1bmN0aW9uIGV4dGVuZFNlbGVjdGlvbihkb2MsIGhlYWQsIG90aGVyLCBvcHRpb25zKSB7CiAgICBzZXRTZWxlY3Rpb24oZG9jLCBuZXcgU2VsZWN0aW9uKFtleHRlbmRSYW5nZShkb2MsIGRvYy5zZWwucHJpbWFyeSgpLCBoZWFkLCBvdGhlcildLCAwKSwgb3B0aW9ucyk7CiAgfQoKICAvLyBFeHRlbmQgYWxsIHNlbGVjdGlvbnMgKHBvcyBpcyBhbiBhcnJheSBvZiBzZWxlY3Rpb25zIHdpdGggbGVuZ3RoCiAgLy8gZXF1YWwgdGhlIG51bWJlciBvZiBzZWxlY3Rpb25zKQogIGZ1bmN0aW9uIGV4dGVuZFNlbGVjdGlvbnMoZG9jLCBoZWFkcywgb3B0aW9ucykgewogICAgZm9yICh2YXIgb3V0ID0gW10sIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspCiAgICAgIG91dFtpXSA9IGV4dGVuZFJhbmdlKGRvYywgZG9jLnNlbC5yYW5nZXNbaV0sIGhlYWRzW2ldLCBudWxsKTsKICAgIHZhciBuZXdTZWwgPSBub3JtYWxpemVTZWxlY3Rpb24ob3V0LCBkb2Muc2VsLnByaW1JbmRleCk7CiAgICBzZXRTZWxlY3Rpb24oZG9jLCBuZXdTZWwsIG9wdGlvbnMpOwogIH0KCiAgLy8gVXBkYXRlcyBhIHNpbmdsZSByYW5nZSBpbiB0aGUgc2VsZWN0aW9uLgogIGZ1bmN0aW9uIHJlcGxhY2VPbmVTZWxlY3Rpb24oZG9jLCBpLCByYW5nZSwgb3B0aW9ucykgewogICAgdmFyIHJhbmdlcyA9IGRvYy5zZWwucmFuZ2VzLnNsaWNlKDApOwogICAgcmFuZ2VzW2ldID0gcmFuZ2U7CiAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxlY3Rpb24ocmFuZ2VzLCBkb2Muc2VsLnByaW1JbmRleCksIG9wdGlvbnMpOwogIH0KCiAgLy8gUmVzZXQgdGhlIHNlbGVjdGlvbiB0byBhIHNpbmdsZSByYW5nZS4KICBmdW5jdGlvbiBzZXRTaW1wbGVTZWxlY3Rpb24oZG9jLCBhbmNob3IsIGhlYWQsIG9wdGlvbnMpIHsKICAgIHNldFNlbGVjdGlvbihkb2MsIHNpbXBsZVNlbGVjdGlvbihhbmNob3IsIGhlYWQpLCBvcHRpb25zKTsKICB9CgogIC8vIEdpdmUgYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIGhhbmRsZXJzIGEgY2hhbmdlIHRvIGluZmx1ZW5jZSBhCiAgLy8gc2VsZWN0aW9uIHVwZGF0ZS4KICBmdW5jdGlvbiBmaWx0ZXJTZWxlY3Rpb25DaGFuZ2UoZG9jLCBzZWwpIHsKICAgIHZhciBvYmogPSB7CiAgICAgIHJhbmdlczogc2VsLnJhbmdlcywKICAgICAgdXBkYXRlOiBmdW5jdGlvbihyYW5nZXMpIHsKICAgICAgICB0aGlzLnJhbmdlcyA9IFtdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKQogICAgICAgICAgdGhpcy5yYW5nZXNbaV0gPSBuZXcgUmFuZ2UoY2xpcFBvcyhkb2MsIHJhbmdlc1tpXS5hbmNob3IpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFBvcyhkb2MsIHJhbmdlc1tpXS5oZWFkKSk7CiAgICAgIH0KICAgIH07CiAgICBzaWduYWwoZG9jLCAiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIiwgZG9jLCBvYmopOwogICAgaWYgKGRvYy5jbSkgc2lnbmFsKGRvYy5jbSwgImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsIGRvYy5jbSwgb2JqKTsKICAgIGlmIChvYmoucmFuZ2VzICE9IHNlbC5yYW5nZXMpIHJldHVybiBub3JtYWxpemVTZWxlY3Rpb24ob2JqLnJhbmdlcywgb2JqLnJhbmdlcy5sZW5ndGggLSAxKTsKICAgIGVsc2UgcmV0dXJuIHNlbDsKICB9CgogIGZ1bmN0aW9uIHNldFNlbGVjdGlvblJlcGxhY2VIaXN0b3J5KGRvYywgc2VsLCBvcHRpb25zKSB7CiAgICB2YXIgZG9uZSA9IGRvYy5oaXN0b3J5LmRvbmUsIGxhc3QgPSBsc3QoZG9uZSk7CiAgICBpZiAobGFzdCAmJiBsYXN0LnJhbmdlcykgewogICAgICBkb25lW2RvbmUubGVuZ3RoIC0gMV0gPSBzZWw7CiAgICAgIHNldFNlbGVjdGlvbk5vVW5kbyhkb2MsIHNlbCwgb3B0aW9ucyk7CiAgICB9IGVsc2UgewogICAgICBzZXRTZWxlY3Rpb24oZG9jLCBzZWwsIG9wdGlvbnMpOwogICAgfQogIH0KCiAgLy8gU2V0IGEgbmV3IHNlbGVjdGlvbi4KICBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oZG9jLCBzZWwsIG9wdGlvbnMpIHsKICAgIHNldFNlbGVjdGlvbk5vVW5kbyhkb2MsIHNlbCwgb3B0aW9ucyk7CiAgICBhZGRTZWxlY3Rpb25Ub0hpc3RvcnkoZG9jLCBkb2Muc2VsLCBkb2MuY20gPyBkb2MuY20uY3VyT3AuaWQgOiBOYU4sIG9wdGlvbnMpOwogIH0KCiAgZnVuY3Rpb24gc2V0U2VsZWN0aW9uTm9VbmRvKGRvYywgc2VsLCBvcHRpb25zKSB7CiAgICBpZiAoaGFzSGFuZGxlcihkb2MsICJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKSB8fCBkb2MuY20gJiYgaGFzSGFuZGxlcihkb2MuY20sICJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKSkKICAgICAgc2VsID0gZmlsdGVyU2VsZWN0aW9uQ2hhbmdlKGRvYywgc2VsKTsKCiAgICB2YXIgYmlhcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5iaWFzIHx8CiAgICAgIChjbXAoc2VsLnByaW1hcnkoKS5oZWFkLCBkb2Muc2VsLnByaW1hcnkoKS5oZWFkKSA8IDAgPyAtMSA6IDEpOwogICAgc2V0U2VsZWN0aW9uSW5uZXIoZG9jLCBza2lwQXRvbWljSW5TZWxlY3Rpb24oZG9jLCBzZWwsIGJpYXMsIHRydWUpKTsKCiAgICBpZiAoIShvcHRpb25zICYmIG9wdGlvbnMuc2Nyb2xsID09PSBmYWxzZSkgJiYgZG9jLmNtKQogICAgICBlbnN1cmVDdXJzb3JWaXNpYmxlKGRvYy5jbSk7CiAgfQoKICBmdW5jdGlvbiBzZXRTZWxlY3Rpb25Jbm5lcihkb2MsIHNlbCkgewogICAgaWYgKHNlbC5lcXVhbHMoZG9jLnNlbCkpIHJldHVybjsKCiAgICBkb2Muc2VsID0gc2VsOwoKICAgIGlmIChkb2MuY20pIHsKICAgICAgZG9jLmNtLmN1ck9wLnVwZGF0ZUlucHV0ID0gZG9jLmNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlOwogICAgICBzaWduYWxDdXJzb3JBY3Rpdml0eShkb2MuY20pOwogICAgfQogICAgc2lnbmFsTGF0ZXIoZG9jLCAiY3Vyc29yQWN0aXZpdHkiLCBkb2MpOwogIH0KCiAgLy8gVmVyaWZ5IHRoYXQgdGhlIHNlbGVjdGlvbiBkb2VzIG5vdCBwYXJ0aWFsbHkgc2VsZWN0IGFueSBhdG9taWMKICAvLyBtYXJrZWQgcmFuZ2VzLgogIGZ1bmN0aW9uIHJlQ2hlY2tTZWxlY3Rpb24oZG9jKSB7CiAgICBzZXRTZWxlY3Rpb25Jbm5lcihkb2MsIHNraXBBdG9taWNJblNlbGVjdGlvbihkb2MsIGRvYy5zZWwsIG51bGwsIGZhbHNlKSwgc2VsX2RvbnRTY3JvbGwpOwogIH0KCiAgLy8gUmV0dXJuIGEgc2VsZWN0aW9uIHRoYXQgZG9lcyBub3QgcGFydGlhbGx5IHNlbGVjdCBhbnkgYXRvbWljCiAgLy8gcmFuZ2VzLgogIGZ1bmN0aW9uIHNraXBBdG9taWNJblNlbGVjdGlvbihkb2MsIHNlbCwgYmlhcywgbWF5Q2xlYXIpIHsKICAgIHZhciBvdXQ7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIHJhbmdlID0gc2VsLnJhbmdlc1tpXTsKICAgICAgdmFyIG5ld0FuY2hvciA9IHNraXBBdG9taWMoZG9jLCByYW5nZS5hbmNob3IsIGJpYXMsIG1heUNsZWFyKTsKICAgICAgdmFyIG5ld0hlYWQgPSBza2lwQXRvbWljKGRvYywgcmFuZ2UuaGVhZCwgYmlhcywgbWF5Q2xlYXIpOwogICAgICBpZiAob3V0IHx8IG5ld0FuY2hvciAhPSByYW5nZS5hbmNob3IgfHwgbmV3SGVhZCAhPSByYW5nZS5oZWFkKSB7CiAgICAgICAgaWYgKCFvdXQpIG91dCA9IHNlbC5yYW5nZXMuc2xpY2UoMCwgaSk7CiAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKG5ld0FuY2hvciwgbmV3SGVhZCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBvdXQgPyBub3JtYWxpemVTZWxlY3Rpb24ob3V0LCBzZWwucHJpbUluZGV4KSA6IHNlbDsKICB9CgogIC8vIEVuc3VyZSBhIGdpdmVuIHBvc2l0aW9uIGlzIG5vdCBpbnNpZGUgYW4gYXRvbWljIHJhbmdlLgogIGZ1bmN0aW9uIHNraXBBdG9taWMoZG9jLCBwb3MsIGJpYXMsIG1heUNsZWFyKSB7CiAgICB2YXIgZmxpcHBlZCA9IGZhbHNlLCBjdXJQb3MgPSBwb3M7CiAgICB2YXIgZGlyID0gYmlhcyB8fCAxOwogICAgZG9jLmNhbnRFZGl0ID0gZmFsc2U7CiAgICBzZWFyY2g6IGZvciAoOzspIHsKICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgY3VyUG9zLmxpbmUpOwogICAgICBpZiAobGluZS5tYXJrZWRTcGFucykgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZS5tYXJrZWRTcGFucy5sZW5ndGg7ICsraSkgewogICAgICAgICAgdmFyIHNwID0gbGluZS5tYXJrZWRTcGFuc1tpXSwgbSA9IHNwLm1hcmtlcjsKICAgICAgICAgIGlmICgoc3AuZnJvbSA9PSBudWxsIHx8IChtLmluY2x1c2l2ZUxlZnQgPyBzcC5mcm9tIDw9IGN1clBvcy5jaCA6IHNwLmZyb20gPCBjdXJQb3MuY2gpKSAmJgogICAgICAgICAgICAgIChzcC50byA9PSBudWxsIHx8IChtLmluY2x1c2l2ZVJpZ2h0ID8gc3AudG8gPj0gY3VyUG9zLmNoIDogc3AudG8gPiBjdXJQb3MuY2gpKSkgewogICAgICAgICAgICBpZiAobWF5Q2xlYXIpIHsKICAgICAgICAgICAgICBzaWduYWwobSwgImJlZm9yZUN1cnNvckVudGVyIik7CiAgICAgICAgICAgICAgaWYgKG0uZXhwbGljaXRseUNsZWFyZWQpIHsKICAgICAgICAgICAgICAgIGlmICghbGluZS5tYXJrZWRTcGFucykgYnJlYWs7CiAgICAgICAgICAgICAgICBlbHNlIHstLWk7IGNvbnRpbnVlO30KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFtLmF0b21pYykgY29udGludWU7CiAgICAgICAgICAgIHZhciBuZXdQb3MgPSBtLmZpbmQoZGlyIDwgMCA/IC0xIDogMSk7CiAgICAgICAgICAgIGlmIChjbXAobmV3UG9zLCBjdXJQb3MpID09IDApIHsKICAgICAgICAgICAgICBuZXdQb3MuY2ggKz0gZGlyOwogICAgICAgICAgICAgIGlmIChuZXdQb3MuY2ggPCAwKSB7CiAgICAgICAgICAgICAgICBpZiAobmV3UG9zLmxpbmUgPiBkb2MuZmlyc3QpIG5ld1BvcyA9IGNsaXBQb3MoZG9jLCBQb3MobmV3UG9zLmxpbmUgLSAxKSk7CiAgICAgICAgICAgICAgICBlbHNlIG5ld1BvcyA9IG51bGw7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXdQb3MuY2ggPiBsaW5lLnRleHQubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBpZiAobmV3UG9zLmxpbmUgPCBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpIG5ld1BvcyA9IFBvcyhuZXdQb3MubGluZSArIDEsIDApOwogICAgICAgICAgICAgICAgZWxzZSBuZXdQb3MgPSBudWxsOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoIW5ld1BvcykgewogICAgICAgICAgICAgICAgaWYgKGZsaXBwZWQpIHsKICAgICAgICAgICAgICAgICAgLy8gRHJpdmVuIGluIGEgY29ybmVyIC0tIG5vIHZhbGlkIGN1cnNvciBwb3NpdGlvbiBmb3VuZCBhdCBhbGwKICAgICAgICAgICAgICAgICAgLy8gLS0gdHJ5IGFnYWluICp3aXRoKiBjbGVhcmluZywgaWYgd2UgZGlkbid0IGFscmVhZHkKICAgICAgICAgICAgICAgICAgaWYgKCFtYXlDbGVhcikgcmV0dXJuIHNraXBBdG9taWMoZG9jLCBwb3MsIGJpYXMsIHRydWUpOwogICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHR1cm4gb2ZmIGVkaXRpbmcgdW50aWwgZnVydGhlciBub3RpY2UsIGFuZCByZXR1cm4gdGhlIHN0YXJ0IG9mIHRoZSBkb2MKICAgICAgICAgICAgICAgICAgZG9jLmNhbnRFZGl0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIFBvcyhkb2MuZmlyc3QsIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmxpcHBlZCA9IHRydWU7IG5ld1BvcyA9IHBvczsgZGlyID0gLWRpcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3VyUG9zID0gbmV3UG9zOwogICAgICAgICAgICBjb250aW51ZSBzZWFyY2g7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBjdXJQb3M7CiAgICB9CiAgfQoKICAvLyBTRUxFQ1RJT04gRFJBV0lORwoKICBmdW5jdGlvbiB1cGRhdGVTZWxlY3Rpb24oY20pIHsKICAgIGNtLmRpc3BsYXkuaW5wdXQuc2hvd1NlbGVjdGlvbihjbS5kaXNwbGF5LmlucHV0LnByZXBhcmVTZWxlY3Rpb24oKSk7CiAgfQoKICBmdW5jdGlvbiBwcmVwYXJlU2VsZWN0aW9uKGNtLCBwcmltYXJ5KSB7CiAgICB2YXIgZG9jID0gY20uZG9jLCByZXN1bHQgPSB7fTsKICAgIHZhciBjdXJGcmFnbWVudCA9IHJlc3VsdC5jdXJzb3JzID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgdmFyIHNlbEZyYWdtZW50ID0gcmVzdWx0LnNlbGVjdGlvbiA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChwcmltYXJ5ID09PSBmYWxzZSAmJiBpID09IGRvYy5zZWwucHJpbUluZGV4KSBjb250aW51ZTsKICAgICAgdmFyIHJhbmdlID0gZG9jLnNlbC5yYW5nZXNbaV07CiAgICAgIHZhciBjb2xsYXBzZWQgPSByYW5nZS5lbXB0eSgpOwogICAgICBpZiAoY29sbGFwc2VkIHx8IGNtLm9wdGlvbnMuc2hvd0N1cnNvcldoZW5TZWxlY3RpbmcpCiAgICAgICAgZHJhd1NlbGVjdGlvbkN1cnNvcihjbSwgcmFuZ2UuaGVhZCwgY3VyRnJhZ21lbnQpOwogICAgICBpZiAoIWNvbGxhcHNlZCkKICAgICAgICBkcmF3U2VsZWN0aW9uUmFuZ2UoY20sIHJhbmdlLCBzZWxGcmFnbWVudCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gRHJhd3MgYSBjdXJzb3IgZm9yIHRoZSBnaXZlbiByYW5nZQogIGZ1bmN0aW9uIGRyYXdTZWxlY3Rpb25DdXJzb3IoY20sIGhlYWQsIG91dHB1dCkgewogICAgdmFyIHBvcyA9IGN1cnNvckNvb3JkcyhjbSwgaGVhZCwgImRpdiIsIG51bGwsIG51bGwsICFjbS5vcHRpb25zLnNpbmdsZUN1cnNvckhlaWdodFBlckxpbmUpOwoKICAgIHZhciBjdXJzb3IgPSBvdXRwdXQuYXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCAiXHUwMGEwIiwgIkNvZGVNaXJyb3ItY3Vyc29yIikpOwogICAgY3Vyc29yLnN0eWxlLmxlZnQgPSBwb3MubGVmdCArICJweCI7CiAgICBjdXJzb3Iuc3R5bGUudG9wID0gcG9zLnRvcCArICJweCI7CiAgICBjdXJzb3Iuc3R5bGUuaGVpZ2h0ID0gTWF0aC5tYXgoMCwgcG9zLmJvdHRvbSAtIHBvcy50b3ApICogY20ub3B0aW9ucy5jdXJzb3JIZWlnaHQgKyAicHgiOwoKICAgIGlmIChwb3Mub3RoZXIpIHsKICAgICAgLy8gU2Vjb25kYXJ5IGN1cnNvciwgc2hvd24gd2hlbiBvbiBhICdqdW1wJyBpbiBiaS1kaXJlY3Rpb25hbCB0ZXh0CiAgICAgIHZhciBvdGhlckN1cnNvciA9IG91dHB1dC5hcHBlbmRDaGlsZChlbHQoImRpdiIsICJcdTAwYTAiLCAiQ29kZU1pcnJvci1jdXJzb3IgQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3IiKSk7CiAgICAgIG90aGVyQ3Vyc29yLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgb3RoZXJDdXJzb3Iuc3R5bGUubGVmdCA9IHBvcy5vdGhlci5sZWZ0ICsgInB4IjsKICAgICAgb3RoZXJDdXJzb3Iuc3R5bGUudG9wID0gcG9zLm90aGVyLnRvcCArICJweCI7CiAgICAgIG90aGVyQ3Vyc29yLnN0eWxlLmhlaWdodCA9IChwb3Mub3RoZXIuYm90dG9tIC0gcG9zLm90aGVyLnRvcCkgKiAuODUgKyAicHgiOwogICAgfQogIH0KCiAgLy8gRHJhd3MgdGhlIGdpdmVuIHJhbmdlIGFzIGEgaGlnaGxpZ2h0ZWQgc2VsZWN0aW9uCiAgZnVuY3Rpb24gZHJhd1NlbGVjdGlvblJhbmdlKGNtLCByYW5nZSwgb3V0cHV0KSB7CiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYzsKICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKICAgIHZhciBwYWRkaW5nID0gcGFkZGluZ0goY20uZGlzcGxheSksIGxlZnRTaWRlID0gcGFkZGluZy5sZWZ0OwogICAgdmFyIHJpZ2h0U2lkZSA9IE1hdGgubWF4KGRpc3BsYXkuc2l6ZXJXaWR0aCwgZGlzcGxheVdpZHRoKGNtKSAtIGRpc3BsYXkuc2l6ZXIub2Zmc2V0TGVmdCkgLSBwYWRkaW5nLnJpZ2h0OwoKICAgIGZ1bmN0aW9uIGFkZChsZWZ0LCB0b3AsIHdpZHRoLCBib3R0b20pIHsKICAgICAgaWYgKHRvcCA8IDApIHRvcCA9IDA7CiAgICAgIHRvcCA9IE1hdGgucm91bmQodG9wKTsKICAgICAgYm90dG9tID0gTWF0aC5yb3VuZChib3R0b20pOwogICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLXNlbGVjdGVkIiwgInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogIiArIGxlZnQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB4OyB0b3A6ICIgKyB0b3AgKyAicHg7IHdpZHRoOiAiICsgKHdpZHRoID09IG51bGwgPyByaWdodFNpZGUgLSBsZWZ0IDogd2lkdGgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweDsgaGVpZ2h0OiAiICsgKGJvdHRvbSAtIHRvcCkgKyAicHgiKSk7CiAgICB9CgogICAgZnVuY3Rpb24gZHJhd0ZvckxpbmUobGluZSwgZnJvbUFyZywgdG9BcmcpIHsKICAgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGluZSk7CiAgICAgIHZhciBsaW5lTGVuID0gbGluZU9iai50ZXh0Lmxlbmd0aDsKICAgICAgdmFyIHN0YXJ0LCBlbmQ7CiAgICAgIGZ1bmN0aW9uIGNvb3JkcyhjaCwgYmlhcykgewogICAgICAgIHJldHVybiBjaGFyQ29vcmRzKGNtLCBQb3MobGluZSwgY2gpLCAiZGl2IiwgbGluZU9iaiwgYmlhcyk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdGVCaWRpU2VjdGlvbnMoZ2V0T3JkZXIobGluZU9iaiksIGZyb21BcmcgfHwgMCwgdG9BcmcgPT0gbnVsbCA/IGxpbmVMZW4gOiB0b0FyZywgZnVuY3Rpb24oZnJvbSwgdG8sIGRpcikgewogICAgICAgIHZhciBsZWZ0UG9zID0gY29vcmRzKGZyb20sICJsZWZ0IiksIHJpZ2h0UG9zLCBsZWZ0LCByaWdodDsKICAgICAgICBpZiAoZnJvbSA9PSB0bykgewogICAgICAgICAgcmlnaHRQb3MgPSBsZWZ0UG9zOwogICAgICAgICAgbGVmdCA9IHJpZ2h0ID0gbGVmdFBvcy5sZWZ0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByaWdodFBvcyA9IGNvb3Jkcyh0byAtIDEsICJyaWdodCIpOwogICAgICAgICAgaWYgKGRpciA9PSAicnRsIikgeyB2YXIgdG1wID0gbGVmdFBvczsgbGVmdFBvcyA9IHJpZ2h0UG9zOyByaWdodFBvcyA9IHRtcDsgfQogICAgICAgICAgbGVmdCA9IGxlZnRQb3MubGVmdDsKICAgICAgICAgIHJpZ2h0ID0gcmlnaHRQb3MucmlnaHQ7CiAgICAgICAgfQogICAgICAgIGlmIChmcm9tQXJnID09IG51bGwgJiYgZnJvbSA9PSAwKSBsZWZ0ID0gbGVmdFNpZGU7CiAgICAgICAgaWYgKHJpZ2h0UG9zLnRvcCAtIGxlZnRQb3MudG9wID4gMykgeyAvLyBEaWZmZXJlbnQgbGluZXMsIGRyYXcgdG9wIHBhcnQKICAgICAgICAgIGFkZChsZWZ0LCBsZWZ0UG9zLnRvcCwgbnVsbCwgbGVmdFBvcy5ib3R0b20pOwogICAgICAgICAgbGVmdCA9IGxlZnRTaWRlOwogICAgICAgICAgaWYgKGxlZnRQb3MuYm90dG9tIDwgcmlnaHRQb3MudG9wKSBhZGQobGVmdCwgbGVmdFBvcy5ib3R0b20sIG51bGwsIHJpZ2h0UG9zLnRvcCk7CiAgICAgICAgfQogICAgICAgIGlmICh0b0FyZyA9PSBudWxsICYmIHRvID09IGxpbmVMZW4pIHJpZ2h0ID0gcmlnaHRTaWRlOwogICAgICAgIGlmICghc3RhcnQgfHwgbGVmdFBvcy50b3AgPCBzdGFydC50b3AgfHwgbGVmdFBvcy50b3AgPT0gc3RhcnQudG9wICYmIGxlZnRQb3MubGVmdCA8IHN0YXJ0LmxlZnQpCiAgICAgICAgICBzdGFydCA9IGxlZnRQb3M7CiAgICAgICAgaWYgKCFlbmQgfHwgcmlnaHRQb3MuYm90dG9tID4gZW5kLmJvdHRvbSB8fCByaWdodFBvcy5ib3R0b20gPT0gZW5kLmJvdHRvbSAmJiByaWdodFBvcy5yaWdodCA+IGVuZC5yaWdodCkKICAgICAgICAgIGVuZCA9IHJpZ2h0UG9zOwogICAgICAgIGlmIChsZWZ0IDwgbGVmdFNpZGUgKyAxKSBsZWZ0ID0gbGVmdFNpZGU7CiAgICAgICAgYWRkKGxlZnQsIHJpZ2h0UG9zLnRvcCwgcmlnaHQgLSBsZWZ0LCByaWdodFBvcy5ib3R0b20pOwogICAgICB9KTsKICAgICAgcmV0dXJuIHtzdGFydDogc3RhcnQsIGVuZDogZW5kfTsKICAgIH0KCiAgICB2YXIgc0Zyb20gPSByYW5nZS5mcm9tKCksIHNUbyA9IHJhbmdlLnRvKCk7CiAgICBpZiAoc0Zyb20ubGluZSA9PSBzVG8ubGluZSkgewogICAgICBkcmF3Rm9yTGluZShzRnJvbS5saW5lLCBzRnJvbS5jaCwgc1RvLmNoKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBmcm9tTGluZSA9IGdldExpbmUoZG9jLCBzRnJvbS5saW5lKSwgdG9MaW5lID0gZ2V0TGluZShkb2MsIHNUby5saW5lKTsKICAgICAgdmFyIHNpbmdsZVZMaW5lID0gdmlzdWFsTGluZShmcm9tTGluZSkgPT0gdmlzdWFsTGluZSh0b0xpbmUpOwogICAgICB2YXIgbGVmdEVuZCA9IGRyYXdGb3JMaW5lKHNGcm9tLmxpbmUsIHNGcm9tLmNoLCBzaW5nbGVWTGluZSA/IGZyb21MaW5lLnRleHQubGVuZ3RoICsgMSA6IG51bGwpLmVuZDsKICAgICAgdmFyIHJpZ2h0U3RhcnQgPSBkcmF3Rm9yTGluZShzVG8ubGluZSwgc2luZ2xlVkxpbmUgPyAwIDogbnVsbCwgc1RvLmNoKS5zdGFydDsKICAgICAgaWYgKHNpbmdsZVZMaW5lKSB7CiAgICAgICAgaWYgKGxlZnRFbmQudG9wIDwgcmlnaHRTdGFydC50b3AgLSAyKSB7CiAgICAgICAgICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIG51bGwsIGxlZnRFbmQuYm90dG9tKTsKICAgICAgICAgIGFkZChsZWZ0U2lkZSwgcmlnaHRTdGFydC50b3AsIHJpZ2h0U3RhcnQubGVmdCwgcmlnaHRTdGFydC5ib3R0b20pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIHJpZ2h0U3RhcnQubGVmdCAtIGxlZnRFbmQucmlnaHQsIGxlZnRFbmQuYm90dG9tKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGxlZnRFbmQuYm90dG9tIDwgcmlnaHRTdGFydC50b3ApCiAgICAgICAgYWRkKGxlZnRTaWRlLCBsZWZ0RW5kLmJvdHRvbSwgbnVsbCwgcmlnaHRTdGFydC50b3ApOwogICAgfQoKICAgIG91dHB1dC5hcHBlbmRDaGlsZChmcmFnbWVudCk7CiAgfQoKICAvLyBDdXJzb3ItYmxpbmtpbmcKICBmdW5jdGlvbiByZXN0YXJ0QmxpbmsoY20pIHsKICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCkgcmV0dXJuOwogICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwogICAgY2xlYXJJbnRlcnZhbChkaXNwbGF5LmJsaW5rZXIpOwogICAgdmFyIG9uID0gdHJ1ZTsKICAgIGRpc3BsYXkuY3Vyc29yRGl2LnN0eWxlLnZpc2liaWxpdHkgPSAiIjsKICAgIGlmIChjbS5vcHRpb25zLmN1cnNvckJsaW5rUmF0ZSA+IDApCiAgICAgIGRpc3BsYXkuYmxpbmtlciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgewogICAgICAgIGRpc3BsYXkuY3Vyc29yRGl2LnN0eWxlLnZpc2liaWxpdHkgPSAob24gPSAhb24pID8gIiIgOiAiaGlkZGVuIjsKICAgICAgfSwgY20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpOwogICAgZWxzZSBpZiAoY20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUgPCAwKQogICAgICBkaXNwbGF5LmN1cnNvckRpdi5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgfQoKICAvLyBISUdITElHSFQgV09SS0VSCgogIGZ1bmN0aW9uIHN0YXJ0V29ya2VyKGNtLCB0aW1lKSB7CiAgICBpZiAoY20uZG9jLm1vZGUuc3RhcnRTdGF0ZSAmJiBjbS5kb2MuZnJvbnRpZXIgPCBjbS5kaXNwbGF5LnZpZXdUbykKICAgICAgY20uc3RhdGUuaGlnaGxpZ2h0LnNldCh0aW1lLCBiaW5kKGhpZ2hsaWdodFdvcmtlciwgY20pKTsKICB9CgogIGZ1bmN0aW9uIGhpZ2hsaWdodFdvcmtlcihjbSkgewogICAgdmFyIGRvYyA9IGNtLmRvYzsKICAgIGlmIChkb2MuZnJvbnRpZXIgPCBkb2MuZmlyc3QpIGRvYy5mcm9udGllciA9IGRvYy5maXJzdDsKICAgIGlmIChkb2MuZnJvbnRpZXIgPj0gY20uZGlzcGxheS52aWV3VG8pIHJldHVybjsKICAgIHZhciBlbmQgPSArbmV3IERhdGUgKyBjbS5vcHRpb25zLndvcmtUaW1lOwogICAgdmFyIHN0YXRlID0gY29weVN0YXRlKGRvYy5tb2RlLCBnZXRTdGF0ZUJlZm9yZShjbSwgZG9jLmZyb250aWVyKSk7CiAgICB2YXIgY2hhbmdlZExpbmVzID0gW107CgogICAgZG9jLml0ZXIoZG9jLmZyb250aWVyLCBNYXRoLm1pbihkb2MuZmlyc3QgKyBkb2Muc2l6ZSwgY20uZGlzcGxheS52aWV3VG8gKyA1MDApLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgIGlmIChkb2MuZnJvbnRpZXIgPj0gY20uZGlzcGxheS52aWV3RnJvbSkgeyAvLyBWaXNpYmxlCiAgICAgICAgdmFyIG9sZFN0eWxlcyA9IGxpbmUuc3R5bGVzLCB0b29Mb25nID0gbGluZS50ZXh0Lmxlbmd0aCA+IGNtLm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoOwogICAgICAgIHZhciBoaWdobGlnaHRlZCA9IGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIHRvb0xvbmcgPyBjb3B5U3RhdGUoZG9jLm1vZGUsIHN0YXRlKSA6IHN0YXRlLCB0cnVlKTsKICAgICAgICBsaW5lLnN0eWxlcyA9IGhpZ2hsaWdodGVkLnN0eWxlczsKICAgICAgICB2YXIgb2xkQ2xzID0gbGluZS5zdHlsZUNsYXNzZXMsIG5ld0NscyA9IGhpZ2hsaWdodGVkLmNsYXNzZXM7CiAgICAgICAgaWYgKG5ld0NscykgbGluZS5zdHlsZUNsYXNzZXMgPSBuZXdDbHM7CiAgICAgICAgZWxzZSBpZiAob2xkQ2xzKSBsaW5lLnN0eWxlQ2xhc3NlcyA9IG51bGw7CiAgICAgICAgdmFyIGlzY2hhbmdlID0gIW9sZFN0eWxlcyB8fCBvbGRTdHlsZXMubGVuZ3RoICE9IGxpbmUuc3R5bGVzLmxlbmd0aCB8fAogICAgICAgICAgb2xkQ2xzICE9IG5ld0NscyAmJiAoIW9sZENscyB8fCAhbmV3Q2xzIHx8IG9sZENscy5iZ0NsYXNzICE9IG5ld0Nscy5iZ0NsYXNzIHx8IG9sZENscy50ZXh0Q2xhc3MgIT0gbmV3Q2xzLnRleHRDbGFzcyk7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7ICFpc2NoYW5nZSAmJiBpIDwgb2xkU3R5bGVzLmxlbmd0aDsgKytpKSBpc2NoYW5nZSA9IG9sZFN0eWxlc1tpXSAhPSBsaW5lLnN0eWxlc1tpXTsKICAgICAgICBpZiAoaXNjaGFuZ2UpIGNoYW5nZWRMaW5lcy5wdXNoKGRvYy5mcm9udGllcik7CiAgICAgICAgbGluZS5zdGF0ZUFmdGVyID0gdG9vTG9uZyA/IHN0YXRlIDogY29weVN0YXRlKGRvYy5tb2RlLCBzdGF0ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGxpbmUudGV4dC5sZW5ndGggPD0gY20ub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGgpCiAgICAgICAgICBwcm9jZXNzTGluZShjbSwgbGluZS50ZXh0LCBzdGF0ZSk7CiAgICAgICAgbGluZS5zdGF0ZUFmdGVyID0gZG9jLmZyb250aWVyICUgNSA9PSAwID8gY29weVN0YXRlKGRvYy5tb2RlLCBzdGF0ZSkgOiBudWxsOwogICAgICB9CiAgICAgICsrZG9jLmZyb250aWVyOwogICAgICBpZiAoK25ldyBEYXRlID4gZW5kKSB7CiAgICAgICAgc3RhcnRXb3JrZXIoY20sIGNtLm9wdGlvbnMud29ya0RlbGF5KTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfSk7CiAgICBpZiAoY2hhbmdlZExpbmVzLmxlbmd0aCkgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlZExpbmVzLmxlbmd0aDsgaSsrKQogICAgICAgIHJlZ0xpbmVDaGFuZ2UoY20sIGNoYW5nZWRMaW5lc1tpXSwgInRleHQiKTsKICAgIH0pOwogIH0KCiAgLy8gRmluZHMgdGhlIGxpbmUgdG8gc3RhcnQgd2l0aCB3aGVuIHN0YXJ0aW5nIGEgcGFyc2UuIFRyaWVzIHRvCiAgLy8gZmluZCBhIGxpbmUgd2l0aCBhIHN0YXRlQWZ0ZXIsIHNvIHRoYXQgaXQgY2FuIHN0YXJ0IHdpdGggYQogIC8vIHZhbGlkIHN0YXRlLiBJZiB0aGF0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBsaW5lIHdpdGggdGhlCiAgLy8gc21hbGxlc3QgaW5kZW50YXRpb24sIHdoaWNoIHRlbmRzIHRvIG5lZWQgdGhlIGxlYXN0IGNvbnRleHQgdG8KICAvLyBwYXJzZSBjb3JyZWN0bHkuCiAgZnVuY3Rpb24gZmluZFN0YXJ0TGluZShjbSwgbiwgcHJlY2lzZSkgewogICAgdmFyIG1pbmluZGVudCwgbWlubGluZSwgZG9jID0gY20uZG9jOwogICAgdmFyIGxpbSA9IHByZWNpc2UgPyAtMSA6IG4gLSAoY20uZG9jLm1vZGUuaW5uZXJNb2RlID8gMTAwMCA6IDEwMCk7CiAgICBmb3IgKHZhciBzZWFyY2ggPSBuOyBzZWFyY2ggPiBsaW07IC0tc2VhcmNoKSB7CiAgICAgIGlmIChzZWFyY2ggPD0gZG9jLmZpcnN0KSByZXR1cm4gZG9jLmZpcnN0OwogICAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBzZWFyY2ggLSAxKTsKICAgICAgaWYgKGxpbmUuc3RhdGVBZnRlciAmJiAoIXByZWNpc2UgfHwgc2VhcmNoIDw9IGRvYy5mcm9udGllcikpIHJldHVybiBzZWFyY2g7CiAgICAgIHZhciBpbmRlbnRlZCA9IGNvdW50Q29sdW1uKGxpbmUudGV4dCwgbnVsbCwgY20ub3B0aW9ucy50YWJTaXplKTsKICAgICAgaWYgKG1pbmxpbmUgPT0gbnVsbCB8fCBtaW5pbmRlbnQgPiBpbmRlbnRlZCkgewogICAgICAgIG1pbmxpbmUgPSBzZWFyY2ggLSAxOwogICAgICAgIG1pbmluZGVudCA9IGluZGVudGVkOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbWlubGluZTsKICB9CgogIGZ1bmN0aW9uIGdldFN0YXRlQmVmb3JlKGNtLCBuLCBwcmVjaXNlKSB7CiAgICB2YXIgZG9jID0gY20uZG9jLCBkaXNwbGF5ID0gY20uZGlzcGxheTsKICAgIGlmICghZG9jLm1vZGUuc3RhcnRTdGF0ZSkgcmV0dXJuIHRydWU7CiAgICB2YXIgcG9zID0gZmluZFN0YXJ0TGluZShjbSwgbiwgcHJlY2lzZSksIHN0YXRlID0gcG9zID4gZG9jLmZpcnN0ICYmIGdldExpbmUoZG9jLCBwb3MtMSkuc3RhdGVBZnRlcjsKICAgIGlmICghc3RhdGUpIHN0YXRlID0gc3RhcnRTdGF0ZShkb2MubW9kZSk7CiAgICBlbHNlIHN0YXRlID0gY29weVN0YXRlKGRvYy5tb2RlLCBzdGF0ZSk7CiAgICBkb2MuaXRlcihwb3MsIG4sIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgcHJvY2Vzc0xpbmUoY20sIGxpbmUudGV4dCwgc3RhdGUpOwogICAgICB2YXIgc2F2ZSA9IHBvcyA9PSBuIC0gMSB8fCBwb3MgJSA1ID09IDAgfHwgcG9zID49IGRpc3BsYXkudmlld0Zyb20gJiYgcG9zIDwgZGlzcGxheS52aWV3VG87CiAgICAgIGxpbmUuc3RhdGVBZnRlciA9IHNhdmUgPyBjb3B5U3RhdGUoZG9jLm1vZGUsIHN0YXRlKSA6IG51bGw7CiAgICAgICsrcG9zOwogICAgfSk7CiAgICBpZiAocHJlY2lzZSkgZG9jLmZyb250aWVyID0gcG9zOwogICAgcmV0dXJuIHN0YXRlOwogIH0KCiAgLy8gUE9TSVRJT04gTUVBU1VSRU1FTlQKCiAgZnVuY3Rpb24gcGFkZGluZ1RvcChkaXNwbGF5KSB7cmV0dXJuIGRpc3BsYXkubGluZVNwYWNlLm9mZnNldFRvcDt9CiAgZnVuY3Rpb24gcGFkZGluZ1ZlcnQoZGlzcGxheSkge3JldHVybiBkaXNwbGF5Lm1vdmVyLm9mZnNldEhlaWdodCAtIGRpc3BsYXkubGluZVNwYWNlLm9mZnNldEhlaWdodDt9CiAgZnVuY3Rpb24gcGFkZGluZ0goZGlzcGxheSkgewogICAgaWYgKGRpc3BsYXkuY2FjaGVkUGFkZGluZ0gpIHJldHVybiBkaXNwbGF5LmNhY2hlZFBhZGRpbmdIOwogICAgdmFyIGUgPSByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1lYXN1cmUsIGVsdCgicHJlIiwgIngiKSk7CiAgICB2YXIgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSA/IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpIDogZS5jdXJyZW50U3R5bGU7CiAgICB2YXIgZGF0YSA9IHtsZWZ0OiBwYXJzZUludChzdHlsZS5wYWRkaW5nTGVmdCksIHJpZ2h0OiBwYXJzZUludChzdHlsZS5wYWRkaW5nUmlnaHQpfTsKICAgIGlmICghaXNOYU4oZGF0YS5sZWZ0KSAmJiAhaXNOYU4oZGF0YS5yaWdodCkpIGRpc3BsYXkuY2FjaGVkUGFkZGluZ0ggPSBkYXRhOwogICAgcmV0dXJuIGRhdGE7CiAgfQoKICBmdW5jdGlvbiBzY3JvbGxHYXAoY20pIHsgcmV0dXJuIHNjcm9sbGVyR2FwIC0gY20uZGlzcGxheS5uYXRpdmVCYXJXaWR0aDsgfQogIGZ1bmN0aW9uIGRpc3BsYXlXaWR0aChjbSkgewogICAgcmV0dXJuIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGggLSBzY3JvbGxHYXAoY20pIC0gY20uZGlzcGxheS5iYXJXaWR0aDsKICB9CiAgZnVuY3Rpb24gZGlzcGxheUhlaWdodChjbSkgewogICAgcmV0dXJuIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xsR2FwKGNtKSAtIGNtLmRpc3BsYXkuYmFySGVpZ2h0OwogIH0KCiAgLy8gRW5zdXJlIHRoZSBsaW5lVmlldy53cmFwcGluZy5oZWlnaHRzIGFycmF5IGlzIHBvcHVsYXRlZC4gVGhpcyBpcwogIC8vIGFuIGFycmF5IG9mIGJvdHRvbSBvZmZzZXRzIGZvciB0aGUgbGluZXMgdGhhdCBtYWtlIHVwIGEgZHJhd24KICAvLyBsaW5lLiBXaGVuIGxpbmVXcmFwcGluZyBpcyBvbiwgdGhlcmUgbWlnaHQgYmUgbW9yZSB0aGFuIG9uZQogIC8vIGhlaWdodC4KICBmdW5jdGlvbiBlbnN1cmVMaW5lSGVpZ2h0cyhjbSwgbGluZVZpZXcsIHJlY3QpIHsKICAgIHZhciB3cmFwcGluZyA9IGNtLm9wdGlvbnMubGluZVdyYXBwaW5nOwogICAgdmFyIGN1cldpZHRoID0gd3JhcHBpbmcgJiYgZGlzcGxheVdpZHRoKGNtKTsKICAgIGlmICghbGluZVZpZXcubWVhc3VyZS5oZWlnaHRzIHx8IHdyYXBwaW5nICYmIGxpbmVWaWV3Lm1lYXN1cmUud2lkdGggIT0gY3VyV2lkdGgpIHsKICAgICAgdmFyIGhlaWdodHMgPSBsaW5lVmlldy5tZWFzdXJlLmhlaWdodHMgPSBbXTsKICAgICAgaWYgKHdyYXBwaW5nKSB7CiAgICAgICAgbGluZVZpZXcubWVhc3VyZS53aWR0aCA9IGN1cldpZHRoOwogICAgICAgIHZhciByZWN0cyA9IGxpbmVWaWV3LnRleHQuZmlyc3RDaGlsZC5nZXRDbGllbnRSZWN0cygpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoIC0gMTsgaSsrKSB7CiAgICAgICAgICB2YXIgY3VyID0gcmVjdHNbaV0sIG5leHQgPSByZWN0c1tpICsgMV07CiAgICAgICAgICBpZiAoTWF0aC5hYnMoY3VyLmJvdHRvbSAtIG5leHQuYm90dG9tKSA+IDIpCiAgICAgICAgICAgIGhlaWdodHMucHVzaCgoY3VyLmJvdHRvbSArIG5leHQudG9wKSAvIDIgLSByZWN0LnRvcCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGhlaWdodHMucHVzaChyZWN0LmJvdHRvbSAtIHJlY3QudG9wKTsKICAgIH0KICB9CgogIC8vIEZpbmQgYSBsaW5lIG1hcCAobWFwcGluZyBjaGFyYWN0ZXIgb2Zmc2V0cyB0byB0ZXh0IG5vZGVzKSBhbmQgYQogIC8vIG1lYXN1cmVtZW50IGNhY2hlIGZvciB0aGUgZ2l2ZW4gbGluZSBudW1iZXIuIChBIGxpbmUgdmlldyBtaWdodAogIC8vIGNvbnRhaW4gbXVsdGlwbGUgbGluZXMgd2hlbiBjb2xsYXBzZWQgcmFuZ2VzIGFyZSBwcmVzZW50LikKICBmdW5jdGlvbiBtYXBGcm9tTGluZVZpZXcobGluZVZpZXcsIGxpbmUsIGxpbmVOKSB7CiAgICBpZiAobGluZVZpZXcubGluZSA9PSBsaW5lKQogICAgICByZXR1cm4ge21hcDogbGluZVZpZXcubWVhc3VyZS5tYXAsIGNhY2hlOiBsaW5lVmlldy5tZWFzdXJlLmNhY2hlfTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZVZpZXcucmVzdC5sZW5ndGg7IGkrKykKICAgICAgaWYgKGxpbmVWaWV3LnJlc3RbaV0gPT0gbGluZSkKICAgICAgICByZXR1cm4ge21hcDogbGluZVZpZXcubWVhc3VyZS5tYXBzW2ldLCBjYWNoZTogbGluZVZpZXcubWVhc3VyZS5jYWNoZXNbaV19OwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKQogICAgICBpZiAobGluZU5vKGxpbmVWaWV3LnJlc3RbaV0pID4gbGluZU4pCiAgICAgICAgcmV0dXJuIHttYXA6IGxpbmVWaWV3Lm1lYXN1cmUubWFwc1tpXSwgY2FjaGU6IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzW2ldLCBiZWZvcmU6IHRydWV9OwogIH0KCiAgLy8gUmVuZGVyIGEgbGluZSBpbnRvIHRoZSBoaWRkZW4gbm9kZSBkaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQuIFVzZWQKICAvLyB3aGVuIG1lYXN1cmVtZW50IGlzIG5lZWRlZCBmb3IgYSBsaW5lIHRoYXQncyBub3QgaW4gdGhlIHZpZXdwb3J0LgogIGZ1bmN0aW9uIHVwZGF0ZUV4dGVybmFsTWVhc3VyZW1lbnQoY20sIGxpbmUpIHsKICAgIGxpbmUgPSB2aXN1YWxMaW5lKGxpbmUpOwogICAgdmFyIGxpbmVOID0gbGluZU5vKGxpbmUpOwogICAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgPSBuZXcgTGluZVZpZXcoY20uZG9jLCBsaW5lLCBsaW5lTik7CiAgICB2aWV3LmxpbmVOID0gbGluZU47CiAgICB2YXIgYnVpbHQgPSB2aWV3LmJ1aWx0ID0gYnVpbGRMaW5lQ29udGVudChjbSwgdmlldyk7CiAgICB2aWV3LnRleHQgPSBidWlsdC5wcmU7CiAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChjbS5kaXNwbGF5LmxpbmVNZWFzdXJlLCBidWlsdC5wcmUpOwogICAgcmV0dXJuIHZpZXc7CiAgfQoKICAvLyBHZXQgYSB7dG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0fSBib3ggKGluIGxpbmUtbG9jYWwgY29vcmRpbmF0ZXMpCiAgLy8gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLgogIGZ1bmN0aW9uIG1lYXN1cmVDaGFyKGNtLCBsaW5lLCBjaCwgYmlhcykgewogICAgcmV0dXJuIG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZSksIGNoLCBiaWFzKTsKICB9CgogIC8vIEZpbmQgYSBsaW5lIHZpZXcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZ2l2ZW4gbGluZSBudW1iZXIuCiAgZnVuY3Rpb24gZmluZFZpZXdGb3JMaW5lKGNtLCBsaW5lTikgewogICAgaWYgKGxpbmVOID49IGNtLmRpc3BsYXkudmlld0Zyb20gJiYgbGluZU4gPCBjbS5kaXNwbGF5LnZpZXdUbykKICAgICAgcmV0dXJuIGNtLmRpc3BsYXkudmlld1tmaW5kVmlld0luZGV4KGNtLCBsaW5lTildOwogICAgdmFyIGV4dCA9IGNtLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZDsKICAgIGlmIChleHQgJiYgbGluZU4gPj0gZXh0LmxpbmVOICYmIGxpbmVOIDwgZXh0LmxpbmVOICsgZXh0LnNpemUpCiAgICAgIHJldHVybiBleHQ7CiAgfQoKICAvLyBNZWFzdXJlbWVudCBjYW4gYmUgc3BsaXQgaW4gdHdvIHN0ZXBzLCB0aGUgc2V0LXVwIHdvcmsgdGhhdAogIC8vIGFwcGxpZXMgdG8gdGhlIHdob2xlIGxpbmUsIGFuZCB0aGUgbWVhc3VyZW1lbnQgb2YgdGhlIGFjdHVhbAogIC8vIGNoYXJhY3Rlci4gRnVuY3Rpb25zIGxpa2UgY29vcmRzQ2hhciwgdGhhdCBuZWVkIHRvIGRvIGEgbG90IG9mCiAgLy8gbWVhc3VyZW1lbnRzIGluIGEgcm93LCBjYW4gdGh1cyBlbnN1cmUgdGhhdCB0aGUgc2V0LXVwIHdvcmsgaXMKICAvLyBvbmx5IGRvbmUgb25jZS4KICBmdW5jdGlvbiBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmUpIHsKICAgIHZhciBsaW5lTiA9IGxpbmVObyhsaW5lKTsKICAgIHZhciB2aWV3ID0gZmluZFZpZXdGb3JMaW5lKGNtLCBsaW5lTik7CiAgICBpZiAodmlldyAmJiAhdmlldy50ZXh0KSB7CiAgICAgIHZpZXcgPSBudWxsOwogICAgfSBlbHNlIGlmICh2aWV3ICYmIHZpZXcuY2hhbmdlcykgewogICAgICB1cGRhdGVMaW5lRm9yQ2hhbmdlcyhjbSwgdmlldywgbGluZU4sIGdldERpbWVuc2lvbnMoY20pKTsKICAgICAgY20uY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlOwogICAgfQogICAgaWYgKCF2aWV3KQogICAgICB2aWV3ID0gdXBkYXRlRXh0ZXJuYWxNZWFzdXJlbWVudChjbSwgbGluZSk7CgogICAgdmFyIGluZm8gPSBtYXBGcm9tTGluZVZpZXcodmlldywgbGluZSwgbGluZU4pOwogICAgcmV0dXJuIHsKICAgICAgbGluZTogbGluZSwgdmlldzogdmlldywgcmVjdDogbnVsbCwKICAgICAgbWFwOiBpbmZvLm1hcCwgY2FjaGU6IGluZm8uY2FjaGUsIGJlZm9yZTogaW5mby5iZWZvcmUsCiAgICAgIGhhc0hlaWdodHM6IGZhbHNlCiAgICB9OwogIH0KCiAgLy8gR2l2ZW4gYSBwcmVwYXJlZCBtZWFzdXJlbWVudCBvYmplY3QsIG1lYXN1cmVzIHRoZSBwb3NpdGlvbiBvZiBhbgogIC8vIGFjdHVhbCBjaGFyYWN0ZXIgKG9yIGZldGNoZXMgaXQgZnJvbSB0aGUgY2FjaGUpLgogIGZ1bmN0aW9uIG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkLCBjaCwgYmlhcywgdmFySGVpZ2h0KSB7CiAgICBpZiAocHJlcGFyZWQuYmVmb3JlKSBjaCA9IC0xOwogICAgdmFyIGtleSA9IGNoICsgKGJpYXMgfHwgIiIpLCBmb3VuZDsKICAgIGlmIChwcmVwYXJlZC5jYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CiAgICAgIGZvdW5kID0gcHJlcGFyZWQuY2FjaGVba2V5XTsKICAgIH0gZWxzZSB7CiAgICAgIGlmICghcHJlcGFyZWQucmVjdCkKICAgICAgICBwcmVwYXJlZC5yZWN0ID0gcHJlcGFyZWQudmlldy50ZXh0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBpZiAoIXByZXBhcmVkLmhhc0hlaWdodHMpIHsKICAgICAgICBlbnN1cmVMaW5lSGVpZ2h0cyhjbSwgcHJlcGFyZWQudmlldywgcHJlcGFyZWQucmVjdCk7CiAgICAgICAgcHJlcGFyZWQuaGFzSGVpZ2h0cyA9IHRydWU7CiAgICAgIH0KICAgICAgZm91bmQgPSBtZWFzdXJlQ2hhcklubmVyKGNtLCBwcmVwYXJlZCwgY2gsIGJpYXMpOwogICAgICBpZiAoIWZvdW5kLmJvZ3VzKSBwcmVwYXJlZC5jYWNoZVtrZXldID0gZm91bmQ7CiAgICB9CiAgICByZXR1cm4ge2xlZnQ6IGZvdW5kLmxlZnQsIHJpZ2h0OiBmb3VuZC5yaWdodCwKICAgICAgICAgICAgdG9wOiB2YXJIZWlnaHQgPyBmb3VuZC5ydG9wIDogZm91bmQudG9wLAogICAgICAgICAgICBib3R0b206IHZhckhlaWdodCA/IGZvdW5kLnJib3R0b20gOiBmb3VuZC5ib3R0b219OwogIH0KCiAgdmFyIG51bGxSZWN0ID0ge2xlZnQ6IDAsIHJpZ2h0OiAwLCB0b3A6IDAsIGJvdHRvbTogMH07CgogIGZ1bmN0aW9uIG5vZGVBbmRPZmZzZXRJbkxpbmVNYXAobWFwLCBjaCwgYmlhcykgewogICAgdmFyIG5vZGUsIHN0YXJ0LCBlbmQsIGNvbGxhcHNlOwogICAgLy8gRmlyc3QsIHNlYXJjaCB0aGUgbGluZSBtYXAgZm9yIHRoZSB0ZXh0IG5vZGUgY29ycmVzcG9uZGluZyB0bywKICAgIC8vIG9yIGNsb3Nlc3QgdG8sIHRoZSB0YXJnZXQgY2hhcmFjdGVyLgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXAubGVuZ3RoOyBpICs9IDMpIHsKICAgICAgdmFyIG1TdGFydCA9IG1hcFtpXSwgbUVuZCA9IG1hcFtpICsgMV07CiAgICAgIGlmIChjaCA8IG1TdGFydCkgewogICAgICAgIHN0YXJ0ID0gMDsgZW5kID0gMTsKICAgICAgICBjb2xsYXBzZSA9ICJsZWZ0IjsKICAgICAgfSBlbHNlIGlmIChjaCA8IG1FbmQpIHsKICAgICAgICBzdGFydCA9IGNoIC0gbVN0YXJ0OwogICAgICAgIGVuZCA9IHN0YXJ0ICsgMTsKICAgICAgfSBlbHNlIGlmIChpID09IG1hcC5sZW5ndGggLSAzIHx8IGNoID09IG1FbmQgJiYgbWFwW2kgKyAzXSA+IGNoKSB7CiAgICAgICAgZW5kID0gbUVuZCAtIG1TdGFydDsKICAgICAgICBzdGFydCA9IGVuZCAtIDE7CiAgICAgICAgaWYgKGNoID49IG1FbmQpIGNvbGxhcHNlID0gInJpZ2h0IjsKICAgICAgfQogICAgICBpZiAoc3RhcnQgIT0gbnVsbCkgewogICAgICAgIG5vZGUgPSBtYXBbaSArIDJdOwogICAgICAgIGlmIChtU3RhcnQgPT0gbUVuZCAmJiBiaWFzID09IChub2RlLmluc2VydExlZnQgPyAibGVmdCIgOiAicmlnaHQiKSkKICAgICAgICAgIGNvbGxhcHNlID0gYmlhczsKICAgICAgICBpZiAoYmlhcyA9PSAibGVmdCIgJiYgc3RhcnQgPT0gMCkKICAgICAgICAgIHdoaWxlIChpICYmIG1hcFtpIC0gMl0gPT0gbWFwW2kgLSAzXSAmJiBtYXBbaSAtIDFdLmluc2VydExlZnQpIHsKICAgICAgICAgICAgbm9kZSA9IG1hcFsoaSAtPSAzKSArIDJdOwogICAgICAgICAgICBjb2xsYXBzZSA9ICJsZWZ0IjsKICAgICAgICAgIH0KICAgICAgICBpZiAoYmlhcyA9PSAicmlnaHQiICYmIHN0YXJ0ID09IG1FbmQgLSBtU3RhcnQpCiAgICAgICAgICB3aGlsZSAoaSA8IG1hcC5sZW5ndGggLSAzICYmIG1hcFtpICsgM10gPT0gbWFwW2kgKyA0XSAmJiAhbWFwW2kgKyA1XS5pbnNlcnRMZWZ0KSB7CiAgICAgICAgICAgIG5vZGUgPSBtYXBbKGkgKz0gMykgKyAyXTsKICAgICAgICAgICAgY29sbGFwc2UgPSAicmlnaHQiOwogICAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4ge25vZGU6IG5vZGUsIHN0YXJ0OiBzdGFydCwgZW5kOiBlbmQsIGNvbGxhcHNlOiBjb2xsYXBzZSwgY292ZXJTdGFydDogbVN0YXJ0LCBjb3ZlckVuZDogbUVuZH07CiAgfQoKICBmdW5jdGlvbiBtZWFzdXJlQ2hhcklubmVyKGNtLCBwcmVwYXJlZCwgY2gsIGJpYXMpIHsKICAgIHZhciBwbGFjZSA9IG5vZGVBbmRPZmZzZXRJbkxpbmVNYXAocHJlcGFyZWQubWFwLCBjaCwgYmlhcyk7CiAgICB2YXIgbm9kZSA9IHBsYWNlLm5vZGUsIHN0YXJ0ID0gcGxhY2Uuc3RhcnQsIGVuZCA9IHBsYWNlLmVuZCwgY29sbGFwc2UgPSBwbGFjZS5jb2xsYXBzZTsKCiAgICB2YXIgcmVjdDsKICAgIGlmIChub2RlLm5vZGVUeXBlID09IDMpIHsgLy8gSWYgaXQgaXMgYSB0ZXh0IG5vZGUsIHVzZSBhIHJhbmdlIHRvIHJldHJpZXZlIHRoZSBjb29yZGluYXRlcy4KICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHsgLy8gUmV0cnkgYSBtYXhpbXVtIG9mIDQgdGltZXMgd2hlbiBub25zZW5zZSByZWN0YW5nbGVzIGFyZSByZXR1cm5lZAogICAgICAgIHdoaWxlIChzdGFydCAmJiBpc0V4dGVuZGluZ0NoYXIocHJlcGFyZWQubGluZS50ZXh0LmNoYXJBdChwbGFjZS5jb3ZlclN0YXJ0ICsgc3RhcnQpKSkgLS1zdGFydDsKICAgICAgICB3aGlsZSAocGxhY2UuY292ZXJTdGFydCArIGVuZCA8IHBsYWNlLmNvdmVyRW5kICYmIGlzRXh0ZW5kaW5nQ2hhcihwcmVwYXJlZC5saW5lLnRleHQuY2hhckF0KHBsYWNlLmNvdmVyU3RhcnQgKyBlbmQpKSkgKytlbmQ7CiAgICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5ICYmIHN0YXJ0ID09IDAgJiYgZW5kID09IHBsYWNlLmNvdmVyRW5kIC0gcGxhY2UuY292ZXJTdGFydCkgewogICAgICAgICAgcmVjdCA9IG5vZGUucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICB9IGVsc2UgaWYgKGllICYmIGNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7CiAgICAgICAgICB2YXIgcmVjdHMgPSByYW5nZShub2RlLCBzdGFydCwgZW5kKS5nZXRDbGllbnRSZWN0cygpOwogICAgICAgICAgaWYgKHJlY3RzLmxlbmd0aCkKICAgICAgICAgICAgcmVjdCA9IHJlY3RzW2JpYXMgPT0gInJpZ2h0IiA/IHJlY3RzLmxlbmd0aCAtIDEgOiAwXTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmVjdCA9IG51bGxSZWN0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWN0ID0gcmFuZ2Uobm9kZSwgc3RhcnQsIGVuZCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgfHwgbnVsbFJlY3Q7CiAgICAgICAgfQogICAgICAgIGlmIChyZWN0LmxlZnQgfHwgcmVjdC5yaWdodCB8fCBzdGFydCA9PSAwKSBicmVhazsKICAgICAgICBlbmQgPSBzdGFydDsKICAgICAgICBzdGFydCA9IHN0YXJ0IC0gMTsKICAgICAgICBjb2xsYXBzZSA9ICJyaWdodCI7CiAgICAgIH0KICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSkgcmVjdCA9IG1heWJlVXBkYXRlUmVjdEZvclpvb21pbmcoY20uZGlzcGxheS5tZWFzdXJlLCByZWN0KTsKICAgIH0gZWxzZSB7IC8vIElmIGl0IGlzIGEgd2lkZ2V0LCBzaW1wbHkgZ2V0IHRoZSBib3ggZm9yIHRoZSB3aG9sZSB3aWRnZXQuCiAgICAgIGlmIChzdGFydCA+IDApIGNvbGxhcHNlID0gYmlhcyA9ICJyaWdodCI7CiAgICAgIHZhciByZWN0czsKICAgICAgaWYgKGNtLm9wdGlvbnMubGluZVdyYXBwaW5nICYmIChyZWN0cyA9IG5vZGUuZ2V0Q2xpZW50UmVjdHMoKSkubGVuZ3RoID4gMSkKICAgICAgICByZWN0ID0gcmVjdHNbYmlhcyA9PSAicmlnaHQiID8gcmVjdHMubGVuZ3RoIC0gMSA6IDBdOwogICAgICBlbHNlCiAgICAgICAgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICB9CiAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDkgJiYgIXN0YXJ0ICYmICghcmVjdCB8fCAhcmVjdC5sZWZ0ICYmICFyZWN0LnJpZ2h0KSkgewogICAgICB2YXIgclNwYW4gPSBub2RlLnBhcmVudE5vZGUuZ2V0Q2xpZW50UmVjdHMoKVswXTsKICAgICAgaWYgKHJTcGFuKQogICAgICAgIHJlY3QgPSB7bGVmdDogclNwYW4ubGVmdCwgcmlnaHQ6IHJTcGFuLmxlZnQgKyBjaGFyV2lkdGgoY20uZGlzcGxheSksIHRvcDogclNwYW4udG9wLCBib3R0b206IHJTcGFuLmJvdHRvbX07CiAgICAgIGVsc2UKICAgICAgICByZWN0ID0gbnVsbFJlY3Q7CiAgICB9CgogICAgdmFyIHJ0b3AgPSByZWN0LnRvcCAtIHByZXBhcmVkLnJlY3QudG9wLCByYm90ID0gcmVjdC5ib3R0b20gLSBwcmVwYXJlZC5yZWN0LnRvcDsKICAgIHZhciBtaWQgPSAocnRvcCArIHJib3QpIC8gMjsKICAgIHZhciBoZWlnaHRzID0gcHJlcGFyZWQudmlldy5tZWFzdXJlLmhlaWdodHM7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlaWdodHMubGVuZ3RoIC0gMTsgaSsrKQogICAgICBpZiAobWlkIDwgaGVpZ2h0c1tpXSkgYnJlYWs7CiAgICB2YXIgdG9wID0gaSA/IGhlaWdodHNbaSAtIDFdIDogMCwgYm90ID0gaGVpZ2h0c1tpXTsKICAgIHZhciByZXN1bHQgPSB7bGVmdDogKGNvbGxhcHNlID09ICJyaWdodCIgPyByZWN0LnJpZ2h0IDogcmVjdC5sZWZ0KSAtIHByZXBhcmVkLnJlY3QubGVmdCwKICAgICAgICAgICAgICAgICAgcmlnaHQ6IChjb2xsYXBzZSA9PSAibGVmdCIgPyByZWN0LmxlZnQgOiByZWN0LnJpZ2h0KSAtIHByZXBhcmVkLnJlY3QubGVmdCwKICAgICAgICAgICAgICAgICAgdG9wOiB0b3AsIGJvdHRvbTogYm90fTsKICAgIGlmICghcmVjdC5sZWZ0ICYmICFyZWN0LnJpZ2h0KSByZXN1bHQuYm9ndXMgPSB0cnVlOwogICAgaWYgKCFjbS5vcHRpb25zLnNpbmdsZUN1cnNvckhlaWdodFBlckxpbmUpIHsgcmVzdWx0LnJ0b3AgPSBydG9wOyByZXN1bHQucmJvdHRvbSA9IHJib3Q7IH0KCiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gV29yayBhcm91bmQgcHJvYmxlbSB3aXRoIGJvdW5kaW5nIGNsaWVudCByZWN0cyBvbiByYW5nZXMgYmVpbmcKICAvLyByZXR1cm5lZCBpbmNvcnJlY3RseSB3aGVuIHpvb21lZCBvbiBJRTEwIGFuZCBiZWxvdy4KICBmdW5jdGlvbiBtYXliZVVwZGF0ZVJlY3RGb3Jab29taW5nKG1lYXN1cmUsIHJlY3QpIHsKICAgIGlmICghd2luZG93LnNjcmVlbiB8fCBzY3JlZW4ubG9naWNhbFhEUEkgPT0gbnVsbCB8fAogICAgICAgIHNjcmVlbi5sb2dpY2FsWERQSSA9PSBzY3JlZW4uZGV2aWNlWERQSSB8fCAhaGFzQmFkWm9vbWVkUmVjdHMobWVhc3VyZSkpCiAgICAgIHJldHVybiByZWN0OwogICAgdmFyIHNjYWxlWCA9IHNjcmVlbi5sb2dpY2FsWERQSSAvIHNjcmVlbi5kZXZpY2VYRFBJOwogICAgdmFyIHNjYWxlWSA9IHNjcmVlbi5sb2dpY2FsWURQSSAvIHNjcmVlbi5kZXZpY2VZRFBJOwogICAgcmV0dXJuIHtsZWZ0OiByZWN0LmxlZnQgKiBzY2FsZVgsIHJpZ2h0OiByZWN0LnJpZ2h0ICogc2NhbGVYLAogICAgICAgICAgICB0b3A6IHJlY3QudG9wICogc2NhbGVZLCBib3R0b206IHJlY3QuYm90dG9tICogc2NhbGVZfTsKICB9CgogIGZ1bmN0aW9uIGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGVGb3IobGluZVZpZXcpIHsKICAgIGlmIChsaW5lVmlldy5tZWFzdXJlKSB7CiAgICAgIGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGUgPSB7fTsKICAgICAgbGluZVZpZXcubWVhc3VyZS5oZWlnaHRzID0gbnVsbDsKICAgICAgaWYgKGxpbmVWaWV3LnJlc3QpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZVZpZXcucmVzdC5sZW5ndGg7IGkrKykKICAgICAgICBsaW5lVmlldy5tZWFzdXJlLmNhY2hlc1tpXSA9IHt9OwogICAgfQogIH0KCiAgZnVuY3Rpb24gY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZShjbSkgewogICAgY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmUgPSBudWxsOwogICAgcmVtb3ZlQ2hpbGRyZW4oY20uZGlzcGxheS5saW5lTWVhc3VyZSk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLmRpc3BsYXkudmlldy5sZW5ndGg7IGkrKykKICAgICAgY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZUZvcihjbS5kaXNwbGF5LnZpZXdbaV0pOwogIH0KCiAgZnVuY3Rpb24gY2xlYXJDYWNoZXMoY20pIHsKICAgIGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGUoY20pOwogICAgY20uZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggPSBjbS5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQgPSBjbS5kaXNwbGF5LmNhY2hlZFBhZGRpbmdIID0gbnVsbDsKICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSB0cnVlOwogICAgY20uZGlzcGxheS5saW5lTnVtQ2hhcnMgPSBudWxsOwogIH0KCiAgZnVuY3Rpb24gcGFnZVNjcm9sbFgoKSB7IHJldHVybiB3aW5kb3cucGFnZVhPZmZzZXQgfHwgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0OyB9CiAgZnVuY3Rpb24gcGFnZVNjcm9sbFkoKSB7IHJldHVybiB3aW5kb3cucGFnZVlPZmZzZXQgfHwgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KS5zY3JvbGxUb3A7IH0KCiAgLy8gQ29udmVydHMgYSB7dG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0fSBib3ggZnJvbSBsaW5lLWxvY2FsCiAgLy8gY29vcmRpbmF0ZXMgaW50byBhbm90aGVyIGNvb3JkaW5hdGUgc3lzdGVtLiBDb250ZXh0IG1heSBiZSBvbmUgb2YKICAvLyAibGluZSIsICJkaXYiIChkaXNwbGF5LmxpbmVEaXYpLCAibG9jYWwiL251bGwgKGVkaXRvciksICJ3aW5kb3ciLAogIC8vIG9yICJwYWdlIi4KICBmdW5jdGlvbiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIHJlY3QsIGNvbnRleHQpIHsKICAgIGlmIChsaW5lT2JqLndpZGdldHMpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZU9iai53aWRnZXRzLmxlbmd0aDsgKytpKSBpZiAobGluZU9iai53aWRnZXRzW2ldLmFib3ZlKSB7CiAgICAgIHZhciBzaXplID0gd2lkZ2V0SGVpZ2h0KGxpbmVPYmoud2lkZ2V0c1tpXSk7CiAgICAgIHJlY3QudG9wICs9IHNpemU7IHJlY3QuYm90dG9tICs9IHNpemU7CiAgICB9CiAgICBpZiAoY29udGV4dCA9PSAibGluZSIpIHJldHVybiByZWN0OwogICAgaWYgKCFjb250ZXh0KSBjb250ZXh0ID0gImxvY2FsIjsKICAgIHZhciB5T2ZmID0gaGVpZ2h0QXRMaW5lKGxpbmVPYmopOwogICAgaWYgKGNvbnRleHQgPT0gImxvY2FsIikgeU9mZiArPSBwYWRkaW5nVG9wKGNtLmRpc3BsYXkpOwogICAgZWxzZSB5T2ZmIC09IGNtLmRpc3BsYXkudmlld09mZnNldDsKICAgIGlmIChjb250ZXh0ID09ICJwYWdlIiB8fCBjb250ZXh0ID09ICJ3aW5kb3ciKSB7CiAgICAgIHZhciBsT2ZmID0gY20uZGlzcGxheS5saW5lU3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIHlPZmYgKz0gbE9mZi50b3AgKyAoY29udGV4dCA9PSAid2luZG93IiA/IDAgOiBwYWdlU2Nyb2xsWSgpKTsKICAgICAgdmFyIHhPZmYgPSBsT2ZmLmxlZnQgKyAoY29udGV4dCA9PSAid2luZG93IiA/IDAgOiBwYWdlU2Nyb2xsWCgpKTsKICAgICAgcmVjdC5sZWZ0ICs9IHhPZmY7IHJlY3QucmlnaHQgKz0geE9mZjsKICAgIH0KICAgIHJlY3QudG9wICs9IHlPZmY7IHJlY3QuYm90dG9tICs9IHlPZmY7CiAgICByZXR1cm4gcmVjdDsKICB9CgogIC8vIENvdmVydHMgYSBib3ggZnJvbSAiZGl2IiBjb29yZHMgdG8gYW5vdGhlciBjb29yZGluYXRlIHN5c3RlbS4KICAvLyBDb250ZXh0IG1heSBiZSAid2luZG93IiwgInBhZ2UiLCAiZGl2Iiwgb3IgImxvY2FsIi9udWxsLgogIGZ1bmN0aW9uIGZyb21Db29yZFN5c3RlbShjbSwgY29vcmRzLCBjb250ZXh0KSB7CiAgICBpZiAoY29udGV4dCA9PSAiZGl2IikgcmV0dXJuIGNvb3JkczsKICAgIHZhciBsZWZ0ID0gY29vcmRzLmxlZnQsIHRvcCA9IGNvb3Jkcy50b3A7CiAgICAvLyBGaXJzdCBtb3ZlIGludG8gInBhZ2UiIGNvb3JkaW5hdGUgc3lzdGVtCiAgICBpZiAoY29udGV4dCA9PSAicGFnZSIpIHsKICAgICAgbGVmdCAtPSBwYWdlU2Nyb2xsWCgpOwogICAgICB0b3AgLT0gcGFnZVNjcm9sbFkoKTsKICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAibG9jYWwiIHx8ICFjb250ZXh0KSB7CiAgICAgIHZhciBsb2NhbEJveCA9IGNtLmRpc3BsYXkuc2l6ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGxlZnQgKz0gbG9jYWxCb3gubGVmdDsKICAgICAgdG9wICs9IGxvY2FsQm94LnRvcDsKICAgIH0KCiAgICB2YXIgbGluZVNwYWNlQm94ID0gY20uZGlzcGxheS5saW5lU3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICByZXR1cm4ge2xlZnQ6IGxlZnQgLSBsaW5lU3BhY2VCb3gubGVmdCwgdG9wOiB0b3AgLSBsaW5lU3BhY2VCb3gudG9wfTsKICB9CgogIGZ1bmN0aW9uIGNoYXJDb29yZHMoY20sIHBvcywgY29udGV4dCwgbGluZU9iaiwgYmlhcykgewogICAgaWYgKCFsaW5lT2JqKSBsaW5lT2JqID0gZ2V0TGluZShjbS5kb2MsIHBvcy5saW5lKTsKICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIG1lYXN1cmVDaGFyKGNtLCBsaW5lT2JqLCBwb3MuY2gsIGJpYXMpLCBjb250ZXh0KTsKICB9CgogIC8vIFJldHVybnMgYSBib3ggZm9yIGEgZ2l2ZW4gY3Vyc29yIHBvc2l0aW9uLCB3aGljaCBtYXkgaGF2ZSBhbgogIC8vICdvdGhlcicgcHJvcGVydHkgY29udGFpbmluZyB0aGUgcG9zaXRpb24gb2YgdGhlIHNlY29uZGFyeSBjdXJzb3IKICAvLyBvbiBhIGJpZGkgYm91bmRhcnkuCiAgZnVuY3Rpb24gY3Vyc29yQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVPYmosIHByZXBhcmVkTWVhc3VyZSwgdmFySGVpZ2h0KSB7CiAgICBsaW5lT2JqID0gbGluZU9iaiB8fCBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpOwogICAgaWYgKCFwcmVwYXJlZE1lYXN1cmUpIHByZXBhcmVkTWVhc3VyZSA9IHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZU9iaik7CiAgICBmdW5jdGlvbiBnZXQoY2gsIHJpZ2h0KSB7CiAgICAgIHZhciBtID0gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWRNZWFzdXJlLCBjaCwgcmlnaHQgPyAicmlnaHQiIDogImxlZnQiLCB2YXJIZWlnaHQpOwogICAgICBpZiAocmlnaHQpIG0ubGVmdCA9IG0ucmlnaHQ7IGVsc2UgbS5yaWdodCA9IG0ubGVmdDsKICAgICAgcmV0dXJuIGludG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgbSwgY29udGV4dCk7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRCaWRpKGNoLCBwYXJ0UG9zKSB7CiAgICAgIHZhciBwYXJ0ID0gb3JkZXJbcGFydFBvc10sIHJpZ2h0ID0gcGFydC5sZXZlbCAlIDI7CiAgICAgIGlmIChjaCA9PSBiaWRpTGVmdChwYXJ0KSAmJiBwYXJ0UG9zICYmIHBhcnQubGV2ZWwgPCBvcmRlcltwYXJ0UG9zIC0gMV0ubGV2ZWwpIHsKICAgICAgICBwYXJ0ID0gb3JkZXJbLS1wYXJ0UG9zXTsKICAgICAgICBjaCA9IGJpZGlSaWdodChwYXJ0KSAtIChwYXJ0LmxldmVsICUgMiA/IDAgOiAxKTsKICAgICAgICByaWdodCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAoY2ggPT0gYmlkaVJpZ2h0KHBhcnQpICYmIHBhcnRQb3MgPCBvcmRlci5sZW5ndGggLSAxICYmIHBhcnQubGV2ZWwgPCBvcmRlcltwYXJ0UG9zICsgMV0ubGV2ZWwpIHsKICAgICAgICBwYXJ0ID0gb3JkZXJbKytwYXJ0UG9zXTsKICAgICAgICBjaCA9IGJpZGlMZWZ0KHBhcnQpIC0gcGFydC5sZXZlbCAlIDI7CiAgICAgICAgcmlnaHQgPSBmYWxzZTsKICAgICAgfQogICAgICBpZiAocmlnaHQgJiYgY2ggPT0gcGFydC50byAmJiBjaCA+IHBhcnQuZnJvbSkgcmV0dXJuIGdldChjaCAtIDEpOwogICAgICByZXR1cm4gZ2V0KGNoLCByaWdodCk7CiAgICB9CiAgICB2YXIgb3JkZXIgPSBnZXRPcmRlcihsaW5lT2JqKSwgY2ggPSBwb3MuY2g7CiAgICBpZiAoIW9yZGVyKSByZXR1cm4gZ2V0KGNoKTsKICAgIHZhciBwYXJ0UG9zID0gZ2V0QmlkaVBhcnRBdChvcmRlciwgY2gpOwogICAgdmFyIHZhbCA9IGdldEJpZGkoY2gsIHBhcnRQb3MpOwogICAgaWYgKGJpZGlPdGhlciAhPSBudWxsKSB2YWwub3RoZXIgPSBnZXRCaWRpKGNoLCBiaWRpT3RoZXIpOwogICAgcmV0dXJuIHZhbDsKICB9CgogIC8vIFVzZWQgdG8gY2hlYXBseSBlc3RpbWF0ZSB0aGUgY29vcmRpbmF0ZXMgZm9yIGEgcG9zaXRpb24uIFVzZWQgZm9yCiAgLy8gaW50ZXJtZWRpYXRlIHNjcm9sbCB1cGRhdGVzLgogIGZ1bmN0aW9uIGVzdGltYXRlQ29vcmRzKGNtLCBwb3MpIHsKICAgIHZhciBsZWZ0ID0gMCwgcG9zID0gY2xpcFBvcyhjbS5kb2MsIHBvcyk7CiAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSBsZWZ0ID0gY2hhcldpZHRoKGNtLmRpc3BsYXkpICogcG9zLmNoOwogICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpOwogICAgdmFyIHRvcCA9IGhlaWdodEF0TGluZShsaW5lT2JqKSArIHBhZGRpbmdUb3AoY20uZGlzcGxheSk7CiAgICByZXR1cm4ge2xlZnQ6IGxlZnQsIHJpZ2h0OiBsZWZ0LCB0b3A6IHRvcCwgYm90dG9tOiB0b3AgKyBsaW5lT2JqLmhlaWdodH07CiAgfQoKICAvLyBQb3NpdGlvbnMgcmV0dXJuZWQgYnkgY29vcmRzQ2hhciBjb250YWluIHNvbWUgZXh0cmEgaW5mb3JtYXRpb24uCiAgLy8geFJlbCBpcyB0aGUgcmVsYXRpdmUgeCBwb3NpdGlvbiBvZiB0aGUgaW5wdXQgY29vcmRpbmF0ZXMgY29tcGFyZWQKICAvLyB0byB0aGUgZm91bmQgcG9zaXRpb24gKHNvIHhSZWwgPiAwIG1lYW5zIHRoZSBjb29yZGluYXRlcyBhcmUgdG8KICAvLyB0aGUgcmlnaHQgb2YgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiwgZm9yIGV4YW1wbGUpLiBXaGVuIG91dHNpZGUKICAvLyBpcyB0cnVlLCB0aGF0IG1lYW5zIHRoZSBjb29yZGluYXRlcyBsaWUgb3V0c2lkZSB0aGUgbGluZSdzCiAgLy8gdmVydGljYWwgcmFuZ2UuCiAgZnVuY3Rpb24gUG9zV2l0aEluZm8obGluZSwgY2gsIG91dHNpZGUsIHhSZWwpIHsKICAgIHZhciBwb3MgPSBQb3MobGluZSwgY2gpOwogICAgcG9zLnhSZWwgPSB4UmVsOwogICAgaWYgKG91dHNpZGUpIHBvcy5vdXRzaWRlID0gdHJ1ZTsKICAgIHJldHVybiBwb3M7CiAgfQoKICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gY2xvc2VzdCB0byB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuCiAgLy8gSW5wdXQgbXVzdCBiZSBsaW5lU3BhY2UtbG9jYWwgKCJkaXYiIGNvb3JkaW5hdGUgc3lzdGVtKS4KICBmdW5jdGlvbiBjb29yZHNDaGFyKGNtLCB4LCB5KSB7CiAgICB2YXIgZG9jID0gY20uZG9jOwogICAgeSArPSBjbS5kaXNwbGF5LnZpZXdPZmZzZXQ7CiAgICBpZiAoeSA8IDApIHJldHVybiBQb3NXaXRoSW5mbyhkb2MuZmlyc3QsIDAsIHRydWUsIC0xKTsKICAgIHZhciBsaW5lTiA9IGxpbmVBdEhlaWdodChkb2MsIHkpLCBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxOwogICAgaWYgKGxpbmVOID4gbGFzdCkKICAgICAgcmV0dXJuIFBvc1dpdGhJbmZvKGRvYy5maXJzdCArIGRvYy5zaXplIC0gMSwgZ2V0TGluZShkb2MsIGxhc3QpLnRleHQubGVuZ3RoLCB0cnVlLCAxKTsKICAgIGlmICh4IDwgMCkgeCA9IDA7CgogICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGluZU4pOwogICAgZm9yICg7OykgewogICAgICB2YXIgZm91bmQgPSBjb29yZHNDaGFySW5uZXIoY20sIGxpbmVPYmosIGxpbmVOLCB4LCB5KTsKICAgICAgdmFyIG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lT2JqKTsKICAgICAgdmFyIG1lcmdlZFBvcyA9IG1lcmdlZCAmJiBtZXJnZWQuZmluZCgwLCB0cnVlKTsKICAgICAgaWYgKG1lcmdlZCAmJiAoZm91bmQuY2ggPiBtZXJnZWRQb3MuZnJvbS5jaCB8fCBmb3VuZC5jaCA9PSBtZXJnZWRQb3MuZnJvbS5jaCAmJiBmb3VuZC54UmVsID4gMCkpCiAgICAgICAgbGluZU4gPSBsaW5lTm8obGluZU9iaiA9IG1lcmdlZFBvcy50by5saW5lKTsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBmb3VuZDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGNvb3Jkc0NoYXJJbm5lcihjbSwgbGluZU9iaiwgbGluZU5vLCB4LCB5KSB7CiAgICB2YXIgaW5uZXJPZmYgPSB5IC0gaGVpZ2h0QXRMaW5lKGxpbmVPYmopOwogICAgdmFyIHdyb25nTGluZSA9IGZhbHNlLCBhZGp1c3QgPSAyICogY20uZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoOwogICAgdmFyIHByZXBhcmVkTWVhc3VyZSA9IHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZU9iaik7CgogICAgZnVuY3Rpb24gZ2V0WChjaCkgewogICAgICB2YXIgc3AgPSBjdXJzb3JDb29yZHMoY20sIFBvcyhsaW5lTm8sIGNoKSwgImxpbmUiLCBsaW5lT2JqLCBwcmVwYXJlZE1lYXN1cmUpOwogICAgICB3cm9uZ0xpbmUgPSB0cnVlOwogICAgICBpZiAoaW5uZXJPZmYgPiBzcC5ib3R0b20pIHJldHVybiBzcC5sZWZ0IC0gYWRqdXN0OwogICAgICBlbHNlIGlmIChpbm5lck9mZiA8IHNwLnRvcCkgcmV0dXJuIHNwLmxlZnQgKyBhZGp1c3Q7CiAgICAgIGVsc2Ugd3JvbmdMaW5lID0gZmFsc2U7CiAgICAgIHJldHVybiBzcC5sZWZ0OwogICAgfQoKICAgIHZhciBiaWRpID0gZ2V0T3JkZXIobGluZU9iaiksIGRpc3QgPSBsaW5lT2JqLnRleHQubGVuZ3RoOwogICAgdmFyIGZyb20gPSBsaW5lTGVmdChsaW5lT2JqKSwgdG8gPSBsaW5lUmlnaHQobGluZU9iaik7CiAgICB2YXIgZnJvbVggPSBnZXRYKGZyb20pLCBmcm9tT3V0c2lkZSA9IHdyb25nTGluZSwgdG9YID0gZ2V0WCh0byksIHRvT3V0c2lkZSA9IHdyb25nTGluZTsKCiAgICBpZiAoeCA+IHRvWCkgcmV0dXJuIFBvc1dpdGhJbmZvKGxpbmVObywgdG8sIHRvT3V0c2lkZSwgMSk7CiAgICAvLyBEbyBhIGJpbmFyeSBzZWFyY2ggYmV0d2VlbiB0aGVzZSBib3VuZHMuCiAgICBmb3IgKDs7KSB7CiAgICAgIGlmIChiaWRpID8gdG8gPT0gZnJvbSB8fCB0byA9PSBtb3ZlVmlzdWFsbHkobGluZU9iaiwgZnJvbSwgMSkgOiB0byAtIGZyb20gPD0gMSkgewogICAgICAgIHZhciBjaCA9IHggPCBmcm9tWCB8fCB4IC0gZnJvbVggPD0gdG9YIC0geCA/IGZyb20gOiB0bzsKICAgICAgICB2YXIgeERpZmYgPSB4IC0gKGNoID09IGZyb20gPyBmcm9tWCA6IHRvWCk7CiAgICAgICAgd2hpbGUgKGlzRXh0ZW5kaW5nQ2hhcihsaW5lT2JqLnRleHQuY2hhckF0KGNoKSkpICsrY2g7CiAgICAgICAgdmFyIHBvcyA9IFBvc1dpdGhJbmZvKGxpbmVObywgY2gsIGNoID09IGZyb20gPyBmcm9tT3V0c2lkZSA6IHRvT3V0c2lkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeERpZmYgPCAtMSA/IC0xIDogeERpZmYgPiAxID8gMSA6IDApOwogICAgICAgIHJldHVybiBwb3M7CiAgICAgIH0KICAgICAgdmFyIHN0ZXAgPSBNYXRoLmNlaWwoZGlzdCAvIDIpLCBtaWRkbGUgPSBmcm9tICsgc3RlcDsKICAgICAgaWYgKGJpZGkpIHsKICAgICAgICBtaWRkbGUgPSBmcm9tOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RlcDsgKytpKSBtaWRkbGUgPSBtb3ZlVmlzdWFsbHkobGluZU9iaiwgbWlkZGxlLCAxKTsKICAgICAgfQogICAgICB2YXIgbWlkZGxlWCA9IGdldFgobWlkZGxlKTsKICAgICAgaWYgKG1pZGRsZVggPiB4KSB7dG8gPSBtaWRkbGU7IHRvWCA9IG1pZGRsZVg7IGlmICh0b091dHNpZGUgPSB3cm9uZ0xpbmUpIHRvWCArPSAxMDAwOyBkaXN0ID0gc3RlcDt9CiAgICAgIGVsc2Uge2Zyb20gPSBtaWRkbGU7IGZyb21YID0gbWlkZGxlWDsgZnJvbU91dHNpZGUgPSB3cm9uZ0xpbmU7IGRpc3QgLT0gc3RlcDt9CiAgICB9CiAgfQoKICB2YXIgbWVhc3VyZVRleHQ7CiAgLy8gQ29tcHV0ZSB0aGUgZGVmYXVsdCB0ZXh0IGhlaWdodC4KICBmdW5jdGlvbiB0ZXh0SGVpZ2h0KGRpc3BsYXkpIHsKICAgIGlmIChkaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQgIT0gbnVsbCkgcmV0dXJuIGRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodDsKICAgIGlmIChtZWFzdXJlVGV4dCA9PSBudWxsKSB7CiAgICAgIG1lYXN1cmVUZXh0ID0gZWx0KCJwcmUiKTsKICAgICAgLy8gTWVhc3VyZSBhIGJ1bmNoIG9mIGxpbmVzLCBmb3IgYnJvd3NlcnMgdGhhdCBjb21wdXRlCiAgICAgIC8vIGZyYWN0aW9uYWwgaGVpZ2h0cy4KICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OTsgKytpKSB7CiAgICAgICAgbWVhc3VyZVRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSk7CiAgICAgICAgbWVhc3VyZVRleHQuYXBwZW5kQ2hpbGQoZWx0KCJiciIpKTsKICAgICAgfQogICAgICBtZWFzdXJlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIpKTsKICAgIH0KICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgbWVhc3VyZVRleHQpOwogICAgdmFyIGhlaWdodCA9IG1lYXN1cmVUZXh0Lm9mZnNldEhlaWdodCAvIDUwOwogICAgaWYgKGhlaWdodCA+IDMpIGRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCA9IGhlaWdodDsKICAgIHJlbW92ZUNoaWxkcmVuKGRpc3BsYXkubWVhc3VyZSk7CiAgICByZXR1cm4gaGVpZ2h0IHx8IDE7CiAgfQoKICAvLyBDb21wdXRlIHRoZSBkZWZhdWx0IGNoYXJhY3RlciB3aWR0aC4KICBmdW5jdGlvbiBjaGFyV2lkdGgoZGlzcGxheSkgewogICAgaWYgKGRpc3BsYXkuY2FjaGVkQ2hhcldpZHRoICE9IG51bGwpIHJldHVybiBkaXNwbGF5LmNhY2hlZENoYXJXaWR0aDsKICAgIHZhciBhbmNob3IgPSBlbHQoInNwYW4iLCAieHh4eHh4eHh4eCIpOwogICAgdmFyIHByZSA9IGVsdCgicHJlIiwgW2FuY2hvcl0pOwogICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5tZWFzdXJlLCBwcmUpOwogICAgdmFyIHJlY3QgPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIHdpZHRoID0gKHJlY3QucmlnaHQgLSByZWN0LmxlZnQpIC8gMTA7CiAgICBpZiAod2lkdGggPiAyKSBkaXNwbGF5LmNhY2hlZENoYXJXaWR0aCA9IHdpZHRoOwogICAgcmV0dXJuIHdpZHRoIHx8IDEwOwogIH0KCiAgLy8gT1BFUkFUSU9OUwoKICAvLyBPcGVyYXRpb25zIGFyZSB1c2VkIHRvIHdyYXAgYSBzZXJpZXMgb2YgY2hhbmdlcyB0byB0aGUgZWRpdG9yCiAgLy8gc3RhdGUgaW4gc3VjaCBhIHdheSB0aGF0IGVhY2ggY2hhbmdlIHdvbid0IGhhdmUgdG8gdXBkYXRlIHRoZQogIC8vIGN1cnNvciBhbmQgZGlzcGxheSAod2hpY2ggd291bGQgYmUgYXdrd2FyZCwgc2xvdywgYW5kCiAgLy8gZXJyb3ItcHJvbmUpLiBJbnN0ZWFkLCBkaXNwbGF5IHVwZGF0ZXMgYXJlIGJhdGNoZWQgYW5kIHRoZW4gYWxsCiAgLy8gY29tYmluZWQgYW5kIGV4ZWN1dGVkIGF0IG9uY2UuCgogIHZhciBvcGVyYXRpb25Hcm91cCA9IG51bGw7CgogIHZhciBuZXh0T3BJZCA9IDA7CiAgLy8gU3RhcnQgYSBuZXcgb3BlcmF0aW9uLgogIGZ1bmN0aW9uIHN0YXJ0T3BlcmF0aW9uKGNtKSB7CiAgICBjbS5jdXJPcCA9IHsKICAgICAgY206IGNtLAogICAgICB2aWV3Q2hhbmdlZDogZmFsc2UsICAgICAgLy8gRmxhZyB0aGF0IGluZGljYXRlcyB0aGF0IGxpbmVzIG1pZ2h0IG5lZWQgdG8gYmUgcmVkcmF3bgogICAgICBzdGFydEhlaWdodDogY20uZG9jLmhlaWdodCwgLy8gVXNlZCB0byBkZXRlY3QgbmVlZCB0byB1cGRhdGUgc2Nyb2xsYmFyCiAgICAgIGZvcmNlVXBkYXRlOiBmYWxzZSwgICAgICAvLyBVc2VkIHRvIGZvcmNlIGEgcmVkcmF3CiAgICAgIHVwZGF0ZUlucHV0OiBudWxsLCAgICAgICAvLyBXaGV0aGVyIHRvIHJlc2V0IHRoZSBpbnB1dCB0ZXh0YXJlYQogICAgICB0eXBpbmc6IGZhbHNlLCAgICAgICAgICAgLy8gV2hldGhlciB0aGlzIHJlc2V0IHNob3VsZCBiZSBjYXJlZnVsIHRvIGxlYXZlIGV4aXN0aW5nIHRleHQgKGZvciBjb21wb3NpdGluZykKICAgICAgY2hhbmdlT2JqczogbnVsbCwgICAgICAgIC8vIEFjY3VtdWxhdGVkIGNoYW5nZXMsIGZvciBmaXJpbmcgY2hhbmdlIGV2ZW50cwogICAgICBjdXJzb3JBY3Rpdml0eUhhbmRsZXJzOiBudWxsLCAvLyBTZXQgb2YgaGFuZGxlcnMgdG8gZmlyZSBjdXJzb3JBY3Rpdml0eSBvbgogICAgICBjdXJzb3JBY3Rpdml0eUNhbGxlZDogMCwgLy8gVHJhY2tzIHdoaWNoIGN1cnNvckFjdGl2aXR5IGhhbmRsZXJzIGhhdmUgYmVlbiBjYWxsZWQgYWxyZWFkeQogICAgICBzZWxlY3Rpb25DaGFuZ2VkOiBmYWxzZSwgLy8gV2hldGhlciB0aGUgc2VsZWN0aW9uIG5lZWRzIHRvIGJlIHJlZHJhd24KICAgICAgdXBkYXRlTWF4TGluZTogZmFsc2UsICAgIC8vIFNldCB3aGVuIHRoZSB3aWRlc3QgbGluZSBuZWVkcyB0byBiZSBkZXRlcm1pbmVkIGFuZXcKICAgICAgc2Nyb2xsTGVmdDogbnVsbCwgc2Nyb2xsVG9wOiBudWxsLCAvLyBJbnRlcm1lZGlhdGUgc2Nyb2xsIHBvc2l0aW9uLCBub3QgcHVzaGVkIHRvIERPTSB5ZXQKICAgICAgc2Nyb2xsVG9Qb3M6IG51bGwsICAgICAgIC8vIFVzZWQgdG8gc2Nyb2xsIHRvIGEgc3BlY2lmaWMgcG9zaXRpb24KICAgICAgZm9jdXM6IGZhbHNlLAogICAgICBpZDogKytuZXh0T3BJZCAgICAgICAgICAgLy8gVW5pcXVlIElECiAgICB9OwogICAgaWYgKG9wZXJhdGlvbkdyb3VwKSB7CiAgICAgIG9wZXJhdGlvbkdyb3VwLm9wcy5wdXNoKGNtLmN1ck9wKTsKICAgIH0gZWxzZSB7CiAgICAgIGNtLmN1ck9wLm93bnNHcm91cCA9IG9wZXJhdGlvbkdyb3VwID0gewogICAgICAgIG9wczogW2NtLmN1ck9wXSwKICAgICAgICBkZWxheWVkQ2FsbGJhY2tzOiBbXQogICAgICB9OwogICAgfQogIH0KCiAgZnVuY3Rpb24gZmlyZUNhbGxiYWNrc0Zvck9wcyhncm91cCkgewogICAgLy8gQ2FsbHMgZGVsYXllZCBjYWxsYmFja3MgYW5kIGN1cnNvckFjdGl2aXR5IGhhbmRsZXJzIHVudGlsIG5vCiAgICAvLyBuZXcgb25lcyBhcHBlYXIKICAgIHZhciBjYWxsYmFja3MgPSBncm91cC5kZWxheWVkQ2FsbGJhY2tzLCBpID0gMDsKICAgIGRvIHsKICAgICAgZm9yICg7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspCiAgICAgICAgY2FsbGJhY2tzW2ldLmNhbGwobnVsbCk7CiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAub3BzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgdmFyIG9wID0gZ3JvdXAub3BzW2pdOwogICAgICAgIGlmIChvcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzKQogICAgICAgICAgd2hpbGUgKG9wLmN1cnNvckFjdGl2aXR5Q2FsbGVkIDwgb3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVycy5sZW5ndGgpCiAgICAgICAgICAgIG9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnNbb3AuY3Vyc29yQWN0aXZpdHlDYWxsZWQrK10uY2FsbChudWxsLCBvcC5jbSk7CiAgICAgIH0KICAgIH0gd2hpbGUgKGkgPCBjYWxsYmFja3MubGVuZ3RoKTsKICB9CgogIC8vIEZpbmlzaCBhbiBvcGVyYXRpb24sIHVwZGF0aW5nIHRoZSBkaXNwbGF5IGFuZCBzaWduYWxsaW5nIGRlbGF5ZWQgZXZlbnRzCiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uKGNtKSB7CiAgICB2YXIgb3AgPSBjbS5jdXJPcCwgZ3JvdXAgPSBvcC5vd25zR3JvdXA7CiAgICBpZiAoIWdyb3VwKSByZXR1cm47CgogICAgdHJ5IHsgZmlyZUNhbGxiYWNrc0Zvck9wcyhncm91cCk7IH0KICAgIGZpbmFsbHkgewogICAgICBvcGVyYXRpb25Hcm91cCA9IG51bGw7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAub3BzLmxlbmd0aDsgaSsrKQogICAgICAgIGdyb3VwLm9wc1tpXS5jbS5jdXJPcCA9IG51bGw7CiAgICAgIGVuZE9wZXJhdGlvbnMoZ3JvdXApOwogICAgfQogIH0KCiAgLy8gVGhlIERPTSB1cGRhdGVzIGRvbmUgd2hlbiBhbiBvcGVyYXRpb24gZmluaXNoZXMgYXJlIGJhdGNoZWQgc28KICAvLyB0aGF0IHRoZSBtaW5pbXVtIG51bWJlciBvZiByZWxheW91dHMgYXJlIHJlcXVpcmVkLgogIGZ1bmN0aW9uIGVuZE9wZXJhdGlvbnMoZ3JvdXApIHsKICAgIHZhciBvcHMgPSBncm91cC5vcHM7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykgLy8gUmVhZCBET00KICAgICAgZW5kT3BlcmF0aW9uX1IxKG9wc1tpXSk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykgLy8gV3JpdGUgRE9NIChtYXliZSkKICAgICAgZW5kT3BlcmF0aW9uX1cxKG9wc1tpXSk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykgLy8gUmVhZCBET00KICAgICAgZW5kT3BlcmF0aW9uX1IyKG9wc1tpXSk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykgLy8gV3JpdGUgRE9NIChtYXliZSkKICAgICAgZW5kT3BlcmF0aW9uX1cyKG9wc1tpXSk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykgLy8gUmVhZCBET00KICAgICAgZW5kT3BlcmF0aW9uX2ZpbmlzaChvcHNbaV0pOwogIH0KCiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uX1IxKG9wKSB7CiAgICB2YXIgY20gPSBvcC5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXk7CiAgICBtYXliZUNsaXBTY3JvbGxiYXJzKGNtKTsKICAgIGlmIChvcC51cGRhdGVNYXhMaW5lKSBmaW5kTWF4TGluZShjbSk7CgogICAgb3AubXVzdFVwZGF0ZSA9IG9wLnZpZXdDaGFuZ2VkIHx8IG9wLmZvcmNlVXBkYXRlIHx8IG9wLnNjcm9sbFRvcCAhPSBudWxsIHx8CiAgICAgIG9wLnNjcm9sbFRvUG9zICYmIChvcC5zY3JvbGxUb1Bvcy5mcm9tLmxpbmUgPCBkaXNwbGF5LnZpZXdGcm9tIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICBvcC5zY3JvbGxUb1Bvcy50by5saW5lID49IGRpc3BsYXkudmlld1RvKSB8fAogICAgICBkaXNwbGF5Lm1heExpbmVDaGFuZ2VkICYmIGNtLm9wdGlvbnMubGluZVdyYXBwaW5nOwogICAgb3AudXBkYXRlID0gb3AubXVzdFVwZGF0ZSAmJgogICAgICBuZXcgRGlzcGxheVVwZGF0ZShjbSwgb3AubXVzdFVwZGF0ZSAmJiB7dG9wOiBvcC5zY3JvbGxUb3AsIGVuc3VyZTogb3Auc2Nyb2xsVG9Qb3N9LCBvcC5mb3JjZVVwZGF0ZSk7CiAgfQoKICBmdW5jdGlvbiBlbmRPcGVyYXRpb25fVzEob3ApIHsKICAgIG9wLnVwZGF0ZWREaXNwbGF5ID0gb3AubXVzdFVwZGF0ZSAmJiB1cGRhdGVEaXNwbGF5SWZOZWVkZWQob3AuY20sIG9wLnVwZGF0ZSk7CiAgfQoKICBmdW5jdGlvbiBlbmRPcGVyYXRpb25fUjIob3ApIHsKICAgIHZhciBjbSA9IG9wLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheTsKICAgIGlmIChvcC51cGRhdGVkRGlzcGxheSkgdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pOwoKICAgIG9wLmJhck1lYXN1cmUgPSBtZWFzdXJlRm9yU2Nyb2xsYmFycyhjbSk7CgogICAgLy8gSWYgdGhlIG1heCBsaW5lIGNoYW5nZWQgc2luY2UgaXQgd2FzIGxhc3QgbWVhc3VyZWQsIG1lYXN1cmUgaXQsCiAgICAvLyBhbmQgZW5zdXJlIHRoZSBkb2N1bWVudCdzIHdpZHRoIG1hdGNoZXMgaXQuCiAgICAvLyB1cGRhdGVEaXNwbGF5X1cyIHdpbGwgdXNlIHRoZXNlIHByb3BlcnRpZXMgdG8gZG8gdGhlIGFjdHVhbCByZXNpemluZwogICAgaWYgKGRpc3BsYXkubWF4TGluZUNoYW5nZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7CiAgICAgIG9wLmFkanVzdFdpZHRoVG8gPSBtZWFzdXJlQ2hhcihjbSwgZGlzcGxheS5tYXhMaW5lLCBkaXNwbGF5Lm1heExpbmUudGV4dC5sZW5ndGgpLmxlZnQgKyAzOwogICAgICBjbS5kaXNwbGF5LnNpemVyV2lkdGggPSBvcC5hZGp1c3RXaWR0aFRvOwogICAgICBvcC5iYXJNZWFzdXJlLnNjcm9sbFdpZHRoID0KICAgICAgICBNYXRoLm1heChkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoLCBkaXNwbGF5LnNpemVyLm9mZnNldExlZnQgKyBvcC5hZGp1c3RXaWR0aFRvICsgc2Nyb2xsR2FwKGNtKSArIGNtLmRpc3BsYXkuYmFyV2lkdGgpOwogICAgICBvcC5tYXhTY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgZGlzcGxheS5zaXplci5vZmZzZXRMZWZ0ICsgb3AuYWRqdXN0V2lkdGhUbyAtIGRpc3BsYXlXaWR0aChjbSkpOwogICAgfQoKICAgIGlmIChvcC51cGRhdGVkRGlzcGxheSB8fCBvcC5zZWxlY3Rpb25DaGFuZ2VkKQogICAgICBvcC5wcmVwYXJlZFNlbGVjdGlvbiA9IGRpc3BsYXkuaW5wdXQucHJlcGFyZVNlbGVjdGlvbigpOwogIH0KCiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uX1cyKG9wKSB7CiAgICB2YXIgY20gPSBvcC5jbTsKCiAgICBpZiAob3AuYWRqdXN0V2lkdGhUbyAhPSBudWxsKSB7CiAgICAgIGNtLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGggPSBvcC5hZGp1c3RXaWR0aFRvICsgInB4IjsKICAgICAgaWYgKG9wLm1heFNjcm9sbExlZnQgPCBjbS5kb2Muc2Nyb2xsTGVmdCkKICAgICAgICBzZXRTY3JvbGxMZWZ0KGNtLCBNYXRoLm1pbihjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQsIG9wLm1heFNjcm9sbExlZnQpLCB0cnVlKTsKICAgICAgY20uZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCA9IGZhbHNlOwogICAgfQoKICAgIGlmIChvcC5wcmVwYXJlZFNlbGVjdGlvbikKICAgICAgY20uZGlzcGxheS5pbnB1dC5zaG93U2VsZWN0aW9uKG9wLnByZXBhcmVkU2VsZWN0aW9uKTsKICAgIGlmIChvcC51cGRhdGVkRGlzcGxheSkKICAgICAgc2V0RG9jdW1lbnRIZWlnaHQoY20sIG9wLmJhck1lYXN1cmUpOwogICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5IHx8IG9wLnN0YXJ0SGVpZ2h0ICE9IGNtLmRvYy5oZWlnaHQpCiAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoY20sIG9wLmJhck1lYXN1cmUpOwoKICAgIGlmIChvcC5zZWxlY3Rpb25DaGFuZ2VkKSByZXN0YXJ0QmxpbmsoY20pOwoKICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkICYmIG9wLnVwZGF0ZUlucHV0KQogICAgICBjbS5kaXNwbGF5LmlucHV0LnJlc2V0KG9wLnR5cGluZyk7CiAgICBpZiAob3AuZm9jdXMgJiYgb3AuZm9jdXMgPT0gYWN0aXZlRWx0KCkgJiYgKCFkb2N1bWVudC5oYXNGb2N1cyB8fCBkb2N1bWVudC5oYXNGb2N1cygpKSkKICAgICAgZW5zdXJlRm9jdXMob3AuY20pOwogIH0KCiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uX2ZpbmlzaChvcCkgewogICAgdmFyIGNtID0gb3AuY20sIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2M7CgogICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5KSBwb3N0VXBkYXRlRGlzcGxheShjbSwgb3AudXBkYXRlKTsKCiAgICAvLyBBYm9ydCBtb3VzZSB3aGVlbCBkZWx0YSBtZWFzdXJlbWVudCwgd2hlbiBzY3JvbGxpbmcgZXhwbGljaXRseQogICAgaWYgKGRpc3BsYXkud2hlZWxTdGFydFggIT0gbnVsbCAmJiAob3Auc2Nyb2xsVG9wICE9IG51bGwgfHwgb3Auc2Nyb2xsTGVmdCAhPSBudWxsIHx8IG9wLnNjcm9sbFRvUG9zKSkKICAgICAgZGlzcGxheS53aGVlbFN0YXJ0WCA9IGRpc3BsYXkud2hlZWxTdGFydFkgPSBudWxsOwoKICAgIC8vIFByb3BhZ2F0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIHRvIHRoZSBhY3R1YWwgRE9NIHNjcm9sbGVyCiAgICBpZiAob3Auc2Nyb2xsVG9wICE9IG51bGwgJiYgKGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wICE9IG9wLnNjcm9sbFRvcCB8fCBvcC5mb3JjZVNjcm9sbCkpIHsKICAgICAgZG9jLnNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIG9wLnNjcm9sbFRvcCkpOwogICAgICBkaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKGRvYy5zY3JvbGxUb3ApOwogICAgICBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IGRvYy5zY3JvbGxUb3A7CiAgICB9CiAgICBpZiAob3Auc2Nyb2xsTGVmdCAhPSBudWxsICYmIChkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgIT0gb3Auc2Nyb2xsTGVmdCB8fCBvcC5mb3JjZVNjcm9sbCkpIHsKICAgICAgZG9jLnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoIC0gZGlzcGxheVdpZHRoKGNtKSwgb3Auc2Nyb2xsTGVmdCkpOwogICAgICBkaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsTGVmdChkb2Muc2Nyb2xsTGVmdCk7CiAgICAgIGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCA9IGRvYy5zY3JvbGxMZWZ0OwogICAgICBhbGlnbkhvcml6b250YWxseShjbSk7CiAgICB9CiAgICAvLyBJZiB3ZSBuZWVkIHRvIHNjcm9sbCBhIHNwZWNpZmljIHBvc2l0aW9uIGludG8gdmlldywgZG8gc28uCiAgICBpZiAob3Auc2Nyb2xsVG9Qb3MpIHsKICAgICAgdmFyIGNvb3JkcyA9IHNjcm9sbFBvc0ludG9WaWV3KGNtLCBjbGlwUG9zKGRvYywgb3Auc2Nyb2xsVG9Qb3MuZnJvbSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwUG9zKGRvYywgb3Auc2Nyb2xsVG9Qb3MudG8pLCBvcC5zY3JvbGxUb1Bvcy5tYXJnaW4pOwogICAgICBpZiAob3Auc2Nyb2xsVG9Qb3MuaXNDdXJzb3IgJiYgY20uc3RhdGUuZm9jdXNlZCkgbWF5YmVTY3JvbGxXaW5kb3coY20sIGNvb3Jkcyk7CiAgICB9CgogICAgLy8gRmlyZSBldmVudHMgZm9yIG1hcmtlcnMgdGhhdCBhcmUgaGlkZGVuL3VuaWRkZW4gYnkgZWRpdGluZyBvcgogICAgLy8gdW5kb2luZwogICAgdmFyIGhpZGRlbiA9IG9wLm1heWJlSGlkZGVuTWFya2VycywgdW5oaWRkZW4gPSBvcC5tYXliZVVuaGlkZGVuTWFya2VyczsKICAgIGlmIChoaWRkZW4pIGZvciAodmFyIGkgPSAwOyBpIDwgaGlkZGVuLmxlbmd0aDsgKytpKQogICAgICBpZiAoIWhpZGRlbltpXS5saW5lcy5sZW5ndGgpIHNpZ25hbChoaWRkZW5baV0sICJoaWRlIik7CiAgICBpZiAodW5oaWRkZW4pIGZvciAodmFyIGkgPSAwOyBpIDwgdW5oaWRkZW4ubGVuZ3RoOyArK2kpCiAgICAgIGlmICh1bmhpZGRlbltpXS5saW5lcy5sZW5ndGgpIHNpZ25hbCh1bmhpZGRlbltpXSwgInVuaGlkZSIpOwoKICAgIGlmIChkaXNwbGF5LndyYXBwZXIub2Zmc2V0SGVpZ2h0KQogICAgICBkb2Muc2Nyb2xsVG9wID0gY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7CgogICAgLy8gRmlyZSBjaGFuZ2UgZXZlbnRzLCBhbmQgZGVsYXllZCBldmVudCBoYW5kbGVycwogICAgaWYgKG9wLmNoYW5nZU9ianMpCiAgICAgIHNpZ25hbChjbSwgImNoYW5nZXMiLCBjbSwgb3AuY2hhbmdlT2Jqcyk7CiAgICBpZiAob3AudXBkYXRlKQogICAgICBvcC51cGRhdGUuZmluaXNoKCk7CiAgfQoKICAvLyBSdW4gdGhlIGdpdmVuIGZ1bmN0aW9uIGluIGFuIG9wZXJhdGlvbgogIGZ1bmN0aW9uIHJ1bkluT3AoY20sIGYpIHsKICAgIGlmIChjbS5jdXJPcCkgcmV0dXJuIGYoKTsKICAgIHN0YXJ0T3BlcmF0aW9uKGNtKTsKICAgIHRyeSB7IHJldHVybiBmKCk7IH0KICAgIGZpbmFsbHkgeyBlbmRPcGVyYXRpb24oY20pOyB9CiAgfQogIC8vIFdyYXBzIGEgZnVuY3Rpb24gaW4gYW4gb3BlcmF0aW9uLiBSZXR1cm5zIHRoZSB3cmFwcGVkIGZ1bmN0aW9uLgogIGZ1bmN0aW9uIG9wZXJhdGlvbihjbSwgZikgewogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICBpZiAoY20uY3VyT3ApIHJldHVybiBmLmFwcGx5KGNtLCBhcmd1bWVudHMpOwogICAgICBzdGFydE9wZXJhdGlvbihjbSk7CiAgICAgIHRyeSB7IHJldHVybiBmLmFwcGx5KGNtLCBhcmd1bWVudHMpOyB9CiAgICAgIGZpbmFsbHkgeyBlbmRPcGVyYXRpb24oY20pOyB9CiAgICB9OwogIH0KICAvLyBVc2VkIHRvIGFkZCBtZXRob2RzIHRvIGVkaXRvciBhbmQgZG9jIGluc3RhbmNlcywgd3JhcHBpbmcgdGhlbSBpbgogIC8vIG9wZXJhdGlvbnMuCiAgZnVuY3Rpb24gbWV0aG9kT3AoZikgewogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICBpZiAodGhpcy5jdXJPcCkgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgc3RhcnRPcGVyYXRpb24odGhpcyk7CiAgICAgIHRyeSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0KICAgICAgZmluYWxseSB7IGVuZE9wZXJhdGlvbih0aGlzKTsgfQogICAgfTsKICB9CiAgZnVuY3Rpb24gZG9jTWV0aG9kT3AoZikgewogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICB2YXIgY20gPSB0aGlzLmNtOwogICAgICBpZiAoIWNtIHx8IGNtLmN1ck9wKSByZXR1cm4gZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICBzdGFydE9wZXJhdGlvbihjbSk7CiAgICAgIHRyeSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0KICAgICAgZmluYWxseSB7IGVuZE9wZXJhdGlvbihjbSk7IH0KICAgIH07CiAgfQoKICAvLyBWSUVXIFRSQUNLSU5HCgogIC8vIFRoZXNlIG9iamVjdHMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHRoZSB2aXNpYmxlIChjdXJyZW50bHkgZHJhd24pCiAgLy8gcGFydCBvZiB0aGUgZG9jdW1lbnQuIEEgTGluZVZpZXcgbWF5IGNvcnJlc3BvbmQgdG8gbXVsdGlwbGUKICAvLyBsb2dpY2FsIGxpbmVzLCBpZiB0aG9zZSBhcmUgY29ubmVjdGVkIGJ5IGNvbGxhcHNlZCByYW5nZXMuCiAgZnVuY3Rpb24gTGluZVZpZXcoZG9jLCBsaW5lLCBsaW5lTikgewogICAgLy8gVGhlIHN0YXJ0aW5nIGxpbmUKICAgIHRoaXMubGluZSA9IGxpbmU7CiAgICAvLyBDb250aW51aW5nIGxpbmVzLCBpZiBhbnkKICAgIHRoaXMucmVzdCA9IHZpc3VhbExpbmVDb250aW51ZWQobGluZSk7CiAgICAvLyBOdW1iZXIgb2YgbG9naWNhbCBsaW5lcyBpbiB0aGlzIHZpc3VhbCBsaW5lCiAgICB0aGlzLnNpemUgPSB0aGlzLnJlc3QgPyBsaW5lTm8obHN0KHRoaXMucmVzdCkpIC0gbGluZU4gKyAxIDogMTsKICAgIHRoaXMubm9kZSA9IHRoaXMudGV4dCA9IG51bGw7CiAgICB0aGlzLmhpZGRlbiA9IGxpbmVJc0hpZGRlbihkb2MsIGxpbmUpOwogIH0KCiAgLy8gQ3JlYXRlIGEgcmFuZ2Ugb2YgTGluZVZpZXcgb2JqZWN0cyBmb3IgdGhlIGdpdmVuIGxpbmVzLgogIGZ1bmN0aW9uIGJ1aWxkVmlld0FycmF5KGNtLCBmcm9tLCB0bykgewogICAgdmFyIGFycmF5ID0gW10sIG5leHRQb3M7CiAgICBmb3IgKHZhciBwb3MgPSBmcm9tOyBwb3MgPCB0bzsgcG9zID0gbmV4dFBvcykgewogICAgICB2YXIgdmlldyA9IG5ldyBMaW5lVmlldyhjbS5kb2MsIGdldExpbmUoY20uZG9jLCBwb3MpLCBwb3MpOwogICAgICBuZXh0UG9zID0gcG9zICsgdmlldy5zaXplOwogICAgICBhcnJheS5wdXNoKHZpZXcpOwogICAgfQogICAgcmV0dXJuIGFycmF5OwogIH0KCiAgLy8gVXBkYXRlcyB0aGUgZGlzcGxheS52aWV3IGRhdGEgc3RydWN0dXJlIGZvciBhIGdpdmVuIGNoYW5nZSB0byB0aGUKICAvLyBkb2N1bWVudC4gRnJvbSBhbmQgdG8gYXJlIGluIHByZS1jaGFuZ2UgY29vcmRpbmF0ZXMuIExlbmRpZmYgaXMKICAvLyB0aGUgYW1vdW50IG9mIGxpbmVzIGFkZGVkIG9yIHN1YnRyYWN0ZWQgYnkgdGhlIGNoYW5nZS4gVGhpcyBpcwogIC8vIHVzZWQgZm9yIGNoYW5nZXMgdGhhdCBzcGFuIG11bHRpcGxlIGxpbmVzLCBvciBjaGFuZ2UgdGhlIHdheQogIC8vIGxpbmVzIGFyZSBkaXZpZGVkIGludG8gdmlzdWFsIGxpbmVzLiByZWdMaW5lQ2hhbmdlIChiZWxvdykKICAvLyByZWdpc3RlcnMgc2luZ2xlLWxpbmUgY2hhbmdlcy4KICBmdW5jdGlvbiByZWdDaGFuZ2UoY20sIGZyb20sIHRvLCBsZW5kaWZmKSB7CiAgICBpZiAoZnJvbSA9PSBudWxsKSBmcm9tID0gY20uZG9jLmZpcnN0OwogICAgaWYgKHRvID09IG51bGwpIHRvID0gY20uZG9jLmZpcnN0ICsgY20uZG9jLnNpemU7CiAgICBpZiAoIWxlbmRpZmYpIGxlbmRpZmYgPSAwOwoKICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKICAgIGlmIChsZW5kaWZmICYmIHRvIDwgZGlzcGxheS52aWV3VG8gJiYKICAgICAgICAoZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA9PSBudWxsIHx8IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPiBmcm9tKSkKICAgICAgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA9IGZyb207CgogICAgY20uY3VyT3Audmlld0NoYW5nZWQgPSB0cnVlOwoKICAgIGlmIChmcm9tID49IGRpc3BsYXkudmlld1RvKSB7IC8vIENoYW5nZSBhZnRlcgogICAgICBpZiAoc2F3Q29sbGFwc2VkU3BhbnMgJiYgdmlzdWFsTGluZU5vKGNtLmRvYywgZnJvbSkgPCBkaXNwbGF5LnZpZXdUbykKICAgICAgICByZXNldFZpZXcoY20pOwogICAgfSBlbHNlIGlmICh0byA8PSBkaXNwbGF5LnZpZXdGcm9tKSB7IC8vIENoYW5nZSBiZWZvcmUKICAgICAgaWYgKHNhd0NvbGxhcHNlZFNwYW5zICYmIHZpc3VhbExpbmVFbmRObyhjbS5kb2MsIHRvICsgbGVuZGlmZikgPiBkaXNwbGF5LnZpZXdGcm9tKSB7CiAgICAgICAgcmVzZXRWaWV3KGNtKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBkaXNwbGF5LnZpZXdGcm9tICs9IGxlbmRpZmY7CiAgICAgICAgZGlzcGxheS52aWV3VG8gKz0gbGVuZGlmZjsKICAgICAgfQogICAgfSBlbHNlIGlmIChmcm9tIDw9IGRpc3BsYXkudmlld0Zyb20gJiYgdG8gPj0gZGlzcGxheS52aWV3VG8pIHsgLy8gRnVsbCBvdmVybGFwCiAgICAgIHJlc2V0VmlldyhjbSk7CiAgICB9IGVsc2UgaWYgKGZyb20gPD0gZGlzcGxheS52aWV3RnJvbSkgeyAvLyBUb3Agb3ZlcmxhcAogICAgICB2YXIgY3V0ID0gdmlld0N1dHRpbmdQb2ludChjbSwgdG8sIHRvICsgbGVuZGlmZiwgMSk7CiAgICAgIGlmIChjdXQpIHsKICAgICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcuc2xpY2UoY3V0LmluZGV4KTsKICAgICAgICBkaXNwbGF5LnZpZXdGcm9tID0gY3V0LmxpbmVOOwogICAgICAgIGRpc3BsYXkudmlld1RvICs9IGxlbmRpZmY7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzZXRWaWV3KGNtKTsKICAgICAgfQogICAgfSBlbHNlIGlmICh0byA+PSBkaXNwbGF5LnZpZXdUbykgeyAvLyBCb3R0b20gb3ZlcmxhcAogICAgICB2YXIgY3V0ID0gdmlld0N1dHRpbmdQb2ludChjbSwgZnJvbSwgZnJvbSwgLTEpOwogICAgICBpZiAoY3V0KSB7CiAgICAgICAgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LnNsaWNlKDAsIGN1dC5pbmRleCk7CiAgICAgICAgZGlzcGxheS52aWV3VG8gPSBjdXQubGluZU47CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzZXRWaWV3KGNtKTsKICAgICAgfQogICAgfSBlbHNlIHsgLy8gR2FwIGluIHRoZSBtaWRkbGUKICAgICAgdmFyIGN1dFRvcCA9IHZpZXdDdXR0aW5nUG9pbnQoY20sIGZyb20sIGZyb20sIC0xKTsKICAgICAgdmFyIGN1dEJvdCA9IHZpZXdDdXR0aW5nUG9pbnQoY20sIHRvLCB0byArIGxlbmRpZmYsIDEpOwogICAgICBpZiAoY3V0VG9wICYmIGN1dEJvdCkgewogICAgICAgIGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5zbGljZSgwLCBjdXRUb3AuaW5kZXgpCiAgICAgICAgICAuY29uY2F0KGJ1aWxkVmlld0FycmF5KGNtLCBjdXRUb3AubGluZU4sIGN1dEJvdC5saW5lTikpCiAgICAgICAgICAuY29uY2F0KGRpc3BsYXkudmlldy5zbGljZShjdXRCb3QuaW5kZXgpKTsKICAgICAgICBkaXNwbGF5LnZpZXdUbyArPSBsZW5kaWZmOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc2V0VmlldyhjbSk7CiAgICAgIH0KICAgIH0KCiAgICB2YXIgZXh0ID0gZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkOwogICAgaWYgKGV4dCkgewogICAgICBpZiAodG8gPCBleHQubGluZU4pCiAgICAgICAgZXh0LmxpbmVOICs9IGxlbmRpZmY7CiAgICAgIGVsc2UgaWYgKGZyb20gPCBleHQubGluZU4gKyBleHQuc2l6ZSkKICAgICAgICBkaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgPSBudWxsOwogICAgfQogIH0KCiAgLy8gUmVnaXN0ZXIgYSBjaGFuZ2UgdG8gYSBzaW5nbGUgbGluZS4gVHlwZSBtdXN0IGJlIG9uZSBvZiAidGV4dCIsCiAgLy8gImd1dHRlciIsICJjbGFzcyIsICJ3aWRnZXQiCiAgZnVuY3Rpb24gcmVnTGluZUNoYW5nZShjbSwgbGluZSwgdHlwZSkgewogICAgY20uY3VyT3Audmlld0NoYW5nZWQgPSB0cnVlOwogICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBleHQgPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7CiAgICBpZiAoZXh0ICYmIGxpbmUgPj0gZXh0LmxpbmVOICYmIGxpbmUgPCBleHQubGluZU4gKyBleHQuc2l6ZSkKICAgICAgZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkID0gbnVsbDsKCiAgICBpZiAobGluZSA8IGRpc3BsYXkudmlld0Zyb20gfHwgbGluZSA+PSBkaXNwbGF5LnZpZXdUbykgcmV0dXJuOwogICAgdmFyIGxpbmVWaWV3ID0gZGlzcGxheS52aWV3W2ZpbmRWaWV3SW5kZXgoY20sIGxpbmUpXTsKICAgIGlmIChsaW5lVmlldy5ub2RlID09IG51bGwpIHJldHVybjsKICAgIHZhciBhcnIgPSBsaW5lVmlldy5jaGFuZ2VzIHx8IChsaW5lVmlldy5jaGFuZ2VzID0gW10pOwogICAgaWYgKGluZGV4T2YoYXJyLCB0eXBlKSA9PSAtMSkgYXJyLnB1c2godHlwZSk7CiAgfQoKICAvLyBDbGVhciB0aGUgdmlldy4KICBmdW5jdGlvbiByZXNldFZpZXcoY20pIHsKICAgIGNtLmRpc3BsYXkudmlld0Zyb20gPSBjbS5kaXNwbGF5LnZpZXdUbyA9IGNtLmRvYy5maXJzdDsKICAgIGNtLmRpc3BsYXkudmlldyA9IFtdOwogICAgY20uZGlzcGxheS52aWV3T2Zmc2V0ID0gMDsKICB9CgogIC8vIEZpbmQgdGhlIHZpZXcgZWxlbWVudCBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gbGluZS4gUmV0dXJuIG51bGwKICAvLyB3aGVuIHRoZSBsaW5lIGlzbid0IHZpc2libGUuCiAgZnVuY3Rpb24gZmluZFZpZXdJbmRleChjbSwgbikgewogICAgaWYgKG4gPj0gY20uZGlzcGxheS52aWV3VG8pIHJldHVybiBudWxsOwogICAgbiAtPSBjbS5kaXNwbGF5LnZpZXdGcm9tOwogICAgaWYgKG4gPCAwKSByZXR1cm4gbnVsbDsKICAgIHZhciB2aWV3ID0gY20uZGlzcGxheS52aWV3OwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7CiAgICAgIG4gLT0gdmlld1tpXS5zaXplOwogICAgICBpZiAobiA8IDApIHJldHVybiBpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gdmlld0N1dHRpbmdQb2ludChjbSwgb2xkTiwgbmV3TiwgZGlyKSB7CiAgICB2YXIgaW5kZXggPSBmaW5kVmlld0luZGV4KGNtLCBvbGROKSwgZGlmZiwgdmlldyA9IGNtLmRpc3BsYXkudmlldzsKICAgIGlmICghc2F3Q29sbGFwc2VkU3BhbnMgfHwgbmV3TiA9PSBjbS5kb2MuZmlyc3QgKyBjbS5kb2Muc2l6ZSkKICAgICAgcmV0dXJuIHtpbmRleDogaW5kZXgsIGxpbmVOOiBuZXdOfTsKICAgIGZvciAodmFyIGkgPSAwLCBuID0gY20uZGlzcGxheS52aWV3RnJvbTsgaSA8IGluZGV4OyBpKyspCiAgICAgIG4gKz0gdmlld1tpXS5zaXplOwogICAgaWYgKG4gIT0gb2xkTikgewogICAgICBpZiAoZGlyID4gMCkgewogICAgICAgIGlmIChpbmRleCA9PSB2aWV3Lmxlbmd0aCAtIDEpIHJldHVybiBudWxsOwogICAgICAgIGRpZmYgPSAobiArIHZpZXdbaW5kZXhdLnNpemUpIC0gb2xkTjsKICAgICAgICBpbmRleCsrOwogICAgICB9IGVsc2UgewogICAgICAgIGRpZmYgPSBuIC0gb2xkTjsKICAgICAgfQogICAgICBvbGROICs9IGRpZmY7IG5ld04gKz0gZGlmZjsKICAgIH0KICAgIHdoaWxlICh2aXN1YWxMaW5lTm8oY20uZG9jLCBuZXdOKSAhPSBuZXdOKSB7CiAgICAgIGlmIChpbmRleCA9PSAoZGlyIDwgMCA/IDAgOiB2aWV3Lmxlbmd0aCAtIDEpKSByZXR1cm4gbnVsbDsKICAgICAgbmV3TiArPSBkaXIgKiB2aWV3W2luZGV4IC0gKGRpciA8IDAgPyAxIDogMCldLnNpemU7CiAgICAgIGluZGV4ICs9IGRpcjsKICAgIH0KICAgIHJldHVybiB7aW5kZXg6IGluZGV4LCBsaW5lTjogbmV3Tn07CiAgfQoKICAvLyBGb3JjZSB0aGUgdmlldyB0byBjb3ZlciBhIGdpdmVuIHJhbmdlLCBhZGRpbmcgZW1wdHkgdmlldyBlbGVtZW50CiAgLy8gb3IgY2xpcHBpbmcgb2ZmIGV4aXN0aW5nIG9uZXMgYXMgbmVlZGVkLgogIGZ1bmN0aW9uIGFkanVzdFZpZXcoY20sIGZyb20sIHRvKSB7CiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHZpZXcgPSBkaXNwbGF5LnZpZXc7CiAgICBpZiAodmlldy5sZW5ndGggPT0gMCB8fCBmcm9tID49IGRpc3BsYXkudmlld1RvIHx8IHRvIDw9IGRpc3BsYXkudmlld0Zyb20pIHsKICAgICAgZGlzcGxheS52aWV3ID0gYnVpbGRWaWV3QXJyYXkoY20sIGZyb20sIHRvKTsKICAgICAgZGlzcGxheS52aWV3RnJvbSA9IGZyb207CiAgICB9IGVsc2UgewogICAgICBpZiAoZGlzcGxheS52aWV3RnJvbSA+IGZyb20pCiAgICAgICAgZGlzcGxheS52aWV3ID0gYnVpbGRWaWV3QXJyYXkoY20sIGZyb20sIGRpc3BsYXkudmlld0Zyb20pLmNvbmNhdChkaXNwbGF5LnZpZXcpOwogICAgICBlbHNlIGlmIChkaXNwbGF5LnZpZXdGcm9tIDwgZnJvbSkKICAgICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcuc2xpY2UoZmluZFZpZXdJbmRleChjbSwgZnJvbSkpOwogICAgICBkaXNwbGF5LnZpZXdGcm9tID0gZnJvbTsKICAgICAgaWYgKGRpc3BsYXkudmlld1RvIDwgdG8pCiAgICAgICAgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LmNvbmNhdChidWlsZFZpZXdBcnJheShjbSwgZGlzcGxheS52aWV3VG8sIHRvKSk7CiAgICAgIGVsc2UgaWYgKGRpc3BsYXkudmlld1RvID4gdG8pCiAgICAgICAgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LnNsaWNlKDAsIGZpbmRWaWV3SW5kZXgoY20sIHRvKSk7CiAgICB9CiAgICBkaXNwbGF5LnZpZXdUbyA9IHRvOwogIH0KCiAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgdmlldyB3aG9zZSBET00gcmVwcmVzZW50YXRpb24gaXMKICAvLyBvdXQgb2YgZGF0ZSAob3Igbm9uZXhpc3RlbnQpLgogIGZ1bmN0aW9uIGNvdW50RGlydHlWaWV3KGNtKSB7CiAgICB2YXIgdmlldyA9IGNtLmRpc3BsYXkudmlldywgZGlydHkgPSAwOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBsaW5lVmlldyA9IHZpZXdbaV07CiAgICAgIGlmICghbGluZVZpZXcuaGlkZGVuICYmICghbGluZVZpZXcubm9kZSB8fCBsaW5lVmlldy5jaGFuZ2VzKSkgKytkaXJ0eTsKICAgIH0KICAgIHJldHVybiBkaXJ0eTsKICB9CgogIC8vIEVWRU5UIEhBTkRMRVJTCgogIC8vIEF0dGFjaCB0aGUgbmVjZXNzYXJ5IGV2ZW50IGhhbmRsZXJzIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBlZGl0b3IKICBmdW5jdGlvbiByZWdpc3RlckV2ZW50SGFuZGxlcnMoY20pIHsKICAgIHZhciBkID0gY20uZGlzcGxheTsKICAgIG9uKGQuc2Nyb2xsZXIsICJtb3VzZWRvd24iLCBvcGVyYXRpb24oY20sIG9uTW91c2VEb3duKSk7CiAgICAvLyBPbGRlciBJRSdzIHdpbGwgbm90IGZpcmUgYSBzZWNvbmQgbW91c2Vkb3duIGZvciBhIGRvdWJsZSBjbGljawogICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSkKICAgICAgb24oZC5zY3JvbGxlciwgImRibGNsaWNrIiwgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSkgcmV0dXJuOwogICAgICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoY20sIGUpOwogICAgICAgIGlmICghcG9zIHx8IGNsaWNrSW5HdXR0ZXIoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpIHJldHVybjsKICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICAgIHZhciB3b3JkID0gY20uZmluZFdvcmRBdChwb3MpOwogICAgICAgIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHdvcmQuYW5jaG9yLCB3b3JkLmhlYWQpOwogICAgICB9KSk7CiAgICBlbHNlCiAgICAgIG9uKGQuc2Nyb2xsZXIsICJkYmxjbGljayIsIGZ1bmN0aW9uKGUpIHsgc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGVfcHJldmVudERlZmF1bHQoZSk7IH0pOwogICAgLy8gU29tZSBicm93c2VycyBmaXJlIGNvbnRleHRtZW51ICphZnRlciogb3BlbmluZyB0aGUgbWVudSwgYXQKICAgIC8vIHdoaWNoIHBvaW50IHdlIGNhbid0IG1lc3Mgd2l0aCBpdCBhbnltb3JlLiBDb250ZXh0IG1lbnUgaXMKICAgIC8vIGhhbmRsZWQgaW4gb25Nb3VzZURvd24gZm9yIHRoZXNlIGJyb3dzZXJzLgogICAgaWYgKCFjYXB0dXJlUmlnaHRDbGljaykgb24oZC5zY3JvbGxlciwgImNvbnRleHRtZW51IiwgZnVuY3Rpb24oZSkge29uQ29udGV4dE1lbnUoY20sIGUpO30pOwoKICAgIC8vIFVzZWQgdG8gc3VwcHJlc3MgbW91c2UgZXZlbnQgaGFuZGxpbmcgd2hlbiBhIHRvdWNoIGhhcHBlbnMKICAgIHZhciB0b3VjaEZpbmlzaGVkLCBwcmV2VG91Y2ggPSB7ZW5kOiAwfTsKICAgIGZ1bmN0aW9uIGZpbmlzaFRvdWNoKCkgewogICAgICBpZiAoZC5hY3RpdmVUb3VjaCkgewogICAgICAgIHRvdWNoRmluaXNoZWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2QuYWN0aXZlVG91Y2ggPSBudWxsO30sIDEwMDApOwogICAgICAgIHByZXZUb3VjaCA9IGQuYWN0aXZlVG91Y2g7CiAgICAgICAgcHJldlRvdWNoLmVuZCA9ICtuZXcgRGF0ZTsKICAgICAgfQogICAgfTsKICAgIGZ1bmN0aW9uIGlzTW91c2VMaWtlVG91Y2hFdmVudChlKSB7CiAgICAgIGlmIChlLnRvdWNoZXMubGVuZ3RoICE9IDEpIHJldHVybiBmYWxzZTsKICAgICAgdmFyIHRvdWNoID0gZS50b3VjaGVzWzBdOwogICAgICByZXR1cm4gdG91Y2gucmFkaXVzWCA8PSAxICYmIHRvdWNoLnJhZGl1c1kgPD0gMTsKICAgIH0KICAgIGZ1bmN0aW9uIGZhckF3YXkodG91Y2gsIG90aGVyKSB7CiAgICAgIGlmIChvdGhlci5sZWZ0ID09IG51bGwpIHJldHVybiB0cnVlOwogICAgICB2YXIgZHggPSBvdGhlci5sZWZ0IC0gdG91Y2gubGVmdCwgZHkgPSBvdGhlci50b3AgLSB0b3VjaC50b3A7CiAgICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeSA+IDIwICogMjA7CiAgICB9CiAgICBvbihkLnNjcm9sbGVyLCAidG91Y2hzdGFydCIsIGZ1bmN0aW9uKGUpIHsKICAgICAgaWYgKCFpc01vdXNlTGlrZVRvdWNoRXZlbnQoZSkpIHsKICAgICAgICBjbGVhclRpbWVvdXQodG91Y2hGaW5pc2hlZCk7CiAgICAgICAgdmFyIG5vdyA9ICtuZXcgRGF0ZTsKICAgICAgICBkLmFjdGl2ZVRvdWNoID0ge3N0YXJ0OiBub3csIG1vdmVkOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHByZXY6IG5vdyAtIHByZXZUb3VjaC5lbmQgPD0gMzAwID8gcHJldlRvdWNoIDogbnVsbH07CiAgICAgICAgaWYgKGUudG91Y2hlcy5sZW5ndGggPT0gMSkgewogICAgICAgICAgZC5hY3RpdmVUb3VjaC5sZWZ0ID0gZS50b3VjaGVzWzBdLnBhZ2VYOwogICAgICAgICAgZC5hY3RpdmVUb3VjaC50b3AgPSBlLnRvdWNoZXNbMF0ucGFnZVk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIG9uKGQuc2Nyb2xsZXIsICJ0b3VjaG1vdmUiLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKGQuYWN0aXZlVG91Y2gpIGQuYWN0aXZlVG91Y2gubW92ZWQgPSB0cnVlOwogICAgfSk7CiAgICBvbihkLnNjcm9sbGVyLCAidG91Y2hlbmQiLCBmdW5jdGlvbihlKSB7CiAgICAgIHZhciB0b3VjaCA9IGQuYWN0aXZlVG91Y2g7CiAgICAgIGlmICh0b3VjaCAmJiAhZXZlbnRJbldpZGdldChkLCBlKSAmJiB0b3VjaC5sZWZ0ICE9IG51bGwgJiYKICAgICAgICAgICF0b3VjaC5tb3ZlZCAmJiBuZXcgRGF0ZSAtIHRvdWNoLnN0YXJ0IDwgMzAwKSB7CiAgICAgICAgdmFyIHBvcyA9IGNtLmNvb3Jkc0NoYXIoZC5hY3RpdmVUb3VjaCwgInBhZ2UiKSwgcmFuZ2U7CiAgICAgICAgaWYgKCF0b3VjaC5wcmV2IHx8IGZhckF3YXkodG91Y2gsIHRvdWNoLnByZXYpKSAvLyBTaW5nbGUgdGFwCiAgICAgICAgICByYW5nZSA9IG5ldyBSYW5nZShwb3MsIHBvcyk7CiAgICAgICAgZWxzZSBpZiAoIXRvdWNoLnByZXYucHJldiB8fCBmYXJBd2F5KHRvdWNoLCB0b3VjaC5wcmV2LnByZXYpKSAvLyBEb3VibGUgdGFwCiAgICAgICAgICByYW5nZSA9IGNtLmZpbmRXb3JkQXQocG9zKTsKICAgICAgICBlbHNlIC8vIFRyaXBsZSB0YXAKICAgICAgICAgIHJhbmdlID0gbmV3IFJhbmdlKFBvcyhwb3MubGluZSwgMCksIGNsaXBQb3MoY20uZG9jLCBQb3MocG9zLmxpbmUgKyAxLCAwKSkpOwogICAgICAgIGNtLnNldFNlbGVjdGlvbihyYW5nZS5hbmNob3IsIHJhbmdlLmhlYWQpOwogICAgICAgIGNtLmZvY3VzKCk7CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgfQogICAgICBmaW5pc2hUb3VjaCgpOwogICAgfSk7CiAgICBvbihkLnNjcm9sbGVyLCAidG91Y2hjYW5jZWwiLCBmaW5pc2hUb3VjaCk7CgogICAgLy8gU3luYyBzY3JvbGxpbmcgYmV0d2VlbiBmYWtlIHNjcm9sbGJhcnMgYW5kIHJlYWwgc2Nyb2xsYWJsZQogICAgLy8gYXJlYSwgZW5zdXJlIHZpZXdwb3J0IGlzIHVwZGF0ZWQgd2hlbiBzY3JvbGxpbmcuCiAgICBvbihkLnNjcm9sbGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7CiAgICAgIGlmIChkLnNjcm9sbGVyLmNsaWVudEhlaWdodCkgewogICAgICAgIHNldFNjcm9sbFRvcChjbSwgZC5zY3JvbGxlci5zY3JvbGxUb3ApOwogICAgICAgIHNldFNjcm9sbExlZnQoY20sIGQuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgdHJ1ZSk7CiAgICAgICAgc2lnbmFsKGNtLCAic2Nyb2xsIiwgY20pOwogICAgICB9CiAgICB9KTsKCiAgICAvLyBMaXN0ZW4gdG8gd2hlZWwgZXZlbnRzIGluIG9yZGVyIHRvIHRyeSBhbmQgdXBkYXRlIHRoZSB2aWV3cG9ydCBvbiB0aW1lLgogICAgb24oZC5zY3JvbGxlciwgIm1vdXNld2hlZWwiLCBmdW5jdGlvbihlKXtvblNjcm9sbFdoZWVsKGNtLCBlKTt9KTsKICAgIG9uKGQuc2Nyb2xsZXIsICJET01Nb3VzZVNjcm9sbCIsIGZ1bmN0aW9uKGUpe29uU2Nyb2xsV2hlZWwoY20sIGUpO30pOwoKICAgIC8vIFByZXZlbnQgd3JhcHBlciBmcm9tIGV2ZXIgc2Nyb2xsaW5nCiAgICBvbihkLndyYXBwZXIsICJzY3JvbGwiLCBmdW5jdGlvbigpIHsgZC53cmFwcGVyLnNjcm9sbFRvcCA9IGQud3JhcHBlci5zY3JvbGxMZWZ0ID0gMDsgfSk7CgogICAgZC5kcmFnRnVuY3Rpb25zID0gewogICAgICBlbnRlcjogZnVuY3Rpb24oZSkge2lmICghc2lnbmFsRE9NRXZlbnQoY20sIGUpKSBlX3N0b3AoZSk7fSwKICAgICAgb3ZlcjogZnVuY3Rpb24oZSkge2lmICghc2lnbmFsRE9NRXZlbnQoY20sIGUpKSB7IG9uRHJhZ092ZXIoY20sIGUpOyBlX3N0b3AoZSk7IH19LAogICAgICBzdGFydDogZnVuY3Rpb24oZSl7b25EcmFnU3RhcnQoY20sIGUpO30sCiAgICAgIGRyb3A6IG9wZXJhdGlvbihjbSwgb25Ecm9wKSwKICAgICAgbGVhdmU6IGZ1bmN0aW9uKCkge2NsZWFyRHJhZ0N1cnNvcihjbSk7fQogICAgfTsKCiAgICB2YXIgaW5wID0gZC5pbnB1dC5nZXRGaWVsZCgpOwogICAgb24oaW5wLCAia2V5dXAiLCBmdW5jdGlvbihlKSB7IG9uS2V5VXAuY2FsbChjbSwgZSk7IH0pOwogICAgb24oaW5wLCAia2V5ZG93biIsIG9wZXJhdGlvbihjbSwgb25LZXlEb3duKSk7CiAgICBvbihpbnAsICJrZXlwcmVzcyIsIG9wZXJhdGlvbihjbSwgb25LZXlQcmVzcykpOwogICAgb24oaW5wLCAiZm9jdXMiLCBiaW5kKG9uRm9jdXMsIGNtKSk7CiAgICBvbihpbnAsICJibHVyIiwgYmluZChvbkJsdXIsIGNtKSk7CiAgfQoKICBmdW5jdGlvbiBkcmFnRHJvcENoYW5nZWQoY20sIHZhbHVlLCBvbGQpIHsKICAgIHZhciB3YXNPbiA9IG9sZCAmJiBvbGQgIT0gQ29kZU1pcnJvci5Jbml0OwogICAgaWYgKCF2YWx1ZSAhPSAhd2FzT24pIHsKICAgICAgdmFyIGZ1bmNzID0gY20uZGlzcGxheS5kcmFnRnVuY3Rpb25zOwogICAgICB2YXIgdG9nZ2xlID0gdmFsdWUgPyBvbiA6IG9mZjsKICAgICAgdG9nZ2xlKGNtLmRpc3BsYXkuc2Nyb2xsZXIsICJkcmFnc3RhcnQiLCBmdW5jcy5zdGFydCk7CiAgICAgIHRvZ2dsZShjbS5kaXNwbGF5LnNjcm9sbGVyLCAiZHJhZ2VudGVyIiwgZnVuY3MuZW50ZXIpOwogICAgICB0b2dnbGUoY20uZGlzcGxheS5zY3JvbGxlciwgImRyYWdvdmVyIiwgZnVuY3Mub3Zlcik7CiAgICAgIHRvZ2dsZShjbS5kaXNwbGF5LnNjcm9sbGVyLCAiZHJhZ2xlYXZlIiwgZnVuY3MubGVhdmUpOwogICAgICB0b2dnbGUoY20uZGlzcGxheS5zY3JvbGxlciwgImRyb3AiLCBmdW5jcy5kcm9wKTsKICAgIH0KICB9CgogIC8vIENhbGxlZCB3aGVuIHRoZSB3aW5kb3cgcmVzaXplcwogIGZ1bmN0aW9uIG9uUmVzaXplKGNtKSB7CiAgICB2YXIgZCA9IGNtLmRpc3BsYXk7CiAgICBpZiAoZC5sYXN0V3JhcEhlaWdodCA9PSBkLndyYXBwZXIuY2xpZW50SGVpZ2h0ICYmIGQubGFzdFdyYXBXaWR0aCA9PSBkLndyYXBwZXIuY2xpZW50V2lkdGgpCiAgICAgIHJldHVybjsKICAgIC8vIE1pZ2h0IGJlIGEgdGV4dCBzY2FsaW5nIG9wZXJhdGlvbiwgY2xlYXIgc2l6ZSBjYWNoZXMuCiAgICBkLmNhY2hlZENoYXJXaWR0aCA9IGQuY2FjaGVkVGV4dEhlaWdodCA9IGQuY2FjaGVkUGFkZGluZ0ggPSBudWxsOwogICAgZC5zY3JvbGxiYXJzQ2xpcHBlZCA9IGZhbHNlOwogICAgY20uc2V0U2l6ZSgpOwogIH0KCiAgLy8gTU9VU0UgRVZFTlRTCgogIC8vIFJldHVybiB0cnVlIHdoZW4gdGhlIGdpdmVuIG1vdXNlIGV2ZW50IGhhcHBlbmVkIGluIGEgd2lkZ2V0CiAgZnVuY3Rpb24gZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSB7CiAgICBmb3IgKHZhciBuID0gZV90YXJnZXQoZSk7IG4gIT0gZGlzcGxheS53cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKSB7CiAgICAgIGlmICghbiB8fCAobi5ub2RlVHlwZSA9PSAxICYmIG4uZ2V0QXR0cmlidXRlKCJjbS1pZ25vcmUtZXZlbnRzIikgPT0gInRydWUiKSB8fAogICAgICAgICAgKG4ucGFyZW50Tm9kZSA9PSBkaXNwbGF5LnNpemVyICYmIG4gIT0gZGlzcGxheS5tb3ZlcikpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfQoKICAvLyBHaXZlbiBhIG1vdXNlIGV2ZW50LCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIHBvc2l0aW9uLiBJZiBsaWJlcmFsCiAgLy8gaXMgZmFsc2UsIGl0IGNoZWNrcyB3aGV0aGVyIGEgZ3V0dGVyIG9yIHNjcm9sbGJhciB3YXMgY2xpY2tlZCwKICAvLyBhbmQgcmV0dXJucyBudWxsIGlmIGl0IHdhcy4gZm9yUmVjdCBpcyB1c2VkIGJ5IHJlY3Rhbmd1bGFyCiAgLy8gc2VsZWN0aW9ucywgYW5kIHRyaWVzIHRvIGVzdGltYXRlIGEgY2hhcmFjdGVyIHBvc2l0aW9uIGV2ZW4gZm9yCiAgLy8gY29vcmRpbmF0ZXMgYmV5b25kIHRoZSByaWdodCBvZiB0aGUgdGV4dC4KICBmdW5jdGlvbiBwb3NGcm9tTW91c2UoY20sIGUsIGxpYmVyYWwsIGZvclJlY3QpIHsKICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKICAgIGlmICghbGliZXJhbCAmJiBlX3RhcmdldChlKS5nZXRBdHRyaWJ1dGUoImNtLW5vdC1jb250ZW50IikgPT0gInRydWUiKSByZXR1cm4gbnVsbDsKCiAgICB2YXIgeCwgeSwgc3BhY2UgPSBkaXNwbGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIC8vIEZhaWxzIHVucHJlZGljdGFibHkgb24gSUVbNjddIHdoZW4gbW91c2UgaXMgZHJhZ2dlZCBhcm91bmQgcXVpY2tseS4KICAgIHRyeSB7IHggPSBlLmNsaWVudFggLSBzcGFjZS5sZWZ0OyB5ID0gZS5jbGllbnRZIC0gc3BhY2UudG9wOyB9CiAgICBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfQogICAgdmFyIGNvb3JkcyA9IGNvb3Jkc0NoYXIoY20sIHgsIHkpLCBsaW5lOwogICAgaWYgKGZvclJlY3QgJiYgY29vcmRzLnhSZWwgPT0gMSAmJiAobGluZSA9IGdldExpbmUoY20uZG9jLCBjb29yZHMubGluZSkudGV4dCkubGVuZ3RoID09IGNvb3Jkcy5jaCkgewogICAgICB2YXIgY29sRGlmZiA9IGNvdW50Q29sdW1uKGxpbmUsIGxpbmUubGVuZ3RoLCBjbS5vcHRpb25zLnRhYlNpemUpIC0gbGluZS5sZW5ndGg7CiAgICAgIGNvb3JkcyA9IFBvcyhjb29yZHMubGluZSwgTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCgoeCAtIHBhZGRpbmdIKGNtLmRpc3BsYXkpLmxlZnQpIC8gY2hhcldpZHRoKGNtLmRpc3BsYXkpKSAtIGNvbERpZmYpKTsKICAgIH0KICAgIHJldHVybiBjb29yZHM7CiAgfQoKICAvLyBBIG1vdXNlIGRvd24gY2FuIGJlIGEgc2luZ2xlIGNsaWNrLCBkb3VibGUgY2xpY2ssIHRyaXBsZSBjbGljaywKICAvLyBzdGFydCBvZiBzZWxlY3Rpb24gZHJhZywgc3RhcnQgb2YgdGV4dCBkcmFnLCBuZXcgY3Vyc29yCiAgLy8gKGN0cmwtY2xpY2spLCByZWN0YW5nbGUgZHJhZyAoYWx0LWRyYWcpLCBvciB4d2luCiAgLy8gbWlkZGxlLWNsaWNrLXBhc3RlLiBPciBpdCBtaWdodCBiZSBhIGNsaWNrIG9uIHNvbWV0aGluZyB3ZSBzaG91bGQKICAvLyBub3QgaW50ZXJmZXJlIHdpdGgsIHN1Y2ggYXMgYSBzY3JvbGxiYXIgb3Igd2lkZ2V0LgogIGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHsKICAgIHZhciBjbSA9IHRoaXMsIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwogICAgaWYgKGRpc3BsYXkuYWN0aXZlVG91Y2ggJiYgZGlzcGxheS5pbnB1dC5zdXBwb3J0c1RvdWNoKCkgfHwgc2lnbmFsRE9NRXZlbnQoY20sIGUpKSByZXR1cm47CiAgICBkaXNwbGF5LnNoaWZ0ID0gZS5zaGlmdEtleTsKCiAgICBpZiAoZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSkgewogICAgICBpZiAoIXdlYmtpdCkgewogICAgICAgIC8vIEJyaWVmbHkgdHVybiBvZmYgZHJhZ2dhYmlsaXR5LCB0byBhbGxvdyB3aWRnZXRzIHRvIGRvCiAgICAgICAgLy8gbm9ybWFsIGRyYWdnaW5nIHRoaW5ncy4KICAgICAgICBkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJsZSA9IGZhbHNlOwogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJsZSA9IHRydWU7fSwgMTAwKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoY2xpY2tJbkd1dHRlcihjbSwgZSkpIHJldHVybjsKICAgIHZhciBzdGFydCA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7CiAgICB3aW5kb3cuZm9jdXMoKTsKCiAgICBzd2l0Y2ggKGVfYnV0dG9uKGUpKSB7CiAgICBjYXNlIDE6CiAgICAgIC8vICMzMjYxOiBtYWtlIHN1cmUsIHRoYXQgd2UncmUgbm90IHN0YXJ0aW5nIGEgc2Vjb25kIHNlbGVjdGlvbgogICAgICBpZiAoY20uc3RhdGUuc2VsZWN0aW5nVGV4dCkKICAgICAgICBjbS5zdGF0ZS5zZWxlY3RpbmdUZXh0KGUpOwogICAgICBlbHNlIGlmIChzdGFydCkKICAgICAgICBsZWZ0QnV0dG9uRG93bihjbSwgZSwgc3RhcnQpOwogICAgICBlbHNlIGlmIChlX3RhcmdldChlKSA9PSBkaXNwbGF5LnNjcm9sbGVyKQogICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyOgogICAgICBpZiAod2Via2l0KSBjbS5zdGF0ZS5sYXN0TWlkZGxlRG93biA9ICtuZXcgRGF0ZTsKICAgICAgaWYgKHN0YXJ0KSBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCBzdGFydCk7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7ZGlzcGxheS5pbnB1dC5mb2N1cygpO30sIDIwKTsKICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDM6CiAgICAgIGlmIChjYXB0dXJlUmlnaHRDbGljaykgb25Db250ZXh0TWVudShjbSwgZSk7CiAgICAgIGVsc2UgZGVsYXlCbHVyRXZlbnQoY20pOwogICAgICBicmVhazsKICAgIH0KICB9CgogIHZhciBsYXN0Q2xpY2ssIGxhc3REb3VibGVDbGljazsKICBmdW5jdGlvbiBsZWZ0QnV0dG9uRG93bihjbSwgZSwgc3RhcnQpIHsKICAgIGlmIChpZSkgc2V0VGltZW91dChiaW5kKGVuc3VyZUZvY3VzLCBjbSksIDApOwogICAgZWxzZSBjbS5jdXJPcC5mb2N1cyA9IGFjdGl2ZUVsdCgpOwoKICAgIHZhciBub3cgPSArbmV3IERhdGUsIHR5cGU7CiAgICBpZiAobGFzdERvdWJsZUNsaWNrICYmIGxhc3REb3VibGVDbGljay50aW1lID4gbm93IC0gNDAwICYmIGNtcChsYXN0RG91YmxlQ2xpY2sucG9zLCBzdGFydCkgPT0gMCkgewogICAgICB0eXBlID0gInRyaXBsZSI7CiAgICB9IGVsc2UgaWYgKGxhc3RDbGljayAmJiBsYXN0Q2xpY2sudGltZSA+IG5vdyAtIDQwMCAmJiBjbXAobGFzdENsaWNrLnBvcywgc3RhcnQpID09IDApIHsKICAgICAgdHlwZSA9ICJkb3VibGUiOwogICAgICBsYXN0RG91YmxlQ2xpY2sgPSB7dGltZTogbm93LCBwb3M6IHN0YXJ0fTsKICAgIH0gZWxzZSB7CiAgICAgIHR5cGUgPSAic2luZ2xlIjsKICAgICAgbGFzdENsaWNrID0ge3RpbWU6IG5vdywgcG9zOiBzdGFydH07CiAgICB9CgogICAgdmFyIHNlbCA9IGNtLmRvYy5zZWwsIG1vZGlmaWVyID0gbWFjID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5LCBjb250YWluZWQ7CiAgICBpZiAoY20ub3B0aW9ucy5kcmFnRHJvcCAmJiBkcmFnQW5kRHJvcCAmJiAhaXNSZWFkT25seShjbSkgJiYKICAgICAgICB0eXBlID09ICJzaW5nbGUiICYmIChjb250YWluZWQgPSBzZWwuY29udGFpbnMoc3RhcnQpKSA+IC0xICYmCiAgICAgICAgKGNtcCgoY29udGFpbmVkID0gc2VsLnJhbmdlc1tjb250YWluZWRdKS5mcm9tKCksIHN0YXJ0KSA8IDAgfHwgc3RhcnQueFJlbCA+IDApICYmCiAgICAgICAgKGNtcChjb250YWluZWQudG8oKSwgc3RhcnQpID4gMCB8fCBzdGFydC54UmVsIDwgMCkpCiAgICAgIGxlZnRCdXR0b25TdGFydERyYWcoY20sIGUsIHN0YXJ0LCBtb2RpZmllcik7CiAgICBlbHNlCiAgICAgIGxlZnRCdXR0b25TZWxlY3QoY20sIGUsIHN0YXJ0LCB0eXBlLCBtb2RpZmllcik7CiAgfQoKICAvLyBTdGFydCBhIHRleHQgZHJhZy4gV2hlbiBpdCBlbmRzLCBzZWUgaWYgYW55IGRyYWdnaW5nIGFjdHVhbGx5CiAgLy8gaGFwcGVuLCBhbmQgdHJlYXQgYXMgYSBjbGljayBpZiBpdCBkaWRuJ3QuCiAgZnVuY3Rpb24gbGVmdEJ1dHRvblN0YXJ0RHJhZyhjbSwgZSwgc3RhcnQsIG1vZGlmaWVyKSB7CiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHN0YXJ0VGltZSA9ICtuZXcgRGF0ZTsKICAgIHZhciBkcmFnRW5kID0gb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlMikgewogICAgICBpZiAod2Via2l0KSBkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJsZSA9IGZhbHNlOwogICAgICBjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgPSBmYWxzZTsKICAgICAgb2ZmKGRvY3VtZW50LCAibW91c2V1cCIsIGRyYWdFbmQpOwogICAgICBvZmYoZGlzcGxheS5zY3JvbGxlciwgImRyb3AiLCBkcmFnRW5kKTsKICAgICAgaWYgKE1hdGguYWJzKGUuY2xpZW50WCAtIGUyLmNsaWVudFgpICsgTWF0aC5hYnMoZS5jbGllbnRZIC0gZTIuY2xpZW50WSkgPCAxMCkgewogICAgICAgIGVfcHJldmVudERlZmF1bHQoZTIpOwogICAgICAgIGlmICghbW9kaWZpZXIgJiYgK25ldyBEYXRlIC0gMjAwIDwgc3RhcnRUaW1lKQogICAgICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgc3RhcnQpOwogICAgICAgIC8vIFdvcmsgYXJvdW5kIHVuZXhwbGFpbmFibGUgZm9jdXMgcHJvYmxlbSBpbiBJRTkgKCMyMTI3KSBhbmQgQ2hyb21lICgjMzA4MSkKICAgICAgICBpZiAod2Via2l0IHx8IGllICYmIGllX3ZlcnNpb24gPT0gOSkKICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7ZG9jdW1lbnQuYm9keS5mb2N1cygpOyBkaXNwbGF5LmlucHV0LmZvY3VzKCk7fSwgMjApOwogICAgICAgIGVsc2UKICAgICAgICAgIGRpc3BsYXkuaW5wdXQuZm9jdXMoKTsKICAgICAgfQogICAgfSk7CiAgICAvLyBMZXQgdGhlIGRyYWcgaGFuZGxlciBoYW5kbGUgdGhpcy4KICAgIGlmICh3ZWJraXQpIGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gdHJ1ZTsKICAgIGNtLnN0YXRlLmRyYWdnaW5nVGV4dCA9IGRyYWdFbmQ7CiAgICAvLyBJRSdzIGFwcHJvYWNoIHRvIGRyYWdnYWJsZQogICAgaWYgKGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ0Ryb3ApIGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ0Ryb3AoKTsKICAgIG9uKGRvY3VtZW50LCAibW91c2V1cCIsIGRyYWdFbmQpOwogICAgb24oZGlzcGxheS5zY3JvbGxlciwgImRyb3AiLCBkcmFnRW5kKTsKICB9CgogIC8vIE5vcm1hbCBzZWxlY3Rpb24sIGFzIG9wcG9zZWQgdG8gdGV4dCBkcmFnZ2luZy4KICBmdW5jdGlvbiBsZWZ0QnV0dG9uU2VsZWN0KGNtLCBlLCBzdGFydCwgdHlwZSwgYWRkTmV3KSB7CiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYzsKICAgIGVfcHJldmVudERlZmF1bHQoZSk7CgogICAgdmFyIG91clJhbmdlLCBvdXJJbmRleCwgc3RhcnRTZWwgPSBkb2Muc2VsLCByYW5nZXMgPSBzdGFydFNlbC5yYW5nZXM7CiAgICBpZiAoYWRkTmV3ICYmICFlLnNoaWZ0S2V5KSB7CiAgICAgIG91ckluZGV4ID0gZG9jLnNlbC5jb250YWlucyhzdGFydCk7CiAgICAgIGlmIChvdXJJbmRleCA+IC0xKQogICAgICAgIG91clJhbmdlID0gcmFuZ2VzW291ckluZGV4XTsKICAgICAgZWxzZQogICAgICAgIG91clJhbmdlID0gbmV3IFJhbmdlKHN0YXJ0LCBzdGFydCk7CiAgICB9IGVsc2UgewogICAgICBvdXJSYW5nZSA9IGRvYy5zZWwucHJpbWFyeSgpOwogICAgICBvdXJJbmRleCA9IGRvYy5zZWwucHJpbUluZGV4OwogICAgfQoKICAgIGlmIChlLmFsdEtleSkgewogICAgICB0eXBlID0gInJlY3QiOwogICAgICBpZiAoIWFkZE5ldykgb3VyUmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KTsKICAgICAgc3RhcnQgPSBwb3NGcm9tTW91c2UoY20sIGUsIHRydWUsIHRydWUpOwogICAgICBvdXJJbmRleCA9IC0xOwogICAgfSBlbHNlIGlmICh0eXBlID09ICJkb3VibGUiKSB7CiAgICAgIHZhciB3b3JkID0gY20uZmluZFdvcmRBdChzdGFydCk7CiAgICAgIGlmIChjbS5kaXNwbGF5LnNoaWZ0IHx8IGRvYy5leHRlbmQpCiAgICAgICAgb3VyUmFuZ2UgPSBleHRlbmRSYW5nZShkb2MsIG91clJhbmdlLCB3b3JkLmFuY2hvciwgd29yZC5oZWFkKTsKICAgICAgZWxzZQogICAgICAgIG91clJhbmdlID0gd29yZDsKICAgIH0gZWxzZSBpZiAodHlwZSA9PSAidHJpcGxlIikgewogICAgICB2YXIgbGluZSA9IG5ldyBSYW5nZShQb3Moc3RhcnQubGluZSwgMCksIGNsaXBQb3MoZG9jLCBQb3Moc3RhcnQubGluZSArIDEsIDApKSk7CiAgICAgIGlmIChjbS5kaXNwbGF5LnNoaWZ0IHx8IGRvYy5leHRlbmQpCiAgICAgICAgb3VyUmFuZ2UgPSBleHRlbmRSYW5nZShkb2MsIG91clJhbmdlLCBsaW5lLmFuY2hvciwgbGluZS5oZWFkKTsKICAgICAgZWxzZQogICAgICAgIG91clJhbmdlID0gbGluZTsKICAgIH0gZWxzZSB7CiAgICAgIG91clJhbmdlID0gZXh0ZW5kUmFuZ2UoZG9jLCBvdXJSYW5nZSwgc3RhcnQpOwogICAgfQoKICAgIGlmICghYWRkTmV3KSB7CiAgICAgIG91ckluZGV4ID0gMDsKICAgICAgc2V0U2VsZWN0aW9uKGRvYywgbmV3IFNlbGVjdGlvbihbb3VyUmFuZ2VdLCAwKSwgc2VsX21vdXNlKTsKICAgICAgc3RhcnRTZWwgPSBkb2Muc2VsOwogICAgfSBlbHNlIGlmIChvdXJJbmRleCA9PSAtMSkgewogICAgICBvdXJJbmRleCA9IHJhbmdlcy5sZW5ndGg7CiAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVjdGlvbihyYW5nZXMuY29uY2F0KFtvdXJSYW5nZV0pLCBvdXJJbmRleCksCiAgICAgICAgICAgICAgICAgICB7c2Nyb2xsOiBmYWxzZSwgb3JpZ2luOiAiKm1vdXNlIn0pOwogICAgfSBlbHNlIGlmIChyYW5nZXMubGVuZ3RoID4gMSAmJiByYW5nZXNbb3VySW5kZXhdLmVtcHR5KCkgJiYgdHlwZSA9PSAic2luZ2xlIiAmJiAhZS5zaGlmdEtleSkgewogICAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxlY3Rpb24ocmFuZ2VzLnNsaWNlKDAsIG91ckluZGV4KS5jb25jYXQocmFuZ2VzLnNsaWNlKG91ckluZGV4ICsgMSkpLCAwKSwKICAgICAgICAgICAgICAgICAgIHtzY3JvbGw6IGZhbHNlLCBvcmlnaW46ICIqbW91c2UifSk7CiAgICAgIHN0YXJ0U2VsID0gZG9jLnNlbDsKICAgIH0gZWxzZSB7CiAgICAgIHJlcGxhY2VPbmVTZWxlY3Rpb24oZG9jLCBvdXJJbmRleCwgb3VyUmFuZ2UsIHNlbF9tb3VzZSk7CiAgICB9CgogICAgdmFyIGxhc3RQb3MgPSBzdGFydDsKICAgIGZ1bmN0aW9uIGV4dGVuZFRvKHBvcykgewogICAgICBpZiAoY21wKGxhc3RQb3MsIHBvcykgPT0gMCkgcmV0dXJuOwogICAgICBsYXN0UG9zID0gcG9zOwoKICAgICAgaWYgKHR5cGUgPT0gInJlY3QiKSB7CiAgICAgICAgdmFyIHJhbmdlcyA9IFtdLCB0YWJTaXplID0gY20ub3B0aW9ucy50YWJTaXplOwogICAgICAgIHZhciBzdGFydENvbCA9IGNvdW50Q29sdW1uKGdldExpbmUoZG9jLCBzdGFydC5saW5lKS50ZXh0LCBzdGFydC5jaCwgdGFiU2l6ZSk7CiAgICAgICAgdmFyIHBvc0NvbCA9IGNvdW50Q29sdW1uKGdldExpbmUoZG9jLCBwb3MubGluZSkudGV4dCwgcG9zLmNoLCB0YWJTaXplKTsKICAgICAgICB2YXIgbGVmdCA9IE1hdGgubWluKHN0YXJ0Q29sLCBwb3NDb2wpLCByaWdodCA9IE1hdGgubWF4KHN0YXJ0Q29sLCBwb3NDb2wpOwogICAgICAgIGZvciAodmFyIGxpbmUgPSBNYXRoLm1pbihzdGFydC5saW5lLCBwb3MubGluZSksIGVuZCA9IE1hdGgubWluKGNtLmxhc3RMaW5lKCksIE1hdGgubWF4KHN0YXJ0LmxpbmUsIHBvcy5saW5lKSk7CiAgICAgICAgICAgICBsaW5lIDw9IGVuZDsgbGluZSsrKSB7CiAgICAgICAgICB2YXIgdGV4dCA9IGdldExpbmUoZG9jLCBsaW5lKS50ZXh0LCBsZWZ0UG9zID0gZmluZENvbHVtbih0ZXh0LCBsZWZ0LCB0YWJTaXplKTsKICAgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQogICAgICAgICAgICByYW5nZXMucHVzaChuZXcgUmFuZ2UoUG9zKGxpbmUsIGxlZnRQb3MpLCBQb3MobGluZSwgbGVmdFBvcykpKTsKICAgICAgICAgIGVsc2UgaWYgKHRleHQubGVuZ3RoID4gbGVmdFBvcykKICAgICAgICAgICAgcmFuZ2VzLnB1c2gobmV3IFJhbmdlKFBvcyhsaW5lLCBsZWZ0UG9zKSwgUG9zKGxpbmUsIGZpbmRDb2x1bW4odGV4dCwgcmlnaHQsIHRhYlNpemUpKSkpOwogICAgICAgIH0KICAgICAgICBpZiAoIXJhbmdlcy5sZW5ndGgpIHJhbmdlcy5wdXNoKG5ldyBSYW5nZShzdGFydCwgc3RhcnQpKTsKICAgICAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxlY3Rpb24oc3RhcnRTZWwucmFuZ2VzLnNsaWNlKDAsIG91ckluZGV4KS5jb25jYXQocmFuZ2VzKSwgb3VySW5kZXgpLAogICAgICAgICAgICAgICAgICAgICB7b3JpZ2luOiAiKm1vdXNlIiwgc2Nyb2xsOiBmYWxzZX0pOwogICAgICAgIGNtLnNjcm9sbEludG9WaWV3KHBvcyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIG9sZFJhbmdlID0gb3VyUmFuZ2U7CiAgICAgICAgdmFyIGFuY2hvciA9IG9sZFJhbmdlLmFuY2hvciwgaGVhZCA9IHBvczsKICAgICAgICBpZiAodHlwZSAhPSAic2luZ2xlIikgewogICAgICAgICAgaWYgKHR5cGUgPT0gImRvdWJsZSIpCiAgICAgICAgICAgIHZhciByYW5nZSA9IGNtLmZpbmRXb3JkQXQocG9zKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKFBvcyhwb3MubGluZSwgMCksIGNsaXBQb3MoZG9jLCBQb3MocG9zLmxpbmUgKyAxLCAwKSkpOwogICAgICAgICAgaWYgKGNtcChyYW5nZS5hbmNob3IsIGFuY2hvcikgPiAwKSB7CiAgICAgICAgICAgIGhlYWQgPSByYW5nZS5oZWFkOwogICAgICAgICAgICBhbmNob3IgPSBtaW5Qb3Mob2xkUmFuZ2UuZnJvbSgpLCByYW5nZS5hbmNob3IpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaGVhZCA9IHJhbmdlLmFuY2hvcjsKICAgICAgICAgICAgYW5jaG9yID0gbWF4UG9zKG9sZFJhbmdlLnRvKCksIHJhbmdlLmhlYWQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgcmFuZ2VzID0gc3RhcnRTZWwucmFuZ2VzLnNsaWNlKDApOwogICAgICAgIHJhbmdlc1tvdXJJbmRleF0gPSBuZXcgUmFuZ2UoY2xpcFBvcyhkb2MsIGFuY2hvciksIGhlYWQpOwogICAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVjdGlvbihyYW5nZXMsIG91ckluZGV4KSwgc2VsX21vdXNlKTsKICAgICAgfQogICAgfQoKICAgIHZhciBlZGl0b3JTaXplID0gZGlzcGxheS53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgLy8gVXNlZCB0byBlbnN1cmUgdGltZW91dCByZS10cmllcyBkb24ndCBmaXJlIHdoZW4gYW5vdGhlciBleHRlbmQKICAgIC8vIGhhcHBlbmVkIGluIHRoZSBtZWFudGltZSAoY2xlYXJUaW1lb3V0IGlzbid0IHJlbGlhYmxlIC0tIGF0CiAgICAvLyBsZWFzdCBvbiBDaHJvbWUsIHRoZSB0aW1lb3V0cyBzdGlsbCBoYXBwZW4gZXZlbiB3aGVuIGNsZWFyZWQsCiAgICAvLyBpZiB0aGUgY2xlYXIgaGFwcGVucyBhZnRlciB0aGVpciBzY2hlZHVsZWQgZmlyaW5nIHRpbWUpLgogICAgdmFyIGNvdW50ZXIgPSAwOwoKICAgIGZ1bmN0aW9uIGV4dGVuZChlKSB7CiAgICAgIHZhciBjdXJDb3VudCA9ICsrY291bnRlcjsKICAgICAgdmFyIGN1ciA9IHBvc0Zyb21Nb3VzZShjbSwgZSwgdHJ1ZSwgdHlwZSA9PSAicmVjdCIpOwogICAgICBpZiAoIWN1cikgcmV0dXJuOwogICAgICBpZiAoY21wKGN1ciwgbGFzdFBvcykgIT0gMCkgewogICAgICAgIGNtLmN1ck9wLmZvY3VzID0gYWN0aXZlRWx0KCk7CiAgICAgICAgZXh0ZW5kVG8oY3VyKTsKICAgICAgICB2YXIgdmlzaWJsZSA9IHZpc2libGVMaW5lcyhkaXNwbGF5LCBkb2MpOwogICAgICAgIGlmIChjdXIubGluZSA+PSB2aXNpYmxlLnRvIHx8IGN1ci5saW5lIDwgdmlzaWJsZS5mcm9tKQogICAgICAgICAgc2V0VGltZW91dChvcGVyYXRpb24oY20sIGZ1bmN0aW9uKCl7aWYgKGNvdW50ZXIgPT0gY3VyQ291bnQpIGV4dGVuZChlKTt9KSwgMTUwKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgb3V0c2lkZSA9IGUuY2xpZW50WSA8IGVkaXRvclNpemUudG9wID8gLTIwIDogZS5jbGllbnRZID4gZWRpdG9yU2l6ZS5ib3R0b20gPyAyMCA6IDA7CiAgICAgICAgaWYgKG91dHNpZGUpIHNldFRpbWVvdXQob3BlcmF0aW9uKGNtLCBmdW5jdGlvbigpIHsKICAgICAgICAgIGlmIChjb3VudGVyICE9IGN1ckNvdW50KSByZXR1cm47CiAgICAgICAgICBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCArPSBvdXRzaWRlOwogICAgICAgICAgZXh0ZW5kKGUpOwogICAgICAgIH0pLCA1MCk7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBkb25lKGUpIHsKICAgICAgY20uc3RhdGUuc2VsZWN0aW5nVGV4dCA9IGZhbHNlOwogICAgICBjb3VudGVyID0gSW5maW5pdHk7CiAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CiAgICAgIGRpc3BsYXkuaW5wdXQuZm9jdXMoKTsKICAgICAgb2ZmKGRvY3VtZW50LCAibW91c2Vtb3ZlIiwgbW92ZSk7CiAgICAgIG9mZihkb2N1bWVudCwgIm1vdXNldXAiLCB1cCk7CiAgICAgIGRvYy5oaXN0b3J5Lmxhc3RTZWxPcmlnaW4gPSBudWxsOwogICAgfQoKICAgIHZhciBtb3ZlID0gb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7CiAgICAgIGlmICghZV9idXR0b24oZSkpIGRvbmUoZSk7CiAgICAgIGVsc2UgZXh0ZW5kKGUpOwogICAgfSk7CiAgICB2YXIgdXAgPSBvcGVyYXRpb24oY20sIGRvbmUpOwogICAgY20uc3RhdGUuc2VsZWN0aW5nVGV4dCA9IHVwOwogICAgb24oZG9jdW1lbnQsICJtb3VzZW1vdmUiLCBtb3ZlKTsKICAgIG9uKGRvY3VtZW50LCAibW91c2V1cCIsIHVwKTsKICB9CgogIC8vIERldGVybWluZXMgd2hldGhlciBhbiBldmVudCBoYXBwZW5lZCBpbiB0aGUgZ3V0dGVyLCBhbmQgZmlyZXMgdGhlCiAgLy8gaGFuZGxlcnMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50LgogIGZ1bmN0aW9uIGd1dHRlckV2ZW50KGNtLCBlLCB0eXBlLCBwcmV2ZW50KSB7CiAgICB0cnkgeyB2YXIgbVggPSBlLmNsaWVudFgsIG1ZID0gZS5jbGllbnRZOyB9CiAgICBjYXRjaChlKSB7IHJldHVybiBmYWxzZTsgfQogICAgaWYgKG1YID49IE1hdGguZmxvb3IoY20uZGlzcGxheS5ndXR0ZXJzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKHByZXZlbnQpIGVfcHJldmVudERlZmF1bHQoZSk7CgogICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwogICAgdmFyIGxpbmVCb3ggPSBkaXNwbGF5LmxpbmVEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgogICAgaWYgKG1ZID4gbGluZUJveC5ib3R0b20gfHwgIWhhc0hhbmRsZXIoY20sIHR5cGUpKSByZXR1cm4gZV9kZWZhdWx0UHJldmVudGVkKGUpOwogICAgbVkgLT0gbGluZUJveC50b3AgLSBkaXNwbGF5LnZpZXdPZmZzZXQ7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIGcgPSBkaXNwbGF5Lmd1dHRlcnMuY2hpbGROb2Rlc1tpXTsKICAgICAgaWYgKGcgJiYgZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCA+PSBtWCkgewogICAgICAgIHZhciBsaW5lID0gbGluZUF0SGVpZ2h0KGNtLmRvYywgbVkpOwogICAgICAgIHZhciBndXR0ZXIgPSBjbS5vcHRpb25zLmd1dHRlcnNbaV07CiAgICAgICAgc2lnbmFsKGNtLCB0eXBlLCBjbSwgbGluZSwgZ3V0dGVyLCBlKTsKICAgICAgICByZXR1cm4gZV9kZWZhdWx0UHJldmVudGVkKGUpOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBjbGlja0luR3V0dGVyKGNtLCBlKSB7CiAgICByZXR1cm4gZ3V0dGVyRXZlbnQoY20sIGUsICJndXR0ZXJDbGljayIsIHRydWUpOwogIH0KCiAgLy8gS2x1ZGdlIHRvIHdvcmsgYXJvdW5kIHN0cmFuZ2UgSUUgYmVoYXZpb3Igd2hlcmUgaXQnbGwgc29tZXRpbWVzCiAgLy8gcmUtZmlyZSBhIHNlcmllcyBvZiBkcmFnLXJlbGF0ZWQgZXZlbnRzIHJpZ2h0IGFmdGVyIHRoZSBkcm9wICgjMTU1MSkKICB2YXIgbGFzdERyb3AgPSAwOwoKICBmdW5jdGlvbiBvbkRyb3AoZSkgewogICAgdmFyIGNtID0gdGhpczsKICAgIGNsZWFyRHJhZ0N1cnNvcihjbSk7CiAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpCiAgICAgIHJldHVybjsKICAgIGVfcHJldmVudERlZmF1bHQoZSk7CiAgICBpZiAoaWUpIGxhc3REcm9wID0gK25ldyBEYXRlOwogICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSwgdHJ1ZSksIGZpbGVzID0gZS5kYXRhVHJhbnNmZXIuZmlsZXM7CiAgICBpZiAoIXBvcyB8fCBpc1JlYWRPbmx5KGNtKSkgcmV0dXJuOwogICAgLy8gTWlnaHQgYmUgYSBmaWxlIGRyb3AsIGluIHdoaWNoIGNhc2Ugd2Ugc2ltcGx5IGV4dHJhY3QgdGhlIHRleHQKICAgIC8vIGFuZCBpbnNlcnQgaXQuCiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoICYmIHdpbmRvdy5GaWxlUmVhZGVyICYmIHdpbmRvdy5GaWxlKSB7CiAgICAgIHZhciBuID0gZmlsZXMubGVuZ3RoLCB0ZXh0ID0gQXJyYXkobiksIHJlYWQgPSAwOwogICAgICB2YXIgbG9hZEZpbGUgPSBmdW5jdGlvbihmaWxlLCBpKSB7CiAgICAgICAgaWYgKGNtLm9wdGlvbnMuYWxsb3dEcm9wRmlsZVR5cGVzICYmCiAgICAgICAgICAgIGluZGV4T2YoY20ub3B0aW9ucy5hbGxvd0Ryb3BGaWxlVHlwZXMsIGZpbGUudHlwZSkgPT0gLTEpCiAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcjsKICAgICAgICByZWFkZXIub25sb2FkID0gb3BlcmF0aW9uKGNtLCBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBjb250ZW50ID0gcmVhZGVyLnJlc3VsdDsKICAgICAgICAgIGlmICgvW1x4MDAtXHgwOFx4MGUtXHgxZl17Mn0vLnRlc3QoY29udGVudCkpIGNvbnRlbnQgPSAiIjsKICAgICAgICAgIHRleHRbaV0gPSBjb250ZW50OwogICAgICAgICAgaWYgKCsrcmVhZCA9PSBuKSB7CiAgICAgICAgICAgIHBvcyA9IGNsaXBQb3MoY20uZG9jLCBwb3MpOwogICAgICAgICAgICB2YXIgY2hhbmdlID0ge2Zyb206IHBvcywgdG86IHBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjbS5kb2Muc3BsaXRMaW5lcyh0ZXh0LmpvaW4oY20uZG9jLmxpbmVTZXBhcmF0b3IoKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogInBhc3RlIn07CiAgICAgICAgICAgIG1ha2VDaGFuZ2UoY20uZG9jLCBjaGFuZ2UpOwogICAgICAgICAgICBzZXRTZWxlY3Rpb25SZXBsYWNlSGlzdG9yeShjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihwb3MsIGNoYW5nZUVuZChjaGFuZ2UpKSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7CiAgICAgIH07CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSBsb2FkRmlsZShmaWxlc1tpXSwgaSk7CiAgICB9IGVsc2UgeyAvLyBOb3JtYWwgZHJvcAogICAgICAvLyBEb24ndCBkbyBhIHJlcGxhY2UgaWYgdGhlIGRyb3AgaGFwcGVuZWQgaW5zaWRlIG9mIHRoZSBzZWxlY3RlZCB0ZXh0LgogICAgICBpZiAoY20uc3RhdGUuZHJhZ2dpbmdUZXh0ICYmIGNtLmRvYy5zZWwuY29udGFpbnMocG9zKSA+IC0xKSB7CiAgICAgICAgY20uc3RhdGUuZHJhZ2dpbmdUZXh0KGUpOwogICAgICAgIC8vIEVuc3VyZSB0aGUgZWRpdG9yIGlzIHJlLWZvY3VzZWQKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2NtLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTt9LCAyMCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRyeSB7CiAgICAgICAgdmFyIHRleHQgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCJUZXh0Iik7CiAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgIGlmIChjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgJiYgIShtYWMgPyBlLmFsdEtleSA6IGUuY3RybEtleSkpCiAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7CiAgICAgICAgICBzZXRTZWxlY3Rpb25Ob1VuZG8oY20uZG9jLCBzaW1wbGVTZWxlY3Rpb24ocG9zLCBwb3MpKTsKICAgICAgICAgIGlmIChzZWxlY3RlZCkgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RlZC5sZW5ndGg7ICsraSkKICAgICAgICAgICAgcmVwbGFjZVJhbmdlKGNtLmRvYywgIiIsIHNlbGVjdGVkW2ldLmFuY2hvciwgc2VsZWN0ZWRbaV0uaGVhZCwgImRyYWciKTsKICAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24odGV4dCwgImFyb3VuZCIsICJwYXN0ZSIpOwogICAgICAgICAgY20uZGlzcGxheS5pbnB1dC5mb2N1cygpOwogICAgICAgIH0KICAgICAgfQogICAgICBjYXRjaChlKXt9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvbkRyYWdTdGFydChjbSwgZSkgewogICAgaWYgKGllICYmICghY20uc3RhdGUuZHJhZ2dpbmdUZXh0IHx8ICtuZXcgRGF0ZSAtIGxhc3REcm9wIDwgMTAwKSkgeyBlX3N0b3AoZSk7IHJldHVybjsgfQogICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpKSByZXR1cm47CgogICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsIGNtLmdldFNlbGVjdGlvbigpKTsKCiAgICAvLyBVc2UgZHVtbXkgaW1hZ2UgaW5zdGVhZCBvZiBkZWZhdWx0IGJyb3dzZXJzIGltYWdlLgogICAgLy8gUmVjZW50IFNhZmFyaSAofjYuMC4yKSBoYXZlIGEgdGVuZGVuY3kgdG8gc2VnZmF1bHQgd2hlbiB0aGlzIGhhcHBlbnMsIHNvIHdlIGRvbid0IGRvIGl0IHRoZXJlLgogICAgaWYgKGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSAmJiAhc2FmYXJpKSB7CiAgICAgIHZhciBpbWcgPSBlbHQoImltZyIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDA7IHRvcDogMDsiKTsKICAgICAgaW1nLnNyYyA9ICJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PSI7CiAgICAgIGlmIChwcmVzdG8pIHsKICAgICAgICBpbWcud2lkdGggPSBpbWcuaGVpZ2h0ID0gMTsKICAgICAgICBjbS5kaXNwbGF5LndyYXBwZXIuYXBwZW5kQ2hpbGQoaW1nKTsKICAgICAgICAvLyBGb3JjZSBhIHJlbGF5b3V0LCBvciBPcGVyYSB3b24ndCB1c2Ugb3VyIGltYWdlIGZvciBzb21lIG9ic2N1cmUgcmVhc29uCiAgICAgICAgaW1nLl90b3AgPSBpbWcub2Zmc2V0VG9wOwogICAgICB9CiAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShpbWcsIDAsIDApOwogICAgICBpZiAocHJlc3RvKSBpbWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpbWcpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gb25EcmFnT3ZlcihjbSwgZSkgewogICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7CiAgICBpZiAoIXBvcykgcmV0dXJuOwogICAgdmFyIGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CiAgICBkcmF3U2VsZWN0aW9uQ3Vyc29yKGNtLCBwb3MsIGZyYWcpOwogICAgaWYgKCFjbS5kaXNwbGF5LmRyYWdDdXJzb3IpIHsKICAgICAgY20uZGlzcGxheS5kcmFnQ3Vyc29yID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1jdXJzb3JzIENvZGVNaXJyb3ItZHJhZ2N1cnNvcnMiKTsKICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UuaW5zZXJ0QmVmb3JlKGNtLmRpc3BsYXkuZHJhZ0N1cnNvciwgY20uZGlzcGxheS5jdXJzb3JEaXYpOwogICAgfQogICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoY20uZGlzcGxheS5kcmFnQ3Vyc29yLCBmcmFnKTsKICB9CgogIGZ1bmN0aW9uIGNsZWFyRHJhZ0N1cnNvcihjbSkgewogICAgaWYgKGNtLmRpc3BsYXkuZHJhZ0N1cnNvcikgewogICAgICBjbS5kaXNwbGF5LmxpbmVTcGFjZS5yZW1vdmVDaGlsZChjbS5kaXNwbGF5LmRyYWdDdXJzb3IpOwogICAgICBjbS5kaXNwbGF5LmRyYWdDdXJzb3IgPSBudWxsOwogICAgfQogIH0KCiAgLy8gU0NST0xMIEVWRU5UUwoKICAvLyBTeW5jIHRoZSBzY3JvbGxhYmxlIGFyZWEgYW5kIHNjcm9sbGJhcnMsIGVuc3VyZSB0aGUgdmlld3BvcnQKICAvLyBjb3ZlcnMgdGhlIHZpc2libGUgYXJlYS4KICBmdW5jdGlvbiBzZXRTY3JvbGxUb3AoY20sIHZhbCkgewogICAgaWYgKE1hdGguYWJzKGNtLmRvYy5zY3JvbGxUb3AgLSB2YWwpIDwgMikgcmV0dXJuOwogICAgY20uZG9jLnNjcm9sbFRvcCA9IHZhbDsKICAgIGlmICghZ2Vja28pIHVwZGF0ZURpc3BsYXlTaW1wbGUoY20sIHt0b3A6IHZhbH0pOwogICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wICE9IHZhbCkgY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSB2YWw7CiAgICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKHZhbCk7CiAgICBpZiAoZ2Vja28pIHVwZGF0ZURpc3BsYXlTaW1wbGUoY20pOwogICAgc3RhcnRXb3JrZXIoY20sIDEwMCk7CiAgfQogIC8vIFN5bmMgc2Nyb2xsZXIgYW5kIHNjcm9sbGJhciwgZW5zdXJlIHRoZSBndXR0ZXIgZWxlbWVudHMgYXJlCiAgLy8gYWxpZ25lZC4KICBmdW5jdGlvbiBzZXRTY3JvbGxMZWZ0KGNtLCB2YWwsIGlzU2Nyb2xsZXIpIHsKICAgIGlmIChpc1Njcm9sbGVyID8gdmFsID09IGNtLmRvYy5zY3JvbGxMZWZ0IDogTWF0aC5hYnMoY20uZG9jLnNjcm9sbExlZnQgLSB2YWwpIDwgMikgcmV0dXJuOwogICAgdmFsID0gTWF0aC5taW4odmFsLCBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoIC0gY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCk7CiAgICBjbS5kb2Muc2Nyb2xsTGVmdCA9IHZhbDsKICAgIGFsaWduSG9yaXpvbnRhbGx5KGNtKTsKICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgIT0gdmFsKSBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgPSB2YWw7CiAgICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsTGVmdCh2YWwpOwogIH0KCiAgLy8gU2luY2UgdGhlIGRlbHRhIHZhbHVlcyByZXBvcnRlZCBvbiBtb3VzZSB3aGVlbCBldmVudHMgYXJlCiAgLy8gdW5zdGFuZGFyZGl6ZWQgYmV0d2VlbiBicm93c2VycyBhbmQgZXZlbiBicm93c2VyIHZlcnNpb25zLCBhbmQKICAvLyBnZW5lcmFsbHkgaG9ycmlibHkgdW5wcmVkaWN0YWJsZSwgdGhpcyBjb2RlIHN0YXJ0cyBieSBtZWFzdXJpbmcKICAvLyB0aGUgc2Nyb2xsIGVmZmVjdCB0aGF0IHRoZSBmaXJzdCBmZXcgbW91c2Ugd2hlZWwgZXZlbnRzIGhhdmUsCiAgLy8gYW5kLCBmcm9tIHRoYXQsIGRldGVjdHMgdGhlIHdheSBpdCBjYW4gY29udmVydCBkZWx0YXMgdG8gcGl4ZWwKICAvLyBvZmZzZXRzIGFmdGVyd2FyZHMuCiAgLy8KICAvLyBUaGUgcmVhc29uIHdlIHdhbnQgdG8ga25vdyB0aGUgYW1vdW50IGEgd2hlZWwgZXZlbnQgd2lsbCBzY3JvbGwKICAvLyBpcyB0aGF0IGl0IGdpdmVzIHVzIGEgY2hhbmNlIHRvIHVwZGF0ZSB0aGUgZGlzcGxheSBiZWZvcmUgdGhlCiAgLy8gYWN0dWFsIHNjcm9sbGluZyBoYXBwZW5zLCByZWR1Y2luZyBmbGlja2VyaW5nLgoKICB2YXIgd2hlZWxTYW1wbGVzID0gMCwgd2hlZWxQaXhlbHNQZXJVbml0ID0gbnVsbDsKICAvLyBGaWxsIGluIGEgYnJvd3Nlci1kZXRlY3RlZCBzdGFydGluZyB2YWx1ZSBvbiBicm93c2VycyB3aGVyZSB3ZQogIC8vIGtub3cgb25lLiBUaGVzZSBkb24ndCBoYXZlIHRvIGJlIGFjY3VyYXRlIC0tIHRoZSByZXN1bHQgb2YgdGhlbQogIC8vIGJlaW5nIHdyb25nIHdvdWxkIGp1c3QgYmUgYSBzbGlnaHQgZmxpY2tlciBvbiB0aGUgZmlyc3Qgd2hlZWwKICAvLyBzY3JvbGwgKGlmIGl0IGlzIGxhcmdlIGVub3VnaCkuCiAgaWYgKGllKSB3aGVlbFBpeGVsc1BlclVuaXQgPSAtLjUzOwogIGVsc2UgaWYgKGdlY2tvKSB3aGVlbFBpeGVsc1BlclVuaXQgPSAxNTsKICBlbHNlIGlmIChjaHJvbWUpIHdoZWVsUGl4ZWxzUGVyVW5pdCA9IC0uNzsKICBlbHNlIGlmIChzYWZhcmkpIHdoZWVsUGl4ZWxzUGVyVW5pdCA9IC0xLzM7CgogIHZhciB3aGVlbEV2ZW50RGVsdGEgPSBmdW5jdGlvbihlKSB7CiAgICB2YXIgZHggPSBlLndoZWVsRGVsdGFYLCBkeSA9IGUud2hlZWxEZWx0YVk7CiAgICBpZiAoZHggPT0gbnVsbCAmJiBlLmRldGFpbCAmJiBlLmF4aXMgPT0gZS5IT1JJWk9OVEFMX0FYSVMpIGR4ID0gZS5kZXRhaWw7CiAgICBpZiAoZHkgPT0gbnVsbCAmJiBlLmRldGFpbCAmJiBlLmF4aXMgPT0gZS5WRVJUSUNBTF9BWElTKSBkeSA9IGUuZGV0YWlsOwogICAgZWxzZSBpZiAoZHkgPT0gbnVsbCkgZHkgPSBlLndoZWVsRGVsdGE7CiAgICByZXR1cm4ge3g6IGR4LCB5OiBkeX07CiAgfTsKICBDb2RlTWlycm9yLndoZWVsRXZlbnRQaXhlbHMgPSBmdW5jdGlvbihlKSB7CiAgICB2YXIgZGVsdGEgPSB3aGVlbEV2ZW50RGVsdGEoZSk7CiAgICBkZWx0YS54ICo9IHdoZWVsUGl4ZWxzUGVyVW5pdDsKICAgIGRlbHRhLnkgKj0gd2hlZWxQaXhlbHNQZXJVbml0OwogICAgcmV0dXJuIGRlbHRhOwogIH07CgogIGZ1bmN0aW9uIG9uU2Nyb2xsV2hlZWwoY20sIGUpIHsKICAgIHZhciBkZWx0YSA9IHdoZWVsRXZlbnREZWx0YShlKSwgZHggPSBkZWx0YS54LCBkeSA9IGRlbHRhLnk7CgogICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBzY3JvbGwgPSBkaXNwbGF5LnNjcm9sbGVyOwogICAgLy8gUXVpdCBpZiB0aGVyZSdzIG5vdGhpbmcgdG8gc2Nyb2xsIGhlcmUKICAgIHZhciBjYW5TY3JvbGxYID0gc2Nyb2xsLnNjcm9sbFdpZHRoID4gc2Nyb2xsLmNsaWVudFdpZHRoOwogICAgdmFyIGNhblNjcm9sbFkgPSBzY3JvbGwuc2Nyb2xsSGVpZ2h0ID4gc2Nyb2xsLmNsaWVudEhlaWdodDsKICAgIGlmICghKGR4ICYmIGNhblNjcm9sbFggfHwgZHkgJiYgY2FuU2Nyb2xsWSkpIHJldHVybjsKCiAgICAvLyBXZWJraXQgYnJvd3NlcnMgb24gT1MgWCBhYm9ydCBtb21lbnR1bSBzY3JvbGxzIHdoZW4gdGhlIHRhcmdldAogICAgLy8gb2YgdGhlIHNjcm9sbCBldmVudCBpcyByZW1vdmVkIGZyb20gdGhlIHNjcm9sbGFibGUgZWxlbWVudC4KICAgIC8vIFRoaXMgaGFjayAoc2VlIHJlbGF0ZWQgY29kZSBpbiBwYXRjaERpc3BsYXkpIG1ha2VzIHN1cmUgdGhlCiAgICAvLyBlbGVtZW50IGlzIGtlcHQgYXJvdW5kLgogICAgaWYgKGR5ICYmIG1hYyAmJiB3ZWJraXQpIHsKICAgICAgb3V0ZXI6IGZvciAodmFyIGN1ciA9IGUudGFyZ2V0LCB2aWV3ID0gZGlzcGxheS52aWV3OyBjdXIgIT0gc2Nyb2xsOyBjdXIgPSBjdXIucGFyZW50Tm9kZSkgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykgewogICAgICAgICAgaWYgKHZpZXdbaV0ubm9kZSA9PSBjdXIpIHsKICAgICAgICAgICAgY20uZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXQgPSBjdXI7CiAgICAgICAgICAgIGJyZWFrIG91dGVyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIE9uIHNvbWUgYnJvd3NlcnMsIGhvcml6b250YWwgc2Nyb2xsaW5nIHdpbGwgY2F1c2UgcmVkcmF3cyB0bwogICAgLy8gaGFwcGVuIGJlZm9yZSB0aGUgZ3V0dGVyIGhhcyBiZWVuIHJlYWxpZ25lZCwgY2F1c2luZyBpdCB0bwogICAgLy8gd3JpZ2dsZSBhcm91bmQgaW4gYSBtb3N0IHVuc2VlbWx5IHdheS4gV2hlbiB3ZSBoYXZlIGFuCiAgICAvLyBlc3RpbWF0ZWQgcGl4ZWxzL2RlbHRhIHZhbHVlLCB3ZSBqdXN0IGhhbmRsZSBob3Jpem9udGFsCiAgICAvLyBzY3JvbGxpbmcgZW50aXJlbHkgaGVyZS4gSXQnbGwgYmUgc2xpZ2h0bHkgb2ZmIGZyb20gbmF0aXZlLCBidXQKICAgIC8vIGJldHRlciB0aGFuIGdsaXRjaGluZyBvdXQuCiAgICBpZiAoZHggJiYgIWdlY2tvICYmICFwcmVzdG8gJiYgd2hlZWxQaXhlbHNQZXJVbml0ICE9IG51bGwpIHsKICAgICAgaWYgKGR5ICYmIGNhblNjcm9sbFkpCiAgICAgICAgc2V0U2Nyb2xsVG9wKGNtLCBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGwuc2Nyb2xsVG9wICsgZHkgKiB3aGVlbFBpeGVsc1BlclVuaXQsIHNjcm9sbC5zY3JvbGxIZWlnaHQgLSBzY3JvbGwuY2xpZW50SGVpZ2h0KSkpOwogICAgICBzZXRTY3JvbGxMZWZ0KGNtLCBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGwuc2Nyb2xsTGVmdCArIGR4ICogd2hlZWxQaXhlbHNQZXJVbml0LCBzY3JvbGwuc2Nyb2xsV2lkdGggLSBzY3JvbGwuY2xpZW50V2lkdGgpKSk7CiAgICAgIC8vIE9ubHkgcHJldmVudCBkZWZhdWx0IHNjcm9sbGluZyBpZiB2ZXJ0aWNhbCBzY3JvbGxpbmcgaXMKICAgICAgLy8gYWN0dWFsbHkgcG9zc2libGUuIE90aGVyd2lzZSwgaXQgY2F1c2VzIHZlcnRpY2FsIHNjcm9sbAogICAgICAvLyBqaXR0ZXIgb24gT1NYIHRyYWNrcGFkcyB3aGVuIGRlbHRhWCBpcyBzbWFsbCBhbmQgZGVsdGFZCiAgICAgIC8vIGlzIGxhcmdlIChpc3N1ZSAjMzU3OSkKICAgICAgaWYgKCFkeSB8fCAoZHkgJiYgY2FuU2Nyb2xsWSkpCiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgZGlzcGxheS53aGVlbFN0YXJ0WCA9IG51bGw7IC8vIEFib3J0IG1lYXN1cmVtZW50LCBpZiBpbiBwcm9ncmVzcwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gJ1Byb2plY3QnIHRoZSB2aXNpYmxlIHZpZXdwb3J0IHRvIGNvdmVyIHRoZSBhcmVhIHRoYXQgaXMgYmVpbmcKICAgIC8vIHNjcm9sbGVkIGludG8gdmlldyAoaWYgd2Uga25vdyBlbm91Z2ggdG8gZXN0aW1hdGUgaXQpLgogICAgaWYgKGR5ICYmIHdoZWVsUGl4ZWxzUGVyVW5pdCAhPSBudWxsKSB7CiAgICAgIHZhciBwaXhlbHMgPSBkeSAqIHdoZWVsUGl4ZWxzUGVyVW5pdDsKICAgICAgdmFyIHRvcCA9IGNtLmRvYy5zY3JvbGxUb3AsIGJvdCA9IHRvcCArIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7CiAgICAgIGlmIChwaXhlbHMgPCAwKSB0b3AgPSBNYXRoLm1heCgwLCB0b3AgKyBwaXhlbHMgLSA1MCk7CiAgICAgIGVsc2UgYm90ID0gTWF0aC5taW4oY20uZG9jLmhlaWdodCwgYm90ICsgcGl4ZWxzICsgNTApOwogICAgICB1cGRhdGVEaXNwbGF5U2ltcGxlKGNtLCB7dG9wOiB0b3AsIGJvdHRvbTogYm90fSk7CiAgICB9CgogICAgaWYgKHdoZWVsU2FtcGxlcyA8IDIwKSB7CiAgICAgIGlmIChkaXNwbGF5LndoZWVsU3RhcnRYID09IG51bGwpIHsKICAgICAgICBkaXNwbGF5LndoZWVsU3RhcnRYID0gc2Nyb2xsLnNjcm9sbExlZnQ7IGRpc3BsYXkud2hlZWxTdGFydFkgPSBzY3JvbGwuc2Nyb2xsVG9wOwogICAgICAgIGRpc3BsYXkud2hlZWxEWCA9IGR4OyBkaXNwbGF5LndoZWVsRFkgPSBkeTsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgaWYgKGRpc3BsYXkud2hlZWxTdGFydFggPT0gbnVsbCkgcmV0dXJuOwogICAgICAgICAgdmFyIG1vdmVkWCA9IHNjcm9sbC5zY3JvbGxMZWZ0IC0gZGlzcGxheS53aGVlbFN0YXJ0WDsKICAgICAgICAgIHZhciBtb3ZlZFkgPSBzY3JvbGwuc2Nyb2xsVG9wIC0gZGlzcGxheS53aGVlbFN0YXJ0WTsKICAgICAgICAgIHZhciBzYW1wbGUgPSAobW92ZWRZICYmIGRpc3BsYXkud2hlZWxEWSAmJiBtb3ZlZFkgLyBkaXNwbGF5LndoZWVsRFkpIHx8CiAgICAgICAgICAgIChtb3ZlZFggJiYgZGlzcGxheS53aGVlbERYICYmIG1vdmVkWCAvIGRpc3BsYXkud2hlZWxEWCk7CiAgICAgICAgICBkaXNwbGF5LndoZWVsU3RhcnRYID0gZGlzcGxheS53aGVlbFN0YXJ0WSA9IG51bGw7CiAgICAgICAgICBpZiAoIXNhbXBsZSkgcmV0dXJuOwogICAgICAgICAgd2hlZWxQaXhlbHNQZXJVbml0ID0gKHdoZWVsUGl4ZWxzUGVyVW5pdCAqIHdoZWVsU2FtcGxlcyArIHNhbXBsZSkgLyAod2hlZWxTYW1wbGVzICsgMSk7CiAgICAgICAgICArK3doZWVsU2FtcGxlczsKICAgICAgICB9LCAyMDApOwogICAgICB9IGVsc2UgewogICAgICAgIGRpc3BsYXkud2hlZWxEWCArPSBkeDsgZGlzcGxheS53aGVlbERZICs9IGR5OwogICAgICB9CiAgICB9CiAgfQoKICAvLyBLRVkgRVZFTlRTCgogIC8vIFJ1biBhIGhhbmRsZXIgdGhhdCB3YXMgYm91bmQgdG8gYSBrZXkuCiAgZnVuY3Rpb24gZG9IYW5kbGVCaW5kaW5nKGNtLCBib3VuZCwgZHJvcFNoaWZ0KSB7CiAgICBpZiAodHlwZW9mIGJvdW5kID09ICJzdHJpbmciKSB7CiAgICAgIGJvdW5kID0gY29tbWFuZHNbYm91bmRdOwogICAgICBpZiAoIWJvdW5kKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAvLyBFbnN1cmUgcHJldmlvdXMgaW5wdXQgaGFzIGJlZW4gcmVhZCwgc28gdGhhdCB0aGUgaGFuZGxlciBzZWVzIGEKICAgIC8vIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgZG9jdW1lbnQKICAgIGNtLmRpc3BsYXkuaW5wdXQuZW5zdXJlUG9sbGVkKCk7CiAgICB2YXIgcHJldlNoaWZ0ID0gY20uZGlzcGxheS5zaGlmdCwgZG9uZSA9IGZhbHNlOwogICAgdHJ5IHsKICAgICAgaWYgKGlzUmVhZE9ubHkoY20pKSBjbS5zdGF0ZS5zdXBwcmVzc0VkaXRzID0gdHJ1ZTsKICAgICAgaWYgKGRyb3BTaGlmdCkgY20uZGlzcGxheS5zaGlmdCA9IGZhbHNlOwogICAgICBkb25lID0gYm91bmQoY20pICE9IFBhc3M7CiAgICB9IGZpbmFsbHkgewogICAgICBjbS5kaXNwbGF5LnNoaWZ0ID0gcHJldlNoaWZ0OwogICAgICBjbS5zdGF0ZS5zdXBwcmVzc0VkaXRzID0gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gZG9uZTsKICB9CgogIGZ1bmN0aW9uIGxvb2t1cEtleUZvckVkaXRvcihjbSwgbmFtZSwgaGFuZGxlKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLnN0YXRlLmtleU1hcHMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIHJlc3VsdCA9IGxvb2t1cEtleShuYW1lLCBjbS5zdGF0ZS5rZXlNYXBzW2ldLCBoYW5kbGUsIGNtKTsKICAgICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHJldHVybiAoY20ub3B0aW9ucy5leHRyYUtleXMgJiYgbG9va3VwS2V5KG5hbWUsIGNtLm9wdGlvbnMuZXh0cmFLZXlzLCBoYW5kbGUsIGNtKSkKICAgICAgfHwgbG9va3VwS2V5KG5hbWUsIGNtLm9wdGlvbnMua2V5TWFwLCBoYW5kbGUsIGNtKTsKICB9CgogIHZhciBzdG9wU2VxID0gbmV3IERlbGF5ZWQ7CiAgZnVuY3Rpb24gZGlzcGF0Y2hLZXkoY20sIG5hbWUsIGUsIGhhbmRsZSkgewogICAgdmFyIHNlcSA9IGNtLnN0YXRlLmtleVNlcTsKICAgIGlmIChzZXEpIHsKICAgICAgaWYgKGlzTW9kaWZpZXJLZXkobmFtZSkpIHJldHVybiAiaGFuZGxlZCI7CiAgICAgIHN0b3BTZXEuc2V0KDUwLCBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoY20uc3RhdGUua2V5U2VxID09IHNlcSkgewogICAgICAgICAgY20uc3RhdGUua2V5U2VxID0gbnVsbDsKICAgICAgICAgIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBuYW1lID0gc2VxICsgIiAiICsgbmFtZTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBsb29rdXBLZXlGb3JFZGl0b3IoY20sIG5hbWUsIGhhbmRsZSk7CgogICAgaWYgKHJlc3VsdCA9PSAibXVsdGkiKQogICAgICBjbS5zdGF0ZS5rZXlTZXEgPSBuYW1lOwogICAgaWYgKHJlc3VsdCA9PSAiaGFuZGxlZCIpCiAgICAgIHNpZ25hbExhdGVyKGNtLCAia2V5SGFuZGxlZCIsIGNtLCBuYW1lLCBlKTsKCiAgICBpZiAocmVzdWx0ID09ICJoYW5kbGVkIiB8fCByZXN1bHQgPT0gIm11bHRpIikgewogICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICByZXN0YXJ0QmxpbmsoY20pOwogICAgfQoKICAgIGlmIChzZXEgJiYgIXJlc3VsdCAmJiAvXCckLy50ZXN0KG5hbWUpKSB7CiAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuICEhcmVzdWx0OwogIH0KCiAgLy8gSGFuZGxlIGEga2V5IGZyb20gdGhlIGtleWRvd24gZXZlbnQuCiAgZnVuY3Rpb24gaGFuZGxlS2V5QmluZGluZyhjbSwgZSkgewogICAgdmFyIG5hbWUgPSBrZXlOYW1lKGUsIHRydWUpOwogICAgaWYgKCFuYW1lKSByZXR1cm4gZmFsc2U7CgogICAgaWYgKGUuc2hpZnRLZXkgJiYgIWNtLnN0YXRlLmtleVNlcSkgewogICAgICAvLyBGaXJzdCB0cnkgdG8gcmVzb2x2ZSBmdWxsIG5hbWUgKGluY2x1ZGluZyAnU2hpZnQtJykuIEZhaWxpbmcKICAgICAgLy8gdGhhdCwgc2VlIGlmIHRoZXJlIGlzIGEgY3Vyc29yLW1vdGlvbiBjb21tYW5kIChzdGFydGluZyB3aXRoCiAgICAgIC8vICdnbycpIGJvdW5kIHRvIHRoZSBrZXluYW1lIHdpdGhvdXQgJ1NoaWZ0LScuCiAgICAgIHJldHVybiBkaXNwYXRjaEtleShjbSwgIlNoaWZ0LSIgKyBuYW1lLCBlLCBmdW5jdGlvbihiKSB7cmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYiwgdHJ1ZSk7fSkKICAgICAgICAgIHx8IGRpc3BhdGNoS2V5KGNtLCBuYW1lLCBlLCBmdW5jdGlvbihiKSB7CiAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYiA9PSAic3RyaW5nIiA/IC9eZ29bQS1aXS8udGVzdChiKSA6IGIubW90aW9uKQogICAgICAgICAgICAgICAgIHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIpOwogICAgICAgICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZGlzcGF0Y2hLZXkoY20sIG5hbWUsIGUsIGZ1bmN0aW9uKGIpIHsgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYik7IH0pOwogICAgfQogIH0KCiAgLy8gSGFuZGxlIGEga2V5IGZyb20gdGhlIGtleXByZXNzIGV2ZW50CiAgZnVuY3Rpb24gaGFuZGxlQ2hhckJpbmRpbmcoY20sIGUsIGNoKSB7CiAgICByZXR1cm4gZGlzcGF0Y2hLZXkoY20sICInIiArIGNoICsgIiciLCBlLAogICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGIpIHsgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYiwgdHJ1ZSk7IH0pOwogIH0KCiAgdmFyIGxhc3RTdG9wcGVkS2V5ID0gbnVsbDsKICBmdW5jdGlvbiBvbktleURvd24oZSkgewogICAgdmFyIGNtID0gdGhpczsKICAgIGNtLmN1ck9wLmZvY3VzID0gYWN0aXZlRWx0KCk7CiAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpKSByZXR1cm47CiAgICAvLyBJRSBkb2VzIHN0cmFuZ2UgdGhpbmdzIHdpdGggZXNjYXBlLgogICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSAmJiBlLmtleUNvZGUgPT0gMjcpIGUucmV0dXJuVmFsdWUgPSBmYWxzZTsKICAgIHZhciBjb2RlID0gZS5rZXlDb2RlOwogICAgY20uZGlzcGxheS5zaGlmdCA9IGNvZGUgPT0gMTYgfHwgZS5zaGlmdEtleTsKICAgIHZhciBoYW5kbGVkID0gaGFuZGxlS2V5QmluZGluZyhjbSwgZSk7CiAgICBpZiAocHJlc3RvKSB7CiAgICAgIGxhc3RTdG9wcGVkS2V5ID0gaGFuZGxlZCA/IGNvZGUgOiBudWxsOwogICAgICAvLyBPcGVyYSBoYXMgbm8gY3V0IGV2ZW50Li4uIHdlIHRyeSB0byBhdCBsZWFzdCBjYXRjaCB0aGUga2V5IGNvbWJvCiAgICAgIGlmICghaGFuZGxlZCAmJiBjb2RlID09IDg4ICYmICFoYXNDb3B5RXZlbnQgJiYgKG1hYyA/IGUubWV0YUtleSA6IGUuY3RybEtleSkpCiAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbigiIiwgbnVsbCwgImN1dCIpOwogICAgfQoKICAgIC8vIFR1cm4gbW91c2UgaW50byBjcm9zc2hhaXIgd2hlbiBBbHQgaXMgaGVsZCBvbiBNYWMuCiAgICBpZiAoY29kZSA9PSAxOCAmJiAhL1xiQ29kZU1pcnJvci1jcm9zc2hhaXJcYi8udGVzdChjbS5kaXNwbGF5LmxpbmVEaXYuY2xhc3NOYW1lKSkKICAgICAgc2hvd0Nyb3NzSGFpcihjbSk7CiAgfQoKICBmdW5jdGlvbiBzaG93Q3Jvc3NIYWlyKGNtKSB7CiAgICB2YXIgbGluZURpdiA9IGNtLmRpc3BsYXkubGluZURpdjsKICAgIGFkZENsYXNzKGxpbmVEaXYsICJDb2RlTWlycm9yLWNyb3NzaGFpciIpOwoKICAgIGZ1bmN0aW9uIHVwKGUpIHsKICAgICAgaWYgKGUua2V5Q29kZSA9PSAxOCB8fCAhZS5hbHRLZXkpIHsKICAgICAgICBybUNsYXNzKGxpbmVEaXYsICJDb2RlTWlycm9yLWNyb3NzaGFpciIpOwogICAgICAgIG9mZihkb2N1bWVudCwgImtleXVwIiwgdXApOwogICAgICAgIG9mZihkb2N1bWVudCwgIm1vdXNlb3ZlciIsIHVwKTsKICAgICAgfQogICAgfQogICAgb24oZG9jdW1lbnQsICJrZXl1cCIsIHVwKTsKICAgIG9uKGRvY3VtZW50LCAibW91c2VvdmVyIiwgdXApOwogIH0KCiAgZnVuY3Rpb24gb25LZXlVcChlKSB7CiAgICBpZiAoZS5rZXlDb2RlID09IDE2KSB0aGlzLmRvYy5zZWwuc2hpZnQgPSBmYWxzZTsKICAgIHNpZ25hbERPTUV2ZW50KHRoaXMsIGUpOwogIH0KCiAgZnVuY3Rpb24gb25LZXlQcmVzcyhlKSB7CiAgICB2YXIgY20gPSB0aGlzOwogICAgaWYgKGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkgfHwgc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGUuY3RybEtleSAmJiAhZS5hbHRLZXkgfHwgbWFjICYmIGUubWV0YUtleSkgcmV0dXJuOwogICAgdmFyIGtleUNvZGUgPSBlLmtleUNvZGUsIGNoYXJDb2RlID0gZS5jaGFyQ29kZTsKICAgIGlmIChwcmVzdG8gJiYga2V5Q29kZSA9PSBsYXN0U3RvcHBlZEtleSkge2xhc3RTdG9wcGVkS2V5ID0gbnVsbDsgZV9wcmV2ZW50RGVmYXVsdChlKTsgcmV0dXJuO30KICAgIGlmICgocHJlc3RvICYmICghZS53aGljaCB8fCBlLndoaWNoIDwgMTApKSAmJiBoYW5kbGVLZXlCaW5kaW5nKGNtLCBlKSkgcmV0dXJuOwogICAgdmFyIGNoID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSA9PSBudWxsID8ga2V5Q29kZSA6IGNoYXJDb2RlKTsKICAgIGlmIChoYW5kbGVDaGFyQmluZGluZyhjbSwgZSwgY2gpKSByZXR1cm47CiAgICBjbS5kaXNwbGF5LmlucHV0Lm9uS2V5UHJlc3MoZSk7CiAgfQoKICAvLyBGT0NVUy9CTFVSIEVWRU5UUwoKICBmdW5jdGlvbiBkZWxheUJsdXJFdmVudChjbSkgewogICAgY20uc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQgPSB0cnVlOwogICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgaWYgKGNtLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50KSB7CiAgICAgICAgY20uc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQgPSBmYWxzZTsKICAgICAgICBvbkJsdXIoY20pOwogICAgICB9CiAgICB9LCAxMDApOwogIH0KCiAgZnVuY3Rpb24gb25Gb2N1cyhjbSkgewogICAgaWYgKGNtLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50KSBjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9IGZhbHNlOwoKICAgIGlmIChjbS5vcHRpb25zLnJlYWRPbmx5ID09ICJub2N1cnNvciIpIHJldHVybjsKICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCkgewogICAgICBzaWduYWwoY20sICJmb2N1cyIsIGNtKTsKICAgICAgY20uc3RhdGUuZm9jdXNlZCA9IHRydWU7CiAgICAgIGFkZENsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgIkNvZGVNaXJyb3ItZm9jdXNlZCIpOwogICAgICAvLyBUaGlzIHRlc3QgcHJldmVudHMgdGhpcyBmcm9tIGZpcmluZyB3aGVuIGEgY29udGV4dAogICAgICAvLyBtZW51IGlzIGNsb3NlZCAoc2luY2UgdGhlIGlucHV0IHJlc2V0IHdvdWxkIGtpbGwgdGhlCiAgICAgIC8vIHNlbGVjdC1hbGwgZGV0ZWN0aW9uIGhhY2spCiAgICAgIGlmICghY20uY3VyT3AgJiYgY20uZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSAhPSBjbS5kb2Muc2VsKSB7CiAgICAgICAgY20uZGlzcGxheS5pbnB1dC5yZXNldCgpOwogICAgICAgIGlmICh3ZWJraXQpIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNtLmRpc3BsYXkuaW5wdXQucmVzZXQodHJ1ZSk7IH0sIDIwKTsgLy8gSXNzdWUgIzE3MzAKICAgICAgfQogICAgICBjbS5kaXNwbGF5LmlucHV0LnJlY2VpdmVkRm9jdXMoKTsKICAgIH0KICAgIHJlc3RhcnRCbGluayhjbSk7CiAgfQogIGZ1bmN0aW9uIG9uQmx1cihjbSkgewogICAgaWYgKGNtLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50KSByZXR1cm47CgogICAgaWYgKGNtLnN0YXRlLmZvY3VzZWQpIHsKICAgICAgc2lnbmFsKGNtLCAiYmx1ciIsIGNtKTsKICAgICAgY20uc3RhdGUuZm9jdXNlZCA9IGZhbHNlOwogICAgICBybUNsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgIkNvZGVNaXJyb3ItZm9jdXNlZCIpOwogICAgfQogICAgY2xlYXJJbnRlcnZhbChjbS5kaXNwbGF5LmJsaW5rZXIpOwogICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIGNtLmRpc3BsYXkuc2hpZnQgPSBmYWxzZTt9LCAxNTApOwogIH0KCiAgLy8gQ09OVEVYVCBNRU5VIEhBTkRMSU5HCgogIC8vIFRvIG1ha2UgdGhlIGNvbnRleHQgbWVudSB3b3JrLCB3ZSBuZWVkIHRvIGJyaWVmbHkgdW5oaWRlIHRoZQogIC8vIHRleHRhcmVhIChtYWtpbmcgaXQgYXMgdW5vYnRydXNpdmUgYXMgcG9zc2libGUpIHRvIGxldCB0aGUKICAvLyByaWdodC1jbGljayB0YWtlIGVmZmVjdCBvbiBpdC4KICBmdW5jdGlvbiBvbkNvbnRleHRNZW51KGNtLCBlKSB7CiAgICBpZiAoZXZlbnRJbldpZGdldChjbS5kaXNwbGF5LCBlKSB8fCBjb250ZXh0TWVudUluR3V0dGVyKGNtLCBlKSkgcmV0dXJuOwogICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlLCAiY29udGV4dG1lbnUiKSkgcmV0dXJuOwogICAgY20uZGlzcGxheS5pbnB1dC5vbkNvbnRleHRNZW51KGUpOwogIH0KCiAgZnVuY3Rpb24gY29udGV4dE1lbnVJbkd1dHRlcihjbSwgZSkgewogICAgaWYgKCFoYXNIYW5kbGVyKGNtLCAiZ3V0dGVyQ29udGV4dE1lbnUiKSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGd1dHRlckV2ZW50KGNtLCBlLCAiZ3V0dGVyQ29udGV4dE1lbnUiLCBmYWxzZSk7CiAgfQoKICAvLyBVUERBVElORwoKICAvLyBDb21wdXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZW5kIG9mIGEgY2hhbmdlIChpdHMgJ3RvJyBwcm9wZXJ0eQogIC8vIHJlZmVycyB0byB0aGUgcHJlLWNoYW5nZSBlbmQpLgogIHZhciBjaGFuZ2VFbmQgPSBDb2RlTWlycm9yLmNoYW5nZUVuZCA9IGZ1bmN0aW9uKGNoYW5nZSkgewogICAgaWYgKCFjaGFuZ2UudGV4dCkgcmV0dXJuIGNoYW5nZS50bzsKICAgIHJldHVybiBQb3MoY2hhbmdlLmZyb20ubGluZSArIGNoYW5nZS50ZXh0Lmxlbmd0aCAtIDEsCiAgICAgICAgICAgICAgIGxzdChjaGFuZ2UudGV4dCkubGVuZ3RoICsgKGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxID8gY2hhbmdlLmZyb20uY2ggOiAwKSk7CiAgfTsKCiAgLy8gQWRqdXN0IGEgcG9zaXRpb24gdG8gcmVmZXIgdG8gdGhlIHBvc3QtY2hhbmdlIHBvc2l0aW9uIG9mIHRoZQogIC8vIHNhbWUgdGV4dCwgb3IgdGhlIGVuZCBvZiB0aGUgY2hhbmdlIGlmIHRoZSBjaGFuZ2UgY292ZXJzIGl0LgogIGZ1bmN0aW9uIGFkanVzdEZvckNoYW5nZShwb3MsIGNoYW5nZSkgewogICAgaWYgKGNtcChwb3MsIGNoYW5nZS5mcm9tKSA8IDApIHJldHVybiBwb3M7CiAgICBpZiAoY21wKHBvcywgY2hhbmdlLnRvKSA8PSAwKSByZXR1cm4gY2hhbmdlRW5kKGNoYW5nZSk7CgogICAgdmFyIGxpbmUgPSBwb3MubGluZSArIGNoYW5nZS50ZXh0Lmxlbmd0aCAtIChjaGFuZ2UudG8ubGluZSAtIGNoYW5nZS5mcm9tLmxpbmUpIC0gMSwgY2ggPSBwb3MuY2g7CiAgICBpZiAocG9zLmxpbmUgPT0gY2hhbmdlLnRvLmxpbmUpIGNoICs9IGNoYW5nZUVuZChjaGFuZ2UpLmNoIC0gY2hhbmdlLnRvLmNoOwogICAgcmV0dXJuIFBvcyhsaW5lLCBjaCk7CiAgfQoKICBmdW5jdGlvbiBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpIHsKICAgIHZhciBvdXQgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIHJhbmdlID0gZG9jLnNlbC5yYW5nZXNbaV07CiAgICAgIG91dC5wdXNoKG5ldyBSYW5nZShhZGp1c3RGb3JDaGFuZ2UocmFuZ2UuYW5jaG9yLCBjaGFuZ2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0Rm9yQ2hhbmdlKHJhbmdlLmhlYWQsIGNoYW5nZSkpKTsKICAgIH0KICAgIHJldHVybiBub3JtYWxpemVTZWxlY3Rpb24ob3V0LCBkb2Muc2VsLnByaW1JbmRleCk7CiAgfQoKICBmdW5jdGlvbiBvZmZzZXRQb3MocG9zLCBvbGQsIG53KSB7CiAgICBpZiAocG9zLmxpbmUgPT0gb2xkLmxpbmUpCiAgICAgIHJldHVybiBQb3MobncubGluZSwgcG9zLmNoIC0gb2xkLmNoICsgbncuY2gpOwogICAgZWxzZQogICAgICByZXR1cm4gUG9zKG53LmxpbmUgKyAocG9zLmxpbmUgLSBvbGQubGluZSksIHBvcy5jaCk7CiAgfQoKICAvLyBVc2VkIGJ5IHJlcGxhY2VTZWxlY3Rpb25zIHRvIGFsbG93IG1vdmluZyB0aGUgc2VsZWN0aW9uIHRvIHRoZQogIC8vIHN0YXJ0IG9yIGFyb3VuZCB0aGUgcmVwbGFjZWQgdGVzdC4gSGludCBtYXkgYmUgInN0YXJ0IiBvciAiYXJvdW5kIi4KICBmdW5jdGlvbiBjb21wdXRlUmVwbGFjZWRTZWwoZG9jLCBjaGFuZ2VzLCBoaW50KSB7CiAgICB2YXIgb3V0ID0gW107CiAgICB2YXIgb2xkUHJldiA9IFBvcyhkb2MuZmlyc3QsIDApLCBuZXdQcmV2ID0gb2xkUHJldjsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tpXTsKICAgICAgdmFyIGZyb20gPSBvZmZzZXRQb3MoY2hhbmdlLmZyb20sIG9sZFByZXYsIG5ld1ByZXYpOwogICAgICB2YXIgdG8gPSBvZmZzZXRQb3MoY2hhbmdlRW5kKGNoYW5nZSksIG9sZFByZXYsIG5ld1ByZXYpOwogICAgICBvbGRQcmV2ID0gY2hhbmdlLnRvOwogICAgICBuZXdQcmV2ID0gdG87CiAgICAgIGlmIChoaW50ID09ICJhcm91bmQiKSB7CiAgICAgICAgdmFyIHJhbmdlID0gZG9jLnNlbC5yYW5nZXNbaV0sIGludiA9IGNtcChyYW5nZS5oZWFkLCByYW5nZS5hbmNob3IpIDwgMDsKICAgICAgICBvdXRbaV0gPSBuZXcgUmFuZ2UoaW52ID8gdG8gOiBmcm9tLCBpbnYgPyBmcm9tIDogdG8pOwogICAgICB9IGVsc2UgewogICAgICAgIG91dFtpXSA9IG5ldyBSYW5nZShmcm9tLCBmcm9tKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24ob3V0LCBkb2Muc2VsLnByaW1JbmRleCk7CiAgfQoKICAvLyBBbGxvdyAiYmVmb3JlQ2hhbmdlIiBldmVudCBoYW5kbGVycyB0byBpbmZsdWVuY2UgYSBjaGFuZ2UKICBmdW5jdGlvbiBmaWx0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIHVwZGF0ZSkgewogICAgdmFyIG9iaiA9IHsKICAgICAgY2FuY2VsZWQ6IGZhbHNlLAogICAgICBmcm9tOiBjaGFuZ2UuZnJvbSwKICAgICAgdG86IGNoYW5nZS50bywKICAgICAgdGV4dDogY2hhbmdlLnRleHQsCiAgICAgIG9yaWdpbjogY2hhbmdlLm9yaWdpbiwKICAgICAgY2FuY2VsOiBmdW5jdGlvbigpIHsgdGhpcy5jYW5jZWxlZCA9IHRydWU7IH0KICAgIH07CiAgICBpZiAodXBkYXRlKSBvYmoudXBkYXRlID0gZnVuY3Rpb24oZnJvbSwgdG8sIHRleHQsIG9yaWdpbikgewogICAgICBpZiAoZnJvbSkgdGhpcy5mcm9tID0gY2xpcFBvcyhkb2MsIGZyb20pOwogICAgICBpZiAodG8pIHRoaXMudG8gPSBjbGlwUG9zKGRvYywgdG8pOwogICAgICBpZiAodGV4dCkgdGhpcy50ZXh0ID0gdGV4dDsKICAgICAgaWYgKG9yaWdpbiAhPT0gdW5kZWZpbmVkKSB0aGlzLm9yaWdpbiA9IG9yaWdpbjsKICAgIH07CiAgICBzaWduYWwoZG9jLCAiYmVmb3JlQ2hhbmdlIiwgZG9jLCBvYmopOwogICAgaWYgKGRvYy5jbSkgc2lnbmFsKGRvYy5jbSwgImJlZm9yZUNoYW5nZSIsIGRvYy5jbSwgb2JqKTsKCiAgICBpZiAob2JqLmNhbmNlbGVkKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiB7ZnJvbTogb2JqLmZyb20sIHRvOiBvYmoudG8sIHRleHQ6IG9iai50ZXh0LCBvcmlnaW46IG9iai5vcmlnaW59OwogIH0KCiAgLy8gQXBwbHkgYSBjaGFuZ2UgdG8gYSBkb2N1bWVudCwgYW5kIGFkZCBpdCB0byB0aGUgZG9jdW1lbnQncwogIC8vIGhpc3RvcnksIGFuZCBwcm9wYWdhdGluZyBpdCB0byBhbGwgbGlua2VkIGRvY3VtZW50cy4KICBmdW5jdGlvbiBtYWtlQ2hhbmdlKGRvYywgY2hhbmdlLCBpZ25vcmVSZWFkT25seSkgewogICAgaWYgKGRvYy5jbSkgewogICAgICBpZiAoIWRvYy5jbS5jdXJPcCkgcmV0dXJuIG9wZXJhdGlvbihkb2MuY20sIG1ha2VDaGFuZ2UpKGRvYywgY2hhbmdlLCBpZ25vcmVSZWFkT25seSk7CiAgICAgIGlmIChkb2MuY20uc3RhdGUuc3VwcHJlc3NFZGl0cykgcmV0dXJuOwogICAgfQoKICAgIGlmIChoYXNIYW5kbGVyKGRvYywgImJlZm9yZUNoYW5nZSIpIHx8IGRvYy5jbSAmJiBoYXNIYW5kbGVyKGRvYy5jbSwgImJlZm9yZUNoYW5nZSIpKSB7CiAgICAgIGNoYW5nZSA9IGZpbHRlckNoYW5nZShkb2MsIGNoYW5nZSwgdHJ1ZSk7CiAgICAgIGlmICghY2hhbmdlKSByZXR1cm47CiAgICB9CgogICAgLy8gUG9zc2libHkgc3BsaXQgb3Igc3VwcHJlc3MgdGhlIHVwZGF0ZSBiYXNlZCBvbiB0aGUgcHJlc2VuY2UKICAgIC8vIG9mIHJlYWQtb25seSBzcGFucyBpbiBpdHMgcmFuZ2UuCiAgICB2YXIgc3BsaXQgPSBzYXdSZWFkT25seVNwYW5zICYmICFpZ25vcmVSZWFkT25seSAmJiByZW1vdmVSZWFkT25seVJhbmdlcyhkb2MsIGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pOwogICAgaWYgKHNwbGl0KSB7CiAgICAgIGZvciAodmFyIGkgPSBzcGxpdC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkKICAgICAgICBtYWtlQ2hhbmdlSW5uZXIoZG9jLCB7ZnJvbTogc3BsaXRbaV0uZnJvbSwgdG86IHNwbGl0W2ldLnRvLCB0ZXh0OiBpID8gWyIiXSA6IGNoYW5nZS50ZXh0fSk7CiAgICB9IGVsc2UgewogICAgICBtYWtlQ2hhbmdlSW5uZXIoZG9jLCBjaGFuZ2UpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gbWFrZUNoYW5nZUlubmVyKGRvYywgY2hhbmdlKSB7CiAgICBpZiAoY2hhbmdlLnRleHQubGVuZ3RoID09IDEgJiYgY2hhbmdlLnRleHRbMF0gPT0gIiIgJiYgY21wKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pID09IDApIHJldHVybjsKICAgIHZhciBzZWxBZnRlciA9IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSk7CiAgICBhZGRDaGFuZ2VUb0hpc3RvcnkoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBkb2MuY20gPyBkb2MuY20uY3VyT3AuaWQgOiBOYU4pOwoKICAgIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKSk7CiAgICB2YXIgcmViYXNlZCA9IFtdOwoKICAgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlvbihkb2MsIHNoYXJlZEhpc3QpIHsKICAgICAgaWYgKCFzaGFyZWRIaXN0ICYmIGluZGV4T2YocmViYXNlZCwgZG9jLmhpc3RvcnkpID09IC0xKSB7CiAgICAgICAgcmViYXNlSGlzdChkb2MuaGlzdG9yeSwgY2hhbmdlKTsKICAgICAgICByZWJhc2VkLnB1c2goZG9jLmhpc3RvcnkpOwogICAgICB9CiAgICAgIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIG51bGwsIHN0cmV0Y2hTcGFuc092ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpKTsKICAgIH0pOwogIH0KCiAgLy8gUmV2ZXJ0IGEgY2hhbmdlIHN0b3JlZCBpbiBhIGRvY3VtZW50J3MgaGlzdG9yeS4KICBmdW5jdGlvbiBtYWtlQ2hhbmdlRnJvbUhpc3RvcnkoZG9jLCB0eXBlLCBhbGxvd1NlbGVjdGlvbk9ubHkpIHsKICAgIGlmIChkb2MuY20gJiYgZG9jLmNtLnN0YXRlLnN1cHByZXNzRWRpdHMpIHJldHVybjsKCiAgICB2YXIgaGlzdCA9IGRvYy5oaXN0b3J5LCBldmVudCwgc2VsQWZ0ZXIgPSBkb2Muc2VsOwogICAgdmFyIHNvdXJjZSA9IHR5cGUgPT0gInVuZG8iID8gaGlzdC5kb25lIDogaGlzdC51bmRvbmUsIGRlc3QgPSB0eXBlID09ICJ1bmRvIiA/IGhpc3QudW5kb25lIDogaGlzdC5kb25lOwoKICAgIC8vIFZlcmlmeSB0aGF0IHRoZXJlIGlzIGEgdXNlYWJsZSBldmVudCAoc28gdGhhdCBjdHJsLXogd29uJ3QKICAgIC8vIG5lZWRsZXNzbHkgY2xlYXIgc2VsZWN0aW9uIGV2ZW50cykKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aDsgaSsrKSB7CiAgICAgIGV2ZW50ID0gc291cmNlW2ldOwogICAgICBpZiAoYWxsb3dTZWxlY3Rpb25Pbmx5ID8gZXZlbnQucmFuZ2VzICYmICFldmVudC5lcXVhbHMoZG9jLnNlbCkgOiAhZXZlbnQucmFuZ2VzKQogICAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKGkgPT0gc291cmNlLmxlbmd0aCkgcmV0dXJuOwogICAgaGlzdC5sYXN0T3JpZ2luID0gaGlzdC5sYXN0U2VsT3JpZ2luID0gbnVsbDsKCiAgICBmb3IgKDs7KSB7CiAgICAgIGV2ZW50ID0gc291cmNlLnBvcCgpOwogICAgICBpZiAoZXZlbnQucmFuZ2VzKSB7CiAgICAgICAgcHVzaFNlbGVjdGlvblRvSGlzdG9yeShldmVudCwgZGVzdCk7CiAgICAgICAgaWYgKGFsbG93U2VsZWN0aW9uT25seSAmJiAhZXZlbnQuZXF1YWxzKGRvYy5zZWwpKSB7CiAgICAgICAgICBzZXRTZWxlY3Rpb24oZG9jLCBldmVudCwge2NsZWFyUmVkbzogZmFsc2V9KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgc2VsQWZ0ZXIgPSBldmVudDsKICAgICAgfQogICAgICBlbHNlIGJyZWFrOwogICAgfQoKICAgIC8vIEJ1aWxkIHVwIGEgcmV2ZXJzZSBjaGFuZ2Ugb2JqZWN0IHRvIGFkZCB0byB0aGUgb3Bwb3NpdGUgaGlzdG9yeQogICAgLy8gc3RhY2sgKHJlZG8gd2hlbiB1bmRvaW5nLCBhbmQgdmljZSB2ZXJzYSkuCiAgICB2YXIgYW50aUNoYW5nZXMgPSBbXTsKICAgIHB1c2hTZWxlY3Rpb25Ub0hpc3Rvcnkoc2VsQWZ0ZXIsIGRlc3QpOwogICAgZGVzdC5wdXNoKHtjaGFuZ2VzOiBhbnRpQ2hhbmdlcywgZ2VuZXJhdGlvbjogaGlzdC5nZW5lcmF0aW9ufSk7CiAgICBoaXN0LmdlbmVyYXRpb24gPSBldmVudC5nZW5lcmF0aW9uIHx8ICsraGlzdC5tYXhHZW5lcmF0aW9uOwoKICAgIHZhciBmaWx0ZXIgPSBoYXNIYW5kbGVyKGRvYywgImJlZm9yZUNoYW5nZSIpIHx8IGRvYy5jbSAmJiBoYXNIYW5kbGVyKGRvYy5jbSwgImJlZm9yZUNoYW5nZSIpOwoKICAgIGZvciAodmFyIGkgPSBldmVudC5jaGFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgIHZhciBjaGFuZ2UgPSBldmVudC5jaGFuZ2VzW2ldOwogICAgICBjaGFuZ2Uub3JpZ2luID0gdHlwZTsKICAgICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyQ2hhbmdlKGRvYywgY2hhbmdlLCBmYWxzZSkpIHsKICAgICAgICBzb3VyY2UubGVuZ3RoID0gMDsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGFudGlDaGFuZ2VzLnB1c2goaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2UpKTsKCiAgICAgIHZhciBhZnRlciA9IGkgPyBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpIDogbHN0KHNvdXJjZSk7CiAgICAgIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIGFmdGVyLCBtZXJnZU9sZFNwYW5zKGRvYywgY2hhbmdlKSk7CiAgICAgIGlmICghaSAmJiBkb2MuY20pIGRvYy5jbS5zY3JvbGxJbnRvVmlldyh7ZnJvbTogY2hhbmdlLmZyb20sIHRvOiBjaGFuZ2VFbmQoY2hhbmdlKX0pOwogICAgICB2YXIgcmViYXNlZCA9IFtdOwoKICAgICAgLy8gUHJvcGFnYXRlIHRvIHRoZSBsaW5rZWQgZG9jdW1lbnRzCiAgICAgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlvbihkb2MsIHNoYXJlZEhpc3QpIHsKICAgICAgICBpZiAoIXNoYXJlZEhpc3QgJiYgaW5kZXhPZihyZWJhc2VkLCBkb2MuaGlzdG9yeSkgPT0gLTEpIHsKICAgICAgICAgIHJlYmFzZUhpc3QoZG9jLmhpc3RvcnksIGNoYW5nZSk7CiAgICAgICAgICByZWJhc2VkLnB1c2goZG9jLmhpc3RvcnkpOwogICAgICAgIH0KICAgICAgICBtYWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBudWxsLCBtZXJnZU9sZFNwYW5zKGRvYywgY2hhbmdlKSk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gU3ViLXZpZXdzIG5lZWQgdGhlaXIgbGluZSBudW1iZXJzIHNoaWZ0ZWQgd2hlbiB0ZXh0IGlzIGFkZGVkCiAgLy8gYWJvdmUgb3IgYmVsb3cgdGhlbSBpbiB0aGUgcGFyZW50IGRvY3VtZW50LgogIGZ1bmN0aW9uIHNoaWZ0RG9jKGRvYywgZGlzdGFuY2UpIHsKICAgIGlmIChkaXN0YW5jZSA9PSAwKSByZXR1cm47CiAgICBkb2MuZmlyc3QgKz0gZGlzdGFuY2U7CiAgICBkb2Muc2VsID0gbmV3IFNlbGVjdGlvbihtYXAoZG9jLnNlbC5yYW5nZXMsIGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgIHJldHVybiBuZXcgUmFuZ2UoUG9zKHJhbmdlLmFuY2hvci5saW5lICsgZGlzdGFuY2UsIHJhbmdlLmFuY2hvci5jaCksCiAgICAgICAgICAgICAgICAgICAgICAgUG9zKHJhbmdlLmhlYWQubGluZSArIGRpc3RhbmNlLCByYW5nZS5oZWFkLmNoKSk7CiAgICB9KSwgZG9jLnNlbC5wcmltSW5kZXgpOwogICAgaWYgKGRvYy5jbSkgewogICAgICByZWdDaGFuZ2UoZG9jLmNtLCBkb2MuZmlyc3QsIGRvYy5maXJzdCAtIGRpc3RhbmNlLCBkaXN0YW5jZSk7CiAgICAgIGZvciAodmFyIGQgPSBkb2MuY20uZGlzcGxheSwgbCA9IGQudmlld0Zyb207IGwgPCBkLnZpZXdUbzsgbCsrKQogICAgICAgIHJlZ0xpbmVDaGFuZ2UoZG9jLmNtLCBsLCAiZ3V0dGVyIik7CiAgICB9CiAgfQoKICAvLyBNb3JlIGxvd2VyLWxldmVsIGNoYW5nZSBmdW5jdGlvbiwgaGFuZGxpbmcgb25seSBhIHNpbmdsZSBkb2N1bWVudAogIC8vIChub3QgbGlua2VkIG9uZXMpLgogIGZ1bmN0aW9uIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBzcGFucykgewogICAgaWYgKGRvYy5jbSAmJiAhZG9jLmNtLmN1ck9wKQogICAgICByZXR1cm4gb3BlcmF0aW9uKGRvYy5jbSwgbWFrZUNoYW5nZVNpbmdsZURvYykoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBzcGFucyk7CgogICAgaWYgKGNoYW5nZS50by5saW5lIDwgZG9jLmZpcnN0KSB7CiAgICAgIHNoaWZ0RG9jKGRvYywgY2hhbmdlLnRleHQubGVuZ3RoIC0gMSAtIChjaGFuZ2UudG8ubGluZSAtIGNoYW5nZS5mcm9tLmxpbmUpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGNoYW5nZS5mcm9tLmxpbmUgPiBkb2MubGFzdExpbmUoKSkgcmV0dXJuOwoKICAgIC8vIENsaXAgdGhlIGNoYW5nZSB0byB0aGUgc2l6ZSBvZiB0aGlzIGRvYwogICAgaWYgKGNoYW5nZS5mcm9tLmxpbmUgPCBkb2MuZmlyc3QpIHsKICAgICAgdmFyIHNoaWZ0ID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gMSAtIChkb2MuZmlyc3QgLSBjaGFuZ2UuZnJvbS5saW5lKTsKICAgICAgc2hpZnREb2MoZG9jLCBzaGlmdCk7CiAgICAgIGNoYW5nZSA9IHtmcm9tOiBQb3MoZG9jLmZpcnN0LCAwKSwgdG86IFBvcyhjaGFuZ2UudG8ubGluZSArIHNoaWZ0LCBjaGFuZ2UudG8uY2gpLAogICAgICAgICAgICAgICAgdGV4dDogW2xzdChjaGFuZ2UudGV4dCldLCBvcmlnaW46IGNoYW5nZS5vcmlnaW59OwogICAgfQogICAgdmFyIGxhc3QgPSBkb2MubGFzdExpbmUoKTsKICAgIGlmIChjaGFuZ2UudG8ubGluZSA+IGxhc3QpIHsKICAgICAgY2hhbmdlID0ge2Zyb206IGNoYW5nZS5mcm9tLCB0bzogUG9zKGxhc3QsIGdldExpbmUoZG9jLCBsYXN0KS50ZXh0Lmxlbmd0aCksCiAgICAgICAgICAgICAgICB0ZXh0OiBbY2hhbmdlLnRleHRbMF1dLCBvcmlnaW46IGNoYW5nZS5vcmlnaW59OwogICAgfQoKICAgIGNoYW5nZS5yZW1vdmVkID0gZ2V0QmV0d2Vlbihkb2MsIGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pOwoKICAgIGlmICghc2VsQWZ0ZXIpIHNlbEFmdGVyID0gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlKTsKICAgIGlmIChkb2MuY20pIG1ha2VDaGFuZ2VTaW5nbGVEb2NJbkVkaXRvcihkb2MuY20sIGNoYW5nZSwgc3BhbnMpOwogICAgZWxzZSB1cGRhdGVEb2MoZG9jLCBjaGFuZ2UsIHNwYW5zKTsKICAgIHNldFNlbGVjdGlvbk5vVW5kbyhkb2MsIHNlbEFmdGVyLCBzZWxfZG9udFNjcm9sbCk7CiAgfQoKICAvLyBIYW5kbGUgdGhlIGludGVyYWN0aW9uIG9mIGEgY2hhbmdlIHRvIGEgZG9jdW1lbnQgd2l0aCB0aGUgZWRpdG9yCiAgLy8gdGhhdCB0aGlzIGRvY3VtZW50IGlzIHBhcnQgb2YuCiAgZnVuY3Rpb24gbWFrZUNoYW5nZVNpbmdsZURvY0luRWRpdG9yKGNtLCBjaGFuZ2UsIHNwYW5zKSB7CiAgICB2YXIgZG9jID0gY20uZG9jLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgZnJvbSA9IGNoYW5nZS5mcm9tLCB0byA9IGNoYW5nZS50bzsKCiAgICB2YXIgcmVjb21wdXRlTWF4TGVuZ3RoID0gZmFsc2UsIGNoZWNrV2lkdGhTdGFydCA9IGZyb20ubGluZTsKICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKICAgICAgY2hlY2tXaWR0aFN0YXJ0ID0gbGluZU5vKHZpc3VhbExpbmUoZ2V0TGluZShkb2MsIGZyb20ubGluZSkpKTsKICAgICAgZG9jLml0ZXIoY2hlY2tXaWR0aFN0YXJ0LCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgewogICAgICAgIGlmIChsaW5lID09IGRpc3BsYXkubWF4TGluZSkgewogICAgICAgICAgcmVjb21wdXRlTWF4TGVuZ3RoID0gdHJ1ZTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogICAgaWYgKGRvYy5zZWwuY29udGFpbnMoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPiAtMSkKICAgICAgc2lnbmFsQ3Vyc29yQWN0aXZpdHkoY20pOwoKICAgIHVwZGF0ZURvYyhkb2MsIGNoYW5nZSwgc3BhbnMsIGVzdGltYXRlSGVpZ2h0KGNtKSk7CgogICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgewogICAgICBkb2MuaXRlcihjaGVja1dpZHRoU3RhcnQsIGZyb20ubGluZSArIGNoYW5nZS50ZXh0Lmxlbmd0aCwgZnVuY3Rpb24obGluZSkgewogICAgICAgIHZhciBsZW4gPSBsaW5lTGVuZ3RoKGxpbmUpOwogICAgICAgIGlmIChsZW4gPiBkaXNwbGF5Lm1heExpbmVMZW5ndGgpIHsKICAgICAgICAgIGRpc3BsYXkubWF4TGluZSA9IGxpbmU7CiAgICAgICAgICBkaXNwbGF5Lm1heExpbmVMZW5ndGggPSBsZW47CiAgICAgICAgICBkaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgIHJlY29tcHV0ZU1heExlbmd0aCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmIChyZWNvbXB1dGVNYXhMZW5ndGgpIGNtLmN1ck9wLnVwZGF0ZU1heExpbmUgPSB0cnVlOwogICAgfQoKICAgIC8vIEFkanVzdCBmcm9udGllciwgc2NoZWR1bGUgd29ya2VyCiAgICBkb2MuZnJvbnRpZXIgPSBNYXRoLm1pbihkb2MuZnJvbnRpZXIsIGZyb20ubGluZSk7CiAgICBzdGFydFdvcmtlcihjbSwgNDAwKTsKCiAgICB2YXIgbGVuZGlmZiA9IGNoYW5nZS50ZXh0Lmxlbmd0aCAtICh0by5saW5lIC0gZnJvbS5saW5lKSAtIDE7CiAgICAvLyBSZW1lbWJlciB0aGF0IHRoZXNlIGxpbmVzIGNoYW5nZWQsIGZvciB1cGRhdGluZyB0aGUgZGlzcGxheQogICAgaWYgKGNoYW5nZS5mdWxsKQogICAgICByZWdDaGFuZ2UoY20pOwogICAgZWxzZSBpZiAoZnJvbS5saW5lID09IHRvLmxpbmUgJiYgY2hhbmdlLnRleHQubGVuZ3RoID09IDEgJiYgIWlzV2hvbGVMaW5lVXBkYXRlKGNtLmRvYywgY2hhbmdlKSkKICAgICAgcmVnTGluZUNoYW5nZShjbSwgZnJvbS5saW5lLCAidGV4dCIpOwogICAgZWxzZQogICAgICByZWdDaGFuZ2UoY20sIGZyb20ubGluZSwgdG8ubGluZSArIDEsIGxlbmRpZmYpOwoKICAgIHZhciBjaGFuZ2VzSGFuZGxlciA9IGhhc0hhbmRsZXIoY20sICJjaGFuZ2VzIiksIGNoYW5nZUhhbmRsZXIgPSBoYXNIYW5kbGVyKGNtLCAiY2hhbmdlIik7CiAgICBpZiAoY2hhbmdlSGFuZGxlciB8fCBjaGFuZ2VzSGFuZGxlcikgewogICAgICB2YXIgb2JqID0gewogICAgICAgIGZyb206IGZyb20sIHRvOiB0bywKICAgICAgICB0ZXh0OiBjaGFuZ2UudGV4dCwKICAgICAgICByZW1vdmVkOiBjaGFuZ2UucmVtb3ZlZCwKICAgICAgICBvcmlnaW46IGNoYW5nZS5vcmlnaW4KICAgICAgfTsKICAgICAgaWYgKGNoYW5nZUhhbmRsZXIpIHNpZ25hbExhdGVyKGNtLCAiY2hhbmdlIiwgY20sIG9iaik7CiAgICAgIGlmIChjaGFuZ2VzSGFuZGxlcikgKGNtLmN1ck9wLmNoYW5nZU9ianMgfHwgKGNtLmN1ck9wLmNoYW5nZU9ianMgPSBbXSkpLnB1c2gob2JqKTsKICAgIH0KICAgIGNtLmRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPSBudWxsOwogIH0KCiAgZnVuY3Rpb24gcmVwbGFjZVJhbmdlKGRvYywgY29kZSwgZnJvbSwgdG8sIG9yaWdpbikgewogICAgaWYgKCF0bykgdG8gPSBmcm9tOwogICAgaWYgKGNtcCh0bywgZnJvbSkgPCAwKSB7IHZhciB0bXAgPSB0bzsgdG8gPSBmcm9tOyBmcm9tID0gdG1wOyB9CiAgICBpZiAodHlwZW9mIGNvZGUgPT0gInN0cmluZyIpIGNvZGUgPSBkb2Muc3BsaXRMaW5lcyhjb2RlKTsKICAgIG1ha2VDaGFuZ2UoZG9jLCB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBjb2RlLCBvcmlnaW46IG9yaWdpbn0pOwogIH0KCiAgLy8gU0NST0xMSU5HIFRISU5HUyBJTlRPIFZJRVcKCiAgLy8gSWYgYW4gZWRpdG9yIHNpdHMgb24gdGhlIHRvcCBvciBib3R0b20gb2YgdGhlIHdpbmRvdywgcGFydGlhbGx5CiAgLy8gc2Nyb2xsZWQgb3V0IG9mIHZpZXcsIHRoaXMgZW5zdXJlcyB0aGF0IHRoZSBjdXJzb3IgaXMgdmlzaWJsZS4KICBmdW5jdGlvbiBtYXliZVNjcm9sbFdpbmRvdyhjbSwgY29vcmRzKSB7CiAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sICJzY3JvbGxDdXJzb3JJbnRvVmlldyIpKSByZXR1cm47CgogICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBib3ggPSBkaXNwbGF5LnNpemVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBkb1Njcm9sbCA9IG51bGw7CiAgICBpZiAoY29vcmRzLnRvcCArIGJveC50b3AgPCAwKSBkb1Njcm9sbCA9IHRydWU7CiAgICBlbHNlIGlmIChjb29yZHMuYm90dG9tICsgYm94LnRvcCA+ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpIGRvU2Nyb2xsID0gZmFsc2U7CiAgICBpZiAoZG9TY3JvbGwgIT0gbnVsbCAmJiAhcGhhbnRvbSkgewogICAgICB2YXIgc2Nyb2xsTm9kZSA9IGVsdCgiZGl2IiwgIlx1MjAwYiIsIG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb29yZHMudG9wIC0gZGlzcGxheS52aWV3T2Zmc2V0IC0gcGFkZGluZ1RvcChjbS5kaXNwbGF5KSkgKyAicHg7IGhlaWdodDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb29yZHMuYm90dG9tIC0gY29vcmRzLnRvcCArIHNjcm9sbEdhcChjbSkgKyBkaXNwbGF5LmJhckhlaWdodCkgKyAicHg7IGxlZnQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHMubGVmdCArICJweDsgd2lkdGg6IDJweDsiKTsKICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UuYXBwZW5kQ2hpbGQoc2Nyb2xsTm9kZSk7CiAgICAgIHNjcm9sbE5vZGUuc2Nyb2xsSW50b1ZpZXcoZG9TY3JvbGwpOwogICAgICBjbS5kaXNwbGF5LmxpbmVTcGFjZS5yZW1vdmVDaGlsZChzY3JvbGxOb2RlKTsKICAgIH0KICB9CgogIC8vIFNjcm9sbCBhIGdpdmVuIHBvc2l0aW9uIGludG8gdmlldyAoaW1tZWRpYXRlbHkpLCB2ZXJpZnlpbmcgdGhhdAogIC8vIGl0IGFjdHVhbGx5IGJlY2FtZSB2aXNpYmxlIChhcyBsaW5lIGhlaWdodHMgYXJlIGFjY3VyYXRlbHkKICAvLyBtZWFzdXJlZCwgdGhlIHBvc2l0aW9uIG9mIHNvbWV0aGluZyBtYXkgJ2RyaWZ0JyBkdXJpbmcgZHJhd2luZykuCiAgZnVuY3Rpb24gc2Nyb2xsUG9zSW50b1ZpZXcoY20sIHBvcywgZW5kLCBtYXJnaW4pIHsKICAgIGlmIChtYXJnaW4gPT0gbnVsbCkgbWFyZ2luID0gMDsKICAgIGZvciAodmFyIGxpbWl0ID0gMDsgbGltaXQgPCA1OyBsaW1pdCsrKSB7CiAgICAgIHZhciBjaGFuZ2VkID0gZmFsc2UsIGNvb3JkcyA9IGN1cnNvckNvb3JkcyhjbSwgcG9zKTsKICAgICAgdmFyIGVuZENvb3JkcyA9ICFlbmQgfHwgZW5kID09IHBvcyA/IGNvb3JkcyA6IGN1cnNvckNvb3JkcyhjbSwgZW5kKTsKICAgICAgdmFyIHNjcm9sbFBvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgTWF0aC5taW4oY29vcmRzLmxlZnQsIGVuZENvb3Jkcy5sZWZ0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihjb29yZHMudG9wLCBlbmRDb29yZHMudG9wKSAtIG1hcmdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChjb29yZHMubGVmdCwgZW5kQ29vcmRzLmxlZnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KGNvb3Jkcy5ib3R0b20sIGVuZENvb3Jkcy5ib3R0b20pICsgbWFyZ2luKTsKICAgICAgdmFyIHN0YXJ0VG9wID0gY20uZG9jLnNjcm9sbFRvcCwgc3RhcnRMZWZ0ID0gY20uZG9jLnNjcm9sbExlZnQ7CiAgICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9wICE9IG51bGwpIHsKICAgICAgICBzZXRTY3JvbGxUb3AoY20sIHNjcm9sbFBvcy5zY3JvbGxUb3ApOwogICAgICAgIGlmIChNYXRoLmFicyhjbS5kb2Muc2Nyb2xsVG9wIC0gc3RhcnRUb3ApID4gMSkgY2hhbmdlZCA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKHNjcm9sbFBvcy5zY3JvbGxMZWZ0ICE9IG51bGwpIHsKICAgICAgICBzZXRTY3JvbGxMZWZ0KGNtLCBzY3JvbGxQb3Muc2Nyb2xsTGVmdCk7CiAgICAgICAgaWYgKE1hdGguYWJzKGNtLmRvYy5zY3JvbGxMZWZ0IC0gc3RhcnRMZWZ0KSA+IDEpIGNoYW5nZWQgPSB0cnVlOwogICAgICB9CiAgICAgIGlmICghY2hhbmdlZCkgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gY29vcmRzOwogIH0KCiAgLy8gU2Nyb2xsIGEgZ2l2ZW4gc2V0IG9mIGNvb3JkaW5hdGVzIGludG8gdmlldyAoaW1tZWRpYXRlbHkpLgogIGZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KGNtLCB4MSwgeTEsIHgyLCB5MikgewogICAgdmFyIHNjcm9sbFBvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgeDEsIHkxLCB4MiwgeTIpOwogICAgaWYgKHNjcm9sbFBvcy5zY3JvbGxUb3AgIT0gbnVsbCkgc2V0U2Nyb2xsVG9wKGNtLCBzY3JvbGxQb3Muc2Nyb2xsVG9wKTsKICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsTGVmdCAhPSBudWxsKSBzZXRTY3JvbGxMZWZ0KGNtLCBzY3JvbGxQb3Muc2Nyb2xsTGVmdCk7CiAgfQoKICAvLyBDYWxjdWxhdGUgYSBuZXcgc2Nyb2xsIHBvc2l0aW9uIG5lZWRlZCB0byBzY3JvbGwgdGhlIGdpdmVuCiAgLy8gcmVjdGFuZ2xlIGludG8gdmlldy4gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBzY3JvbGxUb3AgYW5kCiAgLy8gc2Nyb2xsTGVmdCBwcm9wZXJ0aWVzLiBXaGVuIHRoZXNlIGFyZSB1bmRlZmluZWQsIHRoZQogIC8vIHZlcnRpY2FsL2hvcml6b250YWwgcG9zaXRpb24gZG9lcyBub3QgbmVlZCB0byBiZSBhZGp1c3RlZC4KICBmdW5jdGlvbiBjYWxjdWxhdGVTY3JvbGxQb3MoY20sIHgxLCB5MSwgeDIsIHkyKSB7CiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHNuYXBNYXJnaW4gPSB0ZXh0SGVpZ2h0KGNtLmRpc3BsYXkpOwogICAgaWYgKHkxIDwgMCkgeTEgPSAwOwogICAgdmFyIHNjcmVlbnRvcCA9IGNtLmN1ck9wICYmIGNtLmN1ck9wLnNjcm9sbFRvcCAhPSBudWxsID8gY20uY3VyT3Auc2Nyb2xsVG9wIDogZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7CiAgICB2YXIgc2NyZWVuID0gZGlzcGxheUhlaWdodChjbSksIHJlc3VsdCA9IHt9OwogICAgaWYgKHkyIC0geTEgPiBzY3JlZW4pIHkyID0geTEgKyBzY3JlZW47CiAgICB2YXIgZG9jQm90dG9tID0gY20uZG9jLmhlaWdodCArIHBhZGRpbmdWZXJ0KGRpc3BsYXkpOwogICAgdmFyIGF0VG9wID0geTEgPCBzbmFwTWFyZ2luLCBhdEJvdHRvbSA9IHkyID4gZG9jQm90dG9tIC0gc25hcE1hcmdpbjsKICAgIGlmICh5MSA8IHNjcmVlbnRvcCkgewogICAgICByZXN1bHQuc2Nyb2xsVG9wID0gYXRUb3AgPyAwIDogeTE7CiAgICB9IGVsc2UgaWYgKHkyID4gc2NyZWVudG9wICsgc2NyZWVuKSB7CiAgICAgIHZhciBuZXdUb3AgPSBNYXRoLm1pbih5MSwgKGF0Qm90dG9tID8gZG9jQm90dG9tIDogeTIpIC0gc2NyZWVuKTsKICAgICAgaWYgKG5ld1RvcCAhPSBzY3JlZW50b3ApIHJlc3VsdC5zY3JvbGxUb3AgPSBuZXdUb3A7CiAgICB9CgogICAgdmFyIHNjcmVlbmxlZnQgPSBjbS5jdXJPcCAmJiBjbS5jdXJPcC5zY3JvbGxMZWZ0ICE9IG51bGwgPyBjbS5jdXJPcC5zY3JvbGxMZWZ0IDogZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0OwogICAgdmFyIHNjcmVlbncgPSBkaXNwbGF5V2lkdGgoY20pIC0gKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGggOiAwKTsKICAgIHZhciB0b29XaWRlID0geDIgLSB4MSA+IHNjcmVlbnc7CiAgICBpZiAodG9vV2lkZSkgeDIgPSB4MSArIHNjcmVlbnc7CiAgICBpZiAoeDEgPCAxMCkKICAgICAgcmVzdWx0LnNjcm9sbExlZnQgPSAwOwogICAgZWxzZSBpZiAoeDEgPCBzY3JlZW5sZWZ0KQogICAgICByZXN1bHQuc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIHgxIC0gKHRvb1dpZGUgPyAwIDogMTApKTsKICAgIGVsc2UgaWYgKHgyID4gc2NyZWVudyArIHNjcmVlbmxlZnQgLSAzKQogICAgICByZXN1bHQuc2Nyb2xsTGVmdCA9IHgyICsgKHRvb1dpZGUgPyAwIDogMTApIC0gc2NyZWVudzsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBTdG9yZSBhIHJlbGF0aXZlIGFkanVzdG1lbnQgdG8gdGhlIHNjcm9sbCBwb3NpdGlvbiBpbiB0aGUgY3VycmVudAogIC8vIG9wZXJhdGlvbiAodG8gYmUgYXBwbGllZCB3aGVuIHRoZSBvcGVyYXRpb24gZmluaXNoZXMpLgogIGZ1bmN0aW9uIGFkZFRvU2Nyb2xsUG9zKGNtLCBsZWZ0LCB0b3ApIHsKICAgIGlmIChsZWZ0ICE9IG51bGwgfHwgdG9wICE9IG51bGwpIHJlc29sdmVTY3JvbGxUb1BvcyhjbSk7CiAgICBpZiAobGVmdCAhPSBudWxsKQogICAgICBjbS5jdXJPcC5zY3JvbGxMZWZ0ID0gKGNtLmN1ck9wLnNjcm9sbExlZnQgPT0gbnVsbCA/IGNtLmRvYy5zY3JvbGxMZWZ0IDogY20uY3VyT3Auc2Nyb2xsTGVmdCkgKyBsZWZ0OwogICAgaWYgKHRvcCAhPSBudWxsKQogICAgICBjbS5jdXJPcC5zY3JvbGxUb3AgPSAoY20uY3VyT3Auc2Nyb2xsVG9wID09IG51bGwgPyBjbS5kb2Muc2Nyb2xsVG9wIDogY20uY3VyT3Auc2Nyb2xsVG9wKSArIHRvcDsKICB9CgogIC8vIE1ha2Ugc3VyZSB0aGF0IGF0IHRoZSBlbmQgb2YgdGhlIG9wZXJhdGlvbiB0aGUgY3VycmVudCBjdXJzb3IgaXMKICAvLyBzaG93bi4KICBmdW5jdGlvbiBlbnN1cmVDdXJzb3JWaXNpYmxlKGNtKSB7CiAgICByZXNvbHZlU2Nyb2xsVG9Qb3MoY20pOwogICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpLCBmcm9tID0gY3VyLCB0byA9IGN1cjsKICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKICAgICAgZnJvbSA9IGN1ci5jaCA/IFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMSkgOiBjdXI7CiAgICAgIHRvID0gUG9zKGN1ci5saW5lLCBjdXIuY2ggKyAxKTsKICAgIH0KICAgIGNtLmN1ck9wLnNjcm9sbFRvUG9zID0ge2Zyb206IGZyb20sIHRvOiB0bywgbWFyZ2luOiBjbS5vcHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbiwgaXNDdXJzb3I6IHRydWV9OwogIH0KCiAgLy8gV2hlbiBhbiBvcGVyYXRpb24gaGFzIGl0cyBzY3JvbGxUb1BvcyBwcm9wZXJ0eSBzZXQsIGFuZCBhbm90aGVyCiAgLy8gc2Nyb2xsIGFjdGlvbiBpcyBhcHBsaWVkIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBvcGVyYXRpb24sIHRoaXMKICAvLyAnc2ltdWxhdGVzJyBzY3JvbGxpbmcgdGhhdCBwb3NpdGlvbiBpbnRvIHZpZXcgaW4gYSBjaGVhcCB3YXksIHNvCiAgLy8gdGhhdCB0aGUgZWZmZWN0IG9mIGludGVybWVkaWF0ZSBzY3JvbGwgY29tbWFuZHMgaXMgbm90IGlnbm9yZWQuCiAgZnVuY3Rpb24gcmVzb2x2ZVNjcm9sbFRvUG9zKGNtKSB7CiAgICB2YXIgcmFuZ2UgPSBjbS5jdXJPcC5zY3JvbGxUb1BvczsKICAgIGlmIChyYW5nZSkgewogICAgICBjbS5jdXJPcC5zY3JvbGxUb1BvcyA9IG51bGw7CiAgICAgIHZhciBmcm9tID0gZXN0aW1hdGVDb29yZHMoY20sIHJhbmdlLmZyb20pLCB0byA9IGVzdGltYXRlQ29vcmRzKGNtLCByYW5nZS50byk7CiAgICAgIHZhciBzUG9zID0gY2FsY3VsYXRlU2Nyb2xsUG9zKGNtLCBNYXRoLm1pbihmcm9tLmxlZnQsIHRvLmxlZnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihmcm9tLnRvcCwgdG8udG9wKSAtIHJhbmdlLm1hcmdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoZnJvbS5yaWdodCwgdG8ucmlnaHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChmcm9tLmJvdHRvbSwgdG8uYm90dG9tKSArIHJhbmdlLm1hcmdpbik7CiAgICAgIGNtLnNjcm9sbFRvKHNQb3Muc2Nyb2xsTGVmdCwgc1Bvcy5zY3JvbGxUb3ApOwogICAgfQogIH0KCiAgLy8gQVBJIFVUSUxJVElFUwoKICAvLyBJbmRlbnQgdGhlIGdpdmVuIGxpbmUuIFRoZSBob3cgcGFyYW1ldGVyIGNhbiBiZSAic21hcnQiLAogIC8vICJhZGQiL251bGwsICJzdWJ0cmFjdCIsIG9yICJwcmV2Ii4gV2hlbiBhZ2dyZXNzaXZlIGlzIGZhbHNlCiAgLy8gKHR5cGljYWxseSBzZXQgdG8gdHJ1ZSBmb3IgZm9yY2VkIHNpbmdsZS1saW5lIGluZGVudHMpLCBlbXB0eQogIC8vIGxpbmVzIGFyZSBub3QgaW5kZW50ZWQsIGFuZCBwbGFjZXMgd2hlcmUgdGhlIG1vZGUgcmV0dXJucyBQYXNzCiAgLy8gYXJlIGxlZnQgYWxvbmUuCiAgZnVuY3Rpb24gaW5kZW50TGluZShjbSwgbiwgaG93LCBhZ2dyZXNzaXZlKSB7CiAgICB2YXIgZG9jID0gY20uZG9jLCBzdGF0ZTsKICAgIGlmIChob3cgPT0gbnVsbCkgaG93ID0gImFkZCI7CiAgICBpZiAoaG93ID09ICJzbWFydCIpIHsKICAgICAgLy8gRmFsbCBiYWNrIHRvICJwcmV2IiB3aGVuIHRoZSBtb2RlIGRvZXNuJ3QgaGF2ZSBhbiBpbmRlbnRhdGlvbgogICAgICAvLyBtZXRob2QuCiAgICAgIGlmICghZG9jLm1vZGUuaW5kZW50KSBob3cgPSAicHJldiI7CiAgICAgIGVsc2Ugc3RhdGUgPSBnZXRTdGF0ZUJlZm9yZShjbSwgbik7CiAgICB9CgogICAgdmFyIHRhYlNpemUgPSBjbS5vcHRpb25zLnRhYlNpemU7CiAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBuKSwgY3VyU3BhY2UgPSBjb3VudENvbHVtbihsaW5lLnRleHQsIG51bGwsIHRhYlNpemUpOwogICAgaWYgKGxpbmUuc3RhdGVBZnRlcikgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsKICAgIHZhciBjdXJTcGFjZVN0cmluZyA9IGxpbmUudGV4dC5tYXRjaCgvXlxzKi8pWzBdLCBpbmRlbnRhdGlvbjsKICAgIGlmICghYWdncmVzc2l2ZSAmJiAhL1xTLy50ZXN0KGxpbmUudGV4dCkpIHsKICAgICAgaW5kZW50YXRpb24gPSAwOwogICAgICBob3cgPSAibm90IjsKICAgIH0gZWxzZSBpZiAoaG93ID09ICJzbWFydCIpIHsKICAgICAgaW5kZW50YXRpb24gPSBkb2MubW9kZS5pbmRlbnQoc3RhdGUsIGxpbmUudGV4dC5zbGljZShjdXJTcGFjZVN0cmluZy5sZW5ndGgpLCBsaW5lLnRleHQpOwogICAgICBpZiAoaW5kZW50YXRpb24gPT0gUGFzcyB8fCBpbmRlbnRhdGlvbiA+IDE1MCkgewogICAgICAgIGlmICghYWdncmVzc2l2ZSkgcmV0dXJuOwogICAgICAgIGhvdyA9ICJwcmV2IjsKICAgICAgfQogICAgfQogICAgaWYgKGhvdyA9PSAicHJldiIpIHsKICAgICAgaWYgKG4gPiBkb2MuZmlyc3QpIGluZGVudGF0aW9uID0gY291bnRDb2x1bW4oZ2V0TGluZShkb2MsIG4tMSkudGV4dCwgbnVsbCwgdGFiU2l6ZSk7CiAgICAgIGVsc2UgaW5kZW50YXRpb24gPSAwOwogICAgfSBlbHNlIGlmIChob3cgPT0gImFkZCIpIHsKICAgICAgaW5kZW50YXRpb24gPSBjdXJTcGFjZSArIGNtLm9wdGlvbnMuaW5kZW50VW5pdDsKICAgIH0gZWxzZSBpZiAoaG93ID09ICJzdWJ0cmFjdCIpIHsKICAgICAgaW5kZW50YXRpb24gPSBjdXJTcGFjZSAtIGNtLm9wdGlvbnMuaW5kZW50VW5pdDsKICAgIH0gZWxzZSBpZiAodHlwZW9mIGhvdyA9PSAibnVtYmVyIikgewogICAgICBpbmRlbnRhdGlvbiA9IGN1clNwYWNlICsgaG93OwogICAgfQogICAgaW5kZW50YXRpb24gPSBNYXRoLm1heCgwLCBpbmRlbnRhdGlvbik7CgogICAgdmFyIGluZGVudFN0cmluZyA9ICIiLCBwb3MgPSAwOwogICAgaWYgKGNtLm9wdGlvbnMuaW5kZW50V2l0aFRhYnMpCiAgICAgIGZvciAodmFyIGkgPSBNYXRoLmZsb29yKGluZGVudGF0aW9uIC8gdGFiU2l6ZSk7IGk7IC0taSkge3BvcyArPSB0YWJTaXplOyBpbmRlbnRTdHJpbmcgKz0gIlx0Ijt9CiAgICBpZiAocG9zIDwgaW5kZW50YXRpb24pIGluZGVudFN0cmluZyArPSBzcGFjZVN0cihpbmRlbnRhdGlvbiAtIHBvcyk7CgogICAgaWYgKGluZGVudFN0cmluZyAhPSBjdXJTcGFjZVN0cmluZykgewogICAgICByZXBsYWNlUmFuZ2UoZG9jLCBpbmRlbnRTdHJpbmcsIFBvcyhuLCAwKSwgUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxlbmd0aCksICIraW5wdXQiKTsKICAgICAgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICAvLyBFbnN1cmUgdGhhdCwgaWYgdGhlIGN1cnNvciB3YXMgaW4gdGhlIHdoaXRlc3BhY2UgYXQgdGhlIHN0YXJ0CiAgICAgIC8vIG9mIHRoZSBsaW5lLCBpdCBpcyBtb3ZlZCB0byB0aGUgZW5kIG9mIHRoYXQgc3BhY2UuCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpXTsKICAgICAgICBpZiAocmFuZ2UuaGVhZC5saW5lID09IG4gJiYgcmFuZ2UuaGVhZC5jaCA8IGN1clNwYWNlU3RyaW5nLmxlbmd0aCkgewogICAgICAgICAgdmFyIHBvcyA9IFBvcyhuLCBjdXJTcGFjZVN0cmluZy5sZW5ndGgpOwogICAgICAgICAgcmVwbGFjZU9uZVNlbGVjdGlvbihkb2MsIGksIG5ldyBSYW5nZShwb3MsIHBvcykpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICAvLyBVdGlsaXR5IGZvciBhcHBseWluZyBhIGNoYW5nZSB0byBhIGxpbmUgYnkgaGFuZGxlIG9yIG51bWJlciwKICAvLyByZXR1cm5pbmcgdGhlIG51bWJlciBhbmQgb3B0aW9uYWxseSByZWdpc3RlcmluZyB0aGUgbGluZSBhcwogIC8vIGNoYW5nZWQuCiAgZnVuY3Rpb24gY2hhbmdlTGluZShkb2MsIGhhbmRsZSwgY2hhbmdlVHlwZSwgb3ApIHsKICAgIHZhciBubyA9IGhhbmRsZSwgbGluZSA9IGhhbmRsZTsKICAgIGlmICh0eXBlb2YgaGFuZGxlID09ICJudW1iZXIiKSBsaW5lID0gZ2V0TGluZShkb2MsIGNsaXBMaW5lKGRvYywgaGFuZGxlKSk7CiAgICBlbHNlIG5vID0gbGluZU5vKGhhbmRsZSk7CiAgICBpZiAobm8gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAob3AobGluZSwgbm8pICYmIGRvYy5jbSkgcmVnTGluZUNoYW5nZShkb2MuY20sIG5vLCBjaGFuZ2VUeXBlKTsKICAgIHJldHVybiBsaW5lOwogIH0KCiAgLy8gSGVscGVyIGZvciBkZWxldGluZyB0ZXh0IG5lYXIgdGhlIHNlbGVjdGlvbihzKSwgdXNlZCB0byBpbXBsZW1lbnQKICAvLyBiYWNrc3BhY2UsIGRlbGV0ZSwgYW5kIHNpbWlsYXIgZnVuY3Rpb25hbGl0eS4KICBmdW5jdGlvbiBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBjb21wdXRlKSB7CiAgICB2YXIgcmFuZ2VzID0gY20uZG9jLnNlbC5yYW5nZXMsIGtpbGwgPSBbXTsKICAgIC8vIEJ1aWxkIHVwIGEgc2V0IG9mIHJhbmdlcyB0byBraWxsIGZpcnN0LCBtZXJnaW5nIG92ZXJsYXBwaW5nCiAgICAvLyByYW5nZXMuCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgdG9LaWxsID0gY29tcHV0ZShyYW5nZXNbaV0pOwogICAgICB3aGlsZSAoa2lsbC5sZW5ndGggJiYgY21wKHRvS2lsbC5mcm9tLCBsc3Qoa2lsbCkudG8pIDw9IDApIHsKICAgICAgICB2YXIgcmVwbGFjZWQgPSBraWxsLnBvcCgpOwogICAgICAgIGlmIChjbXAocmVwbGFjZWQuZnJvbSwgdG9LaWxsLmZyb20pIDwgMCkgewogICAgICAgICAgdG9LaWxsLmZyb20gPSByZXBsYWNlZC5mcm9tOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGtpbGwucHVzaCh0b0tpbGwpOwogICAgfQogICAgLy8gTmV4dCwgcmVtb3ZlIHRob3NlIGFjdHVhbCByYW5nZXMuCiAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsKICAgICAgZm9yICh2YXIgaSA9IGtpbGwubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pCiAgICAgICAgcmVwbGFjZVJhbmdlKGNtLmRvYywgIiIsIGtpbGxbaV0uZnJvbSwga2lsbFtpXS50bywgIitkZWxldGUiKTsKICAgICAgZW5zdXJlQ3Vyc29yVmlzaWJsZShjbSk7CiAgICB9KTsKICB9CgogIC8vIFVzZWQgZm9yIGhvcml6b250YWwgcmVsYXRpdmUgbW90aW9uLiBEaXIgaXMgLTEgb3IgMSAobGVmdCBvcgogIC8vIHJpZ2h0KSwgdW5pdCBjYW4gYmUgImNoYXIiLCAiY29sdW1uIiAobGlrZSBjaGFyLCBidXQgZG9lc24ndAogIC8vIGNyb3NzIGxpbmUgYm91bmRhcmllcyksICJ3b3JkIiAoYWNyb3NzIG5leHQgd29yZCksIG9yICJncm91cCIgKHRvCiAgLy8gdGhlIHN0YXJ0IG9mIG5leHQgZ3JvdXAgb2Ygd29yZCBvciBub24td29yZC1ub24td2hpdGVzcGFjZQogIC8vIGNoYXJzKS4gVGhlIHZpc3VhbGx5IHBhcmFtIGNvbnRyb2xzIHdoZXRoZXIsIGluIHJpZ2h0LXRvLWxlZnQKICAvLyB0ZXh0LCBkaXJlY3Rpb24gMSBtZWFucyB0byBtb3ZlIHRvd2FyZHMgdGhlIG5leHQgaW5kZXggaW4gdGhlCiAgLy8gc3RyaW5nLCBvciB0b3dhcmRzIHRoZSBjaGFyYWN0ZXIgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjdXJyZW50CiAgLy8gcG9zaXRpb24uIFRoZSByZXN1bHRpbmcgcG9zaXRpb24gd2lsbCBoYXZlIGEgaGl0U2lkZT10cnVlCiAgLy8gcHJvcGVydHkgaWYgaXQgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KICBmdW5jdGlvbiBmaW5kUG9zSChkb2MsIHBvcywgZGlyLCB1bml0LCB2aXN1YWxseSkgewogICAgdmFyIGxpbmUgPSBwb3MubGluZSwgY2ggPSBwb3MuY2gsIG9yaWdEaXIgPSBkaXI7CiAgICB2YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lKTsKICAgIHZhciBwb3NzaWJsZSA9IHRydWU7CiAgICBmdW5jdGlvbiBmaW5kTmV4dExpbmUoKSB7CiAgICAgIHZhciBsID0gbGluZSArIGRpcjsKICAgICAgaWYgKGwgPCBkb2MuZmlyc3QgfHwgbCA+PSBkb2MuZmlyc3QgKyBkb2Muc2l6ZSkgcmV0dXJuIChwb3NzaWJsZSA9IGZhbHNlKTsKICAgICAgbGluZSA9IGw7CiAgICAgIHJldHVybiBsaW5lT2JqID0gZ2V0TGluZShkb2MsIGwpOwogICAgfQogICAgZnVuY3Rpb24gbW92ZU9uY2UoYm91bmRUb0xpbmUpIHsKICAgICAgdmFyIG5leHQgPSAodmlzdWFsbHkgPyBtb3ZlVmlzdWFsbHkgOiBtb3ZlTG9naWNhbGx5KShsaW5lT2JqLCBjaCwgZGlyLCB0cnVlKTsKICAgICAgaWYgKG5leHQgPT0gbnVsbCkgewogICAgICAgIGlmICghYm91bmRUb0xpbmUgJiYgZmluZE5leHRMaW5lKCkpIHsKICAgICAgICAgIGlmICh2aXN1YWxseSkgY2ggPSAoZGlyIDwgMCA/IGxpbmVSaWdodCA6IGxpbmVMZWZ0KShsaW5lT2JqKTsKICAgICAgICAgIGVsc2UgY2ggPSBkaXIgPCAwID8gbGluZU9iai50ZXh0Lmxlbmd0aCA6IDA7CiAgICAgICAgfSBlbHNlIHJldHVybiAocG9zc2libGUgPSBmYWxzZSk7CiAgICAgIH0gZWxzZSBjaCA9IG5leHQ7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGlmICh1bml0ID09ICJjaGFyIikgbW92ZU9uY2UoKTsKICAgIGVsc2UgaWYgKHVuaXQgPT0gImNvbHVtbiIpIG1vdmVPbmNlKHRydWUpOwogICAgZWxzZSBpZiAodW5pdCA9PSAid29yZCIgfHwgdW5pdCA9PSAiZ3JvdXAiKSB7CiAgICAgIHZhciBzYXdUeXBlID0gbnVsbCwgZ3JvdXAgPSB1bml0ID09ICJncm91cCI7CiAgICAgIHZhciBoZWxwZXIgPSBkb2MuY20gJiYgZG9jLmNtLmdldEhlbHBlcihwb3MsICJ3b3JkQ2hhcnMiKTsKICAgICAgZm9yICh2YXIgZmlyc3QgPSB0cnVlOzsgZmlyc3QgPSBmYWxzZSkgewogICAgICAgIGlmIChkaXIgPCAwICYmICFtb3ZlT25jZSghZmlyc3QpKSBicmVhazsKICAgICAgICB2YXIgY3VyID0gbGluZU9iai50ZXh0LmNoYXJBdChjaCkgfHwgIlxuIjsKICAgICAgICB2YXIgdHlwZSA9IGlzV29yZENoYXIoY3VyLCBoZWxwZXIpID8gInciCiAgICAgICAgICA6IGdyb3VwICYmIGN1ciA9PSAiXG4iID8gIm4iCiAgICAgICAgICA6ICFncm91cCB8fCAvXHMvLnRlc3QoY3VyKSA/IG51bGwKICAgICAgICAgIDogInAiOwogICAgICAgIGlmIChncm91cCAmJiAhZmlyc3QgJiYgIXR5cGUpIHR5cGUgPSAicyI7CiAgICAgICAgaWYgKHNhd1R5cGUgJiYgc2F3VHlwZSAhPSB0eXBlKSB7CiAgICAgICAgICBpZiAoZGlyIDwgMCkge2RpciA9IDE7IG1vdmVPbmNlKCk7fQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBpZiAodHlwZSkgc2F3VHlwZSA9IHR5cGU7CiAgICAgICAgaWYgKGRpciA+IDAgJiYgIW1vdmVPbmNlKCFmaXJzdCkpIGJyZWFrOwogICAgICB9CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gc2tpcEF0b21pYyhkb2MsIFBvcyhsaW5lLCBjaCksIG9yaWdEaXIsIHRydWUpOwogICAgaWYgKCFwb3NzaWJsZSkgcmVzdWx0LmhpdFNpZGUgPSB0cnVlOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIEZvciByZWxhdGl2ZSB2ZXJ0aWNhbCBtb3ZlbWVudC4gRGlyIG1heSBiZSAtMSBvciAxLiBVbml0IGNhbiBiZQogIC8vICJwYWdlIiBvciAibGluZSIuIFRoZSByZXN1bHRpbmcgcG9zaXRpb24gd2lsbCBoYXZlIGEgaGl0U2lkZT10cnVlCiAgLy8gcHJvcGVydHkgaWYgaXQgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KICBmdW5jdGlvbiBmaW5kUG9zVihjbSwgcG9zLCBkaXIsIHVuaXQpIHsKICAgIHZhciBkb2MgPSBjbS5kb2MsIHggPSBwb3MubGVmdCwgeTsKICAgIGlmICh1bml0ID09ICJwYWdlIikgewogICAgICB2YXIgcGFnZVNpemUgPSBNYXRoLm1pbihjbS5kaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk7CiAgICAgIHkgPSBwb3MudG9wICsgZGlyICogKHBhZ2VTaXplIC0gKGRpciA8IDAgPyAxLjUgOiAuNSkgKiB0ZXh0SGVpZ2h0KGNtLmRpc3BsYXkpKTsKICAgIH0gZWxzZSBpZiAodW5pdCA9PSAibGluZSIpIHsKICAgICAgeSA9IGRpciA+IDAgPyBwb3MuYm90dG9tICsgMyA6IHBvcy50b3AgLSAzOwogICAgfQogICAgZm9yICg7OykgewogICAgICB2YXIgdGFyZ2V0ID0gY29vcmRzQ2hhcihjbSwgeCwgeSk7CiAgICAgIGlmICghdGFyZ2V0Lm91dHNpZGUpIGJyZWFrOwogICAgICBpZiAoZGlyIDwgMCA/IHkgPD0gMCA6IHkgPj0gZG9jLmhlaWdodCkgeyB0YXJnZXQuaGl0U2lkZSA9IHRydWU7IGJyZWFrOyB9CiAgICAgIHkgKz0gZGlyICogNTsKICAgIH0KICAgIHJldHVybiB0YXJnZXQ7CiAgfQoKICAvLyBFRElUT1IgTUVUSE9EUwoKICAvLyBUaGUgcHVibGljbHkgdmlzaWJsZSBBUEkuIE5vdGUgdGhhdCBtZXRob2RPcChmKSBtZWFucwogIC8vICd3cmFwIGYgaW4gYW4gb3BlcmF0aW9uLCBwZXJmb3JtZWQgb24gaXRzIGB0aGlzYCBwYXJhbWV0ZXInLgoKICAvLyBUaGlzIGlzIG5vdCB0aGUgY29tcGxldGUgc2V0IG9mIGVkaXRvciBtZXRob2RzLiBNb3N0IG9mIHRoZQogIC8vIG1ldGhvZHMgZGVmaW5lZCBvbiB0aGUgRG9jIHR5cGUgYXJlIGFsc28gaW5qZWN0ZWQgaW50bwogIC8vIENvZGVNaXJyb3IucHJvdG90eXBlLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kCiAgLy8gY29udmVuaWVuY2UuCgogIENvZGVNaXJyb3IucHJvdG90eXBlID0gewogICAgY29uc3RydWN0b3I6IENvZGVNaXJyb3IsCiAgICBmb2N1czogZnVuY3Rpb24oKXt3aW5kb3cuZm9jdXMoKTsgdGhpcy5kaXNwbGF5LmlucHV0LmZvY3VzKCk7fSwKCiAgICBzZXRPcHRpb246IGZ1bmN0aW9uKG9wdGlvbiwgdmFsdWUpIHsKICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsIG9sZCA9IG9wdGlvbnNbb3B0aW9uXTsKICAgICAgaWYgKG9wdGlvbnNbb3B0aW9uXSA9PSB2YWx1ZSAmJiBvcHRpb24gIT0gIm1vZGUiKSByZXR1cm47CiAgICAgIG9wdGlvbnNbb3B0aW9uXSA9IHZhbHVlOwogICAgICBpZiAob3B0aW9uSGFuZGxlcnMuaGFzT3duUHJvcGVydHkob3B0aW9uKSkKICAgICAgICBvcGVyYXRpb24odGhpcywgb3B0aW9uSGFuZGxlcnNbb3B0aW9uXSkodGhpcywgdmFsdWUsIG9sZCk7CiAgICB9LAoKICAgIGdldE9wdGlvbjogZnVuY3Rpb24ob3B0aW9uKSB7cmV0dXJuIHRoaXMub3B0aW9uc1tvcHRpb25dO30sCiAgICBnZXREb2M6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmRvYzt9LAoKICAgIGFkZEtleU1hcDogZnVuY3Rpb24obWFwLCBib3R0b20pIHsKICAgICAgdGhpcy5zdGF0ZS5rZXlNYXBzW2JvdHRvbSA/ICJwdXNoIiA6ICJ1bnNoaWZ0Il0oZ2V0S2V5TWFwKG1hcCkpOwogICAgfSwKICAgIHJlbW92ZUtleU1hcDogZnVuY3Rpb24obWFwKSB7CiAgICAgIHZhciBtYXBzID0gdGhpcy5zdGF0ZS5rZXlNYXBzOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcHMubGVuZ3RoOyArK2kpCiAgICAgICAgaWYgKG1hcHNbaV0gPT0gbWFwIHx8IG1hcHNbaV0ubmFtZSA9PSBtYXApIHsKICAgICAgICAgIG1hcHMuc3BsaWNlKGksIDEpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgfSwKCiAgICBhZGRPdmVybGF5OiBtZXRob2RPcChmdW5jdGlvbihzcGVjLCBvcHRpb25zKSB7CiAgICAgIHZhciBtb2RlID0gc3BlYy50b2tlbiA/IHNwZWMgOiBDb2RlTWlycm9yLmdldE1vZGUodGhpcy5vcHRpb25zLCBzcGVjKTsKICAgICAgaWYgKG1vZGUuc3RhcnRTdGF0ZSkgdGhyb3cgbmV3IEVycm9yKCJPdmVybGF5cyBtYXkgbm90IGJlIHN0YXRlZnVsLiIpOwogICAgICB0aGlzLnN0YXRlLm92ZXJsYXlzLnB1c2goe21vZGU6IG1vZGUsIG1vZGVTcGVjOiBzcGVjLCBvcGFxdWU6IG9wdGlvbnMgJiYgb3B0aW9ucy5vcGFxdWV9KTsKICAgICAgdGhpcy5zdGF0ZS5tb2RlR2VuKys7CiAgICAgIHJlZ0NoYW5nZSh0aGlzKTsKICAgIH0pLAogICAgcmVtb3ZlT3ZlcmxheTogbWV0aG9kT3AoZnVuY3Rpb24oc3BlYykgewogICAgICB2YXIgb3ZlcmxheXMgPSB0aGlzLnN0YXRlLm92ZXJsYXlzOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG92ZXJsYXlzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIGN1ciA9IG92ZXJsYXlzW2ldLm1vZGVTcGVjOwogICAgICAgIGlmIChjdXIgPT0gc3BlYyB8fCB0eXBlb2Ygc3BlYyA9PSAic3RyaW5nIiAmJiBjdXIubmFtZSA9PSBzcGVjKSB7CiAgICAgICAgICBvdmVybGF5cy5zcGxpY2UoaSwgMSk7CiAgICAgICAgICB0aGlzLnN0YXRlLm1vZGVHZW4rKzsKICAgICAgICAgIHJlZ0NoYW5nZSh0aGlzKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgIH0pLAoKICAgIGluZGVudExpbmU6IG1ldGhvZE9wKGZ1bmN0aW9uKG4sIGRpciwgYWdncmVzc2l2ZSkgewogICAgICBpZiAodHlwZW9mIGRpciAhPSAic3RyaW5nIiAmJiB0eXBlb2YgZGlyICE9ICJudW1iZXIiKSB7CiAgICAgICAgaWYgKGRpciA9PSBudWxsKSBkaXIgPSB0aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQgPyAic21hcnQiIDogInByZXYiOwogICAgICAgIGVsc2UgZGlyID0gZGlyID8gImFkZCIgOiAic3VidHJhY3QiOwogICAgICB9CiAgICAgIGlmIChpc0xpbmUodGhpcy5kb2MsIG4pKSBpbmRlbnRMaW5lKHRoaXMsIG4sIGRpciwgYWdncmVzc2l2ZSk7CiAgICB9KSwKICAgIGluZGVudFNlbGVjdGlvbjogbWV0aG9kT3AoZnVuY3Rpb24oaG93KSB7CiAgICAgIHZhciByYW5nZXMgPSB0aGlzLmRvYy5zZWwucmFuZ2VzLCBlbmQgPSAtMTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV07CiAgICAgICAgaWYgKCFyYW5nZS5lbXB0eSgpKSB7CiAgICAgICAgICB2YXIgZnJvbSA9IHJhbmdlLmZyb20oKSwgdG8gPSByYW5nZS50bygpOwogICAgICAgICAgdmFyIHN0YXJ0ID0gTWF0aC5tYXgoZW5kLCBmcm9tLmxpbmUpOwogICAgICAgICAgZW5kID0gTWF0aC5taW4odGhpcy5sYXN0TGluZSgpLCB0by5saW5lIC0gKHRvLmNoID8gMCA6IDEpKSArIDE7CiAgICAgICAgICBmb3IgKHZhciBqID0gc3RhcnQ7IGogPCBlbmQ7ICsraikKICAgICAgICAgICAgaW5kZW50TGluZSh0aGlzLCBqLCBob3cpOwogICAgICAgICAgdmFyIG5ld1JhbmdlcyA9IHRoaXMuZG9jLnNlbC5yYW5nZXM7CiAgICAgICAgICBpZiAoZnJvbS5jaCA9PSAwICYmIHJhbmdlcy5sZW5ndGggPT0gbmV3UmFuZ2VzLmxlbmd0aCAmJiBuZXdSYW5nZXNbaV0uZnJvbSgpLmNoID4gMCkKICAgICAgICAgICAgcmVwbGFjZU9uZVNlbGVjdGlvbih0aGlzLmRvYywgaSwgbmV3IFJhbmdlKGZyb20sIG5ld1Jhbmdlc1tpXS50bygpKSwgc2VsX2RvbnRTY3JvbGwpOwogICAgICAgIH0gZWxzZSBpZiAocmFuZ2UuaGVhZC5saW5lID4gZW5kKSB7CiAgICAgICAgICBpbmRlbnRMaW5lKHRoaXMsIHJhbmdlLmhlYWQubGluZSwgaG93LCB0cnVlKTsKICAgICAgICAgIGVuZCA9IHJhbmdlLmhlYWQubGluZTsKICAgICAgICAgIGlmIChpID09IHRoaXMuZG9jLnNlbC5wcmltSW5kZXgpIGVuc3VyZUN1cnNvclZpc2libGUodGhpcyk7CiAgICAgICAgfQogICAgICB9CiAgICB9KSwKCiAgICAvLyBGZXRjaCB0aGUgbWFya2Rvd24gdG9rZW4gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLiBVc2VmdWwgZm9yIGhhY2tzCiAgICAvLyB0aGF0IHdhbnQgdG8gaW5zcGVjdCB0aGUgbW9kZSBzdGF0ZSAoc2F5LCBmb3IgY29tcGxldGlvbikuCiAgICBnZXRUb2tlbkF0OiBmdW5jdGlvbihwb3MsIHByZWNpc2UpIHsKICAgICAgcmV0dXJuIHRha2VUb2tlbih0aGlzLCBwb3MsIHByZWNpc2UpOwogICAgfSwKCiAgICBnZXRMaW5lVG9rZW5zOiBmdW5jdGlvbihsaW5lLCBwcmVjaXNlKSB7CiAgICAgIHJldHVybiB0YWtlVG9rZW4odGhpcywgUG9zKGxpbmUpLCBwcmVjaXNlLCB0cnVlKTsKICAgIH0sCgogICAgZ2V0VG9rZW5UeXBlQXQ6IGZ1bmN0aW9uKHBvcykgewogICAgICBwb3MgPSBjbGlwUG9zKHRoaXMuZG9jLCBwb3MpOwogICAgICB2YXIgc3R5bGVzID0gZ2V0TGluZVN0eWxlcyh0aGlzLCBnZXRMaW5lKHRoaXMuZG9jLCBwb3MubGluZSkpOwogICAgICB2YXIgYmVmb3JlID0gMCwgYWZ0ZXIgPSAoc3R5bGVzLmxlbmd0aCAtIDEpIC8gMiwgY2ggPSBwb3MuY2g7CiAgICAgIHZhciB0eXBlOwogICAgICBpZiAoY2ggPT0gMCkgdHlwZSA9IHN0eWxlc1syXTsKICAgICAgZWxzZSBmb3IgKDs7KSB7CiAgICAgICAgdmFyIG1pZCA9IChiZWZvcmUgKyBhZnRlcikgPj4gMTsKICAgICAgICBpZiAoKG1pZCA/IHN0eWxlc1ttaWQgKiAyIC0gMV0gOiAwKSA+PSBjaCkgYWZ0ZXIgPSBtaWQ7CiAgICAgICAgZWxzZSBpZiAoc3R5bGVzW21pZCAqIDIgKyAxXSA8IGNoKSBiZWZvcmUgPSBtaWQgKyAxOwogICAgICAgIGVsc2UgeyB0eXBlID0gc3R5bGVzW21pZCAqIDIgKyAyXTsgYnJlYWs7IH0KICAgICAgfQogICAgICB2YXIgY3V0ID0gdHlwZSA/IHR5cGUuaW5kZXhPZigiY20tb3ZlcmxheSAiKSA6IC0xOwogICAgICByZXR1cm4gY3V0IDwgMCA/IHR5cGUgOiBjdXQgPT0gMCA/IG51bGwgOiB0eXBlLnNsaWNlKDAsIGN1dCAtIDEpOwogICAgfSwKCiAgICBnZXRNb2RlQXQ6IGZ1bmN0aW9uKHBvcykgewogICAgICB2YXIgbW9kZSA9IHRoaXMuZG9jLm1vZGU7CiAgICAgIGlmICghbW9kZS5pbm5lck1vZGUpIHJldHVybiBtb2RlOwogICAgICByZXR1cm4gQ29kZU1pcnJvci5pbm5lck1vZGUobW9kZSwgdGhpcy5nZXRUb2tlbkF0KHBvcykuc3RhdGUpLm1vZGU7CiAgICB9LAoKICAgIGdldEhlbHBlcjogZnVuY3Rpb24ocG9zLCB0eXBlKSB7CiAgICAgIHJldHVybiB0aGlzLmdldEhlbHBlcnMocG9zLCB0eXBlKVswXTsKICAgIH0sCgogICAgZ2V0SGVscGVyczogZnVuY3Rpb24ocG9zLCB0eXBlKSB7CiAgICAgIHZhciBmb3VuZCA9IFtdOwogICAgICBpZiAoIWhlbHBlcnMuaGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVybiBmb3VuZDsKICAgICAgdmFyIGhlbHAgPSBoZWxwZXJzW3R5cGVdLCBtb2RlID0gdGhpcy5nZXRNb2RlQXQocG9zKTsKICAgICAgaWYgKHR5cGVvZiBtb2RlW3R5cGVdID09ICJzdHJpbmciKSB7CiAgICAgICAgaWYgKGhlbHBbbW9kZVt0eXBlXV0pIGZvdW5kLnB1c2goaGVscFttb2RlW3R5cGVdXSk7CiAgICAgIH0gZWxzZSBpZiAobW9kZVt0eXBlXSkgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZVt0eXBlXS5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIHZhbCA9IGhlbHBbbW9kZVt0eXBlXVtpXV07CiAgICAgICAgICBpZiAodmFsKSBmb3VuZC5wdXNoKHZhbCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKG1vZGUuaGVscGVyVHlwZSAmJiBoZWxwW21vZGUuaGVscGVyVHlwZV0pIHsKICAgICAgICBmb3VuZC5wdXNoKGhlbHBbbW9kZS5oZWxwZXJUeXBlXSk7CiAgICAgIH0gZWxzZSBpZiAoaGVscFttb2RlLm5hbWVdKSB7CiAgICAgICAgZm91bmQucHVzaChoZWxwW21vZGUubmFtZV0pOwogICAgICB9CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGVscC5fZ2xvYmFsLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGN1ciA9IGhlbHAuX2dsb2JhbFtpXTsKICAgICAgICBpZiAoY3VyLnByZWQobW9kZSwgdGhpcykgJiYgaW5kZXhPZihmb3VuZCwgY3VyLnZhbCkgPT0gLTEpCiAgICAgICAgICBmb3VuZC5wdXNoKGN1ci52YWwpOwogICAgICB9CiAgICAgIHJldHVybiBmb3VuZDsKICAgIH0sCgogICAgZ2V0U3RhdGVBZnRlcjogZnVuY3Rpb24obGluZSwgcHJlY2lzZSkgewogICAgICB2YXIgZG9jID0gdGhpcy5kb2M7CiAgICAgIGxpbmUgPSBjbGlwTGluZShkb2MsIGxpbmUgPT0gbnVsbCA/IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMTogbGluZSk7CiAgICAgIHJldHVybiBnZXRTdGF0ZUJlZm9yZSh0aGlzLCBsaW5lICsgMSwgcHJlY2lzZSk7CiAgICB9LAoKICAgIGN1cnNvckNvb3JkczogZnVuY3Rpb24oc3RhcnQsIG1vZGUpIHsKICAgICAgdmFyIHBvcywgcmFuZ2UgPSB0aGlzLmRvYy5zZWwucHJpbWFyeSgpOwogICAgICBpZiAoc3RhcnQgPT0gbnVsbCkgcG9zID0gcmFuZ2UuaGVhZDsKICAgICAgZWxzZSBpZiAodHlwZW9mIHN0YXJ0ID09ICJvYmplY3QiKSBwb3MgPSBjbGlwUG9zKHRoaXMuZG9jLCBzdGFydCk7CiAgICAgIGVsc2UgcG9zID0gc3RhcnQgPyByYW5nZS5mcm9tKCkgOiByYW5nZS50bygpOwogICAgICByZXR1cm4gY3Vyc29yQ29vcmRzKHRoaXMsIHBvcywgbW9kZSB8fCAicGFnZSIpOwogICAgfSwKCiAgICBjaGFyQ29vcmRzOiBmdW5jdGlvbihwb3MsIG1vZGUpIHsKICAgICAgcmV0dXJuIGNoYXJDb29yZHModGhpcywgY2xpcFBvcyh0aGlzLmRvYywgcG9zKSwgbW9kZSB8fCAicGFnZSIpOwogICAgfSwKCiAgICBjb29yZHNDaGFyOiBmdW5jdGlvbihjb29yZHMsIG1vZGUpIHsKICAgICAgY29vcmRzID0gZnJvbUNvb3JkU3lzdGVtKHRoaXMsIGNvb3JkcywgbW9kZSB8fCAicGFnZSIpOwogICAgICByZXR1cm4gY29vcmRzQ2hhcih0aGlzLCBjb29yZHMubGVmdCwgY29vcmRzLnRvcCk7CiAgICB9LAoKICAgIGxpbmVBdEhlaWdodDogZnVuY3Rpb24oaGVpZ2h0LCBtb2RlKSB7CiAgICAgIGhlaWdodCA9IGZyb21Db29yZFN5c3RlbSh0aGlzLCB7dG9wOiBoZWlnaHQsIGxlZnQ6IDB9LCBtb2RlIHx8ICJwYWdlIikudG9wOwogICAgICByZXR1cm4gbGluZUF0SGVpZ2h0KHRoaXMuZG9jLCBoZWlnaHQgKyB0aGlzLmRpc3BsYXkudmlld09mZnNldCk7CiAgICB9LAogICAgaGVpZ2h0QXRMaW5lOiBmdW5jdGlvbihsaW5lLCBtb2RlKSB7CiAgICAgIHZhciBlbmQgPSBmYWxzZSwgbGluZU9iajsKICAgICAgaWYgKHR5cGVvZiBsaW5lID09ICJudW1iZXIiKSB7CiAgICAgICAgdmFyIGxhc3QgPSB0aGlzLmRvYy5maXJzdCArIHRoaXMuZG9jLnNpemUgLSAxOwogICAgICAgIGlmIChsaW5lIDwgdGhpcy5kb2MuZmlyc3QpIGxpbmUgPSB0aGlzLmRvYy5maXJzdDsKICAgICAgICBlbHNlIGlmIChsaW5lID4gbGFzdCkgeyBsaW5lID0gbGFzdDsgZW5kID0gdHJ1ZTsgfQogICAgICAgIGxpbmVPYmogPSBnZXRMaW5lKHRoaXMuZG9jLCBsaW5lKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsaW5lT2JqID0gbGluZTsKICAgICAgfQogICAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKHRoaXMsIGxpbmVPYmosIHt0b3A6IDAsIGxlZnQ6IDB9LCBtb2RlIHx8ICJwYWdlIikudG9wICsKICAgICAgICAoZW5kID8gdGhpcy5kb2MuaGVpZ2h0IC0gaGVpZ2h0QXRMaW5lKGxpbmVPYmopIDogMCk7CiAgICB9LAoKICAgIGRlZmF1bHRUZXh0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRleHRIZWlnaHQodGhpcy5kaXNwbGF5KTsgfSwKICAgIGRlZmF1bHRDaGFyV2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2hhcldpZHRoKHRoaXMuZGlzcGxheSk7IH0sCgogICAgc2V0R3V0dGVyTWFya2VyOiBtZXRob2RPcChmdW5jdGlvbihsaW5lLCBndXR0ZXJJRCwgdmFsdWUpIHsKICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcy5kb2MsIGxpbmUsICJndXR0ZXIiLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgdmFyIG1hcmtlcnMgPSBsaW5lLmd1dHRlck1hcmtlcnMgfHwgKGxpbmUuZ3V0dGVyTWFya2VycyA9IHt9KTsKICAgICAgICBtYXJrZXJzW2d1dHRlcklEXSA9IHZhbHVlOwogICAgICAgIGlmICghdmFsdWUgJiYgaXNFbXB0eShtYXJrZXJzKSkgbGluZS5ndXR0ZXJNYXJrZXJzID0gbnVsbDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSk7CiAgICB9KSwKCiAgICBjbGVhckd1dHRlcjogbWV0aG9kT3AoZnVuY3Rpb24oZ3V0dGVySUQpIHsKICAgICAgdmFyIGNtID0gdGhpcywgZG9jID0gY20uZG9jLCBpID0gZG9jLmZpcnN0OwogICAgICBkb2MuaXRlcihmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgaWYgKGxpbmUuZ3V0dGVyTWFya2VycyAmJiBsaW5lLmd1dHRlck1hcmtlcnNbZ3V0dGVySURdKSB7CiAgICAgICAgICBsaW5lLmd1dHRlck1hcmtlcnNbZ3V0dGVySURdID0gbnVsbDsKICAgICAgICAgIHJlZ0xpbmVDaGFuZ2UoY20sIGksICJndXR0ZXIiKTsKICAgICAgICAgIGlmIChpc0VtcHR5KGxpbmUuZ3V0dGVyTWFya2VycykpIGxpbmUuZ3V0dGVyTWFya2VycyA9IG51bGw7CiAgICAgICAgfQogICAgICAgICsraTsKICAgICAgfSk7CiAgICB9KSwKCiAgICBsaW5lSW5mbzogZnVuY3Rpb24obGluZSkgewogICAgICBpZiAodHlwZW9mIGxpbmUgPT0gIm51bWJlciIpIHsKICAgICAgICBpZiAoIWlzTGluZSh0aGlzLmRvYywgbGluZSkpIHJldHVybiBudWxsOwogICAgICAgIHZhciBuID0gbGluZTsKICAgICAgICBsaW5lID0gZ2V0TGluZSh0aGlzLmRvYywgbGluZSk7CiAgICAgICAgaWYgKCFsaW5lKSByZXR1cm4gbnVsbDsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgbiA9IGxpbmVObyhsaW5lKTsKICAgICAgICBpZiAobiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICByZXR1cm4ge2xpbmU6IG4sIGhhbmRsZTogbGluZSwgdGV4dDogbGluZS50ZXh0LCBndXR0ZXJNYXJrZXJzOiBsaW5lLmd1dHRlck1hcmtlcnMsCiAgICAgICAgICAgICAgdGV4dENsYXNzOiBsaW5lLnRleHRDbGFzcywgYmdDbGFzczogbGluZS5iZ0NsYXNzLCB3cmFwQ2xhc3M6IGxpbmUud3JhcENsYXNzLAogICAgICAgICAgICAgIHdpZGdldHM6IGxpbmUud2lkZ2V0c307CiAgICB9LAoKICAgIGdldFZpZXdwb3J0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHtmcm9tOiB0aGlzLmRpc3BsYXkudmlld0Zyb20sIHRvOiB0aGlzLmRpc3BsYXkudmlld1RvfTt9LAoKICAgIGFkZFdpZGdldDogZnVuY3Rpb24ocG9zLCBub2RlLCBzY3JvbGwsIHZlcnQsIGhvcml6KSB7CiAgICAgIHZhciBkaXNwbGF5ID0gdGhpcy5kaXNwbGF5OwogICAgICBwb3MgPSBjdXJzb3JDb29yZHModGhpcywgY2xpcFBvcyh0aGlzLmRvYywgcG9zKSk7CiAgICAgIHZhciB0b3AgPSBwb3MuYm90dG9tLCBsZWZ0ID0gcG9zLmxlZnQ7CiAgICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICBub2RlLnNldEF0dHJpYnV0ZSgiY20taWdub3JlLWV2ZW50cyIsICJ0cnVlIik7CiAgICAgIHRoaXMuZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKG5vZGUpOwogICAgICBkaXNwbGF5LnNpemVyLmFwcGVuZENoaWxkKG5vZGUpOwogICAgICBpZiAodmVydCA9PSAib3ZlciIpIHsKICAgICAgICB0b3AgPSBwb3MudG9wOwogICAgICB9IGVsc2UgaWYgKHZlcnQgPT0gImFib3ZlIiB8fCB2ZXJ0ID09ICJuZWFyIikgewogICAgICAgIHZhciB2c3BhY2UgPSBNYXRoLm1heChkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0LCB0aGlzLmRvYy5oZWlnaHQpLAogICAgICAgIGhzcGFjZSA9IE1hdGgubWF4KGRpc3BsYXkuc2l6ZXIuY2xpZW50V2lkdGgsIGRpc3BsYXkubGluZVNwYWNlLmNsaWVudFdpZHRoKTsKICAgICAgICAvLyBEZWZhdWx0IHRvIHBvc2l0aW9uaW5nIGFib3ZlIChpZiBzcGVjaWZpZWQgYW5kIHBvc3NpYmxlKTsgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gcG9zaXRpb25pbmcgYmVsb3cKICAgICAgICBpZiAoKHZlcnQgPT0gJ2Fib3ZlJyB8fCBwb3MuYm90dG9tICsgbm9kZS5vZmZzZXRIZWlnaHQgPiB2c3BhY2UpICYmIHBvcy50b3AgPiBub2RlLm9mZnNldEhlaWdodCkKICAgICAgICAgIHRvcCA9IHBvcy50b3AgLSBub2RlLm9mZnNldEhlaWdodDsKICAgICAgICBlbHNlIGlmIChwb3MuYm90dG9tICsgbm9kZS5vZmZzZXRIZWlnaHQgPD0gdnNwYWNlKQogICAgICAgICAgdG9wID0gcG9zLmJvdHRvbTsKICAgICAgICBpZiAobGVmdCArIG5vZGUub2Zmc2V0V2lkdGggPiBoc3BhY2UpCiAgICAgICAgICBsZWZ0ID0gaHNwYWNlIC0gbm9kZS5vZmZzZXRXaWR0aDsKICAgICAgfQogICAgICBub2RlLnN0eWxlLnRvcCA9IHRvcCArICJweCI7CiAgICAgIG5vZGUuc3R5bGUubGVmdCA9IG5vZGUuc3R5bGUucmlnaHQgPSAiIjsKICAgICAgaWYgKGhvcml6ID09ICJyaWdodCIpIHsKICAgICAgICBsZWZ0ID0gZGlzcGxheS5zaXplci5jbGllbnRXaWR0aCAtIG5vZGUub2Zmc2V0V2lkdGg7CiAgICAgICAgbm9kZS5zdHlsZS5yaWdodCA9ICIwcHgiOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChob3JpeiA9PSAibGVmdCIpIGxlZnQgPSAwOwogICAgICAgIGVsc2UgaWYgKGhvcml6ID09ICJtaWRkbGUiKSBsZWZ0ID0gKGRpc3BsYXkuc2l6ZXIuY2xpZW50V2lkdGggLSBub2RlLm9mZnNldFdpZHRoKSAvIDI7CiAgICAgICAgbm9kZS5zdHlsZS5sZWZ0ID0gbGVmdCArICJweCI7CiAgICAgIH0KICAgICAgaWYgKHNjcm9sbCkKICAgICAgICBzY3JvbGxJbnRvVmlldyh0aGlzLCBsZWZ0LCB0b3AsIGxlZnQgKyBub2RlLm9mZnNldFdpZHRoLCB0b3AgKyBub2RlLm9mZnNldEhlaWdodCk7CiAgICB9LAoKICAgIHRyaWdnZXJPbktleURvd246IG1ldGhvZE9wKG9uS2V5RG93biksCiAgICB0cmlnZ2VyT25LZXlQcmVzczogbWV0aG9kT3Aob25LZXlQcmVzcyksCiAgICB0cmlnZ2VyT25LZXlVcDogb25LZXlVcCwKCiAgICBleGVjQ29tbWFuZDogZnVuY3Rpb24oY21kKSB7CiAgICAgIGlmIChjb21tYW5kcy5oYXNPd25Qcm9wZXJ0eShjbWQpKQogICAgICAgIHJldHVybiBjb21tYW5kc1tjbWRdLmNhbGwobnVsbCwgdGhpcyk7CiAgICB9LAoKICAgIHRyaWdnZXJFbGVjdHJpYzogbWV0aG9kT3AoZnVuY3Rpb24odGV4dCkgeyB0cmlnZ2VyRWxlY3RyaWModGhpcywgdGV4dCk7IH0pLAoKICAgIGZpbmRQb3NIOiBmdW5jdGlvbihmcm9tLCBhbW91bnQsIHVuaXQsIHZpc3VhbGx5KSB7CiAgICAgIHZhciBkaXIgPSAxOwogICAgICBpZiAoYW1vdW50IDwgMCkgeyBkaXIgPSAtMTsgYW1vdW50ID0gLWFtb3VudDsgfQogICAgICBmb3IgKHZhciBpID0gMCwgY3VyID0gY2xpcFBvcyh0aGlzLmRvYywgZnJvbSk7IGkgPCBhbW91bnQ7ICsraSkgewogICAgICAgIGN1ciA9IGZpbmRQb3NIKHRoaXMuZG9jLCBjdXIsIGRpciwgdW5pdCwgdmlzdWFsbHkpOwogICAgICAgIGlmIChjdXIuaGl0U2lkZSkgYnJlYWs7CiAgICAgIH0KICAgICAgcmV0dXJuIGN1cjsKICAgIH0sCgogICAgbW92ZUg6IG1ldGhvZE9wKGZ1bmN0aW9uKGRpciwgdW5pdCkgewogICAgICB2YXIgY20gPSB0aGlzOwogICAgICBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICBpZiAoY20uZGlzcGxheS5zaGlmdCB8fCBjbS5kb2MuZXh0ZW5kIHx8IHJhbmdlLmVtcHR5KCkpCiAgICAgICAgICByZXR1cm4gZmluZFBvc0goY20uZG9jLCByYW5nZS5oZWFkLCBkaXIsIHVuaXQsIGNtLm9wdGlvbnMucnRsTW92ZVZpc3VhbGx5KTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gZGlyIDwgMCA/IHJhbmdlLmZyb20oKSA6IHJhbmdlLnRvKCk7CiAgICAgIH0sIHNlbF9tb3ZlKTsKICAgIH0pLAoKICAgIGRlbGV0ZUg6IG1ldGhvZE9wKGZ1bmN0aW9uKGRpciwgdW5pdCkgewogICAgICB2YXIgc2VsID0gdGhpcy5kb2Muc2VsLCBkb2MgPSB0aGlzLmRvYzsKICAgICAgaWYgKHNlbC5zb21ldGhpbmdTZWxlY3RlZCgpKQogICAgICAgIGRvYy5yZXBsYWNlU2VsZWN0aW9uKCIiLCBudWxsLCAiK2RlbGV0ZSIpOwogICAgICBlbHNlCiAgICAgICAgZGVsZXRlTmVhclNlbGVjdGlvbih0aGlzLCBmdW5jdGlvbihyYW5nZSkgewogICAgICAgICAgdmFyIG90aGVyID0gZmluZFBvc0goZG9jLCByYW5nZS5oZWFkLCBkaXIsIHVuaXQsIGZhbHNlKTsKICAgICAgICAgIHJldHVybiBkaXIgPCAwID8ge2Zyb206IG90aGVyLCB0bzogcmFuZ2UuaGVhZH0gOiB7ZnJvbTogcmFuZ2UuaGVhZCwgdG86IG90aGVyfTsKICAgICAgICB9KTsKICAgIH0pLAoKICAgIGZpbmRQb3NWOiBmdW5jdGlvbihmcm9tLCBhbW91bnQsIHVuaXQsIGdvYWxDb2x1bW4pIHsKICAgICAgdmFyIGRpciA9IDEsIHggPSBnb2FsQ29sdW1uOwogICAgICBpZiAoYW1vdW50IDwgMCkgeyBkaXIgPSAtMTsgYW1vdW50ID0gLWFtb3VudDsgfQogICAgICBmb3IgKHZhciBpID0gMCwgY3VyID0gY2xpcFBvcyh0aGlzLmRvYywgZnJvbSk7IGkgPCBhbW91bnQ7ICsraSkgewogICAgICAgIHZhciBjb29yZHMgPSBjdXJzb3JDb29yZHModGhpcywgY3VyLCAiZGl2Iik7CiAgICAgICAgaWYgKHggPT0gbnVsbCkgeCA9IGNvb3Jkcy5sZWZ0OwogICAgICAgIGVsc2UgY29vcmRzLmxlZnQgPSB4OwogICAgICAgIGN1ciA9IGZpbmRQb3NWKHRoaXMsIGNvb3JkcywgZGlyLCB1bml0KTsKICAgICAgICBpZiAoY3VyLmhpdFNpZGUpIGJyZWFrOwogICAgICB9CiAgICAgIHJldHVybiBjdXI7CiAgICB9LAoKICAgIG1vdmVWOiBtZXRob2RPcChmdW5jdGlvbihkaXIsIHVuaXQpIHsKICAgICAgdmFyIGNtID0gdGhpcywgZG9jID0gdGhpcy5kb2MsIGdvYWxzID0gW107CiAgICAgIHZhciBjb2xsYXBzZSA9ICFjbS5kaXNwbGF5LnNoaWZ0ICYmICFkb2MuZXh0ZW5kICYmIGRvYy5zZWwuc29tZXRoaW5nU2VsZWN0ZWQoKTsKICAgICAgZG9jLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkgewogICAgICAgIGlmIChjb2xsYXBzZSkKICAgICAgICAgIHJldHVybiBkaXIgPCAwID8gcmFuZ2UuZnJvbSgpIDogcmFuZ2UudG8oKTsKICAgICAgICB2YXIgaGVhZFBvcyA9IGN1cnNvckNvb3JkcyhjbSwgcmFuZ2UuaGVhZCwgImRpdiIpOwogICAgICAgIGlmIChyYW5nZS5nb2FsQ29sdW1uICE9IG51bGwpIGhlYWRQb3MubGVmdCA9IHJhbmdlLmdvYWxDb2x1bW47CiAgICAgICAgZ29hbHMucHVzaChoZWFkUG9zLmxlZnQpOwogICAgICAgIHZhciBwb3MgPSBmaW5kUG9zVihjbSwgaGVhZFBvcywgZGlyLCB1bml0KTsKICAgICAgICBpZiAodW5pdCA9PSAicGFnZSIgJiYgcmFuZ2UgPT0gZG9jLnNlbC5wcmltYXJ5KCkpCiAgICAgICAgICBhZGRUb1Njcm9sbFBvcyhjbSwgbnVsbCwgY2hhckNvb3JkcyhjbSwgcG9zLCAiZGl2IikudG9wIC0gaGVhZFBvcy50b3ApOwogICAgICAgIHJldHVybiBwb3M7CiAgICAgIH0sIHNlbF9tb3ZlKTsKICAgICAgaWYgKGdvYWxzLmxlbmd0aCkgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykKICAgICAgICBkb2Muc2VsLnJhbmdlc1tpXS5nb2FsQ29sdW1uID0gZ29hbHNbaV07CiAgICB9KSwKCiAgICAvLyBGaW5kIHRoZSB3b3JkIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiAoYXMgcmV0dXJuZWQgYnkgY29vcmRzQ2hhcikuCiAgICBmaW5kV29yZEF0OiBmdW5jdGlvbihwb3MpIHsKICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jLCBsaW5lID0gZ2V0TGluZShkb2MsIHBvcy5saW5lKS50ZXh0OwogICAgICB2YXIgc3RhcnQgPSBwb3MuY2gsIGVuZCA9IHBvcy5jaDsKICAgICAgaWYgKGxpbmUpIHsKICAgICAgICB2YXIgaGVscGVyID0gdGhpcy5nZXRIZWxwZXIocG9zLCAid29yZENoYXJzIik7CiAgICAgICAgaWYgKChwb3MueFJlbCA8IDAgfHwgZW5kID09IGxpbmUubGVuZ3RoKSAmJiBzdGFydCkgLS1zdGFydDsgZWxzZSArK2VuZDsKICAgICAgICB2YXIgc3RhcnRDaGFyID0gbGluZS5jaGFyQXQoc3RhcnQpOwogICAgICAgIHZhciBjaGVjayA9IGlzV29yZENoYXIoc3RhcnRDaGFyLCBoZWxwZXIpCiAgICAgICAgICA/IGZ1bmN0aW9uKGNoKSB7IHJldHVybiBpc1dvcmRDaGFyKGNoLCBoZWxwZXIpOyB9CiAgICAgICAgICA6IC9ccy8udGVzdChzdGFydENoYXIpID8gZnVuY3Rpb24oY2gpIHtyZXR1cm4gL1xzLy50ZXN0KGNoKTt9CiAgICAgICAgICA6IGZ1bmN0aW9uKGNoKSB7cmV0dXJuICEvXHMvLnRlc3QoY2gpICYmICFpc1dvcmRDaGFyKGNoKTt9OwogICAgICAgIHdoaWxlIChzdGFydCA+IDAgJiYgY2hlY2sobGluZS5jaGFyQXQoc3RhcnQgLSAxKSkpIC0tc3RhcnQ7CiAgICAgICAgd2hpbGUgKGVuZCA8IGxpbmUubGVuZ3RoICYmIGNoZWNrKGxpbmUuY2hhckF0KGVuZCkpKSArK2VuZDsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFJhbmdlKFBvcyhwb3MubGluZSwgc3RhcnQpLCBQb3MocG9zLmxpbmUsIGVuZCkpOwogICAgfSwKCiAgICB0b2dnbGVPdmVyd3JpdGU6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlID09IHRoaXMuc3RhdGUub3ZlcndyaXRlKSByZXR1cm47CiAgICAgIGlmICh0aGlzLnN0YXRlLm92ZXJ3cml0ZSA9ICF0aGlzLnN0YXRlLm92ZXJ3cml0ZSkKICAgICAgICBhZGRDbGFzcyh0aGlzLmRpc3BsYXkuY3Vyc29yRGl2LCAiQ29kZU1pcnJvci1vdmVyd3JpdGUiKTsKICAgICAgZWxzZQogICAgICAgIHJtQ2xhc3ModGhpcy5kaXNwbGF5LmN1cnNvckRpdiwgIkNvZGVNaXJyb3Itb3ZlcndyaXRlIik7CgogICAgICBzaWduYWwodGhpcywgIm92ZXJ3cml0ZVRvZ2dsZSIsIHRoaXMsIHRoaXMuc3RhdGUub3ZlcndyaXRlKTsKICAgIH0sCiAgICBoYXNGb2N1czogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmRpc3BsYXkuaW5wdXQuZ2V0RmllbGQoKSA9PSBhY3RpdmVFbHQoKTsgfSwKCiAgICBzY3JvbGxUbzogbWV0aG9kT3AoZnVuY3Rpb24oeCwgeSkgewogICAgICBpZiAoeCAhPSBudWxsIHx8IHkgIT0gbnVsbCkgcmVzb2x2ZVNjcm9sbFRvUG9zKHRoaXMpOwogICAgICBpZiAoeCAhPSBudWxsKSB0aGlzLmN1ck9wLnNjcm9sbExlZnQgPSB4OwogICAgICBpZiAoeSAhPSBudWxsKSB0aGlzLmN1ck9wLnNjcm9sbFRvcCA9IHk7CiAgICB9KSwKICAgIGdldFNjcm9sbEluZm86IGZ1bmN0aW9uKCkgewogICAgICB2YXIgc2Nyb2xsZXIgPSB0aGlzLmRpc3BsYXkuc2Nyb2xsZXI7CiAgICAgIHJldHVybiB7bGVmdDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgdG9wOiBzY3JvbGxlci5zY3JvbGxUb3AsCiAgICAgICAgICAgICAgaGVpZ2h0OiBzY3JvbGxlci5zY3JvbGxIZWlnaHQgLSBzY3JvbGxHYXAodGhpcykgLSB0aGlzLmRpc3BsYXkuYmFySGVpZ2h0LAogICAgICAgICAgICAgIHdpZHRoOiBzY3JvbGxlci5zY3JvbGxXaWR0aCAtIHNjcm9sbEdhcCh0aGlzKSAtIHRoaXMuZGlzcGxheS5iYXJXaWR0aCwKICAgICAgICAgICAgICBjbGllbnRIZWlnaHQ6IGRpc3BsYXlIZWlnaHQodGhpcyksIGNsaWVudFdpZHRoOiBkaXNwbGF5V2lkdGgodGhpcyl9OwogICAgfSwKCiAgICBzY3JvbGxJbnRvVmlldzogbWV0aG9kT3AoZnVuY3Rpb24ocmFuZ2UsIG1hcmdpbikgewogICAgICBpZiAocmFuZ2UgPT0gbnVsbCkgewogICAgICAgIHJhbmdlID0ge2Zyb206IHRoaXMuZG9jLnNlbC5wcmltYXJ5KCkuaGVhZCwgdG86IG51bGx9OwogICAgICAgIGlmIChtYXJnaW4gPT0gbnVsbCkgbWFyZ2luID0gdGhpcy5vcHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbjsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmFuZ2UgPT0gIm51bWJlciIpIHsKICAgICAgICByYW5nZSA9IHtmcm9tOiBQb3MocmFuZ2UsIDApLCB0bzogbnVsbH07CiAgICAgIH0gZWxzZSBpZiAocmFuZ2UuZnJvbSA9PSBudWxsKSB7CiAgICAgICAgcmFuZ2UgPSB7ZnJvbTogcmFuZ2UsIHRvOiBudWxsfTsKICAgICAgfQogICAgICBpZiAoIXJhbmdlLnRvKSByYW5nZS50byA9IHJhbmdlLmZyb207CiAgICAgIHJhbmdlLm1hcmdpbiA9IG1hcmdpbiB8fCAwOwoKICAgICAgaWYgKHJhbmdlLmZyb20ubGluZSAhPSBudWxsKSB7CiAgICAgICAgcmVzb2x2ZVNjcm9sbFRvUG9zKHRoaXMpOwogICAgICAgIHRoaXMuY3VyT3Auc2Nyb2xsVG9Qb3MgPSByYW5nZTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgc1BvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyh0aGlzLCBNYXRoLm1pbihyYW5nZS5mcm9tLmxlZnQsIHJhbmdlLnRvLmxlZnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKHJhbmdlLmZyb20udG9wLCByYW5nZS50by50b3ApIC0gcmFuZ2UubWFyZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KHJhbmdlLmZyb20ucmlnaHQsIHJhbmdlLnRvLnJpZ2h0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChyYW5nZS5mcm9tLmJvdHRvbSwgcmFuZ2UudG8uYm90dG9tKSArIHJhbmdlLm1hcmdpbik7CiAgICAgICAgdGhpcy5zY3JvbGxUbyhzUG9zLnNjcm9sbExlZnQsIHNQb3Muc2Nyb2xsVG9wKTsKICAgICAgfQogICAgfSksCgogICAgc2V0U2l6ZTogbWV0aG9kT3AoZnVuY3Rpb24od2lkdGgsIGhlaWdodCkgewogICAgICB2YXIgY20gPSB0aGlzOwogICAgICBmdW5jdGlvbiBpbnRlcnByZXQodmFsKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gIm51bWJlciIgfHwgL15cZCskLy50ZXN0KFN0cmluZyh2YWwpKSA/IHZhbCArICJweCIgOiB2YWw7CiAgICAgIH0KICAgICAgaWYgKHdpZHRoICE9IG51bGwpIGNtLmRpc3BsYXkud3JhcHBlci5zdHlsZS53aWR0aCA9IGludGVycHJldCh3aWR0aCk7CiAgICAgIGlmIChoZWlnaHQgIT0gbnVsbCkgY20uZGlzcGxheS53cmFwcGVyLnN0eWxlLmhlaWdodCA9IGludGVycHJldChoZWlnaHQpOwogICAgICBpZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGUodGhpcyk7CiAgICAgIHZhciBsaW5lTm8gPSBjbS5kaXNwbGF5LnZpZXdGcm9tOwogICAgICBjbS5kb2MuaXRlcihsaW5lTm8sIGNtLmRpc3BsYXkudmlld1RvLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgaWYgKGxpbmUud2lkZ2V0cykgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyBpKyspCiAgICAgICAgICBpZiAobGluZS53aWRnZXRzW2ldLm5vSFNjcm9sbCkgeyByZWdMaW5lQ2hhbmdlKGNtLCBsaW5lTm8sICJ3aWRnZXQiKTsgYnJlYWs7IH0KICAgICAgICArK2xpbmVObzsKICAgICAgfSk7CiAgICAgIGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTsKICAgICAgc2lnbmFsKGNtLCAicmVmcmVzaCIsIHRoaXMpOwogICAgfSksCgogICAgb3BlcmF0aW9uOiBmdW5jdGlvbihmKXtyZXR1cm4gcnVuSW5PcCh0aGlzLCBmKTt9LAoKICAgIHJlZnJlc2g6IG1ldGhvZE9wKGZ1bmN0aW9uKCkgewogICAgICB2YXIgb2xkSGVpZ2h0ID0gdGhpcy5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQ7CiAgICAgIHJlZ0NoYW5nZSh0aGlzKTsKICAgICAgdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7CiAgICAgIGNsZWFyQ2FjaGVzKHRoaXMpOwogICAgICB0aGlzLnNjcm9sbFRvKHRoaXMuZG9jLnNjcm9sbExlZnQsIHRoaXMuZG9jLnNjcm9sbFRvcCk7CiAgICAgIHVwZGF0ZUd1dHRlclNwYWNlKHRoaXMpOwogICAgICBpZiAob2xkSGVpZ2h0ID09IG51bGwgfHwgTWF0aC5hYnMob2xkSGVpZ2h0IC0gdGV4dEhlaWdodCh0aGlzLmRpc3BsYXkpKSA+IC41KQogICAgICAgIGVzdGltYXRlTGluZUhlaWdodHModGhpcyk7CiAgICAgIHNpZ25hbCh0aGlzLCAicmVmcmVzaCIsIHRoaXMpOwogICAgfSksCgogICAgc3dhcERvYzogbWV0aG9kT3AoZnVuY3Rpb24oZG9jKSB7CiAgICAgIHZhciBvbGQgPSB0aGlzLmRvYzsKICAgICAgb2xkLmNtID0gbnVsbDsKICAgICAgYXR0YWNoRG9jKHRoaXMsIGRvYyk7CiAgICAgIGNsZWFyQ2FjaGVzKHRoaXMpOwogICAgICB0aGlzLmRpc3BsYXkuaW5wdXQucmVzZXQoKTsKICAgICAgdGhpcy5zY3JvbGxUbyhkb2Muc2Nyb2xsTGVmdCwgZG9jLnNjcm9sbFRvcCk7CiAgICAgIHRoaXMuY3VyT3AuZm9yY2VTY3JvbGwgPSB0cnVlOwogICAgICBzaWduYWxMYXRlcih0aGlzLCAic3dhcERvYyIsIHRoaXMsIG9sZCk7CiAgICAgIHJldHVybiBvbGQ7CiAgICB9KSwKCiAgICBnZXRJbnB1dEZpZWxkOiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuaW5wdXQuZ2V0RmllbGQoKTt9LAogICAgZ2V0V3JhcHBlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS53cmFwcGVyO30sCiAgICBnZXRTY3JvbGxlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5zY3JvbGxlcjt9LAogICAgZ2V0R3V0dGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5Lmd1dHRlcnM7fQogIH07CiAgZXZlbnRNaXhpbihDb2RlTWlycm9yKTsKCiAgLy8gT1BUSU9OIERFRkFVTFRTCgogIC8vIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KICB2YXIgZGVmYXVsdHMgPSBDb2RlTWlycm9yLmRlZmF1bHRzID0ge307CiAgLy8gRnVuY3Rpb25zIHRvIHJ1biB3aGVuIG9wdGlvbnMgYXJlIGNoYW5nZWQuCiAgdmFyIG9wdGlvbkhhbmRsZXJzID0gQ29kZU1pcnJvci5vcHRpb25IYW5kbGVycyA9IHt9OwoKICBmdW5jdGlvbiBvcHRpb24obmFtZSwgZGVmbHQsIGhhbmRsZSwgbm90T25Jbml0KSB7CiAgICBDb2RlTWlycm9yLmRlZmF1bHRzW25hbWVdID0gZGVmbHQ7CiAgICBpZiAoaGFuZGxlKSBvcHRpb25IYW5kbGVyc1tuYW1lXSA9CiAgICAgIG5vdE9uSW5pdCA/IGZ1bmN0aW9uKGNtLCB2YWwsIG9sZCkge2lmIChvbGQgIT0gSW5pdCkgaGFuZGxlKGNtLCB2YWwsIG9sZCk7fSA6IGhhbmRsZTsKICB9CgogIC8vIFBhc3NlZCB0byBvcHRpb24gaGFuZGxlcnMgd2hlbiB0aGVyZSBpcyBubyBvbGQgdmFsdWUuCiAgdmFyIEluaXQgPSBDb2RlTWlycm9yLkluaXQgPSB7dG9TdHJpbmc6IGZ1bmN0aW9uKCl7cmV0dXJuICJDb2RlTWlycm9yLkluaXQiO319OwoKICAvLyBUaGVzZSB0d28gYXJlLCBvbiBpbml0LCBjYWxsZWQgZnJvbSB0aGUgY29uc3RydWN0b3IgYmVjYXVzZSB0aGV5CiAgLy8gaGF2ZSB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGVkaXRvciBjYW4gc3RhcnQgYXQgYWxsLgogIG9wdGlvbigidmFsdWUiLCAiIiwgZnVuY3Rpb24oY20sIHZhbCkgewogICAgY20uc2V0VmFsdWUodmFsKTsKICB9LCB0cnVlKTsKICBvcHRpb24oIm1vZGUiLCBudWxsLCBmdW5jdGlvbihjbSwgdmFsKSB7CiAgICBjbS5kb2MubW9kZU9wdGlvbiA9IHZhbDsKICAgIGxvYWRNb2RlKGNtKTsKICB9LCB0cnVlKTsKCiAgb3B0aW9uKCJpbmRlbnRVbml0IiwgMiwgbG9hZE1vZGUsIHRydWUpOwogIG9wdGlvbigiaW5kZW50V2l0aFRhYnMiLCBmYWxzZSk7CiAgb3B0aW9uKCJzbWFydEluZGVudCIsIHRydWUpOwogIG9wdGlvbigidGFiU2l6ZSIsIDQsIGZ1bmN0aW9uKGNtKSB7CiAgICByZXNldE1vZGVTdGF0ZShjbSk7CiAgICBjbGVhckNhY2hlcyhjbSk7CiAgICByZWdDaGFuZ2UoY20pOwogIH0sIHRydWUpOwogIG9wdGlvbigibGluZVNlcGFyYXRvciIsIG51bGwsIGZ1bmN0aW9uKGNtLCB2YWwpIHsKICAgIGNtLmRvYy5saW5lU2VwID0gdmFsOwogICAgaWYgKCF2YWwpIHJldHVybjsKICAgIHZhciBuZXdCcmVha3MgPSBbXSwgbGluZU5vID0gY20uZG9jLmZpcnN0OwogICAgY20uZG9jLml0ZXIoZnVuY3Rpb24obGluZSkgewogICAgICBmb3IgKHZhciBwb3MgPSAwOzspIHsKICAgICAgICB2YXIgZm91bmQgPSBsaW5lLnRleHQuaW5kZXhPZih2YWwsIHBvcyk7CiAgICAgICAgaWYgKGZvdW5kID09IC0xKSBicmVhazsKICAgICAgICBwb3MgPSBmb3VuZCArIHZhbC5sZW5ndGg7CiAgICAgICAgbmV3QnJlYWtzLnB1c2goUG9zKGxpbmVObywgZm91bmQpKTsKICAgICAgfQogICAgICBsaW5lTm8rKzsKICAgIH0pOwogICAgZm9yICh2YXIgaSA9IG5ld0JyZWFrcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkKICAgICAgcmVwbGFjZVJhbmdlKGNtLmRvYywgdmFsLCBuZXdCcmVha3NbaV0sIFBvcyhuZXdCcmVha3NbaV0ubGluZSwgbmV3QnJlYWtzW2ldLmNoICsgdmFsLmxlbmd0aCkpCiAgfSk7CiAgb3B0aW9uKCJzcGVjaWFsQ2hhcnMiLCAvW1x0XHUwMDAwLVx1MDAxOVx1MDBhZFx1MjAwYi1cdTIwMGZcdTIwMjhcdTIwMjlcdWZlZmZdL2csIGZ1bmN0aW9uKGNtLCB2YWwsIG9sZCkgewogICAgY20uc3RhdGUuc3BlY2lhbENoYXJzID0gbmV3IFJlZ0V4cCh2YWwuc291cmNlICsgKHZhbC50ZXN0KCJcdCIpID8gIiIgOiAifFx0IiksICJnIik7CiAgICBpZiAob2xkICE9IENvZGVNaXJyb3IuSW5pdCkgY20ucmVmcmVzaCgpOwogIH0pOwogIG9wdGlvbigic3BlY2lhbENoYXJQbGFjZWhvbGRlciIsIGRlZmF1bHRTcGVjaWFsQ2hhclBsYWNlaG9sZGVyLCBmdW5jdGlvbihjbSkge2NtLnJlZnJlc2goKTt9LCB0cnVlKTsKICBvcHRpb24oImVsZWN0cmljQ2hhcnMiLCB0cnVlKTsKICBvcHRpb24oImlucHV0U3R5bGUiLCBtb2JpbGUgPyAiY29udGVudGVkaXRhYmxlIiA6ICJ0ZXh0YXJlYSIsIGZ1bmN0aW9uKCkgewogICAgdGhyb3cgbmV3IEVycm9yKCJpbnB1dFN0eWxlIGNhbiBub3QgKHlldCkgYmUgY2hhbmdlZCBpbiBhIHJ1bm5pbmcgZWRpdG9yIik7IC8vIEZJWE1FCiAgfSwgdHJ1ZSk7CiAgb3B0aW9uKCJydGxNb3ZlVmlzdWFsbHkiLCAhd2luZG93cyk7CiAgb3B0aW9uKCJ3aG9sZUxpbmVVcGRhdGVCZWZvcmUiLCB0cnVlKTsKCiAgb3B0aW9uKCJ0aGVtZSIsICJkZWZhdWx0IiwgZnVuY3Rpb24oY20pIHsKICAgIHRoZW1lQ2hhbmdlZChjbSk7CiAgICBndXR0ZXJzQ2hhbmdlZChjbSk7CiAgfSwgdHJ1ZSk7CiAgb3B0aW9uKCJrZXlNYXAiLCAiZGVmYXVsdCIsIGZ1bmN0aW9uKGNtLCB2YWwsIG9sZCkgewogICAgdmFyIG5leHQgPSBnZXRLZXlNYXAodmFsKTsKICAgIHZhciBwcmV2ID0gb2xkICE9IENvZGVNaXJyb3IuSW5pdCAmJiBnZXRLZXlNYXAob2xkKTsKICAgIGlmIChwcmV2ICYmIHByZXYuZGV0YWNoKSBwcmV2LmRldGFjaChjbSwgbmV4dCk7CiAgICBpZiAobmV4dC5hdHRhY2gpIG5leHQuYXR0YWNoKGNtLCBwcmV2IHx8IG51bGwpOwogIH0pOwogIG9wdGlvbigiZXh0cmFLZXlzIiwgbnVsbCk7CgogIG9wdGlvbigibGluZVdyYXBwaW5nIiwgZmFsc2UsIHdyYXBwaW5nQ2hhbmdlZCwgdHJ1ZSk7CiAgb3B0aW9uKCJndXR0ZXJzIiwgW10sIGZ1bmN0aW9uKGNtKSB7CiAgICBzZXRHdXR0ZXJzRm9yTGluZU51bWJlcnMoY20ub3B0aW9ucyk7CiAgICBndXR0ZXJzQ2hhbmdlZChjbSk7CiAgfSwgdHJ1ZSk7CiAgb3B0aW9uKCJmaXhlZEd1dHRlciIsIHRydWUsIGZ1bmN0aW9uKGNtLCB2YWwpIHsKICAgIGNtLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5sZWZ0ID0gdmFsID8gY29tcGVuc2F0ZUZvckhTY3JvbGwoY20uZGlzcGxheSkgKyAicHgiIDogIjAiOwogICAgY20ucmVmcmVzaCgpOwogIH0sIHRydWUpOwogIG9wdGlvbigiY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIiLCBmYWxzZSwgZnVuY3Rpb24oY20pIHt1cGRhdGVTY3JvbGxiYXJzKGNtKTt9LCB0cnVlKTsKICBvcHRpb24oInNjcm9sbGJhclN0eWxlIiwgIm5hdGl2ZSIsIGZ1bmN0aW9uKGNtKSB7CiAgICBpbml0U2Nyb2xsYmFycyhjbSk7CiAgICB1cGRhdGVTY3JvbGxiYXJzKGNtKTsKICAgIGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxUb3AoY20uZG9jLnNjcm9sbFRvcCk7CiAgICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsTGVmdChjbS5kb2Muc2Nyb2xsTGVmdCk7CiAgfSwgdHJ1ZSk7CiAgb3B0aW9uKCJsaW5lTnVtYmVycyIsIGZhbHNlLCBmdW5jdGlvbihjbSkgewogICAgc2V0R3V0dGVyc0ZvckxpbmVOdW1iZXJzKGNtLm9wdGlvbnMpOwogICAgZ3V0dGVyc0NoYW5nZWQoY20pOwogIH0sIHRydWUpOwogIG9wdGlvbigiZmlyc3RMaW5lTnVtYmVyIiwgMSwgZ3V0dGVyc0NoYW5nZWQsIHRydWUpOwogIG9wdGlvbigibGluZU51bWJlckZvcm1hdHRlciIsIGZ1bmN0aW9uKGludGVnZXIpIHtyZXR1cm4gaW50ZWdlcjt9LCBndXR0ZXJzQ2hhbmdlZCwgdHJ1ZSk7CiAgb3B0aW9uKCJzaG93Q3Vyc29yV2hlblNlbGVjdGluZyIsIGZhbHNlLCB1cGRhdGVTZWxlY3Rpb24sIHRydWUpOwoKICBvcHRpb24oInJlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudSIsIHRydWUpOwogIG9wdGlvbigibGluZVdpc2VDb3B5Q3V0IiwgdHJ1ZSk7CgogIG9wdGlvbigicmVhZE9ubHkiLCBmYWxzZSwgZnVuY3Rpb24oY20sIHZhbCkgewogICAgaWYgKHZhbCA9PSAibm9jdXJzb3IiKSB7CiAgICAgIG9uQmx1cihjbSk7CiAgICAgIGNtLmRpc3BsYXkuaW5wdXQuYmx1cigpOwogICAgICBjbS5kaXNwbGF5LmRpc2FibGVkID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIGNtLmRpc3BsYXkuZGlzYWJsZWQgPSBmYWxzZTsKICAgIH0KICAgIGNtLmRpc3BsYXkuaW5wdXQucmVhZE9ubHlDaGFuZ2VkKHZhbCkKICB9KTsKICBvcHRpb24oImRpc2FibGVJbnB1dCIsIGZhbHNlLCBmdW5jdGlvbihjbSwgdmFsKSB7aWYgKCF2YWwpIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQoKTt9LCB0cnVlKTsKICBvcHRpb24oImRyYWdEcm9wIiwgdHJ1ZSwgZHJhZ0Ryb3BDaGFuZ2VkKTsKICBvcHRpb24oImFsbG93RHJvcEZpbGVUeXBlcyIsIG51bGwpOwoKICBvcHRpb24oImN1cnNvckJsaW5rUmF0ZSIsIDUzMCk7CiAgb3B0aW9uKCJjdXJzb3JTY3JvbGxNYXJnaW4iLCAwKTsKICBvcHRpb24oImN1cnNvckhlaWdodCIsIDEsIHVwZGF0ZVNlbGVjdGlvbiwgdHJ1ZSk7CiAgb3B0aW9uKCJzaW5nbGVDdXJzb3JIZWlnaHRQZXJMaW5lIiwgdHJ1ZSwgdXBkYXRlU2VsZWN0aW9uLCB0cnVlKTsKICBvcHRpb24oIndvcmtUaW1lIiwgMTAwKTsKICBvcHRpb24oIndvcmtEZWxheSIsIDEwMCk7CiAgb3B0aW9uKCJmbGF0dGVuU3BhbnMiLCB0cnVlLCByZXNldE1vZGVTdGF0ZSwgdHJ1ZSk7CiAgb3B0aW9uKCJhZGRNb2RlQ2xhc3MiLCBmYWxzZSwgcmVzZXRNb2RlU3RhdGUsIHRydWUpOwogIG9wdGlvbigicG9sbEludGVydmFsIiwgMTAwKTsKICBvcHRpb24oInVuZG9EZXB0aCIsIDIwMCwgZnVuY3Rpb24oY20sIHZhbCl7Y20uZG9jLmhpc3RvcnkudW5kb0RlcHRoID0gdmFsO30pOwogIG9wdGlvbigiaGlzdG9yeUV2ZW50RGVsYXkiLCAxMjUwKTsKICBvcHRpb24oInZpZXdwb3J0TWFyZ2luIiwgMTAsIGZ1bmN0aW9uKGNtKXtjbS5yZWZyZXNoKCk7fSwgdHJ1ZSk7CiAgb3B0aW9uKCJtYXhIaWdobGlnaHRMZW5ndGgiLCAxMDAwMCwgcmVzZXRNb2RlU3RhdGUsIHRydWUpOwogIG9wdGlvbigibW92ZUlucHV0V2l0aEN1cnNvciIsIHRydWUsIGZ1bmN0aW9uKGNtLCB2YWwpIHsKICAgIGlmICghdmFsKSBjbS5kaXNwbGF5LmlucHV0LnJlc2V0UG9zaXRpb24oKTsKICB9KTsKCiAgb3B0aW9uKCJ0YWJpbmRleCIsIG51bGwsIGZ1bmN0aW9uKGNtLCB2YWwpIHsKICAgIGNtLmRpc3BsYXkuaW5wdXQuZ2V0RmllbGQoKS50YWJJbmRleCA9IHZhbCB8fCAiIjsKICB9KTsKICBvcHRpb24oImF1dG9mb2N1cyIsIG51bGwpOwoKICAvLyBNT0RFIERFRklOSVRJT04gQU5EIFFVRVJZSU5HCgogIC8vIEtub3duIG1vZGVzLCBieSBuYW1lIGFuZCBieSBNSU1FCiAgdmFyIG1vZGVzID0gQ29kZU1pcnJvci5tb2RlcyA9IHt9LCBtaW1lTW9kZXMgPSBDb2RlTWlycm9yLm1pbWVNb2RlcyA9IHt9OwoKICAvLyBFeHRyYSBhcmd1bWVudHMgYXJlIHN0b3JlZCBhcyB0aGUgbW9kZSdzIGRlcGVuZGVuY2llcywgd2hpY2ggaXMKICAvLyB1c2VkIGJ5IChsZWdhY3kpIG1lY2hhbmlzbXMgbGlrZSBsb2FkbW9kZS5qcyB0byBhdXRvbWF0aWNhbGx5CiAgLy8gbG9hZCBhIG1vZGUuIChQcmVmZXJyZWQgbWVjaGFuaXNtIGlzIHRoZSByZXF1aXJlL2RlZmluZSBjYWxscy4pCiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlID0gZnVuY3Rpb24obmFtZSwgbW9kZSkgewogICAgaWYgKCFDb2RlTWlycm9yLmRlZmF1bHRzLm1vZGUgJiYgbmFtZSAhPSAibnVsbCIpIENvZGVNaXJyb3IuZGVmYXVsdHMubW9kZSA9IG5hbWU7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpCiAgICAgIG1vZGUuZGVwZW5kZW5jaWVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsKICAgIG1vZGVzW25hbWVdID0gbW9kZTsKICB9OwoKICBDb2RlTWlycm9yLmRlZmluZU1JTUUgPSBmdW5jdGlvbihtaW1lLCBzcGVjKSB7CiAgICBtaW1lTW9kZXNbbWltZV0gPSBzcGVjOwogIH07CgogIC8vIEdpdmVuIGEgTUlNRSB0eXBlLCBhIHtuYW1lLCAuLi5vcHRpb25zfSBjb25maWcgb2JqZWN0LCBvciBhIG5hbWUKICAvLyBzdHJpbmcsIHJldHVybiBhIG1vZGUgY29uZmlnIG9iamVjdC4KICBDb2RlTWlycm9yLnJlc29sdmVNb2RlID0gZnVuY3Rpb24oc3BlYykgewogICAgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciICYmIG1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eShzcGVjKSkgewogICAgICBzcGVjID0gbWltZU1vZGVzW3NwZWNdOwogICAgfSBlbHNlIGlmIChzcGVjICYmIHR5cGVvZiBzcGVjLm5hbWUgPT0gInN0cmluZyIgJiYgbWltZU1vZGVzLmhhc093blByb3BlcnR5KHNwZWMubmFtZSkpIHsKICAgICAgdmFyIGZvdW5kID0gbWltZU1vZGVzW3NwZWMubmFtZV07CiAgICAgIGlmICh0eXBlb2YgZm91bmQgPT0gInN0cmluZyIpIGZvdW5kID0ge25hbWU6IGZvdW5kfTsKICAgICAgc3BlYyA9IGNyZWF0ZU9iaihmb3VuZCwgc3BlYyk7CiAgICAgIHNwZWMubmFtZSA9IGZvdW5kLm5hbWU7CiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciICYmIC9eW1x3XC1dK1wvW1x3XC1dK1wreG1sJC8udGVzdChzcGVjKSkgewogICAgICByZXR1cm4gQ29kZU1pcnJvci5yZXNvbHZlTW9kZSgiYXBwbGljYXRpb24veG1sIik7CiAgICB9CiAgICBpZiAodHlwZW9mIHNwZWMgPT0gInN0cmluZyIpIHJldHVybiB7bmFtZTogc3BlY307CiAgICBlbHNlIHJldHVybiBzcGVjIHx8IHtuYW1lOiAibnVsbCJ9OwogIH07CgogIC8vIEdpdmVuIGEgbW9kZSBzcGVjIChhbnl0aGluZyB0aGF0IHJlc29sdmVNb2RlIGFjY2VwdHMpLCBmaW5kIGFuZAogIC8vIGluaXRpYWxpemUgYW4gYWN0dWFsIG1vZGUgb2JqZWN0LgogIENvZGVNaXJyb3IuZ2V0TW9kZSA9IGZ1bmN0aW9uKG9wdGlvbnMsIHNwZWMpIHsKICAgIHZhciBzcGVjID0gQ29kZU1pcnJvci5yZXNvbHZlTW9kZShzcGVjKTsKICAgIHZhciBtZmFjdG9yeSA9IG1vZGVzW3NwZWMubmFtZV07CiAgICBpZiAoIW1mYWN0b3J5KSByZXR1cm4gQ29kZU1pcnJvci5nZXRNb2RlKG9wdGlvbnMsICJ0ZXh0L3BsYWluIik7CiAgICB2YXIgbW9kZU9iaiA9IG1mYWN0b3J5KG9wdGlvbnMsIHNwZWMpOwogICAgaWYgKG1vZGVFeHRlbnNpb25zLmhhc093blByb3BlcnR5KHNwZWMubmFtZSkpIHsKICAgICAgdmFyIGV4dHMgPSBtb2RlRXh0ZW5zaW9uc1tzcGVjLm5hbWVdOwogICAgICBmb3IgKHZhciBwcm9wIGluIGV4dHMpIHsKICAgICAgICBpZiAoIWV4dHMuaGFzT3duUHJvcGVydHkocHJvcCkpIGNvbnRpbnVlOwogICAgICAgIGlmIChtb2RlT2JqLmhhc093blByb3BlcnR5KHByb3ApKSBtb2RlT2JqWyJfIiArIHByb3BdID0gbW9kZU9ialtwcm9wXTsKICAgICAgICBtb2RlT2JqW3Byb3BdID0gZXh0c1twcm9wXTsKICAgICAgfQogICAgfQogICAgbW9kZU9iai5uYW1lID0gc3BlYy5uYW1lOwogICAgaWYgKHNwZWMuaGVscGVyVHlwZSkgbW9kZU9iai5oZWxwZXJUeXBlID0gc3BlYy5oZWxwZXJUeXBlOwogICAgaWYgKHNwZWMubW9kZVByb3BzKSBmb3IgKHZhciBwcm9wIGluIHNwZWMubW9kZVByb3BzKQogICAgICBtb2RlT2JqW3Byb3BdID0gc3BlYy5tb2RlUHJvcHNbcHJvcF07CgogICAgcmV0dXJuIG1vZGVPYmo7CiAgfTsKCiAgLy8gTWluaW1hbCBkZWZhdWx0IG1vZGUuCiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJudWxsIiwgZnVuY3Rpb24oKSB7CiAgICByZXR1cm4ge3Rva2VuOiBmdW5jdGlvbihzdHJlYW0pIHtzdHJlYW0uc2tpcFRvRW5kKCk7fX07CiAgfSk7CiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3BsYWluIiwgIm51bGwiKTsKCiAgLy8gVGhpcyBjYW4gYmUgdXNlZCB0byBhdHRhY2ggcHJvcGVydGllcyB0byBtb2RlIG9iamVjdHMgZnJvbQogIC8vIG91dHNpZGUgdGhlIGFjdHVhbCBtb2RlIGRlZmluaXRpb24uCiAgdmFyIG1vZGVFeHRlbnNpb25zID0gQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9ucyA9IHt9OwogIENvZGVNaXJyb3IuZXh0ZW5kTW9kZSA9IGZ1bmN0aW9uKG1vZGUsIHByb3BlcnRpZXMpIHsKICAgIHZhciBleHRzID0gbW9kZUV4dGVuc2lvbnMuaGFzT3duUHJvcGVydHkobW9kZSkgPyBtb2RlRXh0ZW5zaW9uc1ttb2RlXSA6IChtb2RlRXh0ZW5zaW9uc1ttb2RlXSA9IHt9KTsKICAgIGNvcHlPYmoocHJvcGVydGllcywgZXh0cyk7CiAgfTsKCiAgLy8gRVhURU5TSU9OUwoKICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbiA9IGZ1bmN0aW9uKG5hbWUsIGZ1bmMpIHsKICAgIENvZGVNaXJyb3IucHJvdG90eXBlW25hbWVdID0gZnVuYzsKICB9OwogIENvZGVNaXJyb3IuZGVmaW5lRG9jRXh0ZW5zaW9uID0gZnVuY3Rpb24obmFtZSwgZnVuYykgewogICAgRG9jLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmM7CiAgfTsKICBDb2RlTWlycm9yLmRlZmluZU9wdGlvbiA9IG9wdGlvbjsKCiAgdmFyIGluaXRIb29rcyA9IFtdOwogIENvZGVNaXJyb3IuZGVmaW5lSW5pdEhvb2sgPSBmdW5jdGlvbihmKSB7aW5pdEhvb2tzLnB1c2goZik7fTsKCiAgdmFyIGhlbHBlcnMgPSBDb2RlTWlycm9yLmhlbHBlcnMgPSB7fTsKICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgdmFsdWUpIHsKICAgIGlmICghaGVscGVycy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgaGVscGVyc1t0eXBlXSA9IENvZGVNaXJyb3JbdHlwZV0gPSB7X2dsb2JhbDogW119OwogICAgaGVscGVyc1t0eXBlXVtuYW1lXSA9IHZhbHVlOwogIH07CiAgQ29kZU1pcnJvci5yZWdpc3Rlckdsb2JhbEhlbHBlciA9IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIHByZWRpY2F0ZSwgdmFsdWUpIHsKICAgIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIodHlwZSwgbmFtZSwgdmFsdWUpOwogICAgaGVscGVyc1t0eXBlXS5fZ2xvYmFsLnB1c2goe3ByZWQ6IHByZWRpY2F0ZSwgdmFsOiB2YWx1ZX0pOwogIH07CgogIC8vIE1PREUgU1RBVEUgSEFORExJTkcKCiAgLy8gVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBzdGF0ZS4gRXhwb3J0ZWQgYmVjYXVzZSBuZXN0ZWQKICAvLyBtb2RlcyBuZWVkIHRvIGRvIHRoaXMgZm9yIHRoZWlyIGlubmVyIG1vZGVzLgoKICB2YXIgY29weVN0YXRlID0gQ29kZU1pcnJvci5jb3B5U3RhdGUgPSBmdW5jdGlvbihtb2RlLCBzdGF0ZSkgewogICAgaWYgKHN0YXRlID09PSB0cnVlKSByZXR1cm4gc3RhdGU7CiAgICBpZiAobW9kZS5jb3B5U3RhdGUpIHJldHVybiBtb2RlLmNvcHlTdGF0ZShzdGF0ZSk7CiAgICB2YXIgbnN0YXRlID0ge307CiAgICBmb3IgKHZhciBuIGluIHN0YXRlKSB7CiAgICAgIHZhciB2YWwgPSBzdGF0ZVtuXTsKICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIEFycmF5KSB2YWwgPSB2YWwuY29uY2F0KFtdKTsKICAgICAgbnN0YXRlW25dID0gdmFsOwogICAgfQogICAgcmV0dXJuIG5zdGF0ZTsKICB9OwoKICB2YXIgc3RhcnRTdGF0ZSA9IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZSA9IGZ1bmN0aW9uKG1vZGUsIGExLCBhMikgewogICAgcmV0dXJuIG1vZGUuc3RhcnRTdGF0ZSA/IG1vZGUuc3RhcnRTdGF0ZShhMSwgYTIpIDogdHJ1ZTsKICB9OwoKICAvLyBHaXZlbiBhIG1vZGUgYW5kIGEgc3RhdGUgKGZvciB0aGF0IG1vZGUpLCBmaW5kIHRoZSBpbm5lciBtb2RlIGFuZAogIC8vIHN0YXRlIGF0IHRoZSBwb3NpdGlvbiB0aGF0IHRoZSBzdGF0ZSByZWZlcnMgdG8uCiAgQ29kZU1pcnJvci5pbm5lck1vZGUgPSBmdW5jdGlvbihtb2RlLCBzdGF0ZSkgewogICAgd2hpbGUgKG1vZGUuaW5uZXJNb2RlKSB7CiAgICAgIHZhciBpbmZvID0gbW9kZS5pbm5lck1vZGUoc3RhdGUpOwogICAgICBpZiAoIWluZm8gfHwgaW5mby5tb2RlID09IG1vZGUpIGJyZWFrOwogICAgICBzdGF0ZSA9IGluZm8uc3RhdGU7CiAgICAgIG1vZGUgPSBpbmZvLm1vZGU7CiAgICB9CiAgICByZXR1cm4gaW5mbyB8fCB7bW9kZTogbW9kZSwgc3RhdGU6IHN0YXRlfTsKICB9OwoKICAvLyBTVEFOREFSRCBDT01NQU5EUwoKICAvLyBDb21tYW5kcyBhcmUgcGFyYW1ldGVyLWxlc3MgYWN0aW9ucyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgb24gYW4KICAvLyBlZGl0b3IsIG1vc3RseSB1c2VkIGZvciBrZXliaW5kaW5ncy4KICB2YXIgY29tbWFuZHMgPSBDb2RlTWlycm9yLmNvbW1hbmRzID0gewogICAgc2VsZWN0QWxsOiBmdW5jdGlvbihjbSkge2NtLnNldFNlbGVjdGlvbihQb3MoY20uZmlyc3RMaW5lKCksIDApLCBQb3MoY20ubGFzdExpbmUoKSksIHNlbF9kb250U2Nyb2xsKTt9LAogICAgc2luZ2xlU2VsZWN0aW9uOiBmdW5jdGlvbihjbSkgewogICAgICBjbS5zZXRTZWxlY3Rpb24oY20uZ2V0Q3Vyc29yKCJhbmNob3IiKSwgY20uZ2V0Q3Vyc29yKCJoZWFkIiksIHNlbF9kb250U2Nyb2xsKTsKICAgIH0sCiAgICBraWxsTGluZTogZnVuY3Rpb24oY20pIHsKICAgICAgZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICBpZiAocmFuZ2UuZW1wdHkoKSkgewogICAgICAgICAgdmFyIGxlbiA9IGdldExpbmUoY20uZG9jLCByYW5nZS5oZWFkLmxpbmUpLnRleHQubGVuZ3RoOwogICAgICAgICAgaWYgKHJhbmdlLmhlYWQuY2ggPT0gbGVuICYmIHJhbmdlLmhlYWQubGluZSA8IGNtLmxhc3RMaW5lKCkpCiAgICAgICAgICAgIHJldHVybiB7ZnJvbTogcmFuZ2UuaGVhZCwgdG86IFBvcyhyYW5nZS5oZWFkLmxpbmUgKyAxLCAwKX07CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiB7ZnJvbTogcmFuZ2UuaGVhZCwgdG86IFBvcyhyYW5nZS5oZWFkLmxpbmUsIGxlbil9OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4ge2Zyb206IHJhbmdlLmZyb20oKSwgdG86IHJhbmdlLnRvKCl9OwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAogICAgZGVsZXRlTGluZTogZnVuY3Rpb24oY20pIHsKICAgICAgZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICByZXR1cm4ge2Zyb206IFBvcyhyYW5nZS5mcm9tKCkubGluZSwgMCksCiAgICAgICAgICAgICAgICB0bzogY2xpcFBvcyhjbS5kb2MsIFBvcyhyYW5nZS50bygpLmxpbmUgKyAxLCAwKSl9OwogICAgICB9KTsKICAgIH0sCiAgICBkZWxMaW5lTGVmdDogZnVuY3Rpb24oY20pIHsKICAgICAgZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICByZXR1cm4ge2Zyb206IFBvcyhyYW5nZS5mcm9tKCkubGluZSwgMCksIHRvOiByYW5nZS5mcm9tKCl9OwogICAgICB9KTsKICAgIH0sCiAgICBkZWxXcmFwcGVkTGluZUxlZnQ6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2UuaGVhZCwgImRpdiIpLnRvcCArIDU7CiAgICAgICAgdmFyIGxlZnRQb3MgPSBjbS5jb29yZHNDaGFyKHtsZWZ0OiAwLCB0b3A6IHRvcH0sICJkaXYiKTsKICAgICAgICByZXR1cm4ge2Zyb206IGxlZnRQb3MsIHRvOiByYW5nZS5mcm9tKCl9OwogICAgICB9KTsKICAgIH0sCiAgICBkZWxXcmFwcGVkTGluZVJpZ2h0OiBmdW5jdGlvbihjbSkgewogICAgICBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHZhciB0b3AgPSBjbS5jaGFyQ29vcmRzKHJhbmdlLmhlYWQsICJkaXYiKS50b3AgKyA1OwogICAgICAgIHZhciByaWdodFBvcyA9IGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IGNtLmRpc3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCArIDEwMCwgdG9wOiB0b3B9LCAiZGl2Iik7CiAgICAgICAgcmV0dXJuIHtmcm9tOiByYW5nZS5mcm9tKCksIHRvOiByaWdodFBvcyB9OwogICAgICB9KTsKICAgIH0sCiAgICB1bmRvOiBmdW5jdGlvbihjbSkge2NtLnVuZG8oKTt9LAogICAgcmVkbzogZnVuY3Rpb24oY20pIHtjbS5yZWRvKCk7fSwKICAgIHVuZG9TZWxlY3Rpb246IGZ1bmN0aW9uKGNtKSB7Y20udW5kb1NlbGVjdGlvbigpO30sCiAgICByZWRvU2VsZWN0aW9uOiBmdW5jdGlvbihjbSkge2NtLnJlZG9TZWxlY3Rpb24oKTt9LAogICAgZ29Eb2NTdGFydDogZnVuY3Rpb24oY20pIHtjbS5leHRlbmRTZWxlY3Rpb24oUG9zKGNtLmZpcnN0TGluZSgpLCAwKSk7fSwKICAgIGdvRG9jRW5kOiBmdW5jdGlvbihjbSkge2NtLmV4dGVuZFNlbGVjdGlvbihQb3MoY20ubGFzdExpbmUoKSkpO30sCiAgICBnb0xpbmVTdGFydDogZnVuY3Rpb24oY20pIHsKICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7IHJldHVybiBsaW5lU3RhcnQoY20sIHJhbmdlLmhlYWQubGluZSk7IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b3JpZ2luOiAiK21vdmUiLCBiaWFzOiAxfSk7CiAgICB9LAogICAgZ29MaW5lU3RhcnRTbWFydDogZnVuY3Rpb24oY20pIHsKICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIGxpbmVTdGFydFNtYXJ0KGNtLCByYW5nZS5oZWFkKTsKICAgICAgfSwge29yaWdpbjogIittb3ZlIiwgYmlhczogMX0pOwogICAgfSwKICAgIGdvTGluZUVuZDogZnVuY3Rpb24oY20pIHsKICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7IHJldHVybiBsaW5lRW5kKGNtLCByYW5nZS5oZWFkLmxpbmUpOyB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAge29yaWdpbjogIittb3ZlIiwgYmlhczogLTF9KTsKICAgIH0sCiAgICBnb0xpbmVSaWdodDogZnVuY3Rpb24oY20pIHsKICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2UuaGVhZCwgImRpdiIpLnRvcCArIDU7CiAgICAgICAgcmV0dXJuIGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IGNtLmRpc3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCArIDEwMCwgdG9wOiB0b3B9LCAiZGl2Iik7CiAgICAgIH0sIHNlbF9tb3ZlKTsKICAgIH0sCiAgICBnb0xpbmVMZWZ0OiBmdW5jdGlvbihjbSkgewogICAgICBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICB2YXIgdG9wID0gY20uY2hhckNvb3JkcyhyYW5nZS5oZWFkLCAiZGl2IikudG9wICsgNTsKICAgICAgICByZXR1cm4gY20uY29vcmRzQ2hhcih7bGVmdDogMCwgdG9wOiB0b3B9LCAiZGl2Iik7CiAgICAgIH0sIHNlbF9tb3ZlKTsKICAgIH0sCiAgICBnb0xpbmVMZWZ0U21hcnQ6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHZhciB0b3AgPSBjbS5jaGFyQ29vcmRzKHJhbmdlLmhlYWQsICJkaXYiKS50b3AgKyA1OwogICAgICAgIHZhciBwb3MgPSBjbS5jb29yZHNDaGFyKHtsZWZ0OiAwLCB0b3A6IHRvcH0sICJkaXYiKTsKICAgICAgICBpZiAocG9zLmNoIDwgY20uZ2V0TGluZShwb3MubGluZSkuc2VhcmNoKC9cUy8pKSByZXR1cm4gbGluZVN0YXJ0U21hcnQoY20sIHJhbmdlLmhlYWQpOwogICAgICAgIHJldHVybiBwb3M7CiAgICAgIH0sIHNlbF9tb3ZlKTsKICAgIH0sCiAgICBnb0xpbmVVcDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigtMSwgImxpbmUiKTt9LAogICAgZ29MaW5lRG93bjogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigxLCAibGluZSIpO30sCiAgICBnb1BhZ2VVcDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigtMSwgInBhZ2UiKTt9LAogICAgZ29QYWdlRG93bjogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigxLCAicGFnZSIpO30sCiAgICBnb0NoYXJMZWZ0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKC0xLCAiY2hhciIpO30sCiAgICBnb0NoYXJSaWdodDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgxLCAiY2hhciIpO30sCiAgICBnb0NvbHVtbkxlZnQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoLTEsICJjb2x1bW4iKTt9LAogICAgZ29Db2x1bW5SaWdodDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgxLCAiY29sdW1uIik7fSwKICAgIGdvV29yZExlZnQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoLTEsICJ3b3JkIik7fSwKICAgIGdvR3JvdXBSaWdodDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgxLCAiZ3JvdXAiKTt9LAogICAgZ29Hcm91cExlZnQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoLTEsICJncm91cCIpO30sCiAgICBnb1dvcmRSaWdodDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgxLCAid29yZCIpO30sCiAgICBkZWxDaGFyQmVmb3JlOiBmdW5jdGlvbihjbSkge2NtLmRlbGV0ZUgoLTEsICJjaGFyIik7fSwKICAgIGRlbENoYXJBZnRlcjogZnVuY3Rpb24oY20pIHtjbS5kZWxldGVIKDEsICJjaGFyIik7fSwKICAgIGRlbFdvcmRCZWZvcmU6IGZ1bmN0aW9uKGNtKSB7Y20uZGVsZXRlSCgtMSwgIndvcmQiKTt9LAogICAgZGVsV29yZEFmdGVyOiBmdW5jdGlvbihjbSkge2NtLmRlbGV0ZUgoMSwgIndvcmQiKTt9LAogICAgZGVsR3JvdXBCZWZvcmU6IGZ1bmN0aW9uKGNtKSB7Y20uZGVsZXRlSCgtMSwgImdyb3VwIik7fSwKICAgIGRlbEdyb3VwQWZ0ZXI6IGZ1bmN0aW9uKGNtKSB7Y20uZGVsZXRlSCgxLCAiZ3JvdXAiKTt9LAogICAgaW5kZW50QXV0bzogZnVuY3Rpb24oY20pIHtjbS5pbmRlbnRTZWxlY3Rpb24oInNtYXJ0Iik7fSwKICAgIGluZGVudE1vcmU6IGZ1bmN0aW9uKGNtKSB7Y20uaW5kZW50U2VsZWN0aW9uKCJhZGQiKTt9LAogICAgaW5kZW50TGVzczogZnVuY3Rpb24oY20pIHtjbS5pbmRlbnRTZWxlY3Rpb24oInN1YnRyYWN0Iik7fSwKICAgIGluc2VydFRhYjogZnVuY3Rpb24oY20pIHtjbS5yZXBsYWNlU2VsZWN0aW9uKCJcdCIpO30sCiAgICBpbnNlcnRTb2Z0VGFiOiBmdW5jdGlvbihjbSkgewogICAgICB2YXIgc3BhY2VzID0gW10sIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCksIHRhYlNpemUgPSBjbS5vcHRpb25zLnRhYlNpemU7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHBvcyA9IHJhbmdlc1tpXS5mcm9tKCk7CiAgICAgICAgdmFyIGNvbCA9IGNvdW50Q29sdW1uKGNtLmdldExpbmUocG9zLmxpbmUpLCBwb3MuY2gsIHRhYlNpemUpOwogICAgICAgIHNwYWNlcy5wdXNoKG5ldyBBcnJheSh0YWJTaXplIC0gY29sICUgdGFiU2l6ZSArIDEpLmpvaW4oIiAiKSk7CiAgICAgIH0KICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbnMoc3BhY2VzKTsKICAgIH0sCiAgICBkZWZhdWx0VGFiOiBmdW5jdGlvbihjbSkgewogICAgICBpZiAoY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgY20uaW5kZW50U2VsZWN0aW9uKCJhZGQiKTsKICAgICAgZWxzZSBjbS5leGVjQ29tbWFuZCgiaW5zZXJ0VGFiIik7CiAgICB9LAogICAgdHJhbnNwb3NlQ2hhcnM6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpLCBuZXdTZWwgPSBbXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIGN1ciA9IHJhbmdlc1tpXS5oZWFkLCBsaW5lID0gZ2V0TGluZShjbS5kb2MsIGN1ci5saW5lKS50ZXh0OwogICAgICAgICAgaWYgKGxpbmUpIHsKICAgICAgICAgICAgaWYgKGN1ci5jaCA9PSBsaW5lLmxlbmd0aCkgY3VyID0gbmV3IFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMSk7CiAgICAgICAgICAgIGlmIChjdXIuY2ggPiAwKSB7CiAgICAgICAgICAgICAgY3VyID0gbmV3IFBvcyhjdXIubGluZSwgY3VyLmNoICsgMSk7CiAgICAgICAgICAgICAgY20ucmVwbGFjZVJhbmdlKGxpbmUuY2hhckF0KGN1ci5jaCAtIDEpICsgbGluZS5jaGFyQXQoY3VyLmNoIC0gMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMiksIGN1ciwgIit0cmFuc3Bvc2UiKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjdXIubGluZSA+IGNtLmRvYy5maXJzdCkgewogICAgICAgICAgICAgIHZhciBwcmV2ID0gZ2V0TGluZShjbS5kb2MsIGN1ci5saW5lIC0gMSkudGV4dDsKICAgICAgICAgICAgICBpZiAocHJldikKICAgICAgICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZShsaW5lLmNoYXJBdCgwKSArIGNtLmRvYy5saW5lU2VwYXJhdG9yKCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYuY2hhckF0KHByZXYubGVuZ3RoIC0gMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zKGN1ci5saW5lIC0gMSwgcHJldi5sZW5ndGggLSAxKSwgUG9zKGN1ci5saW5lLCAxKSwgIit0cmFuc3Bvc2UiKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgbmV3U2VsLnB1c2gobmV3IFJhbmdlKGN1ciwgY3VyKSk7CiAgICAgICAgfQogICAgICAgIGNtLnNldFNlbGVjdGlvbnMobmV3U2VsKTsKICAgICAgfSk7CiAgICB9LAogICAgbmV3bGluZUFuZEluZGVudDogZnVuY3Rpb24oY20pIHsKICAgICAgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGxlbiA9IGNtLmxpc3RTZWxlY3Rpb25zKCkubGVuZ3RoOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgIHZhciByYW5nZSA9IGNtLmxpc3RTZWxlY3Rpb25zKClbaV07CiAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UoY20uZG9jLmxpbmVTZXBhcmF0b3IoKSwgcmFuZ2UuYW5jaG9yLCByYW5nZS5oZWFkLCAiK2lucHV0Iik7CiAgICAgICAgICBjbS5pbmRlbnRMaW5lKHJhbmdlLmZyb20oKS5saW5lICsgMSwgbnVsbCwgdHJ1ZSk7CiAgICAgICAgfQogICAgICAgIGVuc3VyZUN1cnNvclZpc2libGUoY20pOwogICAgICB9KTsKICAgIH0sCiAgICB0b2dnbGVPdmVyd3JpdGU6IGZ1bmN0aW9uKGNtKSB7Y20udG9nZ2xlT3ZlcndyaXRlKCk7fQogIH07CgoKICAvLyBTVEFOREFSRCBLRVlNQVBTCgogIHZhciBrZXlNYXAgPSBDb2RlTWlycm9yLmtleU1hcCA9IHt9OwoKICBrZXlNYXAuYmFzaWMgPSB7CiAgICAiTGVmdCI6ICJnb0NoYXJMZWZ0IiwgIlJpZ2h0IjogImdvQ2hhclJpZ2h0IiwgIlVwIjogImdvTGluZVVwIiwgIkRvd24iOiAiZ29MaW5lRG93biIsCiAgICAiRW5kIjogImdvTGluZUVuZCIsICJIb21lIjogImdvTGluZVN0YXJ0U21hcnQiLCAiUGFnZVVwIjogImdvUGFnZVVwIiwgIlBhZ2VEb3duIjogImdvUGFnZURvd24iLAogICAgIkRlbGV0ZSI6ICJkZWxDaGFyQWZ0ZXIiLCAiQmFja3NwYWNlIjogImRlbENoYXJCZWZvcmUiLCAiU2hpZnQtQmFja3NwYWNlIjogImRlbENoYXJCZWZvcmUiLAogICAgIlRhYiI6ICJkZWZhdWx0VGFiIiwgIlNoaWZ0LVRhYiI6ICJpbmRlbnRBdXRvIiwKICAgICJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50IiwgIkluc2VydCI6ICJ0b2dnbGVPdmVyd3JpdGUiLAogICAgIkVzYyI6ICJzaW5nbGVTZWxlY3Rpb24iCiAgfTsKICAvLyBOb3RlIHRoYXQgdGhlIHNhdmUgYW5kIGZpbmQtcmVsYXRlZCBjb21tYW5kcyBhcmVuJ3QgZGVmaW5lZCBieQogIC8vIGRlZmF1bHQuIFVzZXIgY29kZSBvciBhZGRvbnMgY2FuIGRlZmluZSB0aGVtLiBVbmtub3duIGNvbW1hbmRzCiAgLy8gYXJlIHNpbXBseSBpZ25vcmVkLgogIGtleU1hcC5wY0RlZmF1bHQgPSB7CiAgICAiQ3RybC1BIjogInNlbGVjdEFsbCIsICJDdHJsLUQiOiAiZGVsZXRlTGluZSIsICJDdHJsLVoiOiAidW5kbyIsICJTaGlmdC1DdHJsLVoiOiAicmVkbyIsICJDdHJsLVkiOiAicmVkbyIsCiAgICAiQ3RybC1Ib21lIjogImdvRG9jU3RhcnQiLCAiQ3RybC1FbmQiOiAiZ29Eb2NFbmQiLCAiQ3RybC1VcCI6ICJnb0xpbmVVcCIsICJDdHJsLURvd24iOiAiZ29MaW5lRG93biIsCiAgICAiQ3RybC1MZWZ0IjogImdvR3JvdXBMZWZ0IiwgIkN0cmwtUmlnaHQiOiAiZ29Hcm91cFJpZ2h0IiwgIkFsdC1MZWZ0IjogImdvTGluZVN0YXJ0IiwgIkFsdC1SaWdodCI6ICJnb0xpbmVFbmQiLAogICAgIkN0cmwtQmFja3NwYWNlIjogImRlbEdyb3VwQmVmb3JlIiwgIkN0cmwtRGVsZXRlIjogImRlbEdyb3VwQWZ0ZXIiLCAiQ3RybC1TIjogInNhdmUiLCAiQ3RybC1GIjogImZpbmQiLAogICAgIkN0cmwtRyI6ICJmaW5kTmV4dCIsICJTaGlmdC1DdHJsLUciOiAiZmluZFByZXYiLCAiU2hpZnQtQ3RybC1GIjogInJlcGxhY2UiLCAiU2hpZnQtQ3RybC1SIjogInJlcGxhY2VBbGwiLAogICAgIkN0cmwtWyI6ICJpbmRlbnRMZXNzIiwgIkN0cmwtXSI6ICJpbmRlbnRNb3JlIiwKICAgICJDdHJsLVUiOiAidW5kb1NlbGVjdGlvbiIsICJTaGlmdC1DdHJsLVUiOiAicmVkb1NlbGVjdGlvbiIsICJBbHQtVSI6ICJyZWRvU2VsZWN0aW9uIiwKICAgIGZhbGx0aHJvdWdoOiAiYmFzaWMiCiAgfTsKICAvLyBWZXJ5IGJhc2ljIHJlYWRsaW5lL2VtYWNzLXN0eWxlIGJpbmRpbmdzLCB3aGljaCBhcmUgc3RhbmRhcmQgb24gTWFjLgogIGtleU1hcC5lbWFjc3kgPSB7CiAgICAiQ3RybC1GIjogImdvQ2hhclJpZ2h0IiwgIkN0cmwtQiI6ICJnb0NoYXJMZWZ0IiwgIkN0cmwtUCI6ICJnb0xpbmVVcCIsICJDdHJsLU4iOiAiZ29MaW5lRG93biIsCiAgICAiQWx0LUYiOiAiZ29Xb3JkUmlnaHQiLCAiQWx0LUIiOiAiZ29Xb3JkTGVmdCIsICJDdHJsLUEiOiAiZ29MaW5lU3RhcnQiLCAiQ3RybC1FIjogImdvTGluZUVuZCIsCiAgICAiQ3RybC1WIjogImdvUGFnZURvd24iLCAiU2hpZnQtQ3RybC1WIjogImdvUGFnZVVwIiwgIkN0cmwtRCI6ICJkZWxDaGFyQWZ0ZXIiLCAiQ3RybC1IIjogImRlbENoYXJCZWZvcmUiLAogICAgIkFsdC1EIjogImRlbFdvcmRBZnRlciIsICJBbHQtQmFja3NwYWNlIjogImRlbFdvcmRCZWZvcmUiLCAiQ3RybC1LIjogImtpbGxMaW5lIiwgIkN0cmwtVCI6ICJ0cmFuc3Bvc2VDaGFycyIKICB9OwogIGtleU1hcC5tYWNEZWZhdWx0ID0gewogICAgIkNtZC1BIjogInNlbGVjdEFsbCIsICJDbWQtRCI6ICJkZWxldGVMaW5lIiwgIkNtZC1aIjogInVuZG8iLCAiU2hpZnQtQ21kLVoiOiAicmVkbyIsICJDbWQtWSI6ICJyZWRvIiwKICAgICJDbWQtSG9tZSI6ICJnb0RvY1N0YXJ0IiwgIkNtZC1VcCI6ICJnb0RvY1N0YXJ0IiwgIkNtZC1FbmQiOiAiZ29Eb2NFbmQiLCAiQ21kLURvd24iOiAiZ29Eb2NFbmQiLCAiQWx0LUxlZnQiOiAiZ29Hcm91cExlZnQiLAogICAgIkFsdC1SaWdodCI6ICJnb0dyb3VwUmlnaHQiLCAiQ21kLUxlZnQiOiAiZ29MaW5lTGVmdCIsICJDbWQtUmlnaHQiOiAiZ29MaW5lUmlnaHQiLCAiQWx0LUJhY2tzcGFjZSI6ICJkZWxHcm91cEJlZm9yZSIsCiAgICAiQ3RybC1BbHQtQmFja3NwYWNlIjogImRlbEdyb3VwQWZ0ZXIiLCAiQWx0LURlbGV0ZSI6ICJkZWxHcm91cEFmdGVyIiwgIkNtZC1TIjogInNhdmUiLCAiQ21kLUYiOiAiZmluZCIsCiAgICAiQ21kLUciOiAiZmluZE5leHQiLCAiU2hpZnQtQ21kLUciOiAiZmluZFByZXYiLCAiQ21kLUFsdC1GIjogInJlcGxhY2UiLCAiU2hpZnQtQ21kLUFsdC1GIjogInJlcGxhY2VBbGwiLAogICAgIkNtZC1bIjogImluZGVudExlc3MiLCAiQ21kLV0iOiAiaW5kZW50TW9yZSIsICJDbWQtQmFja3NwYWNlIjogImRlbFdyYXBwZWRMaW5lTGVmdCIsICJDbWQtRGVsZXRlIjogImRlbFdyYXBwZWRMaW5lUmlnaHQiLAogICAgIkNtZC1VIjogInVuZG9TZWxlY3Rpb24iLCAiU2hpZnQtQ21kLVUiOiAicmVkb1NlbGVjdGlvbiIsICJDdHJsLVVwIjogImdvRG9jU3RhcnQiLCAiQ3RybC1Eb3duIjogImdvRG9jRW5kIiwKICAgIGZhbGx0aHJvdWdoOiBbImJhc2ljIiwgImVtYWNzeSJdCiAgfTsKICBrZXlNYXBbImRlZmF1bHQiXSA9IG1hYyA/IGtleU1hcC5tYWNEZWZhdWx0IDoga2V5TWFwLnBjRGVmYXVsdDsKCiAgLy8gS0VZTUFQIERJU1BBVENICgogIGZ1bmN0aW9uIG5vcm1hbGl6ZUtleU5hbWUobmFtZSkgewogICAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgvLSg/ISQpLyksIG5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTsKICAgIHZhciBhbHQsIGN0cmwsIHNoaWZ0LCBjbWQ7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykgewogICAgICB2YXIgbW9kID0gcGFydHNbaV07CiAgICAgIGlmICgvXihjbWR8bWV0YXxtKSQvaS50ZXN0KG1vZCkpIGNtZCA9IHRydWU7CiAgICAgIGVsc2UgaWYgKC9eYShsdCk/JC9pLnRlc3QobW9kKSkgYWx0ID0gdHJ1ZTsKICAgICAgZWxzZSBpZiAoL14oY3xjdHJsfGNvbnRyb2wpJC9pLnRlc3QobW9kKSkgY3RybCA9IHRydWU7CiAgICAgIGVsc2UgaWYgKC9ecyhoaWZ0KSQvaS50ZXN0KG1vZCkpIHNoaWZ0ID0gdHJ1ZTsKICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBtb2RpZmllciBuYW1lOiAiICsgbW9kKTsKICAgIH0KICAgIGlmIChhbHQpIG5hbWUgPSAiQWx0LSIgKyBuYW1lOwogICAgaWYgKGN0cmwpIG5hbWUgPSAiQ3RybC0iICsgbmFtZTsKICAgIGlmIChjbWQpIG5hbWUgPSAiQ21kLSIgKyBuYW1lOwogICAgaWYgKHNoaWZ0KSBuYW1lID0gIlNoaWZ0LSIgKyBuYW1lOwogICAgcmV0dXJuIG5hbWU7CiAgfQoKICAvLyBUaGlzIGlzIGEga2x1ZGdlIHRvIGtlZXAga2V5bWFwcyBtb3N0bHkgd29ya2luZyBhcyByYXcgb2JqZWN0cwogIC8vIChiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSkgd2hpbGUgYXQgdGhlIHNhbWUgdGltZSBzdXBwb3J0IGZlYXR1cmVzCiAgLy8gbGlrZSBub3JtYWxpemF0aW9uIGFuZCBtdWx0aS1zdHJva2Uga2V5IGJpbmRpbmdzLiBJdCBjb21waWxlcyBhCiAgLy8gbmV3IG5vcm1hbGl6ZWQga2V5bWFwLCBhbmQgdGhlbiB1cGRhdGVzIHRoZSBvbGQgb2JqZWN0IHRvIHJlZmxlY3QKICAvLyB0aGlzLgogIENvZGVNaXJyb3Iubm9ybWFsaXplS2V5TWFwID0gZnVuY3Rpb24oa2V5bWFwKSB7CiAgICB2YXIgY29weSA9IHt9OwogICAgZm9yICh2YXIga2V5bmFtZSBpbiBrZXltYXApIGlmIChrZXltYXAuaGFzT3duUHJvcGVydHkoa2V5bmFtZSkpIHsKICAgICAgdmFyIHZhbHVlID0ga2V5bWFwW2tleW5hbWVdOwogICAgICBpZiAoL14obmFtZXxmYWxsdGhyb3VnaHwoZGV8YXQpdGFjaCkkLy50ZXN0KGtleW5hbWUpKSBjb250aW51ZTsKICAgICAgaWYgKHZhbHVlID09ICIuLi4iKSB7IGRlbGV0ZSBrZXltYXBba2V5bmFtZV07IGNvbnRpbnVlOyB9CgogICAgICB2YXIga2V5cyA9IG1hcChrZXluYW1lLnNwbGl0KCIgIiksIG5vcm1hbGl6ZUtleU5hbWUpOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgdmFsLCBuYW1lOwogICAgICAgIGlmIChpID09IGtleXMubGVuZ3RoIC0gMSkgewogICAgICAgICAgbmFtZSA9IGtleXMuam9pbigiICIpOwogICAgICAgICAgdmFsID0gdmFsdWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG5hbWUgPSBrZXlzLnNsaWNlKDAsIGkgKyAxKS5qb2luKCIgIik7CiAgICAgICAgICB2YWwgPSAiLi4uIjsKICAgICAgICB9CiAgICAgICAgdmFyIHByZXYgPSBjb3B5W25hbWVdOwogICAgICAgIGlmICghcHJldikgY29weVtuYW1lXSA9IHZhbDsKICAgICAgICBlbHNlIGlmIChwcmV2ICE9IHZhbCkgdGhyb3cgbmV3IEVycm9yKCJJbmNvbnNpc3RlbnQgYmluZGluZ3MgZm9yICIgKyBuYW1lKTsKICAgICAgfQogICAgICBkZWxldGUga2V5bWFwW2tleW5hbWVdOwogICAgfQogICAgZm9yICh2YXIgcHJvcCBpbiBjb3B5KSBrZXltYXBbcHJvcF0gPSBjb3B5W3Byb3BdOwogICAgcmV0dXJuIGtleW1hcDsKICB9OwoKICB2YXIgbG9va3VwS2V5ID0gQ29kZU1pcnJvci5sb29rdXBLZXkgPSBmdW5jdGlvbihrZXksIG1hcCwgaGFuZGxlLCBjb250ZXh0KSB7CiAgICBtYXAgPSBnZXRLZXlNYXAobWFwKTsKICAgIHZhciBmb3VuZCA9IG1hcC5jYWxsID8gbWFwLmNhbGwoa2V5LCBjb250ZXh0KSA6IG1hcFtrZXldOwogICAgaWYgKGZvdW5kID09PSBmYWxzZSkgcmV0dXJuICJub3RoaW5nIjsKICAgIGlmIChmb3VuZCA9PT0gIi4uLiIpIHJldHVybiAibXVsdGkiOwogICAgaWYgKGZvdW5kICE9IG51bGwgJiYgaGFuZGxlKGZvdW5kKSkgcmV0dXJuICJoYW5kbGVkIjsKCiAgICBpZiAobWFwLmZhbGx0aHJvdWdoKSB7CiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWFwLmZhbGx0aHJvdWdoKSAhPSAiW29iamVjdCBBcnJheV0iKQogICAgICAgIHJldHVybiBsb29rdXBLZXkoa2V5LCBtYXAuZmFsbHRocm91Z2gsIGhhbmRsZSwgY29udGV4dCk7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwLmZhbGx0aHJvdWdoLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGxvb2t1cEtleShrZXksIG1hcC5mYWxsdGhyb3VnaFtpXSwgaGFuZGxlLCBjb250ZXh0KTsKICAgICAgICBpZiAocmVzdWx0KSByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICB9CiAgfTsKCiAgLy8gTW9kaWZpZXIga2V5IHByZXNzZXMgZG9uJ3QgY291bnQgYXMgJ3JlYWwnIGtleSBwcmVzc2VzIGZvciB0aGUKICAvLyBwdXJwb3NlIG9mIGtleW1hcCBmYWxsdGhyb3VnaC4KICB2YXIgaXNNb2RpZmllcktleSA9IENvZGVNaXJyb3IuaXNNb2RpZmllcktleSA9IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICB2YXIgbmFtZSA9IHR5cGVvZiB2YWx1ZSA9PSAic3RyaW5nIiA/IHZhbHVlIDoga2V5TmFtZXNbdmFsdWUua2V5Q29kZV07CiAgICByZXR1cm4gbmFtZSA9PSAiQ3RybCIgfHwgbmFtZSA9PSAiQWx0IiB8fCBuYW1lID09ICJTaGlmdCIgfHwgbmFtZSA9PSAiTW9kIjsKICB9OwoKICAvLyBMb29rIHVwIHRoZSBuYW1lIG9mIGEga2V5IGFzIGluZGljYXRlZCBieSBhbiBldmVudCBvYmplY3QuCiAgdmFyIGtleU5hbWUgPSBDb2RlTWlycm9yLmtleU5hbWUgPSBmdW5jdGlvbihldmVudCwgbm9TaGlmdCkgewogICAgaWYgKHByZXN0byAmJiBldmVudC5rZXlDb2RlID09IDM0ICYmIGV2ZW50WyJjaGFyIl0pIHJldHVybiBmYWxzZTsKICAgIHZhciBiYXNlID0ga2V5TmFtZXNbZXZlbnQua2V5Q29kZV0sIG5hbWUgPSBiYXNlOwogICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBldmVudC5hbHRHcmFwaEtleSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGV2ZW50LmFsdEtleSAmJiBiYXNlICE9ICJBbHQiKSBuYW1lID0gIkFsdC0iICsgbmFtZTsKICAgIGlmICgoZmxpcEN0cmxDbWQgPyBldmVudC5tZXRhS2V5IDogZXZlbnQuY3RybEtleSkgJiYgYmFzZSAhPSAiQ3RybCIpIG5hbWUgPSAiQ3RybC0iICsgbmFtZTsKICAgIGlmICgoZmxpcEN0cmxDbWQgPyBldmVudC5jdHJsS2V5IDogZXZlbnQubWV0YUtleSkgJiYgYmFzZSAhPSAiQ21kIikgbmFtZSA9ICJDbWQtIiArIG5hbWU7CiAgICBpZiAoIW5vU2hpZnQgJiYgZXZlbnQuc2hpZnRLZXkgJiYgYmFzZSAhPSAiU2hpZnQiKSBuYW1lID0gIlNoaWZ0LSIgKyBuYW1lOwogICAgcmV0dXJuIG5hbWU7CiAgfTsKCiAgZnVuY3Rpb24gZ2V0S2V5TWFwKHZhbCkgewogICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gInN0cmluZyIgPyBrZXlNYXBbdmFsXSA6IHZhbDsKICB9CgogIC8vIEZST01URVhUQVJFQQoKICBDb2RlTWlycm9yLmZyb21UZXh0QXJlYSA9IGZ1bmN0aW9uKHRleHRhcmVhLCBvcHRpb25zKSB7CiAgICBvcHRpb25zID0gb3B0aW9ucyA/IGNvcHlPYmoob3B0aW9ucykgOiB7fTsKICAgIG9wdGlvbnMudmFsdWUgPSB0ZXh0YXJlYS52YWx1ZTsKICAgIGlmICghb3B0aW9ucy50YWJpbmRleCAmJiB0ZXh0YXJlYS50YWJJbmRleCkKICAgICAgb3B0aW9ucy50YWJpbmRleCA9IHRleHRhcmVhLnRhYkluZGV4OwogICAgaWYgKCFvcHRpb25zLnBsYWNlaG9sZGVyICYmIHRleHRhcmVhLnBsYWNlaG9sZGVyKQogICAgICBvcHRpb25zLnBsYWNlaG9sZGVyID0gdGV4dGFyZWEucGxhY2Vob2xkZXI7CiAgICAvLyBTZXQgYXV0b2ZvY3VzIHRvIHRydWUgaWYgdGhpcyB0ZXh0YXJlYSBpcyBmb2N1c2VkLCBvciBpZiBpdCBoYXMKICAgIC8vIGF1dG9mb2N1cyBhbmQgbm8gb3RoZXIgZWxlbWVudCBpcyBmb2N1c2VkLgogICAgaWYgKG9wdGlvbnMuYXV0b2ZvY3VzID09IG51bGwpIHsKICAgICAgdmFyIGhhc0ZvY3VzID0gYWN0aXZlRWx0KCk7CiAgICAgIG9wdGlvbnMuYXV0b2ZvY3VzID0gaGFzRm9jdXMgPT0gdGV4dGFyZWEgfHwKICAgICAgICB0ZXh0YXJlYS5nZXRBdHRyaWJ1dGUoImF1dG9mb2N1cyIpICE9IG51bGwgJiYgaGFzRm9jdXMgPT0gZG9jdW1lbnQuYm9keTsKICAgIH0KCiAgICBmdW5jdGlvbiBzYXZlKCkge3RleHRhcmVhLnZhbHVlID0gY20uZ2V0VmFsdWUoKTt9CiAgICBpZiAodGV4dGFyZWEuZm9ybSkgewogICAgICBvbih0ZXh0YXJlYS5mb3JtLCAic3VibWl0Iiwgc2F2ZSk7CiAgICAgIC8vIERlcGxvcmFibGUgaGFjayB0byBtYWtlIHRoZSBzdWJtaXQgbWV0aG9kIGRvIHRoZSByaWdodCB0aGluZy4KICAgICAgaWYgKCFvcHRpb25zLmxlYXZlU3VibWl0TWV0aG9kQWxvbmUpIHsKICAgICAgICB2YXIgZm9ybSA9IHRleHRhcmVhLmZvcm0sIHJlYWxTdWJtaXQgPSBmb3JtLnN1Ym1pdDsKICAgICAgICB0cnkgewogICAgICAgICAgdmFyIHdyYXBwZWRTdWJtaXQgPSBmb3JtLnN1Ym1pdCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzYXZlKCk7CiAgICAgICAgICAgIGZvcm0uc3VibWl0ID0gcmVhbFN1Ym1pdDsKICAgICAgICAgICAgZm9ybS5zdWJtaXQoKTsKICAgICAgICAgICAgZm9ybS5zdWJtaXQgPSB3cmFwcGVkU3VibWl0OwogICAgICAgICAgfTsKICAgICAgICB9IGNhdGNoKGUpIHt9CiAgICAgIH0KICAgIH0KCiAgICBvcHRpb25zLmZpbmlzaEluaXQgPSBmdW5jdGlvbihjbSkgewogICAgICBjbS5zYXZlID0gc2F2ZTsKICAgICAgY20uZ2V0VGV4dEFyZWEgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRleHRhcmVhOyB9OwogICAgICBjbS50b1RleHRBcmVhID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY20udG9UZXh0QXJlYSA9IGlzTmFOOyAvLyBQcmV2ZW50IHRoaXMgZnJvbSBiZWluZyByYW4gdHdpY2UKICAgICAgICBzYXZlKCk7CiAgICAgICAgdGV4dGFyZWEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjbS5nZXRXcmFwcGVyRWxlbWVudCgpKTsKICAgICAgICB0ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgICAgaWYgKHRleHRhcmVhLmZvcm0pIHsKICAgICAgICAgIG9mZih0ZXh0YXJlYS5mb3JtLCAic3VibWl0Iiwgc2F2ZSk7CiAgICAgICAgICBpZiAodHlwZW9mIHRleHRhcmVhLmZvcm0uc3VibWl0ID09ICJmdW5jdGlvbiIpCiAgICAgICAgICAgIHRleHRhcmVhLmZvcm0uc3VibWl0ID0gcmVhbFN1Ym1pdDsKICAgICAgICB9CiAgICAgIH07CiAgICB9OwoKICAgIHRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICB2YXIgY20gPSBDb2RlTWlycm9yKGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgdGV4dGFyZWEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgdGV4dGFyZWEubmV4dFNpYmxpbmcpOwogICAgfSwgb3B0aW9ucyk7CiAgICByZXR1cm4gY207CiAgfTsKCiAgLy8gU1RSSU5HIFNUUkVBTQoKICAvLyBGZWQgdG8gdGhlIG1vZGUgbWFya2Rvd25zLCBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIG1ha2UKICAvLyBtYXJrZG93bnMgbW9yZSBzdWNjaW5jdC4KCiAgdmFyIFN0cmluZ1N0cmVhbSA9IENvZGVNaXJyb3IuU3RyaW5nU3RyZWFtID0gZnVuY3Rpb24oc3RyaW5nLCB0YWJTaXplKSB7CiAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQgPSAwOwogICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7CiAgICB0aGlzLnRhYlNpemUgPSB0YWJTaXplIHx8IDg7CiAgICB0aGlzLmxhc3RDb2x1bW5Qb3MgPSB0aGlzLmxhc3RDb2x1bW5WYWx1ZSA9IDA7CiAgICB0aGlzLmxpbmVTdGFydCA9IDA7CiAgfTsKCiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZSA9IHsKICAgIGVvbDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMucG9zID49IHRoaXMuc3RyaW5nLmxlbmd0aDt9LAogICAgc29sOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5wb3MgPT0gdGhpcy5saW5lU3RhcnQ7fSwKICAgIHBlZWs6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpIHx8IHVuZGVmaW5lZDt9LAogICAgbmV4dDogZnVuY3Rpb24oKSB7CiAgICAgIGlmICh0aGlzLnBvcyA8IHRoaXMuc3RyaW5nLmxlbmd0aCkKICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspOwogICAgfSwKICAgIGVhdDogZnVuY3Rpb24obWF0Y2gpIHsKICAgICAgdmFyIGNoID0gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTsKICAgICAgaWYgKHR5cGVvZiBtYXRjaCA9PSAic3RyaW5nIikgdmFyIG9rID0gY2ggPT0gbWF0Y2g7CiAgICAgIGVsc2UgdmFyIG9rID0gY2ggJiYgKG1hdGNoLnRlc3QgPyBtYXRjaC50ZXN0KGNoKSA6IG1hdGNoKGNoKSk7CiAgICAgIGlmIChvaykgeysrdGhpcy5wb3M7IHJldHVybiBjaDt9CiAgICB9LAogICAgZWF0V2hpbGU6IGZ1bmN0aW9uKG1hdGNoKSB7CiAgICAgIHZhciBzdGFydCA9IHRoaXMucG9zOwogICAgICB3aGlsZSAodGhpcy5lYXQobWF0Y2gpKXt9CiAgICAgIHJldHVybiB0aGlzLnBvcyA+IHN0YXJ0OwogICAgfSwKICAgIGVhdFNwYWNlOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7CiAgICAgIHdoaWxlICgvW1xzXHUwMGEwXS8udGVzdCh0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpKSkgKyt0aGlzLnBvczsKICAgICAgcmV0dXJuIHRoaXMucG9zID4gc3RhcnQ7CiAgICB9LAogICAgc2tpcFRvRW5kOiBmdW5jdGlvbigpIHt0aGlzLnBvcyA9IHRoaXMuc3RyaW5nLmxlbmd0aDt9LAogICAgc2tpcFRvOiBmdW5jdGlvbihjaCkgewogICAgICB2YXIgZm91bmQgPSB0aGlzLnN0cmluZy5pbmRleE9mKGNoLCB0aGlzLnBvcyk7CiAgICAgIGlmIChmb3VuZCA+IC0xKSB7dGhpcy5wb3MgPSBmb3VuZDsgcmV0dXJuIHRydWU7fQogICAgfSwKICAgIGJhY2tVcDogZnVuY3Rpb24obikge3RoaXMucG9zIC09IG47fSwKICAgIGNvbHVtbjogZnVuY3Rpb24oKSB7CiAgICAgIGlmICh0aGlzLmxhc3RDb2x1bW5Qb3MgPCB0aGlzLnN0YXJ0KSB7CiAgICAgICAgdGhpcy5sYXN0Q29sdW1uVmFsdWUgPSBjb3VudENvbHVtbih0aGlzLnN0cmluZywgdGhpcy5zdGFydCwgdGhpcy50YWJTaXplLCB0aGlzLmxhc3RDb2x1bW5Qb3MsIHRoaXMubGFzdENvbHVtblZhbHVlKTsKICAgICAgICB0aGlzLmxhc3RDb2x1bW5Qb3MgPSB0aGlzLnN0YXJ0OwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLmxhc3RDb2x1bW5WYWx1ZSAtICh0aGlzLmxpbmVTdGFydCA/IGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCB0aGlzLmxpbmVTdGFydCwgdGhpcy50YWJTaXplKSA6IDApOwogICAgfSwKICAgIGluZGVudGF0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCBudWxsLCB0aGlzLnRhYlNpemUpIC0KICAgICAgICAodGhpcy5saW5lU3RhcnQgPyBjb3VudENvbHVtbih0aGlzLnN0cmluZywgdGhpcy5saW5lU3RhcnQsIHRoaXMudGFiU2l6ZSkgOiAwKTsKICAgIH0sCiAgICBtYXRjaDogZnVuY3Rpb24ocGF0dGVybiwgY29uc3VtZSwgY2FzZUluc2Vuc2l0aXZlKSB7CiAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PSAic3RyaW5nIikgewogICAgICAgIHZhciBjYXNlZCA9IGZ1bmN0aW9uKHN0cikge3JldHVybiBjYXNlSW5zZW5zaXRpdmUgPyBzdHIudG9Mb3dlckNhc2UoKSA6IHN0cjt9OwogICAgICAgIHZhciBzdWJzdHIgPSB0aGlzLnN0cmluZy5zdWJzdHIodGhpcy5wb3MsIHBhdHRlcm4ubGVuZ3RoKTsKICAgICAgICBpZiAoY2FzZWQoc3Vic3RyKSA9PSBjYXNlZChwYXR0ZXJuKSkgewogICAgICAgICAgaWYgKGNvbnN1bWUgIT09IGZhbHNlKSB0aGlzLnBvcyArPSBwYXR0ZXJuLmxlbmd0aDsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgbWF0Y2ggPSB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnBvcykubWF0Y2gocGF0dGVybik7CiAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoLmluZGV4ID4gMCkgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKG1hdGNoICYmIGNvbnN1bWUgIT09IGZhbHNlKSB0aGlzLnBvcyArPSBtYXRjaFswXS5sZW5ndGg7CiAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgICB9CiAgICB9LAogICAgY3VycmVudDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5zdGFydCwgdGhpcy5wb3MpO30sCiAgICBoaWRlRmlyc3RDaGFyczogZnVuY3Rpb24obiwgaW5uZXIpIHsKICAgICAgdGhpcy5saW5lU3RhcnQgKz0gbjsKICAgICAgdHJ5IHsgcmV0dXJuIGlubmVyKCk7IH0KICAgICAgZmluYWxseSB7IHRoaXMubGluZVN0YXJ0IC09IG47IH0KICAgIH0KICB9OwoKICAvLyBURVhUTUFSS0VSUwoKICAvLyBDcmVhdGVkIHdpdGggbWFya1RleHQgYW5kIHNldEJvb2ttYXJrIG1ldGhvZHMuIEEgVGV4dE1hcmtlciBpcyBhCiAgLy8gaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2xlYXIgb3IgZmluZCBhIG1hcmtlZCBwb3NpdGlvbiBpbiB0aGUKICAvLyBkb2N1bWVudC4gTGluZSBvYmplY3RzIGhvbGQgYXJyYXlzIChtYXJrZWRTcGFucykgY29udGFpbmluZwogIC8vIHtmcm9tLCB0bywgbWFya2VyfSBvYmplY3QgcG9pbnRpbmcgdG8gc3VjaCBtYXJrZXIgb2JqZWN0cywgYW5kCiAgLy8gaW5kaWNhdGluZyB0aGF0IHN1Y2ggYSBtYXJrZXIgaXMgcHJlc2VudCBvbiB0aGF0IGxpbmUuIE11bHRpcGxlCiAgLy8gbGluZXMgbWF5IHBvaW50IHRvIHRoZSBzYW1lIG1hcmtlciB3aGVuIGl0IHNwYW5zIGFjcm9zcyBsaW5lcy4KICAvLyBUaGUgc3BhbnMgd2lsbCBoYXZlIG51bGwgZm9yIHRoZWlyIGZyb20vdG8gcHJvcGVydGllcyB3aGVuIHRoZQogIC8vIG1hcmtlciBjb250aW51ZXMgYmV5b25kIHRoZSBzdGFydC9lbmQgb2YgdGhlIGxpbmUuIE1hcmtlcnMgaGF2ZQogIC8vIGxpbmtzIGJhY2sgdG8gdGhlIGxpbmVzIHRoZXkgY3VycmVudGx5IHRvdWNoLgoKICB2YXIgbmV4dE1hcmtlcklkID0gMDsKCiAgdmFyIFRleHRNYXJrZXIgPSBDb2RlTWlycm9yLlRleHRNYXJrZXIgPSBmdW5jdGlvbihkb2MsIHR5cGUpIHsKICAgIHRoaXMubGluZXMgPSBbXTsKICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICB0aGlzLmRvYyA9IGRvYzsKICAgIHRoaXMuaWQgPSArK25leHRNYXJrZXJJZDsKICB9OwogIGV2ZW50TWl4aW4oVGV4dE1hcmtlcik7CgogIC8vIENsZWFyIHRoZSBtYXJrZXIuCiAgVGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHsKICAgIGlmICh0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKSByZXR1cm47CiAgICB2YXIgY20gPSB0aGlzLmRvYy5jbSwgd2l0aE9wID0gY20gJiYgIWNtLmN1ck9wOwogICAgaWYgKHdpdGhPcCkgc3RhcnRPcGVyYXRpb24oY20pOwogICAgaWYgKGhhc0hhbmRsZXIodGhpcywgImNsZWFyIikpIHsKICAgICAgdmFyIGZvdW5kID0gdGhpcy5maW5kKCk7CiAgICAgIGlmIChmb3VuZCkgc2lnbmFsTGF0ZXIodGhpcywgImNsZWFyIiwgZm91bmQuZnJvbSwgZm91bmQudG8pOwogICAgfQogICAgdmFyIG1pbiA9IG51bGwsIG1heCA9IG51bGw7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGluZXMubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIGxpbmUgPSB0aGlzLmxpbmVzW2ldOwogICAgICB2YXIgc3BhbiA9IGdldE1hcmtlZFNwYW5Gb3IobGluZS5tYXJrZWRTcGFucywgdGhpcyk7CiAgICAgIGlmIChjbSAmJiAhdGhpcy5jb2xsYXBzZWQpIHJlZ0xpbmVDaGFuZ2UoY20sIGxpbmVObyhsaW5lKSwgInRleHQiKTsKICAgICAgZWxzZSBpZiAoY20pIHsKICAgICAgICBpZiAoc3Bhbi50byAhPSBudWxsKSBtYXggPSBsaW5lTm8obGluZSk7CiAgICAgICAgaWYgKHNwYW4uZnJvbSAhPSBudWxsKSBtaW4gPSBsaW5lTm8obGluZSk7CiAgICAgIH0KICAgICAgbGluZS5tYXJrZWRTcGFucyA9IHJlbW92ZU1hcmtlZFNwYW4obGluZS5tYXJrZWRTcGFucywgc3Bhbik7CiAgICAgIGlmIChzcGFuLmZyb20gPT0gbnVsbCAmJiB0aGlzLmNvbGxhcHNlZCAmJiAhbGluZUlzSGlkZGVuKHRoaXMuZG9jLCBsaW5lKSAmJiBjbSkKICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIHRleHRIZWlnaHQoY20uZGlzcGxheSkpOwogICAgfQogICAgaWYgKGNtICYmIHRoaXMuY29sbGFwc2VkICYmICFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciB2aXN1YWwgPSB2aXN1YWxMaW5lKHRoaXMubGluZXNbaV0pLCBsZW4gPSBsaW5lTGVuZ3RoKHZpc3VhbCk7CiAgICAgIGlmIChsZW4gPiBjbS5kaXNwbGF5Lm1heExpbmVMZW5ndGgpIHsKICAgICAgICBjbS5kaXNwbGF5Lm1heExpbmUgPSB2aXN1YWw7CiAgICAgICAgY20uZGlzcGxheS5tYXhMaW5lTGVuZ3RoID0gbGVuOwogICAgICAgIGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSB0cnVlOwogICAgICB9CiAgICB9CgogICAgaWYgKG1pbiAhPSBudWxsICYmIGNtICYmIHRoaXMuY29sbGFwc2VkKSByZWdDaGFuZ2UoY20sIG1pbiwgbWF4ICsgMSk7CiAgICB0aGlzLmxpbmVzLmxlbmd0aCA9IDA7CiAgICB0aGlzLmV4cGxpY2l0bHlDbGVhcmVkID0gdHJ1ZTsKICAgIGlmICh0aGlzLmF0b21pYyAmJiB0aGlzLmRvYy5jYW50RWRpdCkgewogICAgICB0aGlzLmRvYy5jYW50RWRpdCA9IGZhbHNlOwogICAgICBpZiAoY20pIHJlQ2hlY2tTZWxlY3Rpb24oY20uZG9jKTsKICAgIH0KICAgIGlmIChjbSkgc2lnbmFsTGF0ZXIoY20sICJtYXJrZXJDbGVhcmVkIiwgY20sIHRoaXMpOwogICAgaWYgKHdpdGhPcCkgZW5kT3BlcmF0aW9uKGNtKTsKICAgIGlmICh0aGlzLnBhcmVudCkgdGhpcy5wYXJlbnQuY2xlYXIoKTsKICB9OwoKICAvLyBGaW5kIHRoZSBwb3NpdGlvbiBvZiB0aGUgbWFya2VyIGluIHRoZSBkb2N1bWVudC4gUmV0dXJucyBhIHtmcm9tLAogIC8vIHRvfSBvYmplY3QgYnkgZGVmYXVsdC4gU2lkZSBjYW4gYmUgcGFzc2VkIHRvIGdldCBhIHNwZWNpZmljIHNpZGUKICAvLyAtLSAwIChib3RoKSwgLTEgKGxlZnQpLCBvciAxIChyaWdodCkuIFdoZW4gbGluZU9iaiBpcyB0cnVlLCB0aGUKICAvLyBQb3Mgb2JqZWN0cyByZXR1cm5lZCBjb250YWluIGEgbGluZSBvYmplY3QsIHJhdGhlciB0aGFuIGEgbGluZQogIC8vIG51bWJlciAodXNlZCB0byBwcmV2ZW50IGxvb2tpbmcgdXAgdGhlIHNhbWUgbGluZSB0d2ljZSkuCiAgVGV4dE1hcmtlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHNpZGUsIGxpbmVPYmopIHsKICAgIGlmIChzaWRlID09IG51bGwgJiYgdGhpcy50eXBlID09ICJib29rbWFyayIpIHNpZGUgPSAxOwogICAgdmFyIGZyb20sIHRvOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciBsaW5lID0gdGhpcy5saW5lc1tpXTsKICAgICAgdmFyIHNwYW4gPSBnZXRNYXJrZWRTcGFuRm9yKGxpbmUubWFya2VkU3BhbnMsIHRoaXMpOwogICAgICBpZiAoc3Bhbi5mcm9tICE9IG51bGwpIHsKICAgICAgICBmcm9tID0gUG9zKGxpbmVPYmogPyBsaW5lIDogbGluZU5vKGxpbmUpLCBzcGFuLmZyb20pOwogICAgICAgIGlmIChzaWRlID09IC0xKSByZXR1cm4gZnJvbTsKICAgICAgfQogICAgICBpZiAoc3Bhbi50byAhPSBudWxsKSB7CiAgICAgICAgdG8gPSBQb3MobGluZU9iaiA/IGxpbmUgOiBsaW5lTm8obGluZSksIHNwYW4udG8pOwogICAgICAgIGlmIChzaWRlID09IDEpIHJldHVybiB0bzsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZyb20gJiYge2Zyb206IGZyb20sIHRvOiB0b307CiAgfTsKCiAgLy8gU2lnbmFscyB0aGF0IHRoZSBtYXJrZXIncyB3aWRnZXQgY2hhbmdlZCwgYW5kIHN1cnJvdW5kaW5nIGxheW91dAogIC8vIHNob3VsZCBiZSByZWNvbXB1dGVkLgogIFRleHRNYXJrZXIucHJvdG90eXBlLmNoYW5nZWQgPSBmdW5jdGlvbigpIHsKICAgIHZhciBwb3MgPSB0aGlzLmZpbmQoLTEsIHRydWUpLCB3aWRnZXQgPSB0aGlzLCBjbSA9IHRoaXMuZG9jLmNtOwogICAgaWYgKCFwb3MgfHwgIWNtKSByZXR1cm47CiAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsKICAgICAgdmFyIGxpbmUgPSBwb3MubGluZSwgbGluZU4gPSBsaW5lTm8ocG9zLmxpbmUpOwogICAgICB2YXIgdmlldyA9IGZpbmRWaWV3Rm9yTGluZShjbSwgbGluZU4pOwogICAgICBpZiAodmlldykgewogICAgICAgIGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGVGb3Iodmlldyk7CiAgICAgICAgY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTsKICAgICAgfQogICAgICBjbS5jdXJPcC51cGRhdGVNYXhMaW5lID0gdHJ1ZTsKICAgICAgaWYgKCFsaW5lSXNIaWRkZW4od2lkZ2V0LmRvYywgbGluZSkgJiYgd2lkZ2V0LmhlaWdodCAhPSBudWxsKSB7CiAgICAgICAgdmFyIG9sZEhlaWdodCA9IHdpZGdldC5oZWlnaHQ7CiAgICAgICAgd2lkZ2V0LmhlaWdodCA9IG51bGw7CiAgICAgICAgdmFyIGRIZWlnaHQgPSB3aWRnZXRIZWlnaHQod2lkZ2V0KSAtIG9sZEhlaWdodDsKICAgICAgICBpZiAoZEhlaWdodCkKICAgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyBkSGVpZ2h0KTsKICAgICAgfQogICAgfSk7CiAgfTsKCiAgVGV4dE1hcmtlci5wcm90b3R5cGUuYXR0YWNoTGluZSA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgIGlmICghdGhpcy5saW5lcy5sZW5ndGggJiYgdGhpcy5kb2MuY20pIHsKICAgICAgdmFyIG9wID0gdGhpcy5kb2MuY20uY3VyT3A7CiAgICAgIGlmICghb3AubWF5YmVIaWRkZW5NYXJrZXJzIHx8IGluZGV4T2Yob3AubWF5YmVIaWRkZW5NYXJrZXJzLCB0aGlzKSA9PSAtMSkKICAgICAgICAob3AubWF5YmVVbmhpZGRlbk1hcmtlcnMgfHwgKG9wLm1heWJlVW5oaWRkZW5NYXJrZXJzID0gW10pKS5wdXNoKHRoaXMpOwogICAgfQogICAgdGhpcy5saW5lcy5wdXNoKGxpbmUpOwogIH07CiAgVGV4dE1hcmtlci5wcm90b3R5cGUuZGV0YWNoTGluZSA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgIHRoaXMubGluZXMuc3BsaWNlKGluZGV4T2YodGhpcy5saW5lcywgbGluZSksIDEpOwogICAgaWYgKCF0aGlzLmxpbmVzLmxlbmd0aCAmJiB0aGlzLmRvYy5jbSkgewogICAgICB2YXIgb3AgPSB0aGlzLmRvYy5jbS5jdXJPcDsKICAgICAgKG9wLm1heWJlSGlkZGVuTWFya2VycyB8fCAob3AubWF5YmVIaWRkZW5NYXJrZXJzID0gW10pKS5wdXNoKHRoaXMpOwogICAgfQogIH07CgogIC8vIENvbGxhcHNlZCBtYXJrZXJzIGhhdmUgdW5pcXVlIGlkcywgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBvcmRlcgogIC8vIHRoZW0sIHdoaWNoIGlzIG5lZWRlZCBmb3IgdW5pcXVlbHkgZGV0ZXJtaW5pbmcgYW4gb3V0ZXIgbWFya2VyCiAgLy8gd2hlbiB0aGV5IG92ZXJsYXAgKHRoZXkgbWF5IG5lc3QsIGJ1dCBub3QgcGFydGlhbGx5IG92ZXJsYXApLgogIHZhciBuZXh0TWFya2VySWQgPSAwOwoKICAvLyBDcmVhdGUgYSBtYXJrZXIsIHdpcmUgaXQgdXAgdG8gdGhlIHJpZ2h0IGxpbmVzLCBhbmQKICBmdW5jdGlvbiBtYXJrVGV4dChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKSB7CiAgICAvLyBTaGFyZWQgbWFya2VycyAoYWNyb3NzIGxpbmtlZCBkb2N1bWVudHMpIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkKICAgIC8vIChtYXJrVGV4dFNoYXJlZCB3aWxsIGNhbGwgb3V0IHRvIHRoaXMgYWdhaW4sIG9uY2UgcGVyCiAgICAvLyBkb2N1bWVudCkuCiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNoYXJlZCkgcmV0dXJuIG1hcmtUZXh0U2hhcmVkKGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpOwogICAgLy8gRW5zdXJlIHdlIGFyZSBpbiBhbiBvcGVyYXRpb24uCiAgICBpZiAoZG9jLmNtICYmICFkb2MuY20uY3VyT3ApIHJldHVybiBvcGVyYXRpb24oZG9jLmNtLCBtYXJrVGV4dCkoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSk7CgogICAgdmFyIG1hcmtlciA9IG5ldyBUZXh0TWFya2VyKGRvYywgdHlwZSksIGRpZmYgPSBjbXAoZnJvbSwgdG8pOwogICAgaWYgKG9wdGlvbnMpIGNvcHlPYmoob3B0aW9ucywgbWFya2VyLCBmYWxzZSk7CiAgICAvLyBEb24ndCBjb25uZWN0IGVtcHR5IG1hcmtlcnMgdW5sZXNzIGNsZWFyV2hlbkVtcHR5IGlzIGZhbHNlCiAgICBpZiAoZGlmZiA+IDAgfHwgZGlmZiA9PSAwICYmIG1hcmtlci5jbGVhcldoZW5FbXB0eSAhPT0gZmFsc2UpCiAgICAgIHJldHVybiBtYXJrZXI7CiAgICBpZiAobWFya2VyLnJlcGxhY2VkV2l0aCkgewogICAgICAvLyBTaG93aW5nIHVwIGFzIGEgd2lkZ2V0IGltcGxpZXMgY29sbGFwc2VkICh3aWRnZXQgcmVwbGFjZXMgdGV4dCkKICAgICAgbWFya2VyLmNvbGxhcHNlZCA9IHRydWU7CiAgICAgIG1hcmtlci53aWRnZXROb2RlID0gZWx0KCJzcGFuIiwgW21hcmtlci5yZXBsYWNlZFdpdGhdLCAiQ29kZU1pcnJvci13aWRnZXQiKTsKICAgICAgaWYgKCFvcHRpb25zLmhhbmRsZU1vdXNlRXZlbnRzKSBtYXJrZXIud2lkZ2V0Tm9kZS5zZXRBdHRyaWJ1dGUoImNtLWlnbm9yZS1ldmVudHMiLCAidHJ1ZSIpOwogICAgICBpZiAob3B0aW9ucy5pbnNlcnRMZWZ0KSBtYXJrZXIud2lkZ2V0Tm9kZS5pbnNlcnRMZWZ0ID0gdHJ1ZTsKICAgIH0KICAgIGlmIChtYXJrZXIuY29sbGFwc2VkKSB7CiAgICAgIGlmIChjb25mbGljdGluZ0NvbGxhcHNlZFJhbmdlKGRvYywgZnJvbS5saW5lLCBmcm9tLCB0bywgbWFya2VyKSB8fAogICAgICAgICAgZnJvbS5saW5lICE9IHRvLmxpbmUgJiYgY29uZmxpY3RpbmdDb2xsYXBzZWRSYW5nZShkb2MsIHRvLmxpbmUsIGZyb20sIHRvLCBtYXJrZXIpKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiSW5zZXJ0aW5nIGNvbGxhcHNlZCBtYXJrZXIgcGFydGlhbGx5IG92ZXJsYXBwaW5nIGFuIGV4aXN0aW5nIG9uZSIpOwogICAgICBzYXdDb2xsYXBzZWRTcGFucyA9IHRydWU7CiAgICB9CgogICAgaWYgKG1hcmtlci5hZGRUb0hpc3RvcnkpCiAgICAgIGFkZENoYW5nZVRvSGlzdG9yeShkb2MsIHtmcm9tOiBmcm9tLCB0bzogdG8sIG9yaWdpbjogIm1hcmtUZXh0In0sIGRvYy5zZWwsIE5hTik7CgogICAgdmFyIGN1ckxpbmUgPSBmcm9tLmxpbmUsIGNtID0gZG9jLmNtLCB1cGRhdGVNYXhMaW5lOwogICAgZG9jLml0ZXIoY3VyTGluZSwgdG8ubGluZSArIDEsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgaWYgKGNtICYmIG1hcmtlci5jb2xsYXBzZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nICYmIHZpc3VhbExpbmUobGluZSkgPT0gY20uZGlzcGxheS5tYXhMaW5lKQogICAgICAgIHVwZGF0ZU1heExpbmUgPSB0cnVlOwogICAgICBpZiAobWFya2VyLmNvbGxhcHNlZCAmJiBjdXJMaW5lICE9IGZyb20ubGluZSkgdXBkYXRlTGluZUhlaWdodChsaW5lLCAwKTsKICAgICAgYWRkTWFya2VkU3BhbihsaW5lLCBuZXcgTWFya2VkU3BhbihtYXJrZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyTGluZSA9PSBmcm9tLmxpbmUgPyBmcm9tLmNoIDogbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJMaW5lID09IHRvLmxpbmUgPyB0by5jaCA6IG51bGwpKTsKICAgICAgKytjdXJMaW5lOwogICAgfSk7CiAgICAvLyBsaW5lSXNIaWRkZW4gZGVwZW5kcyBvbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIHNwYW5zLCBzbyBuZWVkcyBhIHNlY29uZCBwYXNzCiAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkgZG9jLml0ZXIoZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgewogICAgICBpZiAobGluZUlzSGlkZGVuKGRvYywgbGluZSkpIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgMCk7CiAgICB9KTsKCiAgICBpZiAobWFya2VyLmNsZWFyT25FbnRlcikgb24obWFya2VyLCAiYmVmb3JlQ3Vyc29yRW50ZXIiLCBmdW5jdGlvbigpIHsgbWFya2VyLmNsZWFyKCk7IH0pOwoKICAgIGlmIChtYXJrZXIucmVhZE9ubHkpIHsKICAgICAgc2F3UmVhZE9ubHlTcGFucyA9IHRydWU7CiAgICAgIGlmIChkb2MuaGlzdG9yeS5kb25lLmxlbmd0aCB8fCBkb2MuaGlzdG9yeS51bmRvbmUubGVuZ3RoKQogICAgICAgIGRvYy5jbGVhckhpc3RvcnkoKTsKICAgIH0KICAgIGlmIChtYXJrZXIuY29sbGFwc2VkKSB7CiAgICAgIG1hcmtlci5pZCA9ICsrbmV4dE1hcmtlcklkOwogICAgICBtYXJrZXIuYXRvbWljID0gdHJ1ZTsKICAgIH0KICAgIGlmIChjbSkgewogICAgICAvLyBTeW5jIGVkaXRvciBzdGF0ZQogICAgICBpZiAodXBkYXRlTWF4TGluZSkgY20uY3VyT3AudXBkYXRlTWF4TGluZSA9IHRydWU7CiAgICAgIGlmIChtYXJrZXIuY29sbGFwc2VkKQogICAgICAgIHJlZ0NoYW5nZShjbSwgZnJvbS5saW5lLCB0by5saW5lICsgMSk7CiAgICAgIGVsc2UgaWYgKG1hcmtlci5jbGFzc05hbWUgfHwgbWFya2VyLnRpdGxlIHx8IG1hcmtlci5zdGFydFN0eWxlIHx8IG1hcmtlci5lbmRTdHlsZSB8fCBtYXJrZXIuY3NzKQogICAgICAgIGZvciAodmFyIGkgPSBmcm9tLmxpbmU7IGkgPD0gdG8ubGluZTsgaSsrKSByZWdMaW5lQ2hhbmdlKGNtLCBpLCAidGV4dCIpOwogICAgICBpZiAobWFya2VyLmF0b21pYykgcmVDaGVja1NlbGVjdGlvbihjbS5kb2MpOwogICAgICBzaWduYWxMYXRlcihjbSwgIm1hcmtlckFkZGVkIiwgY20sIG1hcmtlcik7CiAgICB9CiAgICByZXR1cm4gbWFya2VyOwogIH0KCiAgLy8gU0hBUkVEIFRFWFRNQVJLRVJTCgogIC8vIEEgc2hhcmVkIG1hcmtlciBzcGFucyBtdWx0aXBsZSBsaW5rZWQgZG9jdW1lbnRzLiBJdCBpcwogIC8vIGltcGxlbWVudGVkIGFzIGEgbWV0YS1tYXJrZXItb2JqZWN0IGNvbnRyb2xsaW5nIG11bHRpcGxlIG5vcm1hbAogIC8vIG1hcmtlcnMuCiAgdmFyIFNoYXJlZFRleHRNYXJrZXIgPSBDb2RlTWlycm9yLlNoYXJlZFRleHRNYXJrZXIgPSBmdW5jdGlvbihtYXJrZXJzLCBwcmltYXJ5KSB7CiAgICB0aGlzLm1hcmtlcnMgPSBtYXJrZXJzOwogICAgdGhpcy5wcmltYXJ5ID0gcHJpbWFyeTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7ICsraSkKICAgICAgbWFya2Vyc1tpXS5wYXJlbnQgPSB0aGlzOwogIH07CiAgZXZlbnRNaXhpbihTaGFyZWRUZXh0TWFya2VyKTsKCiAgU2hhcmVkVGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHsKICAgIGlmICh0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKSByZXR1cm47CiAgICB0aGlzLmV4cGxpY2l0bHlDbGVhcmVkID0gdHJ1ZTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXJrZXJzLmxlbmd0aDsgKytpKQogICAgICB0aGlzLm1hcmtlcnNbaV0uY2xlYXIoKTsKICAgIHNpZ25hbExhdGVyKHRoaXMsICJjbGVhciIpOwogIH07CiAgU2hhcmVkVGV4dE1hcmtlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHNpZGUsIGxpbmVPYmopIHsKICAgIHJldHVybiB0aGlzLnByaW1hcnkuZmluZChzaWRlLCBsaW5lT2JqKTsKICB9OwoKICBmdW5jdGlvbiBtYXJrVGV4dFNoYXJlZChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKSB7CiAgICBvcHRpb25zID0gY29weU9iaihvcHRpb25zKTsKICAgIG9wdGlvbnMuc2hhcmVkID0gZmFsc2U7CiAgICB2YXIgbWFya2VycyA9IFttYXJrVGV4dChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKV0sIHByaW1hcnkgPSBtYXJrZXJzWzBdOwogICAgdmFyIHdpZGdldCA9IG9wdGlvbnMud2lkZ2V0Tm9kZTsKICAgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlvbihkb2MpIHsKICAgICAgaWYgKHdpZGdldCkgb3B0aW9ucy53aWRnZXROb2RlID0gd2lkZ2V0LmNsb25lTm9kZSh0cnVlKTsKICAgICAgbWFya2Vycy5wdXNoKG1hcmtUZXh0KGRvYywgY2xpcFBvcyhkb2MsIGZyb20pLCBjbGlwUG9zKGRvYywgdG8pLCBvcHRpb25zLCB0eXBlKSk7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLmxpbmtlZC5sZW5ndGg7ICsraSkKICAgICAgICBpZiAoZG9jLmxpbmtlZFtpXS5pc1BhcmVudCkgcmV0dXJuOwogICAgICBwcmltYXJ5ID0gbHN0KG1hcmtlcnMpOwogICAgfSk7CiAgICByZXR1cm4gbmV3IFNoYXJlZFRleHRNYXJrZXIobWFya2VycywgcHJpbWFyeSk7CiAgfQoKICBmdW5jdGlvbiBmaW5kU2hhcmVkTWFya2Vycyhkb2MpIHsKICAgIHJldHVybiBkb2MuZmluZE1hcmtzKFBvcyhkb2MuZmlyc3QsIDApLCBkb2MuY2xpcFBvcyhQb3MoZG9jLmxhc3RMaW5lKCkpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKG0pIHsgcmV0dXJuIG0ucGFyZW50OyB9KTsKICB9CgogIGZ1bmN0aW9uIGNvcHlTaGFyZWRNYXJrZXJzKGRvYywgbWFya2VycykgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBtYXJrZXIgPSBtYXJrZXJzW2ldLCBwb3MgPSBtYXJrZXIuZmluZCgpOwogICAgICB2YXIgbUZyb20gPSBkb2MuY2xpcFBvcyhwb3MuZnJvbSksIG1UbyA9IGRvYy5jbGlwUG9zKHBvcy50byk7CiAgICAgIGlmIChjbXAobUZyb20sIG1UbykpIHsKICAgICAgICB2YXIgc3ViTWFyayA9IG1hcmtUZXh0KGRvYywgbUZyb20sIG1UbywgbWFya2VyLnByaW1hcnksIG1hcmtlci5wcmltYXJ5LnR5cGUpOwogICAgICAgIG1hcmtlci5tYXJrZXJzLnB1c2goc3ViTWFyayk7CiAgICAgICAgc3ViTWFyay5wYXJlbnQgPSBtYXJrZXI7CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIGRldGFjaFNoYXJlZE1hcmtlcnMobWFya2VycykgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBtYXJrZXIgPSBtYXJrZXJzW2ldLCBsaW5rZWQgPSBbbWFya2VyLnByaW1hcnkuZG9jXTs7CiAgICAgIGxpbmtlZERvY3MobWFya2VyLnByaW1hcnkuZG9jLCBmdW5jdGlvbihkKSB7IGxpbmtlZC5wdXNoKGQpOyB9KTsKICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXJrZXIubWFya2Vycy5sZW5ndGg7IGorKykgewogICAgICAgIHZhciBzdWJNYXJrZXIgPSBtYXJrZXIubWFya2Vyc1tqXTsKICAgICAgICBpZiAoaW5kZXhPZihsaW5rZWQsIHN1Yk1hcmtlci5kb2MpID09IC0xKSB7CiAgICAgICAgICBzdWJNYXJrZXIucGFyZW50ID0gbnVsbDsKICAgICAgICAgIG1hcmtlci5tYXJrZXJzLnNwbGljZShqLS0sIDEpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8gVEVYVE1BUktFUiBTUEFOUwoKICBmdW5jdGlvbiBNYXJrZWRTcGFuKG1hcmtlciwgZnJvbSwgdG8pIHsKICAgIHRoaXMubWFya2VyID0gbWFya2VyOwogICAgdGhpcy5mcm9tID0gZnJvbTsgdGhpcy50byA9IHRvOwogIH0KCiAgLy8gU2VhcmNoIGFuIGFycmF5IG9mIHNwYW5zIGZvciBhIHNwYW4gbWF0Y2hpbmcgdGhlIGdpdmVuIG1hcmtlci4KICBmdW5jdGlvbiBnZXRNYXJrZWRTcGFuRm9yKHNwYW5zLCBtYXJrZXIpIHsKICAgIGlmIChzcGFucykgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkgewogICAgICB2YXIgc3BhbiA9IHNwYW5zW2ldOwogICAgICBpZiAoc3Bhbi5tYXJrZXIgPT0gbWFya2VyKSByZXR1cm4gc3BhbjsKICAgIH0KICB9CiAgLy8gUmVtb3ZlIGEgc3BhbiBmcm9tIGFuIGFycmF5LCByZXR1cm5pbmcgdW5kZWZpbmVkIGlmIG5vIHNwYW5zIGFyZQogIC8vIGxlZnQgKHdlIGRvbid0IHN0b3JlIGFycmF5cyBmb3IgbGluZXMgd2l0aG91dCBzcGFucykuCiAgZnVuY3Rpb24gcmVtb3ZlTWFya2VkU3BhbihzcGFucywgc3BhbikgewogICAgZm9yICh2YXIgciwgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkKICAgICAgaWYgKHNwYW5zW2ldICE9IHNwYW4pIChyIHx8IChyID0gW10pKS5wdXNoKHNwYW5zW2ldKTsKICAgIHJldHVybiByOwogIH0KICAvLyBBZGQgYSBzcGFuIHRvIGEgbGluZS4KICBmdW5jdGlvbiBhZGRNYXJrZWRTcGFuKGxpbmUsIHNwYW4pIHsKICAgIGxpbmUubWFya2VkU3BhbnMgPSBsaW5lLm1hcmtlZFNwYW5zID8gbGluZS5tYXJrZWRTcGFucy5jb25jYXQoW3NwYW5dKSA6IFtzcGFuXTsKICAgIHNwYW4ubWFya2VyLmF0dGFjaExpbmUobGluZSk7CiAgfQoKICAvLyBVc2VkIGZvciB0aGUgYWxnb3JpdGhtIHRoYXQgYWRqdXN0cyBtYXJrZXJzIGZvciBhIGNoYW5nZSBpbiB0aGUKICAvLyBkb2N1bWVudC4gVGhlc2UgZnVuY3Rpb25zIGN1dCBhbiBhcnJheSBvZiBzcGFucyBhdCBhIGdpdmVuCiAgLy8gY2hhcmFjdGVyIHBvc2l0aW9uLCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgcmVtYWluaW5nIGNodW5rcyAob3IKICAvLyB1bmRlZmluZWQgaWYgbm90aGluZyByZW1haW5zKS4KICBmdW5jdGlvbiBtYXJrZWRTcGFuc0JlZm9yZShvbGQsIHN0YXJ0Q2gsIGlzSW5zZXJ0KSB7CiAgICBpZiAob2xkKSBmb3IgKHZhciBpID0gMCwgbnc7IGkgPCBvbGQubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIHNwYW4gPSBvbGRbaV0sIG1hcmtlciA9IHNwYW4ubWFya2VyOwogICAgICB2YXIgc3RhcnRzQmVmb3JlID0gc3Bhbi5mcm9tID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVMZWZ0ID8gc3Bhbi5mcm9tIDw9IHN0YXJ0Q2ggOiBzcGFuLmZyb20gPCBzdGFydENoKTsKICAgICAgaWYgKHN0YXJ0c0JlZm9yZSB8fCBzcGFuLmZyb20gPT0gc3RhcnRDaCAmJiBtYXJrZXIudHlwZSA9PSAiYm9va21hcmsiICYmICghaXNJbnNlcnQgfHwgIXNwYW4ubWFya2VyLmluc2VydExlZnQpKSB7CiAgICAgICAgdmFyIGVuZHNBZnRlciA9IHNwYW4udG8gPT0gbnVsbCB8fCAobWFya2VyLmluY2x1c2l2ZVJpZ2h0ID8gc3Bhbi50byA+PSBzdGFydENoIDogc3Bhbi50byA+IHN0YXJ0Q2gpOwogICAgICAgIChudyB8fCAobncgPSBbXSkpLnB1c2gobmV3IE1hcmtlZFNwYW4obWFya2VyLCBzcGFuLmZyb20sIGVuZHNBZnRlciA/IG51bGwgOiBzcGFuLnRvKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudzsKICB9CiAgZnVuY3Rpb24gbWFya2VkU3BhbnNBZnRlcihvbGQsIGVuZENoLCBpc0luc2VydCkgewogICAgaWYgKG9sZCkgZm9yICh2YXIgaSA9IDAsIG53OyBpIDwgb2xkLmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciBzcGFuID0gb2xkW2ldLCBtYXJrZXIgPSBzcGFuLm1hcmtlcjsKICAgICAgdmFyIGVuZHNBZnRlciA9IHNwYW4udG8gPT0gbnVsbCB8fCAobWFya2VyLmluY2x1c2l2ZVJpZ2h0ID8gc3Bhbi50byA+PSBlbmRDaCA6IHNwYW4udG8gPiBlbmRDaCk7CiAgICAgIGlmIChlbmRzQWZ0ZXIgfHwgc3Bhbi5mcm9tID09IGVuZENoICYmIG1hcmtlci50eXBlID09ICJib29rbWFyayIgJiYgKCFpc0luc2VydCB8fCBzcGFuLm1hcmtlci5pbnNlcnRMZWZ0KSkgewogICAgICAgIHZhciBzdGFydHNCZWZvcmUgPSBzcGFuLmZyb20gPT0gbnVsbCB8fCAobWFya2VyLmluY2x1c2l2ZUxlZnQgPyBzcGFuLmZyb20gPD0gZW5kQ2ggOiBzcGFuLmZyb20gPCBlbmRDaCk7CiAgICAgICAgKG53IHx8IChudyA9IFtdKSkucHVzaChuZXcgTWFya2VkU3BhbihtYXJrZXIsIHN0YXJ0c0JlZm9yZSA/IG51bGwgOiBzcGFuLmZyb20gLSBlbmRDaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4udG8gPT0gbnVsbCA/IG51bGwgOiBzcGFuLnRvIC0gZW5kQ2gpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG53OwogIH0KCiAgLy8gR2l2ZW4gYSBjaGFuZ2Ugb2JqZWN0LCBjb21wdXRlIHRoZSBuZXcgc2V0IG9mIG1hcmtlciBzcGFucyB0aGF0CiAgLy8gY292ZXIgdGhlIGxpbmUgaW4gd2hpY2ggdGhlIGNoYW5nZSB0b29rIHBsYWNlLiBSZW1vdmVzIHNwYW5zCiAgLy8gZW50aXJlbHkgd2l0aGluIHRoZSBjaGFuZ2UsIHJlY29ubmVjdHMgc3BhbnMgYmVsb25naW5nIHRvIHRoZQogIC8vIHNhbWUgbWFya2VyIHRoYXQgYXBwZWFyIG9uIGJvdGggc2lkZXMgb2YgdGhlIGNoYW5nZSwgYW5kIGN1dHMgb2ZmCiAgLy8gc3BhbnMgcGFydGlhbGx5IHdpdGhpbiB0aGUgY2hhbmdlLiBSZXR1cm5zIGFuIGFycmF5IG9mIHNwYW4KICAvLyBhcnJheXMgd2l0aCBvbmUgZWxlbWVudCBmb3IgZWFjaCBsaW5lIGluIChhZnRlcikgdGhlIGNoYW5nZS4KICBmdW5jdGlvbiBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKSB7CiAgICBpZiAoY2hhbmdlLmZ1bGwpIHJldHVybiBudWxsOwogICAgdmFyIG9sZEZpcnN0ID0gaXNMaW5lKGRvYywgY2hhbmdlLmZyb20ubGluZSkgJiYgZ2V0TGluZShkb2MsIGNoYW5nZS5mcm9tLmxpbmUpLm1hcmtlZFNwYW5zOwogICAgdmFyIG9sZExhc3QgPSBpc0xpbmUoZG9jLCBjaGFuZ2UudG8ubGluZSkgJiYgZ2V0TGluZShkb2MsIGNoYW5nZS50by5saW5lKS5tYXJrZWRTcGFuczsKICAgIGlmICghb2xkRmlyc3QgJiYgIW9sZExhc3QpIHJldHVybiBudWxsOwoKICAgIHZhciBzdGFydENoID0gY2hhbmdlLmZyb20uY2gsIGVuZENoID0gY2hhbmdlLnRvLmNoLCBpc0luc2VydCA9IGNtcChjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKSA9PSAwOwogICAgLy8gR2V0IHRoZSBzcGFucyB0aGF0ICdzdGljayBvdXQnIG9uIGJvdGggc2lkZXMKICAgIHZhciBmaXJzdCA9IG1hcmtlZFNwYW5zQmVmb3JlKG9sZEZpcnN0LCBzdGFydENoLCBpc0luc2VydCk7CiAgICB2YXIgbGFzdCA9IG1hcmtlZFNwYW5zQWZ0ZXIob2xkTGFzdCwgZW5kQ2gsIGlzSW5zZXJ0KTsKCiAgICAvLyBOZXh0LCBtZXJnZSB0aG9zZSB0d28gZW5kcwogICAgdmFyIHNhbWVMaW5lID0gY2hhbmdlLnRleHQubGVuZ3RoID09IDEsIG9mZnNldCA9IGxzdChjaGFuZ2UudGV4dCkubGVuZ3RoICsgKHNhbWVMaW5lID8gc3RhcnRDaCA6IDApOwogICAgaWYgKGZpcnN0KSB7CiAgICAgIC8vIEZpeCB1cCAudG8gcHJvcGVydGllcyBvZiBmaXJzdAogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpcnN0Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIHNwYW4gPSBmaXJzdFtpXTsKICAgICAgICBpZiAoc3Bhbi50byA9PSBudWxsKSB7CiAgICAgICAgICB2YXIgZm91bmQgPSBnZXRNYXJrZWRTcGFuRm9yKGxhc3QsIHNwYW4ubWFya2VyKTsKICAgICAgICAgIGlmICghZm91bmQpIHNwYW4udG8gPSBzdGFydENoOwogICAgICAgICAgZWxzZSBpZiAoc2FtZUxpbmUpIHNwYW4udG8gPSBmb3VuZC50byA9PSBudWxsID8gbnVsbCA6IGZvdW5kLnRvICsgb2Zmc2V0OwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGxhc3QpIHsKICAgICAgLy8gRml4IHVwIC5mcm9tIGluIGxhc3QgKG9yIG1vdmUgdGhlbSBpbnRvIGZpcnN0IGluIGNhc2Ugb2Ygc2FtZUxpbmUpCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdC5sZW5ndGg7ICsraSkgewogICAgICAgIHZhciBzcGFuID0gbGFzdFtpXTsKICAgICAgICBpZiAoc3Bhbi50byAhPSBudWxsKSBzcGFuLnRvICs9IG9mZnNldDsKICAgICAgICBpZiAoc3Bhbi5mcm9tID09IG51bGwpIHsKICAgICAgICAgIHZhciBmb3VuZCA9IGdldE1hcmtlZFNwYW5Gb3IoZmlyc3QsIHNwYW4ubWFya2VyKTsKICAgICAgICAgIGlmICghZm91bmQpIHsKICAgICAgICAgICAgc3Bhbi5mcm9tID0gb2Zmc2V0OwogICAgICAgICAgICBpZiAoc2FtZUxpbmUpIChmaXJzdCB8fCAoZmlyc3QgPSBbXSkpLnB1c2goc3Bhbik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNwYW4uZnJvbSArPSBvZmZzZXQ7CiAgICAgICAgICBpZiAoc2FtZUxpbmUpIChmaXJzdCB8fCAoZmlyc3QgPSBbXSkpLnB1c2goc3Bhbik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvLyBNYWtlIHN1cmUgd2UgZGlkbid0IGNyZWF0ZSBhbnkgemVyby1sZW5ndGggc3BhbnMKICAgIGlmIChmaXJzdCkgZmlyc3QgPSBjbGVhckVtcHR5U3BhbnMoZmlyc3QpOwogICAgaWYgKGxhc3QgJiYgbGFzdCAhPSBmaXJzdCkgbGFzdCA9IGNsZWFyRW1wdHlTcGFucyhsYXN0KTsKCiAgICB2YXIgbmV3TWFya2VycyA9IFtmaXJzdF07CiAgICBpZiAoIXNhbWVMaW5lKSB7CiAgICAgIC8vIEZpbGwgZ2FwIHdpdGggd2hvbGUtbGluZS1zcGFucwogICAgICB2YXIgZ2FwID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gMiwgZ2FwTWFya2VyczsKICAgICAgaWYgKGdhcCA+IDAgJiYgZmlyc3QpCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaXJzdC5sZW5ndGg7ICsraSkKICAgICAgICAgIGlmIChmaXJzdFtpXS50byA9PSBudWxsKQogICAgICAgICAgICAoZ2FwTWFya2VycyB8fCAoZ2FwTWFya2VycyA9IFtdKSkucHVzaChuZXcgTWFya2VkU3BhbihmaXJzdFtpXS5tYXJrZXIsIG51bGwsIG51bGwpKTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnYXA7ICsraSkKICAgICAgICBuZXdNYXJrZXJzLnB1c2goZ2FwTWFya2Vycyk7CiAgICAgIG5ld01hcmtlcnMucHVzaChsYXN0KTsKICAgIH0KICAgIHJldHVybiBuZXdNYXJrZXJzOwogIH0KCiAgLy8gUmVtb3ZlIHNwYW5zIHRoYXQgYXJlIGVtcHR5IGFuZCBkb24ndCBoYXZlIGEgY2xlYXJXaGVuRW1wdHkKICAvLyBvcHRpb24gb2YgZmFsc2UuCiAgZnVuY3Rpb24gY2xlYXJFbXB0eVNwYW5zKHNwYW5zKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciBzcGFuID0gc3BhbnNbaV07CiAgICAgIGlmIChzcGFuLmZyb20gIT0gbnVsbCAmJiBzcGFuLmZyb20gPT0gc3Bhbi50byAmJiBzcGFuLm1hcmtlci5jbGVhcldoZW5FbXB0eSAhPT0gZmFsc2UpCiAgICAgICAgc3BhbnMuc3BsaWNlKGktLSwgMSk7CiAgICB9CiAgICBpZiAoIXNwYW5zLmxlbmd0aCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gc3BhbnM7CiAgfQoKICAvLyBVc2VkIGZvciB1bi9yZS1kb2luZyBjaGFuZ2VzIGZyb20gdGhlIGhpc3RvcnkuIENvbWJpbmVzIHRoZQogIC8vIHJlc3VsdCBvZiBjb21wdXRpbmcgdGhlIGV4aXN0aW5nIHNwYW5zIHdpdGggdGhlIHNldCBvZiBzcGFucyB0aGF0CiAgLy8gZXhpc3RlZCBpbiB0aGUgaGlzdG9yeSAoc28gdGhhdCBkZWxldGluZyBhcm91bmQgYSBzcGFuIGFuZCB0aGVuCiAgLy8gdW5kb2luZyBicmluZ3MgYmFjayB0aGUgc3BhbikuCiAgZnVuY3Rpb24gbWVyZ2VPbGRTcGFucyhkb2MsIGNoYW5nZSkgewogICAgdmFyIG9sZCA9IGdldE9sZFNwYW5zKGRvYywgY2hhbmdlKTsKICAgIHZhciBzdHJldGNoZWQgPSBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKTsKICAgIGlmICghb2xkKSByZXR1cm4gc3RyZXRjaGVkOwogICAgaWYgKCFzdHJldGNoZWQpIHJldHVybiBvbGQ7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGQubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIG9sZEN1ciA9IG9sZFtpXSwgc3RyZXRjaEN1ciA9IHN0cmV0Y2hlZFtpXTsKICAgICAgaWYgKG9sZEN1ciAmJiBzdHJldGNoQ3VyKSB7CiAgICAgICAgc3BhbnM6IGZvciAodmFyIGogPSAwOyBqIDwgc3RyZXRjaEN1ci5sZW5ndGg7ICsraikgewogICAgICAgICAgdmFyIHNwYW4gPSBzdHJldGNoQ3VyW2pdOwogICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBvbGRDdXIubGVuZ3RoOyArK2spCiAgICAgICAgICAgIGlmIChvbGRDdXJba10ubWFya2VyID09IHNwYW4ubWFya2VyKSBjb250aW51ZSBzcGFuczsKICAgICAgICAgIG9sZEN1ci5wdXNoKHNwYW4pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChzdHJldGNoQ3VyKSB7CiAgICAgICAgb2xkW2ldID0gc3RyZXRjaEN1cjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG9sZDsKICB9CgogIC8vIFVzZWQgdG8gJ2NsaXAnIG91dCByZWFkT25seSByYW5nZXMgd2hlbiBtYWtpbmcgYSBjaGFuZ2UuCiAgZnVuY3Rpb24gcmVtb3ZlUmVhZE9ubHlSYW5nZXMoZG9jLCBmcm9tLCB0bykgewogICAgdmFyIG1hcmtlcnMgPSBudWxsOwogICAgZG9jLml0ZXIoZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgewogICAgICBpZiAobGluZS5tYXJrZWRTcGFucykgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIG1hcmsgPSBsaW5lLm1hcmtlZFNwYW5zW2ldLm1hcmtlcjsKICAgICAgICBpZiAobWFyay5yZWFkT25seSAmJiAoIW1hcmtlcnMgfHwgaW5kZXhPZihtYXJrZXJzLCBtYXJrKSA9PSAtMSkpCiAgICAgICAgICAobWFya2VycyB8fCAobWFya2VycyA9IFtdKSkucHVzaChtYXJrKTsKICAgICAgfQogICAgfSk7CiAgICBpZiAoIW1hcmtlcnMpIHJldHVybiBudWxsOwogICAgdmFyIHBhcnRzID0gW3tmcm9tOiBmcm9tLCB0bzogdG99XTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7ICsraSkgewogICAgICB2YXIgbWsgPSBtYXJrZXJzW2ldLCBtID0gbWsuZmluZCgwKTsKICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJ0cy5sZW5ndGg7ICsraikgewogICAgICAgIHZhciBwID0gcGFydHNbal07CiAgICAgICAgaWYgKGNtcChwLnRvLCBtLmZyb20pIDwgMCB8fCBjbXAocC5mcm9tLCBtLnRvKSA+IDApIGNvbnRpbnVlOwogICAgICAgIHZhciBuZXdQYXJ0cyA9IFtqLCAxXSwgZGZyb20gPSBjbXAocC5mcm9tLCBtLmZyb20pLCBkdG8gPSBjbXAocC50bywgbS50byk7CiAgICAgICAgaWYgKGRmcm9tIDwgMCB8fCAhbWsuaW5jbHVzaXZlTGVmdCAmJiAhZGZyb20pCiAgICAgICAgICBuZXdQYXJ0cy5wdXNoKHtmcm9tOiBwLmZyb20sIHRvOiBtLmZyb219KTsKICAgICAgICBpZiAoZHRvID4gMCB8fCAhbWsuaW5jbHVzaXZlUmlnaHQgJiYgIWR0bykKICAgICAgICAgIG5ld1BhcnRzLnB1c2goe2Zyb206IG0udG8sIHRvOiBwLnRvfSk7CiAgICAgICAgcGFydHMuc3BsaWNlLmFwcGx5KHBhcnRzLCBuZXdQYXJ0cyk7CiAgICAgICAgaiArPSBuZXdQYXJ0cy5sZW5ndGggLSAxOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcGFydHM7CiAgfQoKICAvLyBDb25uZWN0IG9yIGRpc2Nvbm5lY3Qgc3BhbnMgZnJvbSBhIGxpbmUuCiAgZnVuY3Rpb24gZGV0YWNoTWFya2VkU3BhbnMobGluZSkgewogICAgdmFyIHNwYW5zID0gbGluZS5tYXJrZWRTcGFuczsKICAgIGlmICghc3BhbnMpIHJldHVybjsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpCiAgICAgIHNwYW5zW2ldLm1hcmtlci5kZXRhY2hMaW5lKGxpbmUpOwogICAgbGluZS5tYXJrZWRTcGFucyA9IG51bGw7CiAgfQogIGZ1bmN0aW9uIGF0dGFjaE1hcmtlZFNwYW5zKGxpbmUsIHNwYW5zKSB7CiAgICBpZiAoIXNwYW5zKSByZXR1cm47CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKQogICAgICBzcGFuc1tpXS5tYXJrZXIuYXR0YWNoTGluZShsaW5lKTsKICAgIGxpbmUubWFya2VkU3BhbnMgPSBzcGFuczsKICB9CgogIC8vIEhlbHBlcnMgdXNlZCB3aGVuIGNvbXB1dGluZyB3aGljaCBvdmVybGFwcGluZyBjb2xsYXBzZWQgc3BhbgogIC8vIGNvdW50cyBhcyB0aGUgbGFyZ2VyIG9uZS4KICBmdW5jdGlvbiBleHRyYUxlZnQobWFya2VyKSB7IHJldHVybiBtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IC0xIDogMDsgfQogIGZ1bmN0aW9uIGV4dHJhUmlnaHQobWFya2VyKSB7IHJldHVybiBtYXJrZXIuaW5jbHVzaXZlUmlnaHQgPyAxIDogMDsgfQoKICAvLyBSZXR1cm5zIGEgbnVtYmVyIGluZGljYXRpbmcgd2hpY2ggb2YgdHdvIG92ZXJsYXBwaW5nIGNvbGxhcHNlZAogIC8vIHNwYW5zIGlzIGxhcmdlciAoYW5kIHRodXMgaW5jbHVkZXMgdGhlIG90aGVyKS4gRmFsbHMgYmFjayB0bwogIC8vIGNvbXBhcmluZyBpZHMgd2hlbiB0aGUgc3BhbnMgY292ZXIgZXhhY3RseSB0aGUgc2FtZSByYW5nZS4KICBmdW5jdGlvbiBjb21wYXJlQ29sbGFwc2VkTWFya2VycyhhLCBiKSB7CiAgICB2YXIgbGVuRGlmZiA9IGEubGluZXMubGVuZ3RoIC0gYi5saW5lcy5sZW5ndGg7CiAgICBpZiAobGVuRGlmZiAhPSAwKSByZXR1cm4gbGVuRGlmZjsKICAgIHZhciBhUG9zID0gYS5maW5kKCksIGJQb3MgPSBiLmZpbmQoKTsKICAgIHZhciBmcm9tQ21wID0gY21wKGFQb3MuZnJvbSwgYlBvcy5mcm9tKSB8fCBleHRyYUxlZnQoYSkgLSBleHRyYUxlZnQoYik7CiAgICBpZiAoZnJvbUNtcCkgcmV0dXJuIC1mcm9tQ21wOwogICAgdmFyIHRvQ21wID0gY21wKGFQb3MudG8sIGJQb3MudG8pIHx8IGV4dHJhUmlnaHQoYSkgLSBleHRyYVJpZ2h0KGIpOwogICAgaWYgKHRvQ21wKSByZXR1cm4gdG9DbXA7CiAgICByZXR1cm4gYi5pZCAtIGEuaWQ7CiAgfQoKICAvLyBGaW5kIG91dCB3aGV0aGVyIGEgbGluZSBlbmRzIG9yIHN0YXJ0cyBpbiBhIGNvbGxhcHNlZCBzcGFuLiBJZgogIC8vIHNvLCByZXR1cm4gdGhlIG1hcmtlciBmb3IgdGhhdCBzcGFuLgogIGZ1bmN0aW9uIGNvbGxhcHNlZFNwYW5BdFNpZGUobGluZSwgc3RhcnQpIHsKICAgIHZhciBzcHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zLCBmb3VuZDsKICAgIGlmIChzcHMpIGZvciAodmFyIHNwLCBpID0gMDsgaSA8IHNwcy5sZW5ndGg7ICsraSkgewogICAgICBzcCA9IHNwc1tpXTsKICAgICAgaWYgKHNwLm1hcmtlci5jb2xsYXBzZWQgJiYgKHN0YXJ0ID8gc3AuZnJvbSA6IHNwLnRvKSA9PSBudWxsICYmCiAgICAgICAgICAoIWZvdW5kIHx8IGNvbXBhcmVDb2xsYXBzZWRNYXJrZXJzKGZvdW5kLCBzcC5tYXJrZXIpIDwgMCkpCiAgICAgICAgZm91bmQgPSBzcC5tYXJrZXI7CiAgICB9CiAgICByZXR1cm4gZm91bmQ7CiAgfQogIGZ1bmN0aW9uIGNvbGxhcHNlZFNwYW5BdFN0YXJ0KGxpbmUpIHsgcmV0dXJuIGNvbGxhcHNlZFNwYW5BdFNpZGUobGluZSwgdHJ1ZSk7IH0KICBmdW5jdGlvbiBjb2xsYXBzZWRTcGFuQXRFbmQobGluZSkgeyByZXR1cm4gY29sbGFwc2VkU3BhbkF0U2lkZShsaW5lLCBmYWxzZSk7IH0KCiAgLy8gVGVzdCB3aGV0aGVyIHRoZXJlIGV4aXN0cyBhIGNvbGxhcHNlZCBzcGFuIHRoYXQgcGFydGlhbGx5CiAgLy8gb3ZlcmxhcHMgKGNvdmVycyB0aGUgc3RhcnQgb3IgZW5kLCBidXQgbm90IGJvdGgpIG9mIGEgbmV3IHNwYW4uCiAgLy8gU3VjaCBvdmVybGFwIGlzIG5vdCBhbGxvd2VkLgogIGZ1bmN0aW9uIGNvbmZsaWN0aW5nQ29sbGFwc2VkUmFuZ2UoZG9jLCBsaW5lTm8sIGZyb20sIHRvLCBtYXJrZXIpIHsKICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIGxpbmVObyk7CiAgICB2YXIgc3BzID0gc2F3Q29sbGFwc2VkU3BhbnMgJiYgbGluZS5tYXJrZWRTcGFuczsKICAgIGlmIChzcHMpIGZvciAodmFyIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciBzcCA9IHNwc1tpXTsKICAgICAgaWYgKCFzcC5tYXJrZXIuY29sbGFwc2VkKSBjb250aW51ZTsKICAgICAgdmFyIGZvdW5kID0gc3AubWFya2VyLmZpbmQoMCk7CiAgICAgIHZhciBmcm9tQ21wID0gY21wKGZvdW5kLmZyb20sIGZyb20pIHx8IGV4dHJhTGVmdChzcC5tYXJrZXIpIC0gZXh0cmFMZWZ0KG1hcmtlcik7CiAgICAgIHZhciB0b0NtcCA9IGNtcChmb3VuZC50bywgdG8pIHx8IGV4dHJhUmlnaHQoc3AubWFya2VyKSAtIGV4dHJhUmlnaHQobWFya2VyKTsKICAgICAgaWYgKGZyb21DbXAgPj0gMCAmJiB0b0NtcCA8PSAwIHx8IGZyb21DbXAgPD0gMCAmJiB0b0NtcCA+PSAwKSBjb250aW51ZTsKICAgICAgaWYgKGZyb21DbXAgPD0gMCAmJiAoY21wKGZvdW5kLnRvLCBmcm9tKSA+IDAgfHwgKHNwLm1hcmtlci5pbmNsdXNpdmVSaWdodCAmJiBtYXJrZXIuaW5jbHVzaXZlTGVmdCkpIHx8CiAgICAgICAgICBmcm9tQ21wID49IDAgJiYgKGNtcChmb3VuZC5mcm9tLCB0bykgPCAwIHx8IChzcC5tYXJrZXIuaW5jbHVzaXZlTGVmdCAmJiBtYXJrZXIuaW5jbHVzaXZlUmlnaHQpKSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CgogIC8vIEEgdmlzdWFsIGxpbmUgaXMgYSBsaW5lIGFzIGRyYXduIG9uIHRoZSBzY3JlZW4uIEZvbGRpbmcsIGZvcgogIC8vIGV4YW1wbGUsIGNhbiBjYXVzZSBtdWx0aXBsZSBsb2dpY2FsIGxpbmVzIHRvIGFwcGVhciBvbiB0aGUgc2FtZQogIC8vIHZpc3VhbCBsaW5lLiBUaGlzIGZpbmRzIHRoZSBzdGFydCBvZiB0aGUgdmlzdWFsIGxpbmUgdGhhdCB0aGUKICAvLyBnaXZlbiBsaW5lIGlzIHBhcnQgb2YgKHVzdWFsbHkgdGhhdCBpcyB0aGUgbGluZSBpdHNlbGYpLgogIGZ1bmN0aW9uIHZpc3VhbExpbmUobGluZSkgewogICAgdmFyIG1lcmdlZDsKICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRTdGFydChsaW5lKSkKICAgICAgbGluZSA9IG1lcmdlZC5maW5kKC0xLCB0cnVlKS5saW5lOwogICAgcmV0dXJuIGxpbmU7CiAgfQoKICAvLyBSZXR1cm5zIGFuIGFycmF5IG9mIGxvZ2ljYWwgbGluZXMgdGhhdCBjb250aW51ZSB0aGUgdmlzdWFsIGxpbmUKICAvLyBzdGFydGVkIGJ5IHRoZSBhcmd1bWVudCwgb3IgdW5kZWZpbmVkIGlmIHRoZXJlIGFyZSBubyBzdWNoIGxpbmVzLgogIGZ1bmN0aW9uIHZpc3VhbExpbmVDb250aW51ZWQobGluZSkgewogICAgdmFyIG1lcmdlZCwgbGluZXM7CiAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmUpKSB7CiAgICAgIGxpbmUgPSBtZXJnZWQuZmluZCgxLCB0cnVlKS5saW5lOwogICAgICAobGluZXMgfHwgKGxpbmVzID0gW10pKS5wdXNoKGxpbmUpOwogICAgfQogICAgcmV0dXJuIGxpbmVzOwogIH0KCiAgLy8gR2V0IHRoZSBsaW5lIG51bWJlciBvZiB0aGUgc3RhcnQgb2YgdGhlIHZpc3VhbCBsaW5lIHRoYXQgdGhlCiAgLy8gZ2l2ZW4gbGluZSBudW1iZXIgaXMgcGFydCBvZi4KICBmdW5jdGlvbiB2aXN1YWxMaW5lTm8oZG9jLCBsaW5lTikgewogICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgbGluZU4pLCB2aXMgPSB2aXN1YWxMaW5lKGxpbmUpOwogICAgaWYgKGxpbmUgPT0gdmlzKSByZXR1cm4gbGluZU47CiAgICByZXR1cm4gbGluZU5vKHZpcyk7CiAgfQogIC8vIEdldCB0aGUgbGluZSBudW1iZXIgb2YgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IHZpc3VhbCBsaW5lIGFmdGVyCiAgLy8gdGhlIGdpdmVuIGxpbmUuCiAgZnVuY3Rpb24gdmlzdWFsTGluZUVuZE5vKGRvYywgbGluZU4pIHsKICAgIGlmIChsaW5lTiA+IGRvYy5sYXN0TGluZSgpKSByZXR1cm4gbGluZU47CiAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBsaW5lTiksIG1lcmdlZDsKICAgIGlmICghbGluZUlzSGlkZGVuKGRvYywgbGluZSkpIHJldHVybiBsaW5lTjsKICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQobGluZSkpCiAgICAgIGxpbmUgPSBtZXJnZWQuZmluZCgxLCB0cnVlKS5saW5lOwogICAgcmV0dXJuIGxpbmVObyhsaW5lKSArIDE7CiAgfQoKICAvLyBDb21wdXRlIHdoZXRoZXIgYSBsaW5lIGlzIGhpZGRlbi4gTGluZXMgY291bnQgYXMgaGlkZGVuIHdoZW4gdGhleQogIC8vIGFyZSBwYXJ0IG9mIGEgdmlzdWFsIGxpbmUgdGhhdCBzdGFydHMgd2l0aCBhbm90aGVyIGxpbmUsIG9yIHdoZW4KICAvLyB0aGV5IGFyZSBlbnRpcmVseSBjb3ZlcmVkIGJ5IGNvbGxhcHNlZCwgbm9uLXdpZGdldCBzcGFuLgogIGZ1bmN0aW9uIGxpbmVJc0hpZGRlbihkb2MsIGxpbmUpIHsKICAgIHZhciBzcHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zOwogICAgaWYgKHNwcykgZm9yICh2YXIgc3AsIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsgKytpKSB7CiAgICAgIHNwID0gc3BzW2ldOwogICAgICBpZiAoIXNwLm1hcmtlci5jb2xsYXBzZWQpIGNvbnRpbnVlOwogICAgICBpZiAoc3AuZnJvbSA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKHNwLm1hcmtlci53aWRnZXROb2RlKSBjb250aW51ZTsKICAgICAgaWYgKHNwLmZyb20gPT0gMCAmJiBzcC5tYXJrZXIuaW5jbHVzaXZlTGVmdCAmJiBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGxpbmUsIHNwKSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CiAgZnVuY3Rpb24gbGluZUlzSGlkZGVuSW5uZXIoZG9jLCBsaW5lLCBzcGFuKSB7CiAgICBpZiAoc3Bhbi50byA9PSBudWxsKSB7CiAgICAgIHZhciBlbmQgPSBzcGFuLm1hcmtlci5maW5kKDEsIHRydWUpOwogICAgICByZXR1cm4gbGluZUlzSGlkZGVuSW5uZXIoZG9jLCBlbmQubGluZSwgZ2V0TWFya2VkU3BhbkZvcihlbmQubGluZS5tYXJrZWRTcGFucywgc3Bhbi5tYXJrZXIpKTsKICAgIH0KICAgIGlmIChzcGFuLm1hcmtlci5pbmNsdXNpdmVSaWdodCAmJiBzcGFuLnRvID09IGxpbmUudGV4dC5sZW5ndGgpCiAgICAgIHJldHVybiB0cnVlOwogICAgZm9yICh2YXIgc3AsIGkgPSAwOyBpIDwgbGluZS5tYXJrZWRTcGFucy5sZW5ndGg7ICsraSkgewogICAgICBzcCA9IGxpbmUubWFya2VkU3BhbnNbaV07CiAgICAgIGlmIChzcC5tYXJrZXIuY29sbGFwc2VkICYmICFzcC5tYXJrZXIud2lkZ2V0Tm9kZSAmJiBzcC5mcm9tID09IHNwYW4udG8gJiYKICAgICAgICAgIChzcC50byA9PSBudWxsIHx8IHNwLnRvICE9IHNwYW4uZnJvbSkgJiYKICAgICAgICAgIChzcC5tYXJrZXIuaW5jbHVzaXZlTGVmdCB8fCBzcGFuLm1hcmtlci5pbmNsdXNpdmVSaWdodCkgJiYKICAgICAgICAgIGxpbmVJc0hpZGRlbklubmVyKGRvYywgbGluZSwgc3ApKSByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CgogIC8vIExJTkUgV0lER0VUUwoKICAvLyBMaW5lIHdpZGdldHMgYXJlIGJsb2NrIGVsZW1lbnRzIGRpc3BsYXllZCBhYm92ZSBvciBiZWxvdyBhIGxpbmUuCgogIHZhciBMaW5lV2lkZ2V0ID0gQ29kZU1pcnJvci5MaW5lV2lkZ2V0ID0gZnVuY3Rpb24oZG9jLCBub2RlLCBvcHRpb25zKSB7CiAgICBpZiAob3B0aW9ucykgZm9yICh2YXIgb3B0IGluIG9wdGlvbnMpIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KG9wdCkpCiAgICAgIHRoaXNbb3B0XSA9IG9wdGlvbnNbb3B0XTsKICAgIHRoaXMuZG9jID0gZG9jOwogICAgdGhpcy5ub2RlID0gbm9kZTsKICB9OwogIGV2ZW50TWl4aW4oTGluZVdpZGdldCk7CgogIGZ1bmN0aW9uIGFkanVzdFNjcm9sbFdoZW5BYm92ZVZpc2libGUoY20sIGxpbmUsIGRpZmYpIHsKICAgIGlmIChoZWlnaHRBdExpbmUobGluZSkgPCAoKGNtLmN1ck9wICYmIGNtLmN1ck9wLnNjcm9sbFRvcCkgfHwgY20uZG9jLnNjcm9sbFRvcCkpCiAgICAgIGFkZFRvU2Nyb2xsUG9zKGNtLCBudWxsLCBkaWZmKTsKICB9CgogIExpbmVXaWRnZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgY20gPSB0aGlzLmRvYy5jbSwgd3MgPSB0aGlzLmxpbmUud2lkZ2V0cywgbGluZSA9IHRoaXMubGluZSwgbm8gPSBsaW5lTm8obGluZSk7CiAgICBpZiAobm8gPT0gbnVsbCB8fCAhd3MpIHJldHVybjsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd3MubGVuZ3RoOyArK2kpIGlmICh3c1tpXSA9PSB0aGlzKSB3cy5zcGxpY2UoaS0tLCAxKTsKICAgIGlmICghd3MubGVuZ3RoKSBsaW5lLndpZGdldHMgPSBudWxsOwogICAgdmFyIGhlaWdodCA9IHdpZGdldEhlaWdodCh0aGlzKTsKICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgTWF0aC5tYXgoMCwgbGluZS5oZWlnaHQgLSBoZWlnaHQpKTsKICAgIGlmIChjbSkgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7CiAgICAgIGFkanVzdFNjcm9sbFdoZW5BYm92ZVZpc2libGUoY20sIGxpbmUsIC1oZWlnaHQpOwogICAgICByZWdMaW5lQ2hhbmdlKGNtLCBubywgIndpZGdldCIpOwogICAgfSk7CiAgfTsKICBMaW5lV2lkZ2V0LnByb3RvdHlwZS5jaGFuZ2VkID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgb2xkSCA9IHRoaXMuaGVpZ2h0LCBjbSA9IHRoaXMuZG9jLmNtLCBsaW5lID0gdGhpcy5saW5lOwogICAgdGhpcy5oZWlnaHQgPSBudWxsOwogICAgdmFyIGRpZmYgPSB3aWRnZXRIZWlnaHQodGhpcykgLSBvbGRIOwogICAgaWYgKCFkaWZmKSByZXR1cm47CiAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGxpbmUuaGVpZ2h0ICsgZGlmZik7CiAgICBpZiAoY20pIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgewogICAgICBjbS5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7CiAgICAgIGFkanVzdFNjcm9sbFdoZW5BYm92ZVZpc2libGUoY20sIGxpbmUsIGRpZmYpOwogICAgfSk7CiAgfTsKCiAgZnVuY3Rpb24gd2lkZ2V0SGVpZ2h0KHdpZGdldCkgewogICAgaWYgKHdpZGdldC5oZWlnaHQgIT0gbnVsbCkgcmV0dXJuIHdpZGdldC5oZWlnaHQ7CiAgICB2YXIgY20gPSB3aWRnZXQuZG9jLmNtOwogICAgaWYgKCFjbSkgcmV0dXJuIDA7CiAgICBpZiAoIWNvbnRhaW5zKGRvY3VtZW50LmJvZHksIHdpZGdldC5ub2RlKSkgewogICAgICB2YXIgcGFyZW50U3R5bGUgPSAicG9zaXRpb246IHJlbGF0aXZlOyI7CiAgICAgIGlmICh3aWRnZXQuY292ZXJHdXR0ZXIpCiAgICAgICAgcGFyZW50U3R5bGUgKz0gIm1hcmdpbi1sZWZ0OiAtIiArIGNtLmRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCArICJweDsiOwogICAgICBpZiAod2lkZ2V0Lm5vSFNjcm9sbCkKICAgICAgICBwYXJlbnRTdHlsZSArPSAid2lkdGg6ICIgKyBjbS5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGggKyAicHg7IjsKICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoY20uZGlzcGxheS5tZWFzdXJlLCBlbHQoImRpdiIsIFt3aWRnZXQubm9kZV0sIG51bGwsIHBhcmVudFN0eWxlKSk7CiAgICB9CiAgICByZXR1cm4gd2lkZ2V0LmhlaWdodCA9IHdpZGdldC5ub2RlLm9mZnNldEhlaWdodDsKICB9CgogIGZ1bmN0aW9uIGFkZExpbmVXaWRnZXQoZG9jLCBoYW5kbGUsIG5vZGUsIG9wdGlvbnMpIHsKICAgIHZhciB3aWRnZXQgPSBuZXcgTGluZVdpZGdldChkb2MsIG5vZGUsIG9wdGlvbnMpOwogICAgdmFyIGNtID0gZG9jLmNtOwogICAgaWYgKGNtICYmIHdpZGdldC5ub0hTY3JvbGwpIGNtLmRpc3BsYXkuYWxpZ25XaWRnZXRzID0gdHJ1ZTsKICAgIGNoYW5nZUxpbmUoZG9jLCBoYW5kbGUsICJ3aWRnZXQiLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgIHZhciB3aWRnZXRzID0gbGluZS53aWRnZXRzIHx8IChsaW5lLndpZGdldHMgPSBbXSk7CiAgICAgIGlmICh3aWRnZXQuaW5zZXJ0QXQgPT0gbnVsbCkgd2lkZ2V0cy5wdXNoKHdpZGdldCk7CiAgICAgIGVsc2Ugd2lkZ2V0cy5zcGxpY2UoTWF0aC5taW4od2lkZ2V0cy5sZW5ndGggLSAxLCBNYXRoLm1heCgwLCB3aWRnZXQuaW5zZXJ0QXQpKSwgMCwgd2lkZ2V0KTsKICAgICAgd2lkZ2V0LmxpbmUgPSBsaW5lOwogICAgICBpZiAoY20gJiYgIWxpbmVJc0hpZGRlbihkb2MsIGxpbmUpKSB7CiAgICAgICAgdmFyIGFib3ZlVmlzaWJsZSA9IGhlaWdodEF0TGluZShsaW5lKSA8IGRvYy5zY3JvbGxUb3A7CiAgICAgICAgdXBkYXRlTGluZUhlaWdodChsaW5lLCBsaW5lLmhlaWdodCArIHdpZGdldEhlaWdodCh3aWRnZXQpKTsKICAgICAgICBpZiAoYWJvdmVWaXNpYmxlKSBhZGRUb1Njcm9sbFBvcyhjbSwgbnVsbCwgd2lkZ2V0LmhlaWdodCk7CiAgICAgICAgY20uY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfSk7CiAgICByZXR1cm4gd2lkZ2V0OwogIH0KCiAgLy8gTElORSBEQVRBIFNUUlVDVFVSRQoKICAvLyBMaW5lIG9iamVjdHMuIFRoZXNlIGhvbGQgc3RhdGUgcmVsYXRlZCB0byBhIGxpbmUsIGluY2x1ZGluZwogIC8vIGhpZ2hsaWdodGluZyBpbmZvICh0aGUgc3R5bGVzIGFycmF5KS4KICB2YXIgTGluZSA9IENvZGVNaXJyb3IuTGluZSA9IGZ1bmN0aW9uKHRleHQsIG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkgewogICAgdGhpcy50ZXh0ID0gdGV4dDsKICAgIGF0dGFjaE1hcmtlZFNwYW5zKHRoaXMsIG1hcmtlZFNwYW5zKTsKICAgIHRoaXMuaGVpZ2h0ID0gZXN0aW1hdGVIZWlnaHQgPyBlc3RpbWF0ZUhlaWdodCh0aGlzKSA6IDE7CiAgfTsKICBldmVudE1peGluKExpbmUpOwogIExpbmUucHJvdG90eXBlLmxpbmVObyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbGluZU5vKHRoaXMpOyB9OwoKICAvLyBDaGFuZ2UgdGhlIGNvbnRlbnQgKHRleHQsIG1hcmtlcnMpIG9mIGEgbGluZS4gQXV0b21hdGljYWxseQogIC8vIGludmFsaWRhdGVzIGNhY2hlZCBpbmZvcm1hdGlvbiBhbmQgdHJpZXMgdG8gcmUtZXN0aW1hdGUgdGhlCiAgLy8gbGluZSdzIGhlaWdodC4KICBmdW5jdGlvbiB1cGRhdGVMaW5lKGxpbmUsIHRleHQsIG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkgewogICAgbGluZS50ZXh0ID0gdGV4dDsKICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIGxpbmUuc3RhdGVBZnRlciA9IG51bGw7CiAgICBpZiAobGluZS5zdHlsZXMpIGxpbmUuc3R5bGVzID0gbnVsbDsKICAgIGlmIChsaW5lLm9yZGVyICE9IG51bGwpIGxpbmUub3JkZXIgPSBudWxsOwogICAgZGV0YWNoTWFya2VkU3BhbnMobGluZSk7CiAgICBhdHRhY2hNYXJrZWRTcGFucyhsaW5lLCBtYXJrZWRTcGFucyk7CiAgICB2YXIgZXN0SGVpZ2h0ID0gZXN0aW1hdGVIZWlnaHQgPyBlc3RpbWF0ZUhlaWdodChsaW5lKSA6IDE7CiAgICBpZiAoZXN0SGVpZ2h0ICE9IGxpbmUuaGVpZ2h0KSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGVzdEhlaWdodCk7CiAgfQoKICAvLyBEZXRhY2ggYSBsaW5lIGZyb20gdGhlIGRvY3VtZW50IHRyZWUgYW5kIGl0cyBtYXJrZXJzLgogIGZ1bmN0aW9uIGNsZWFuVXBMaW5lKGxpbmUpIHsKICAgIGxpbmUucGFyZW50ID0gbnVsbDsKICAgIGRldGFjaE1hcmtlZFNwYW5zKGxpbmUpOwogIH0KCiAgZnVuY3Rpb24gZXh0cmFjdExpbmVDbGFzc2VzKHR5cGUsIG91dHB1dCkgewogICAgaWYgKHR5cGUpIGZvciAoOzspIHsKICAgICAgdmFyIGxpbmVDbGFzcyA9IHR5cGUubWF0Y2goLyg/Ol58XHMrKWxpbmUtKGJhY2tncm91bmQtKT8oXFMrKS8pOwogICAgICBpZiAoIWxpbmVDbGFzcykgYnJlYWs7CiAgICAgIHR5cGUgPSB0eXBlLnNsaWNlKDAsIGxpbmVDbGFzcy5pbmRleCkgKyB0eXBlLnNsaWNlKGxpbmVDbGFzcy5pbmRleCArIGxpbmVDbGFzc1swXS5sZW5ndGgpOwogICAgICB2YXIgcHJvcCA9IGxpbmVDbGFzc1sxXSA/ICJiZ0NsYXNzIiA6ICJ0ZXh0Q2xhc3MiOwogICAgICBpZiAob3V0cHV0W3Byb3BdID09IG51bGwpCiAgICAgICAgb3V0cHV0W3Byb3BdID0gbGluZUNsYXNzWzJdOwogICAgICBlbHNlIGlmICghKG5ldyBSZWdFeHAoIig/Ol58XHMpIiArIGxpbmVDbGFzc1syXSArICIoPzokfFxzKSIpKS50ZXN0KG91dHB1dFtwcm9wXSkpCiAgICAgICAgb3V0cHV0W3Byb3BdICs9ICIgIiArIGxpbmVDbGFzc1syXTsKICAgIH0KICAgIHJldHVybiB0eXBlOwogIH0KCiAgZnVuY3Rpb24gY2FsbEJsYW5rTGluZShtb2RlLCBzdGF0ZSkgewogICAgaWYgKG1vZGUuYmxhbmtMaW5lKSByZXR1cm4gbW9kZS5ibGFua0xpbmUoc3RhdGUpOwogICAgaWYgKCFtb2RlLmlubmVyTW9kZSkgcmV0dXJuOwogICAgdmFyIGlubmVyID0gQ29kZU1pcnJvci5pbm5lck1vZGUobW9kZSwgc3RhdGUpOwogICAgaWYgKGlubmVyLm1vZGUuYmxhbmtMaW5lKSByZXR1cm4gaW5uZXIubW9kZS5ibGFua0xpbmUoaW5uZXIuc3RhdGUpOwogIH0KCiAgZnVuY3Rpb24gcmVhZFRva2VuKG1vZGUsIHN0cmVhbSwgc3RhdGUsIGlubmVyKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHsKICAgICAgaWYgKGlubmVyKSBpbm5lclswXSA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKG1vZGUsIHN0YXRlKS5tb2RlOwogICAgICB2YXIgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpOwogICAgICBpZiAoc3RyZWFtLnBvcyA+IHN0cmVhbS5zdGFydCkgcmV0dXJuIHN0eWxlOwogICAgfQogICAgdGhyb3cgbmV3IEVycm9yKCJNb2RlICIgKyBtb2RlLm5hbWUgKyAiIGZhaWxlZCB0byBhZHZhbmNlIHN0cmVhbS4iKTsKICB9CgogIC8vIFV0aWxpdHkgZm9yIGdldFRva2VuQXQgYW5kIGdldExpbmVUb2tlbnMKICBmdW5jdGlvbiB0YWtlVG9rZW4oY20sIHBvcywgcHJlY2lzZSwgYXNBcnJheSkgewogICAgZnVuY3Rpb24gZ2V0T2JqKGNvcHkpIHsKICAgICAgcmV0dXJuIHtzdGFydDogc3RyZWFtLnN0YXJ0LCBlbmQ6IHN0cmVhbS5wb3MsCiAgICAgICAgICAgICAgc3RyaW5nOiBzdHJlYW0uY3VycmVudCgpLAogICAgICAgICAgICAgIHR5cGU6IHN0eWxlIHx8IG51bGwsCiAgICAgICAgICAgICAgc3RhdGU6IGNvcHkgPyBjb3B5U3RhdGUoZG9jLm1vZGUsIHN0YXRlKSA6IHN0YXRlfTsKICAgIH0KCiAgICB2YXIgZG9jID0gY20uZG9jLCBtb2RlID0gZG9jLm1vZGUsIHN0eWxlOwogICAgcG9zID0gY2xpcFBvcyhkb2MsIHBvcyk7CiAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBwb3MubGluZSksIHN0YXRlID0gZ2V0U3RhdGVCZWZvcmUoY20sIHBvcy5saW5lLCBwcmVjaXNlKTsKICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKGxpbmUudGV4dCwgY20ub3B0aW9ucy50YWJTaXplKSwgdG9rZW5zOwogICAgaWYgKGFzQXJyYXkpIHRva2VucyA9IFtdOwogICAgd2hpbGUgKChhc0FycmF5IHx8IHN0cmVhbS5wb3MgPCBwb3MuY2gpICYmICFzdHJlYW0uZW9sKCkpIHsKICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvczsKICAgICAgc3R5bGUgPSByZWFkVG9rZW4obW9kZSwgc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmIChhc0FycmF5KSB0b2tlbnMucHVzaChnZXRPYmoodHJ1ZSkpOwogICAgfQogICAgcmV0dXJuIGFzQXJyYXkgPyB0b2tlbnMgOiBnZXRPYmooKTsKICB9CgogIC8vIFJ1biB0aGUgZ2l2ZW4gbW9kZSdzIG1hcmtkb3duIG92ZXIgYSBsaW5lLCBjYWxsaW5nIGYgZm9yIGVhY2ggdG9rZW4uCiAgZnVuY3Rpb24gcnVuTW9kZShjbSwgdGV4dCwgbW9kZSwgc3RhdGUsIGYsIGxpbmVDbGFzc2VzLCBmb3JjZVRvRW5kKSB7CiAgICB2YXIgZmxhdHRlblNwYW5zID0gbW9kZS5mbGF0dGVuU3BhbnM7CiAgICBpZiAoZmxhdHRlblNwYW5zID09IG51bGwpIGZsYXR0ZW5TcGFucyA9IGNtLm9wdGlvbnMuZmxhdHRlblNwYW5zOwogICAgdmFyIGN1clN0YXJ0ID0gMCwgY3VyU3R5bGUgPSBudWxsOwogICAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0odGV4dCwgY20ub3B0aW9ucy50YWJTaXplKSwgc3R5bGU7CiAgICB2YXIgaW5uZXIgPSBjbS5vcHRpb25zLmFkZE1vZGVDbGFzcyAmJiBbbnVsbF07CiAgICBpZiAodGV4dCA9PSAiIikgZXh0cmFjdExpbmVDbGFzc2VzKGNhbGxCbGFua0xpbmUobW9kZSwgc3RhdGUpLCBsaW5lQ2xhc3Nlcyk7CiAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICBpZiAoc3RyZWFtLnBvcyA+IGNtLm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoKSB7CiAgICAgICAgZmxhdHRlblNwYW5zID0gZmFsc2U7CiAgICAgICAgaWYgKGZvcmNlVG9FbmQpIHByb2Nlc3NMaW5lKGNtLCB0ZXh0LCBzdGF0ZSwgc3RyZWFtLnBvcyk7CiAgICAgICAgc3RyZWFtLnBvcyA9IHRleHQubGVuZ3RoOwogICAgICAgIHN0eWxlID0gbnVsbDsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdHlsZSA9IGV4dHJhY3RMaW5lQ2xhc3NlcyhyZWFkVG9rZW4obW9kZSwgc3RyZWFtLCBzdGF0ZSwgaW5uZXIpLCBsaW5lQ2xhc3Nlcyk7CiAgICAgIH0KICAgICAgaWYgKGlubmVyKSB7CiAgICAgICAgdmFyIG1OYW1lID0gaW5uZXJbMF0ubmFtZTsKICAgICAgICBpZiAobU5hbWUpIHN0eWxlID0gIm0tIiArIChzdHlsZSA/IG1OYW1lICsgIiAiICsgc3R5bGUgOiBtTmFtZSk7CiAgICAgIH0KICAgICAgaWYgKCFmbGF0dGVuU3BhbnMgfHwgY3VyU3R5bGUgIT0gc3R5bGUpIHsKICAgICAgICB3aGlsZSAoY3VyU3RhcnQgPCBzdHJlYW0uc3RhcnQpIHsKICAgICAgICAgIGN1clN0YXJ0ID0gTWF0aC5taW4oc3RyZWFtLnN0YXJ0LCBjdXJTdGFydCArIDUwMDAwKTsKICAgICAgICAgIGYoY3VyU3RhcnQsIGN1clN0eWxlKTsKICAgICAgICB9CiAgICAgICAgY3VyU3R5bGUgPSBzdHlsZTsKICAgICAgfQogICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOwogICAgfQogICAgd2hpbGUgKGN1clN0YXJ0IDwgc3RyZWFtLnBvcykgewogICAgICAvLyBXZWJraXQgc2VlbXMgdG8gcmVmdXNlIHRvIHJlbmRlciB0ZXh0IG5vZGVzIGxvbmdlciB0aGFuIDU3NDQ0IGNoYXJhY3RlcnMKICAgICAgdmFyIHBvcyA9IE1hdGgubWluKHN0cmVhbS5wb3MsIGN1clN0YXJ0ICsgNTAwMDApOwogICAgICBmKHBvcywgY3VyU3R5bGUpOwogICAgICBjdXJTdGFydCA9IHBvczsKICAgIH0KICB9CgogIC8vIENvbXB1dGUgYSBzdHlsZSBhcnJheSAoYW4gYXJyYXkgc3RhcnRpbmcgd2l0aCBhIG1vZGUgZ2VuZXJhdGlvbgogIC8vIC0tIGZvciBpbnZhbGlkYXRpb24gLS0gZm9sbG93ZWQgYnkgcGFpcnMgb2YgZW5kIHBvc2l0aW9ucyBhbmQKICAvLyBzdHlsZSBzdHJpbmdzKSwgd2hpY2ggaXMgdXNlZCB0byBoaWdobGlnaHQgdGhlIHRva2VucyBvbiB0aGUKICAvLyBsaW5lLgogIGZ1bmN0aW9uIGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIHN0YXRlLCBmb3JjZVRvRW5kKSB7CiAgICAvLyBBIHN0eWxlcyBhcnJheSBhbHdheXMgc3RhcnRzIHdpdGggYSBudW1iZXIgaWRlbnRpZnlpbmcgdGhlCiAgICAvLyBtb2RlL292ZXJsYXlzIHRoYXQgaXQgaXMgYmFzZWQgb24gKGZvciBlYXN5IGludmFsaWRhdGlvbikuCiAgICB2YXIgc3QgPSBbY20uc3RhdGUubW9kZUdlbl0sIGxpbmVDbGFzc2VzID0ge307CiAgICAvLyBDb21wdXRlIHRoZSBiYXNlIGFycmF5IG9mIHN0eWxlcwogICAgcnVuTW9kZShjbSwgbGluZS50ZXh0LCBjbS5kb2MubW9kZSwgc3RhdGUsIGZ1bmN0aW9uKGVuZCwgc3R5bGUpIHsKICAgICAgc3QucHVzaChlbmQsIHN0eWxlKTsKICAgIH0sIGxpbmVDbGFzc2VzLCBmb3JjZVRvRW5kKTsKCiAgICAvLyBSdW4gb3ZlcmxheXMsIGFkanVzdCBzdHlsZSBhcnJheS4KICAgIGZvciAodmFyIG8gPSAwOyBvIDwgY20uc3RhdGUub3ZlcmxheXMubGVuZ3RoOyArK28pIHsKICAgICAgdmFyIG92ZXJsYXkgPSBjbS5zdGF0ZS5vdmVybGF5c1tvXSwgaSA9IDEsIGF0ID0gMDsKICAgICAgcnVuTW9kZShjbSwgbGluZS50ZXh0LCBvdmVybGF5Lm1vZGUsIHRydWUsIGZ1bmN0aW9uKGVuZCwgc3R5bGUpIHsKICAgICAgICB2YXIgc3RhcnQgPSBpOwogICAgICAgIC8vIEVuc3VyZSB0aGVyZSdzIGEgdG9rZW4gZW5kIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLCBhbmQgdGhhdCBpIHBvaW50cyBhdCBpdAogICAgICAgIHdoaWxlIChhdCA8IGVuZCkgewogICAgICAgICAgdmFyIGlfZW5kID0gc3RbaV07CiAgICAgICAgICBpZiAoaV9lbmQgPiBlbmQpCiAgICAgICAgICAgIHN0LnNwbGljZShpLCAxLCBlbmQsIHN0W2krMV0sIGlfZW5kKTsKICAgICAgICAgIGkgKz0gMjsKICAgICAgICAgIGF0ID0gTWF0aC5taW4oZW5kLCBpX2VuZCk7CiAgICAgICAgfQogICAgICAgIGlmICghc3R5bGUpIHJldHVybjsKICAgICAgICBpZiAob3ZlcmxheS5vcGFxdWUpIHsKICAgICAgICAgIHN0LnNwbGljZShzdGFydCwgaSAtIHN0YXJ0LCBlbmQsICJjbS1vdmVybGF5ICIgKyBzdHlsZSk7CiAgICAgICAgICBpID0gc3RhcnQgKyAyOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBpOyBzdGFydCArPSAyKSB7CiAgICAgICAgICAgIHZhciBjdXIgPSBzdFtzdGFydCsxXTsKICAgICAgICAgICAgc3Rbc3RhcnQrMV0gPSAoY3VyID8gY3VyICsgIiAiIDogIiIpICsgImNtLW92ZXJsYXkgIiArIHN0eWxlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwgbGluZUNsYXNzZXMpOwogICAgfQoKICAgIHJldHVybiB7c3R5bGVzOiBzdCwgY2xhc3NlczogbGluZUNsYXNzZXMuYmdDbGFzcyB8fCBsaW5lQ2xhc3Nlcy50ZXh0Q2xhc3MgPyBsaW5lQ2xhc3NlcyA6IG51bGx9OwogIH0KCiAgZnVuY3Rpb24gZ2V0TGluZVN0eWxlcyhjbSwgbGluZSwgdXBkYXRlRnJvbnRpZXIpIHsKICAgIGlmICghbGluZS5zdHlsZXMgfHwgbGluZS5zdHlsZXNbMF0gIT0gY20uc3RhdGUubW9kZUdlbikgewogICAgICB2YXIgc3RhdGUgPSBnZXRTdGF0ZUJlZm9yZShjbSwgbGluZU5vKGxpbmUpKTsKICAgICAgdmFyIHJlc3VsdCA9IGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIGxpbmUudGV4dC5sZW5ndGggPiBjbS5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aCA/IGNvcHlTdGF0ZShjbS5kb2MubW9kZSwgc3RhdGUpIDogc3RhdGUpOwogICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBzdGF0ZTsKICAgICAgbGluZS5zdHlsZXMgPSByZXN1bHQuc3R5bGVzOwogICAgICBpZiAocmVzdWx0LmNsYXNzZXMpIGxpbmUuc3R5bGVDbGFzc2VzID0gcmVzdWx0LmNsYXNzZXM7CiAgICAgIGVsc2UgaWYgKGxpbmUuc3R5bGVDbGFzc2VzKSBsaW5lLnN0eWxlQ2xhc3NlcyA9IG51bGw7CiAgICAgIGlmICh1cGRhdGVGcm9udGllciA9PT0gY20uZG9jLmZyb250aWVyKSBjbS5kb2MuZnJvbnRpZXIrKzsKICAgIH0KICAgIHJldHVybiBsaW5lLnN0eWxlczsKICB9CgogIC8vIExpZ2h0d2VpZ2h0IGZvcm0gb2YgaGlnaGxpZ2h0IC0tIHByb2NlZWQgb3ZlciB0aGlzIGxpbmUgYW5kCiAgLy8gdXBkYXRlIHN0YXRlLCBidXQgZG9uJ3Qgc2F2ZSBhIHN0eWxlIGFycmF5LiBVc2VkIGZvciBsaW5lcyB0aGF0CiAgLy8gYXJlbid0IGN1cnJlbnRseSB2aXNpYmxlLgogIGZ1bmN0aW9uIHByb2Nlc3NMaW5lKGNtLCB0ZXh0LCBzdGF0ZSwgc3RhcnRBdCkgewogICAgdmFyIG1vZGUgPSBjbS5kb2MubW9kZTsKICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKHRleHQsIGNtLm9wdGlvbnMudGFiU2l6ZSk7CiAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zID0gc3RhcnRBdCB8fCAwOwogICAgaWYgKHRleHQgPT0gIiIpIGNhbGxCbGFua0xpbmUobW9kZSwgc3RhdGUpOwogICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgcmVhZFRva2VuKG1vZGUsIHN0cmVhbSwgc3RhdGUpOwogICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOwogICAgfQogIH0KCiAgLy8gQ29udmVydCBhIHN0eWxlIGFzIHJldHVybmVkIGJ5IGEgbW9kZSAoZWl0aGVyIG51bGwsIG9yIGEgc3RyaW5nCiAgLy8gY29udGFpbmluZyBvbmUgb3IgbW9yZSBzdHlsZXMpIHRvIGEgQ1NTIHN0eWxlLiBUaGlzIGlzIGNhY2hlZCwKICAvLyBhbmQgYWxzbyBsb29rcyBmb3IgbGluZS13aWRlIHN0eWxlcy4KICB2YXIgc3R5bGVUb0NsYXNzQ2FjaGUgPSB7fSwgc3R5bGVUb0NsYXNzQ2FjaGVXaXRoTW9kZSA9IHt9OwogIGZ1bmN0aW9uIGludGVycHJldFRva2VuU3R5bGUoc3R5bGUsIG9wdGlvbnMpIHsKICAgIGlmICghc3R5bGUgfHwgL15ccyokLy50ZXN0KHN0eWxlKSkgcmV0dXJuIG51bGw7CiAgICB2YXIgY2FjaGUgPSBvcHRpb25zLmFkZE1vZGVDbGFzcyA/IHN0eWxlVG9DbGFzc0NhY2hlV2l0aE1vZGUgOiBzdHlsZVRvQ2xhc3NDYWNoZTsKICAgIHJldHVybiBjYWNoZVtzdHlsZV0gfHwKICAgICAgKGNhY2hlW3N0eWxlXSA9IHN0eWxlLnJlcGxhY2UoL1xTKy9nLCAiY20tJCYiKSk7CiAgfQoKICAvLyBSZW5kZXIgdGhlIERPTSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGV4dCBvZiBhIGxpbmUuIEFsc28gYnVpbGRzCiAgLy8gdXAgYSAnbGluZSBtYXAnLCB3aGljaCBwb2ludHMgYXQgdGhlIERPTSBub2RlcyB0aGF0IHJlcHJlc2VudAogIC8vIHNwZWNpZmljIHN0cmV0Y2hlcyBvZiB0ZXh0LCBhbmQgaXMgdXNlZCBieSB0aGUgbWVhc3VyaW5nIGNvZGUuCiAgLy8gVGhlIHJldHVybmVkIG9iamVjdCBjb250YWlucyB0aGUgRE9NIG5vZGUsIHRoaXMgbWFwLCBhbmQKICAvLyBpbmZvcm1hdGlvbiBhYm91dCBsaW5lLXdpZGUgc3R5bGVzIHRoYXQgd2VyZSBzZXQgYnkgdGhlIG1vZGUuCiAgZnVuY3Rpb24gYnVpbGRMaW5lQ29udGVudChjbSwgbGluZVZpZXcpIHsKICAgIC8vIFRoZSBwYWRkaW5nLXJpZ2h0IGZvcmNlcyB0aGUgZWxlbWVudCB0byBoYXZlIGEgJ2JvcmRlcicsIHdoaWNoCiAgICAvLyBpcyBuZWVkZWQgb24gV2Via2l0IHRvIGJlIGFibGUgdG8gZ2V0IGxpbmUtbGV2ZWwgYm91bmRpbmcKICAgIC8vIHJlY3RhbmdsZXMgZm9yIGl0IChpbiBtZWFzdXJlQ2hhcikuCiAgICB2YXIgY29udGVudCA9IGVsdCgic3BhbiIsIG51bGwsIG51bGwsIHdlYmtpdCA/ICJwYWRkaW5nLXJpZ2h0OiAuMXB4IiA6IG51bGwpOwogICAgdmFyIGJ1aWxkZXIgPSB7cHJlOiBlbHQoInByZSIsIFtjb250ZW50XSwgIkNvZGVNaXJyb3ItbGluZSIpLCBjb250ZW50OiBjb250ZW50LAogICAgICAgICAgICAgICAgICAgY29sOiAwLCBwb3M6IDAsIGNtOiBjbSwKICAgICAgICAgICAgICAgICAgIHNwbGl0U3BhY2VzOiAoaWUgfHwgd2Via2l0KSAmJiBjbS5nZXRPcHRpb24oImxpbmVXcmFwcGluZyIpfTsKICAgIGxpbmVWaWV3Lm1lYXN1cmUgPSB7fTsKCiAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGxvZ2ljYWwgbGluZXMgdGhhdCBtYWtlIHVwIHRoaXMgdmlzdWFsIGxpbmUuCiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSAobGluZVZpZXcucmVzdCA/IGxpbmVWaWV3LnJlc3QubGVuZ3RoIDogMCk7IGkrKykgewogICAgICB2YXIgbGluZSA9IGkgPyBsaW5lVmlldy5yZXN0W2kgLSAxXSA6IGxpbmVWaWV3LmxpbmUsIG9yZGVyOwogICAgICBidWlsZGVyLnBvcyA9IDA7CiAgICAgIGJ1aWxkZXIuYWRkVG9rZW4gPSBidWlsZFRva2VuOwogICAgICAvLyBPcHRpb25hbGx5IHdpcmUgaW4gc29tZSBoYWNrcyBpbnRvIHRoZSB0b2tlbi1yZW5kZXJpbmcKICAgICAgLy8gYWxnb3JpdGhtLCB0byBkZWFsIHdpdGggYnJvd3NlciBxdWlya3MuCiAgICAgIGlmIChoYXNCYWRCaWRpUmVjdHMoY20uZGlzcGxheS5tZWFzdXJlKSAmJiAob3JkZXIgPSBnZXRPcmRlcihsaW5lKSkpCiAgICAgICAgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkVG9rZW5CYWRCaWRpKGJ1aWxkZXIuYWRkVG9rZW4sIG9yZGVyKTsKICAgICAgYnVpbGRlci5tYXAgPSBbXTsKICAgICAgdmFyIGFsbG93RnJvbnRpZXJVcGRhdGUgPSBsaW5lVmlldyAhPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgJiYgbGluZU5vKGxpbmUpOwogICAgICBpbnNlcnRMaW5lQ29udGVudChsaW5lLCBidWlsZGVyLCBnZXRMaW5lU3R5bGVzKGNtLCBsaW5lLCBhbGxvd0Zyb250aWVyVXBkYXRlKSk7CiAgICAgIGlmIChsaW5lLnN0eWxlQ2xhc3NlcykgewogICAgICAgIGlmIChsaW5lLnN0eWxlQ2xhc3Nlcy5iZ0NsYXNzKQogICAgICAgICAgYnVpbGRlci5iZ0NsYXNzID0gam9pbkNsYXNzZXMobGluZS5zdHlsZUNsYXNzZXMuYmdDbGFzcywgYnVpbGRlci5iZ0NsYXNzIHx8ICIiKTsKICAgICAgICBpZiAobGluZS5zdHlsZUNsYXNzZXMudGV4dENsYXNzKQogICAgICAgICAgYnVpbGRlci50ZXh0Q2xhc3MgPSBqb2luQ2xhc3NlcyhsaW5lLnN0eWxlQ2xhc3Nlcy50ZXh0Q2xhc3MsIGJ1aWxkZXIudGV4dENsYXNzIHx8ICIiKTsKICAgICAgfQoKICAgICAgLy8gRW5zdXJlIGF0IGxlYXN0IGEgc2luZ2xlIG5vZGUgaXMgcHJlc2VudCwgZm9yIG1lYXN1cmluZy4KICAgICAgaWYgKGJ1aWxkZXIubWFwLmxlbmd0aCA9PSAwKQogICAgICAgIGJ1aWxkZXIubWFwLnB1c2goMCwgMCwgYnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKHplcm9XaWR0aEVsZW1lbnQoY20uZGlzcGxheS5tZWFzdXJlKSkpOwoKICAgICAgLy8gU3RvcmUgdGhlIG1hcCBhbmQgYSBjYWNoZSBvYmplY3QgZm9yIHRoZSBjdXJyZW50IGxvZ2ljYWwgbGluZQogICAgICBpZiAoaSA9PSAwKSB7CiAgICAgICAgbGluZVZpZXcubWVhc3VyZS5tYXAgPSBidWlsZGVyLm1hcDsKICAgICAgICBsaW5lVmlldy5tZWFzdXJlLmNhY2hlID0ge307CiAgICAgIH0gZWxzZSB7CiAgICAgICAgKGxpbmVWaWV3Lm1lYXN1cmUubWFwcyB8fCAobGluZVZpZXcubWVhc3VyZS5tYXBzID0gW10pKS5wdXNoKGJ1aWxkZXIubWFwKTsKICAgICAgICAobGluZVZpZXcubWVhc3VyZS5jYWNoZXMgfHwgKGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzID0gW10pKS5wdXNoKHt9KTsKICAgICAgfQogICAgfQoKICAgIC8vIFNlZSBpc3N1ZSAjMjkwMQogICAgaWYgKHdlYmtpdCAmJiAvXGJjbS10YWJcYi8udGVzdChidWlsZGVyLmNvbnRlbnQubGFzdENoaWxkLmNsYXNzTmFtZSkpCiAgICAgIGJ1aWxkZXIuY29udGVudC5jbGFzc05hbWUgPSAiY20tdGFiLXdyYXAtaGFjayI7CgogICAgc2lnbmFsKGNtLCAicmVuZGVyTGluZSIsIGNtLCBsaW5lVmlldy5saW5lLCBidWlsZGVyLnByZSk7CiAgICBpZiAoYnVpbGRlci5wcmUuY2xhc3NOYW1lKQogICAgICBidWlsZGVyLnRleHRDbGFzcyA9IGpvaW5DbGFzc2VzKGJ1aWxkZXIucHJlLmNsYXNzTmFtZSwgYnVpbGRlci50ZXh0Q2xhc3MgfHwgIiIpOwoKICAgIHJldHVybiBidWlsZGVyOwogIH0KCiAgZnVuY3Rpb24gZGVmYXVsdFNwZWNpYWxDaGFyUGxhY2Vob2xkZXIoY2gpIHsKICAgIHZhciB0b2tlbiA9IGVsdCgic3BhbiIsICJcdTIwMjIiLCAiY20taW52YWxpZGNoYXIiKTsKICAgIHRva2VuLnRpdGxlID0gIlxcdSIgKyBjaC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTsKICAgIHRva2VuLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIHRva2VuLnRpdGxlKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vIEJ1aWxkIHVwIHRoZSBET00gcmVwcmVzZW50YXRpb24gZm9yIGEgc2luZ2xlIHRva2VuLCBhbmQgYWRkIGl0IHRvCiAgLy8gdGhlIGxpbmUgbWFwLiBUYWtlcyBjYXJlIHRvIHJlbmRlciBzcGVjaWFsIGNoYXJhY3RlcnMgc2VwYXJhdGVseS4KICBmdW5jdGlvbiBidWlsZFRva2VuKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUsIGNzcykgewogICAgaWYgKCF0ZXh0KSByZXR1cm47CiAgICB2YXIgZGlzcGxheVRleHQgPSBidWlsZGVyLnNwbGl0U3BhY2VzID8gdGV4dC5yZXBsYWNlKC8gezMsfS9nLCBzcGxpdFNwYWNlcykgOiB0ZXh0OwogICAgdmFyIHNwZWNpYWwgPSBidWlsZGVyLmNtLnN0YXRlLnNwZWNpYWxDaGFycywgbXVzdFdyYXAgPSBmYWxzZTsKICAgIGlmICghc3BlY2lhbC50ZXN0KHRleHQpKSB7CiAgICAgIGJ1aWxkZXIuY29sICs9IHRleHQubGVuZ3RoOwogICAgICB2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRpc3BsYXlUZXh0KTsKICAgICAgYnVpbGRlci5tYXAucHVzaChidWlsZGVyLnBvcywgYnVpbGRlci5wb3MgKyB0ZXh0Lmxlbmd0aCwgY29udGVudCk7CiAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOSkgbXVzdFdyYXAgPSB0cnVlOwogICAgICBidWlsZGVyLnBvcyArPSB0ZXh0Lmxlbmd0aDsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLCBwb3MgPSAwOwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIHNwZWNpYWwubGFzdEluZGV4ID0gcG9zOwogICAgICAgIHZhciBtID0gc3BlY2lhbC5leGVjKHRleHQpOwogICAgICAgIHZhciBza2lwcGVkID0gbSA/IG0uaW5kZXggLSBwb3MgOiB0ZXh0Lmxlbmd0aCAtIHBvczsKICAgICAgICBpZiAoc2tpcHBlZCkgewogICAgICAgICAgdmFyIHR4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRpc3BsYXlUZXh0LnNsaWNlKHBvcywgcG9zICsgc2tpcHBlZCkpOwogICAgICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSBjb250ZW50LmFwcGVuZENoaWxkKGVsdCgic3BhbiIsIFt0eHRdKSk7CiAgICAgICAgICBlbHNlIGNvbnRlbnQuYXBwZW5kQ2hpbGQodHh0KTsKICAgICAgICAgIGJ1aWxkZXIubWFwLnB1c2goYnVpbGRlci5wb3MsIGJ1aWxkZXIucG9zICsgc2tpcHBlZCwgdHh0KTsKICAgICAgICAgIGJ1aWxkZXIuY29sICs9IHNraXBwZWQ7CiAgICAgICAgICBidWlsZGVyLnBvcyArPSBza2lwcGVkOwogICAgICAgIH0KICAgICAgICBpZiAoIW0pIGJyZWFrOwogICAgICAgIHBvcyArPSBza2lwcGVkICsgMTsKICAgICAgICBpZiAobVswXSA9PSAiXHQiKSB7CiAgICAgICAgICB2YXIgdGFiU2l6ZSA9IGJ1aWxkZXIuY20ub3B0aW9ucy50YWJTaXplLCB0YWJXaWR0aCA9IHRhYlNpemUgLSBidWlsZGVyLmNvbCAlIHRhYlNpemU7CiAgICAgICAgICB2YXIgdHh0ID0gY29udGVudC5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCBzcGFjZVN0cih0YWJXaWR0aCksICJjbS10YWIiKSk7CiAgICAgICAgICB0eHQuc2V0QXR0cmlidXRlKCJyb2xlIiwgInByZXNlbnRhdGlvbiIpOwogICAgICAgICAgdHh0LnNldEF0dHJpYnV0ZSgiY20tdGV4dCIsICJcdCIpOwogICAgICAgICAgYnVpbGRlci5jb2wgKz0gdGFiV2lkdGg7CiAgICAgICAgfSBlbHNlIGlmIChtWzBdID09ICJcciIgfHwgbVswXSA9PSAiXG4iKSB7CiAgICAgICAgICB2YXIgdHh0ID0gY29udGVudC5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCBtWzBdID09ICJcciIgPyAiXHUyNDBkIiA6ICJcdTI0MjQiLCAiY20taW52YWxpZGNoYXIiKSk7CiAgICAgICAgICB0eHQuc2V0QXR0cmlidXRlKCJjbS10ZXh0IiwgbVswXSk7CiAgICAgICAgICBidWlsZGVyLmNvbCArPSAxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgdHh0ID0gYnVpbGRlci5jbS5vcHRpb25zLnNwZWNpYWxDaGFyUGxhY2Vob2xkZXIobVswXSk7CiAgICAgICAgICB0eHQuc2V0QXR0cmlidXRlKCJjbS10ZXh0IiwgbVswXSk7CiAgICAgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDkpIGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KCJzcGFuIiwgW3R4dF0pKTsKICAgICAgICAgIGVsc2UgY29udGVudC5hcHBlbmRDaGlsZCh0eHQpOwogICAgICAgICAgYnVpbGRlci5jb2wgKz0gMTsKICAgICAgICB9CiAgICAgICAgYnVpbGRlci5tYXAucHVzaChidWlsZGVyLnBvcywgYnVpbGRlci5wb3MgKyAxLCB0eHQpOwogICAgICAgIGJ1aWxkZXIucG9zKys7CiAgICAgIH0KICAgIH0KICAgIGlmIChzdHlsZSB8fCBzdGFydFN0eWxlIHx8IGVuZFN0eWxlIHx8IG11c3RXcmFwIHx8IGNzcykgewogICAgICB2YXIgZnVsbFN0eWxlID0gc3R5bGUgfHwgIiI7CiAgICAgIGlmIChzdGFydFN0eWxlKSBmdWxsU3R5bGUgKz0gc3RhcnRTdHlsZTsKICAgICAgaWYgKGVuZFN0eWxlKSBmdWxsU3R5bGUgKz0gZW5kU3R5bGU7CiAgICAgIHZhciB0b2tlbiA9IGVsdCgic3BhbiIsIFtjb250ZW50XSwgZnVsbFN0eWxlLCBjc3MpOwogICAgICBpZiAodGl0bGUpIHRva2VuLnRpdGxlID0gdGl0bGU7CiAgICAgIHJldHVybiBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQodG9rZW4pOwogICAgfQogICAgYnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKGNvbnRlbnQpOwogIH0KCiAgZnVuY3Rpb24gc3BsaXRTcGFjZXMob2xkKSB7CiAgICB2YXIgb3V0ID0gIiAiOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGQubGVuZ3RoIC0gMjsgKytpKSBvdXQgKz0gaSAlIDIgPyAiICIgOiAiXHUwMGEwIjsKICAgIG91dCArPSAiICI7CiAgICByZXR1cm4gb3V0OwogIH0KCiAgLy8gV29yayBhcm91bmQgbm9uc2Vuc2UgZGltZW5zaW9ucyBiZWluZyByZXBvcnRlZCBmb3Igc3RyZXRjaGVzIG9mCiAgLy8gcmlnaHQtdG8tbGVmdCB0ZXh0LgogIGZ1bmN0aW9uIGJ1aWxkVG9rZW5CYWRCaWRpKGlubmVyLCBvcmRlcikgewogICAgcmV0dXJuIGZ1bmN0aW9uKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUsIGNzcykgewogICAgICBzdHlsZSA9IHN0eWxlID8gc3R5bGUgKyAiIGNtLWZvcmNlLWJvcmRlciIgOiAiY20tZm9yY2UtYm9yZGVyIjsKICAgICAgdmFyIHN0YXJ0ID0gYnVpbGRlci5wb3MsIGVuZCA9IHN0YXJ0ICsgdGV4dC5sZW5ndGg7CiAgICAgIGZvciAoOzspIHsKICAgICAgICAvLyBGaW5kIHRoZSBwYXJ0IHRoYXQgb3ZlcmxhcHMgd2l0aCB0aGUgc3RhcnQgb2YgdGhpcyB0ZXh0CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmRlci5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIHBhcnQgPSBvcmRlcltpXTsKICAgICAgICAgIGlmIChwYXJ0LnRvID4gc3RhcnQgJiYgcGFydC5mcm9tIDw9IHN0YXJ0KSBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKHBhcnQudG8gPj0gZW5kKSByZXR1cm4gaW5uZXIoYnVpbGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRsZSwgY3NzKTsKICAgICAgICBpbm5lcihidWlsZGVyLCB0ZXh0LnNsaWNlKDAsIHBhcnQudG8gLSBzdGFydCksIHN0eWxlLCBzdGFydFN0eWxlLCBudWxsLCB0aXRsZSwgY3NzKTsKICAgICAgICBzdGFydFN0eWxlID0gbnVsbDsKICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZShwYXJ0LnRvIC0gc3RhcnQpOwogICAgICAgIHN0YXJ0ID0gcGFydC50bzsKICAgICAgfQogICAgfTsKICB9CgogIGZ1bmN0aW9uIGJ1aWxkQ29sbGFwc2VkU3BhbihidWlsZGVyLCBzaXplLCBtYXJrZXIsIGlnbm9yZVdpZGdldCkgewogICAgdmFyIHdpZGdldCA9ICFpZ25vcmVXaWRnZXQgJiYgbWFya2VyLndpZGdldE5vZGU7CiAgICBpZiAod2lkZ2V0KSBidWlsZGVyLm1hcC5wdXNoKGJ1aWxkZXIucG9zLCBidWlsZGVyLnBvcyArIHNpemUsIHdpZGdldCk7CiAgICBpZiAoIWlnbm9yZVdpZGdldCAmJiBidWlsZGVyLmNtLmRpc3BsYXkuaW5wdXQubmVlZHNDb250ZW50QXR0cmlidXRlKSB7CiAgICAgIGlmICghd2lkZ2V0KQogICAgICAgIHdpZGdldCA9IGJ1aWxkZXIuY29udGVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIikpOwogICAgICB3aWRnZXQuc2V0QXR0cmlidXRlKCJjbS1tYXJrZXIiLCBtYXJrZXIuaWQpOwogICAgfQogICAgaWYgKHdpZGdldCkgewogICAgICBidWlsZGVyLmNtLmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0YWJsZSh3aWRnZXQpOwogICAgICBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQod2lkZ2V0KTsKICAgIH0KICAgIGJ1aWxkZXIucG9zICs9IHNpemU7CiAgfQoKICAvLyBPdXRwdXRzIGEgbnVtYmVyIG9mIHNwYW5zIHRvIG1ha2UgdXAgYSBsaW5lLCB0YWtpbmcgaGlnaGxpZ2h0aW5nCiAgLy8gYW5kIG1hcmtlZCB0ZXh0IGludG8gYWNjb3VudC4KICBmdW5jdGlvbiBpbnNlcnRMaW5lQ29udGVudChsaW5lLCBidWlsZGVyLCBzdHlsZXMpIHsKICAgIHZhciBzcGFucyA9IGxpbmUubWFya2VkU3BhbnMsIGFsbFRleHQgPSBsaW5lLnRleHQsIGF0ID0gMDsKICAgIGlmICghc3BhbnMpIHsKICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKz0yKQogICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4oYnVpbGRlciwgYWxsVGV4dC5zbGljZShhdCwgYXQgPSBzdHlsZXNbaV0pLCBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlc1tpKzFdLCBidWlsZGVyLmNtLm9wdGlvbnMpKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHZhciBsZW4gPSBhbGxUZXh0Lmxlbmd0aCwgcG9zID0gMCwgaSA9IDEsIHRleHQgPSAiIiwgc3R5bGUsIGNzczsKICAgIHZhciBuZXh0Q2hhbmdlID0gMCwgc3BhblN0eWxlLCBzcGFuRW5kU3R5bGUsIHNwYW5TdGFydFN0eWxlLCB0aXRsZSwgY29sbGFwc2VkOwogICAgZm9yICg7OykgewogICAgICBpZiAobmV4dENoYW5nZSA9PSBwb3MpIHsgLy8gVXBkYXRlIGN1cnJlbnQgbWFya2VyIHNldAogICAgICAgIHNwYW5TdHlsZSA9IHNwYW5FbmRTdHlsZSA9IHNwYW5TdGFydFN0eWxlID0gdGl0bGUgPSBjc3MgPSAiIjsKICAgICAgICBjb2xsYXBzZWQgPSBudWxsOyBuZXh0Q2hhbmdlID0gSW5maW5pdHk7CiAgICAgICAgdmFyIGZvdW5kQm9va21hcmtzID0gW107CiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzcGFucy5sZW5ndGg7ICsraikgewogICAgICAgICAgdmFyIHNwID0gc3BhbnNbal0sIG0gPSBzcC5tYXJrZXI7CiAgICAgICAgICBpZiAobS50eXBlID09ICJib29rbWFyayIgJiYgc3AuZnJvbSA9PSBwb3MgJiYgbS53aWRnZXROb2RlKSB7CiAgICAgICAgICAgIGZvdW5kQm9va21hcmtzLnB1c2gobSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHNwLmZyb20gPD0gcG9zICYmIChzcC50byA9PSBudWxsIHx8IHNwLnRvID4gcG9zIHx8IG0uY29sbGFwc2VkICYmIHNwLnRvID09IHBvcyAmJiBzcC5mcm9tID09IHBvcykpIHsKICAgICAgICAgICAgaWYgKHNwLnRvICE9IG51bGwgJiYgc3AudG8gIT0gcG9zICYmIG5leHRDaGFuZ2UgPiBzcC50bykgewogICAgICAgICAgICAgIG5leHRDaGFuZ2UgPSBzcC50bzsKICAgICAgICAgICAgICBzcGFuRW5kU3R5bGUgPSAiIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobS5jbGFzc05hbWUpIHNwYW5TdHlsZSArPSAiICIgKyBtLmNsYXNzTmFtZTsKICAgICAgICAgICAgaWYgKG0uY3NzKSBjc3MgPSAoY3NzID8gY3NzICsgIjsiIDogIiIpICsgbS5jc3M7CiAgICAgICAgICAgIGlmIChtLnN0YXJ0U3R5bGUgJiYgc3AuZnJvbSA9PSBwb3MpIHNwYW5TdGFydFN0eWxlICs9ICIgIiArIG0uc3RhcnRTdHlsZTsKICAgICAgICAgICAgaWYgKG0uZW5kU3R5bGUgJiYgc3AudG8gPT0gbmV4dENoYW5nZSkgc3BhbkVuZFN0eWxlICs9ICIgIiArIG0uZW5kU3R5bGU7CiAgICAgICAgICAgIGlmIChtLnRpdGxlICYmICF0aXRsZSkgdGl0bGUgPSBtLnRpdGxlOwogICAgICAgICAgICBpZiAobS5jb2xsYXBzZWQgJiYgKCFjb2xsYXBzZWQgfHwgY29tcGFyZUNvbGxhcHNlZE1hcmtlcnMoY29sbGFwc2VkLm1hcmtlciwgbSkgPCAwKSkKICAgICAgICAgICAgICBjb2xsYXBzZWQgPSBzcDsKICAgICAgICAgIH0gZWxzZSBpZiAoc3AuZnJvbSA+IHBvcyAmJiBuZXh0Q2hhbmdlID4gc3AuZnJvbSkgewogICAgICAgICAgICBuZXh0Q2hhbmdlID0gc3AuZnJvbTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGNvbGxhcHNlZCAmJiAoY29sbGFwc2VkLmZyb20gfHwgMCkgPT0gcG9zKSB7CiAgICAgICAgICBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgKGNvbGxhcHNlZC50byA9PSBudWxsID8gbGVuICsgMSA6IGNvbGxhcHNlZC50bykgLSBwb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkLm1hcmtlciwgY29sbGFwc2VkLmZyb20gPT0gbnVsbCk7CiAgICAgICAgICBpZiAoY29sbGFwc2VkLnRvID09IG51bGwpIHJldHVybjsKICAgICAgICAgIGlmIChjb2xsYXBzZWQudG8gPT0gcG9zKSBjb2xsYXBzZWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFjb2xsYXBzZWQgJiYgZm91bmRCb29rbWFya3MubGVuZ3RoKSBmb3IgKHZhciBqID0gMDsgaiA8IGZvdW5kQm9va21hcmtzLmxlbmd0aDsgKytqKQogICAgICAgICAgYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIDAsIGZvdW5kQm9va21hcmtzW2pdKTsKICAgICAgfQogICAgICBpZiAocG9zID49IGxlbikgYnJlYWs7CgogICAgICB2YXIgdXB0byA9IE1hdGgubWluKGxlbiwgbmV4dENoYW5nZSk7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgIHZhciBlbmQgPSBwb3MgKyB0ZXh0Lmxlbmd0aDsKICAgICAgICAgIGlmICghY29sbGFwc2VkKSB7CiAgICAgICAgICAgIHZhciB0b2tlblRleHQgPSBlbmQgPiB1cHRvID8gdGV4dC5zbGljZSgwLCB1cHRvIC0gcG9zKSA6IHRleHQ7CiAgICAgICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4oYnVpbGRlciwgdG9rZW5UZXh0LCBzdHlsZSA/IHN0eWxlICsgc3BhblN0eWxlIDogc3BhblN0eWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5TdGFydFN0eWxlLCBwb3MgKyB0b2tlblRleHQubGVuZ3RoID09IG5leHRDaGFuZ2UgPyBzcGFuRW5kU3R5bGUgOiAiIiwgdGl0bGUsIGNzcyk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZW5kID49IHVwdG8pIHt0ZXh0ID0gdGV4dC5zbGljZSh1cHRvIC0gcG9zKTsgcG9zID0gdXB0bzsgYnJlYWs7fQogICAgICAgICAgcG9zID0gZW5kOwogICAgICAgICAgc3BhblN0YXJ0U3R5bGUgPSAiIjsKICAgICAgICB9CiAgICAgICAgdGV4dCA9IGFsbFRleHQuc2xpY2UoYXQsIGF0ID0gc3R5bGVzW2krK10pOwogICAgICAgIHN0eWxlID0gaW50ZXJwcmV0VG9rZW5TdHlsZShzdHlsZXNbaSsrXSwgYnVpbGRlci5jbS5vcHRpb25zKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8gRE9DVU1FTlQgREFUQSBTVFJVQ1RVUkUKCiAgLy8gQnkgZGVmYXVsdCwgdXBkYXRlcyB0aGF0IHN0YXJ0IGFuZCBlbmQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUKICAvLyBhcmUgdHJlYXRlZCBzcGVjaWFsbHksIGluIG9yZGVyIHRvIG1ha2UgdGhlIGFzc29jaWF0aW9uIG9mIGxpbmUKICAvLyB3aWRnZXRzIGFuZCBtYXJrZXIgZWxlbWVudHMgd2l0aCB0aGUgdGV4dCBiZWhhdmUgbW9yZSBpbnR1aXRpdmUuCiAgZnVuY3Rpb24gaXNXaG9sZUxpbmVVcGRhdGUoZG9jLCBjaGFuZ2UpIHsKICAgIHJldHVybiBjaGFuZ2UuZnJvbS5jaCA9PSAwICYmIGNoYW5nZS50by5jaCA9PSAwICYmIGxzdChjaGFuZ2UudGV4dCkgPT0gIiIgJiYKICAgICAgKCFkb2MuY20gfHwgZG9jLmNtLm9wdGlvbnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKTsKICB9CgogIC8vIFBlcmZvcm0gYSBjaGFuZ2Ugb24gdGhlIGRvY3VtZW50IGRhdGEgc3RydWN0dXJlLgogIGZ1bmN0aW9uIHVwZGF0ZURvYyhkb2MsIGNoYW5nZSwgbWFya2VkU3BhbnMsIGVzdGltYXRlSGVpZ2h0KSB7CiAgICBmdW5jdGlvbiBzcGFuc0ZvcihuKSB7cmV0dXJuIG1hcmtlZFNwYW5zID8gbWFya2VkU3BhbnNbbl0gOiBudWxsO30KICAgIGZ1bmN0aW9uIHVwZGF0ZShsaW5lLCB0ZXh0LCBzcGFucykgewogICAgICB1cGRhdGVMaW5lKGxpbmUsIHRleHQsIHNwYW5zLCBlc3RpbWF0ZUhlaWdodCk7CiAgICAgIHNpZ25hbExhdGVyKGxpbmUsICJjaGFuZ2UiLCBsaW5lLCBjaGFuZ2UpOwogICAgfQogICAgZnVuY3Rpb24gbGluZXNGb3Ioc3RhcnQsIGVuZCkgewogICAgICBmb3IgKHZhciBpID0gc3RhcnQsIHJlc3VsdCA9IFtdOyBpIDwgZW5kOyArK2kpCiAgICAgICAgcmVzdWx0LnB1c2gobmV3IExpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0KSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgdmFyIGZyb20gPSBjaGFuZ2UuZnJvbSwgdG8gPSBjaGFuZ2UudG8sIHRleHQgPSBjaGFuZ2UudGV4dDsKICAgIHZhciBmaXJzdExpbmUgPSBnZXRMaW5lKGRvYywgZnJvbS5saW5lKSwgbGFzdExpbmUgPSBnZXRMaW5lKGRvYywgdG8ubGluZSk7CiAgICB2YXIgbGFzdFRleHQgPSBsc3QodGV4dCksIGxhc3RTcGFucyA9IHNwYW5zRm9yKHRleHQubGVuZ3RoIC0gMSksIG5saW5lcyA9IHRvLmxpbmUgLSBmcm9tLmxpbmU7CgogICAgLy8gQWRqdXN0IHRoZSBsaW5lIHN0cnVjdHVyZQogICAgaWYgKGNoYW5nZS5mdWxsKSB7CiAgICAgIGRvYy5pbnNlcnQoMCwgbGluZXNGb3IoMCwgdGV4dC5sZW5ndGgpKTsKICAgICAgZG9jLnJlbW92ZSh0ZXh0Lmxlbmd0aCwgZG9jLnNpemUgLSB0ZXh0Lmxlbmd0aCk7CiAgICB9IGVsc2UgaWYgKGlzV2hvbGVMaW5lVXBkYXRlKGRvYywgY2hhbmdlKSkgewogICAgICAvLyBUaGlzIGlzIGEgd2hvbGUtbGluZSByZXBsYWNlLiBUcmVhdGVkIHNwZWNpYWxseSB0byBtYWtlCiAgICAgIC8vIHN1cmUgbGluZSBvYmplY3RzIG1vdmUgdGhlIHdheSB0aGV5IGFyZSBzdXBwb3NlZCB0by4KICAgICAgdmFyIGFkZGVkID0gbGluZXNGb3IoMCwgdGV4dC5sZW5ndGggLSAxKTsKICAgICAgdXBkYXRlKGxhc3RMaW5lLCBsYXN0TGluZS50ZXh0LCBsYXN0U3BhbnMpOwogICAgICBpZiAobmxpbmVzKSBkb2MucmVtb3ZlKGZyb20ubGluZSwgbmxpbmVzKTsKICAgICAgaWYgKGFkZGVkLmxlbmd0aCkgZG9jLmluc2VydChmcm9tLmxpbmUsIGFkZGVkKTsKICAgIH0gZWxzZSBpZiAoZmlyc3RMaW5lID09IGxhc3RMaW5lKSB7CiAgICAgIGlmICh0ZXh0Lmxlbmd0aCA9PSAxKSB7CiAgICAgICAgdXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyBsYXN0VGV4dCArIGZpcnN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5zKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgYWRkZWQgPSBsaW5lc0ZvcigxLCB0ZXh0Lmxlbmd0aCAtIDEpOwogICAgICAgIGFkZGVkLnB1c2gobmV3IExpbmUobGFzdFRleHQgKyBmaXJzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFucywgZXN0aW1hdGVIZWlnaHQpKTsKICAgICAgICB1cGRhdGUoZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIHRleHRbMF0sIHNwYW5zRm9yKDApKTsKICAgICAgICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkKTsKICAgICAgfQogICAgfSBlbHNlIGlmICh0ZXh0Lmxlbmd0aCA9PSAxKSB7CiAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSArIGxhc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBzcGFuc0ZvcigwKSk7CiAgICAgIGRvYy5yZW1vdmUoZnJvbS5saW5lICsgMSwgbmxpbmVzKTsKICAgIH0gZWxzZSB7CiAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSwgc3BhbnNGb3IoMCkpOwogICAgICB1cGRhdGUobGFzdExpbmUsIGxhc3RUZXh0ICsgbGFzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFucyk7CiAgICAgIHZhciBhZGRlZCA9IGxpbmVzRm9yKDEsIHRleHQubGVuZ3RoIC0gMSk7CiAgICAgIGlmIChubGluZXMgPiAxKSBkb2MucmVtb3ZlKGZyb20ubGluZSArIDEsIG5saW5lcyAtIDEpOwogICAgICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkKTsKICAgIH0KCiAgICBzaWduYWxMYXRlcihkb2MsICJjaGFuZ2UiLCBkb2MsIGNoYW5nZSk7CiAgfQoKICAvLyBUaGUgZG9jdW1lbnQgaXMgcmVwcmVzZW50ZWQgYXMgYSBCVHJlZSBjb25zaXN0aW5nIG9mIGxlYXZlcywgd2l0aAogIC8vIGNodW5rIG9mIGxpbmVzIGluIHRoZW0sIGFuZCBicmFuY2hlcywgd2l0aCB1cCB0byB0ZW4gbGVhdmVzIG9yCiAgLy8gb3RoZXIgYnJhbmNoIG5vZGVzIGJlbG93IHRoZW0uIFRoZSB0b3Agbm9kZSBpcyBhbHdheXMgYSBicmFuY2gKICAvLyBub2RlLCBhbmQgaXMgdGhlIGRvY3VtZW50IG9iamVjdCBpdHNlbGYgKG1lYW5pbmcgaXQgaGFzCiAgLy8gYWRkaXRpb25hbCBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzKS4KICAvLwogIC8vIEFsbCBub2RlcyBoYXZlIHBhcmVudCBsaW5rcy4gVGhlIHRyZWUgaXMgdXNlZCBib3RoIHRvIGdvIGZyb20KICAvLyBsaW5lIG51bWJlcnMgdG8gbGluZSBvYmplY3RzLCBhbmQgdG8gZ28gZnJvbSBvYmplY3RzIHRvIG51bWJlcnMuCiAgLy8gSXQgYWxzbyBpbmRleGVzIGJ5IGhlaWdodCwgYW5kIGlzIHVzZWQgdG8gY29udmVydCBiZXR3ZWVuIGhlaWdodAogIC8vIGFuZCBsaW5lIG9iamVjdCwgYW5kIHRvIGZpbmQgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgZG9jdW1lbnQuCiAgLy8KICAvLyBTZWUgYWxzbyBodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2Jsb2cvY29kZW1pcnJvci1saW5lLXRyZWUuaHRtbAoKICBmdW5jdGlvbiBMZWFmQ2h1bmsobGluZXMpIHsKICAgIHRoaXMubGluZXMgPSBsaW5lczsKICAgIHRoaXMucGFyZW50ID0gbnVsbDsKICAgIGZvciAodmFyIGkgPSAwLCBoZWlnaHQgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHsKICAgICAgbGluZXNbaV0ucGFyZW50ID0gdGhpczsKICAgICAgaGVpZ2h0ICs9IGxpbmVzW2ldLmhlaWdodDsKICAgIH0KICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwogIH0KCiAgTGVhZkNodW5rLnByb3RvdHlwZSA9IHsKICAgIGNodW5rU2l6ZTogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmxpbmVzLmxlbmd0aDsgfSwKICAgIC8vIFJlbW92ZSB0aGUgbiBsaW5lcyBhdCBvZmZzZXQgJ2F0Jy4KICAgIHJlbW92ZUlubmVyOiBmdW5jdGlvbihhdCwgbikgewogICAgICBmb3IgKHZhciBpID0gYXQsIGUgPSBhdCArIG47IGkgPCBlOyArK2kpIHsKICAgICAgICB2YXIgbGluZSA9IHRoaXMubGluZXNbaV07CiAgICAgICAgdGhpcy5oZWlnaHQgLT0gbGluZS5oZWlnaHQ7CiAgICAgICAgY2xlYW5VcExpbmUobGluZSk7CiAgICAgICAgc2lnbmFsTGF0ZXIobGluZSwgImRlbGV0ZSIpOwogICAgICB9CiAgICAgIHRoaXMubGluZXMuc3BsaWNlKGF0LCBuKTsKICAgIH0sCiAgICAvLyBIZWxwZXIgdXNlZCB0byBjb2xsYXBzZSBhIHNtYWxsIGJyYW5jaCBpbnRvIGEgc2luZ2xlIGxlYWYuCiAgICBjb2xsYXBzZTogZnVuY3Rpb24obGluZXMpIHsKICAgICAgbGluZXMucHVzaC5hcHBseShsaW5lcywgdGhpcy5saW5lcyk7CiAgICB9LAogICAgLy8gSW5zZXJ0IHRoZSBnaXZlbiBhcnJheSBvZiBsaW5lcyBhdCBvZmZzZXQgJ2F0JywgY291bnQgdGhlbSBhcwogICAgLy8gaGF2aW5nIHRoZSBnaXZlbiBoZWlnaHQuCiAgICBpbnNlcnRJbm5lcjogZnVuY3Rpb24oYXQsIGxpbmVzLCBoZWlnaHQpIHsKICAgICAgdGhpcy5oZWlnaHQgKz0gaGVpZ2h0OwogICAgICB0aGlzLmxpbmVzID0gdGhpcy5saW5lcy5zbGljZSgwLCBhdCkuY29uY2F0KGxpbmVzKS5jb25jYXQodGhpcy5saW5lcy5zbGljZShhdCkpOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSBsaW5lc1tpXS5wYXJlbnQgPSB0aGlzOwogICAgfSwKICAgIC8vIFVzZWQgdG8gaXRlcmF0ZSBvdmVyIGEgcGFydCBvZiB0aGUgdHJlZS4KICAgIGl0ZXJOOiBmdW5jdGlvbihhdCwgbiwgb3ApIHsKICAgICAgZm9yICh2YXIgZSA9IGF0ICsgbjsgYXQgPCBlOyArK2F0KQogICAgICAgIGlmIChvcCh0aGlzLmxpbmVzW2F0XSkpIHJldHVybiB0cnVlOwogICAgfQogIH07CgogIGZ1bmN0aW9uIEJyYW5jaENodW5rKGNoaWxkcmVuKSB7CiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47CiAgICB2YXIgc2l6ZSA9IDAsIGhlaWdodCA9IDA7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciBjaCA9IGNoaWxkcmVuW2ldOwogICAgICBzaXplICs9IGNoLmNodW5rU2l6ZSgpOyBoZWlnaHQgKz0gY2guaGVpZ2h0OwogICAgICBjaC5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgdGhpcy5zaXplID0gc2l6ZTsKICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwogICAgdGhpcy5wYXJlbnQgPSBudWxsOwogIH0KCiAgQnJhbmNoQ2h1bmsucHJvdG90eXBlID0gewogICAgY2h1bmtTaXplOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuc2l6ZTsgfSwKICAgIHJlbW92ZUlubmVyOiBmdW5jdGlvbihhdCwgbikgewogICAgICB0aGlzLnNpemUgLT0gbjsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTsKICAgICAgICBpZiAoYXQgPCBzeikgewogICAgICAgICAgdmFyIHJtID0gTWF0aC5taW4obiwgc3ogLSBhdCksIG9sZEhlaWdodCA9IGNoaWxkLmhlaWdodDsKICAgICAgICAgIGNoaWxkLnJlbW92ZUlubmVyKGF0LCBybSk7CiAgICAgICAgICB0aGlzLmhlaWdodCAtPSBvbGRIZWlnaHQgLSBjaGlsZC5oZWlnaHQ7CiAgICAgICAgICBpZiAoc3ogPT0gcm0pIHsgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaS0tLCAxKTsgY2hpbGQucGFyZW50ID0gbnVsbDsgfQogICAgICAgICAgaWYgKChuIC09IHJtKSA9PSAwKSBicmVhazsKICAgICAgICAgIGF0ID0gMDsKICAgICAgICB9IGVsc2UgYXQgLT0gc3o7CiAgICAgIH0KICAgICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBzbWFsbGVyIHRoYW4gMjUgbGluZXMsIGVuc3VyZSB0aGF0IGl0IGlzIGEKICAgICAgLy8gc2luZ2xlIGxlYWYgbm9kZS4KICAgICAgaWYgKHRoaXMuc2l6ZSAtIG4gPCAyNSAmJgogICAgICAgICAgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMSB8fCAhKHRoaXMuY2hpbGRyZW5bMF0gaW5zdGFuY2VvZiBMZWFmQ2h1bmspKSkgewogICAgICAgIHZhciBsaW5lcyA9IFtdOwogICAgICAgIHRoaXMuY29sbGFwc2UobGluZXMpOwogICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbbmV3IExlYWZDaHVuayhsaW5lcyldOwogICAgICAgIHRoaXMuY2hpbGRyZW5bMF0ucGFyZW50ID0gdGhpczsKICAgICAgfQogICAgfSwKICAgIGNvbGxhcHNlOiBmdW5jdGlvbihsaW5lcykgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHRoaXMuY2hpbGRyZW5baV0uY29sbGFwc2UobGluZXMpOwogICAgfSwKICAgIGluc2VydElubmVyOiBmdW5jdGlvbihhdCwgbGluZXMsIGhlaWdodCkgewogICAgICB0aGlzLnNpemUgKz0gbGluZXMubGVuZ3RoOwogICAgICB0aGlzLmhlaWdodCArPSBoZWlnaHQ7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkgewogICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7CiAgICAgICAgaWYgKGF0IDw9IHN6KSB7CiAgICAgICAgICBjaGlsZC5pbnNlcnRJbm5lcihhdCwgbGluZXMsIGhlaWdodCk7CiAgICAgICAgICBpZiAoY2hpbGQubGluZXMgJiYgY2hpbGQubGluZXMubGVuZ3RoID4gNTApIHsKICAgICAgICAgICAgd2hpbGUgKGNoaWxkLmxpbmVzLmxlbmd0aCA+IDUwKSB7CiAgICAgICAgICAgICAgdmFyIHNwaWxsZWQgPSBjaGlsZC5saW5lcy5zcGxpY2UoY2hpbGQubGluZXMubGVuZ3RoIC0gMjUsIDI1KTsKICAgICAgICAgICAgICB2YXIgbmV3bGVhZiA9IG5ldyBMZWFmQ2h1bmsoc3BpbGxlZCk7CiAgICAgICAgICAgICAgY2hpbGQuaGVpZ2h0IC09IG5ld2xlYWYuaGVpZ2h0OwogICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGkgKyAxLCAwLCBuZXdsZWFmKTsKICAgICAgICAgICAgICBuZXdsZWFmLnBhcmVudCA9IHRoaXM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5tYXliZVNwaWxsKCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgYXQgLT0gc3o7CiAgICAgIH0KICAgIH0sCiAgICAvLyBXaGVuIGEgbm9kZSBoYXMgZ3Jvd24sIGNoZWNrIHdoZXRoZXIgaXQgc2hvdWxkIGJlIHNwbGl0LgogICAgbWF5YmVTcGlsbDogZnVuY3Rpb24oKSB7CiAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA8PSAxMCkgcmV0dXJuOwogICAgICB2YXIgbWUgPSB0aGlzOwogICAgICBkbyB7CiAgICAgICAgdmFyIHNwaWxsZWQgPSBtZS5jaGlsZHJlbi5zcGxpY2UobWUuY2hpbGRyZW4ubGVuZ3RoIC0gNSwgNSk7CiAgICAgICAgdmFyIHNpYmxpbmcgPSBuZXcgQnJhbmNoQ2h1bmsoc3BpbGxlZCk7CiAgICAgICAgaWYgKCFtZS5wYXJlbnQpIHsgLy8gQmVjb21lIHRoZSBwYXJlbnQgbm9kZQogICAgICAgICAgdmFyIGNvcHkgPSBuZXcgQnJhbmNoQ2h1bmsobWUuY2hpbGRyZW4pOwogICAgICAgICAgY29weS5wYXJlbnQgPSBtZTsKICAgICAgICAgIG1lLmNoaWxkcmVuID0gW2NvcHksIHNpYmxpbmddOwogICAgICAgICAgbWUgPSBjb3B5OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBtZS5zaXplIC09IHNpYmxpbmcuc2l6ZTsKICAgICAgICAgIG1lLmhlaWdodCAtPSBzaWJsaW5nLmhlaWdodDsKICAgICAgICAgIHZhciBteUluZGV4ID0gaW5kZXhPZihtZS5wYXJlbnQuY2hpbGRyZW4sIG1lKTsKICAgICAgICAgIG1lLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UobXlJbmRleCArIDEsIDAsIHNpYmxpbmcpOwogICAgICAgIH0KICAgICAgICBzaWJsaW5nLnBhcmVudCA9IG1lLnBhcmVudDsKICAgICAgfSB3aGlsZSAobWUuY2hpbGRyZW4ubGVuZ3RoID4gMTApOwogICAgICBtZS5wYXJlbnQubWF5YmVTcGlsbCgpOwogICAgfSwKICAgIGl0ZXJOOiBmdW5jdGlvbihhdCwgbiwgb3ApIHsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTsKICAgICAgICBpZiAoYXQgPCBzeikgewogICAgICAgICAgdmFyIHVzZWQgPSBNYXRoLm1pbihuLCBzeiAtIGF0KTsKICAgICAgICAgIGlmIChjaGlsZC5pdGVyTihhdCwgdXNlZCwgb3ApKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgIGlmICgobiAtPSB1c2VkKSA9PSAwKSBicmVhazsKICAgICAgICAgIGF0ID0gMDsKICAgICAgICB9IGVsc2UgYXQgLT0gc3o7CiAgICAgIH0KICAgIH0KICB9OwoKICB2YXIgbmV4dERvY0lkID0gMDsKICB2YXIgRG9jID0gQ29kZU1pcnJvci5Eb2MgPSBmdW5jdGlvbih0ZXh0LCBtb2RlLCBmaXJzdExpbmUsIGxpbmVTZXApIHsKICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEb2MpKSByZXR1cm4gbmV3IERvYyh0ZXh0LCBtb2RlLCBmaXJzdExpbmUsIGxpbmVTZXApOwogICAgaWYgKGZpcnN0TGluZSA9PSBudWxsKSBmaXJzdExpbmUgPSAwOwoKICAgIEJyYW5jaENodW5rLmNhbGwodGhpcywgW25ldyBMZWFmQ2h1bmsoW25ldyBMaW5lKCIiLCBudWxsKV0pXSk7CiAgICB0aGlzLmZpcnN0ID0gZmlyc3RMaW5lOwogICAgdGhpcy5zY3JvbGxUb3AgPSB0aGlzLnNjcm9sbExlZnQgPSAwOwogICAgdGhpcy5jYW50RWRpdCA9IGZhbHNlOwogICAgdGhpcy5jbGVhbkdlbmVyYXRpb24gPSAxOwogICAgdGhpcy5mcm9udGllciA9IGZpcnN0TGluZTsKICAgIHZhciBzdGFydCA9IFBvcyhmaXJzdExpbmUsIDApOwogICAgdGhpcy5zZWwgPSBzaW1wbGVTZWxlY3Rpb24oc3RhcnQpOwogICAgdGhpcy5oaXN0b3J5ID0gbmV3IEhpc3RvcnkobnVsbCk7CiAgICB0aGlzLmlkID0gKytuZXh0RG9jSWQ7CiAgICB0aGlzLm1vZGVPcHRpb24gPSBtb2RlOwogICAgdGhpcy5saW5lU2VwID0gbGluZVNlcDsKICAgIHRoaXMuZXh0ZW5kID0gZmFsc2U7CgogICAgaWYgKHR5cGVvZiB0ZXh0ID09ICJzdHJpbmciKSB0ZXh0ID0gdGhpcy5zcGxpdExpbmVzKHRleHQpOwogICAgdXBkYXRlRG9jKHRoaXMsIHtmcm9tOiBzdGFydCwgdG86IHN0YXJ0LCB0ZXh0OiB0ZXh0fSk7CiAgICBzZXRTZWxlY3Rpb24odGhpcywgc2ltcGxlU2VsZWN0aW9uKHN0YXJ0KSwgc2VsX2RvbnRTY3JvbGwpOwogIH07CgogIERvYy5wcm90b3R5cGUgPSBjcmVhdGVPYmooQnJhbmNoQ2h1bmsucHJvdG90eXBlLCB7CiAgICBjb25zdHJ1Y3RvcjogRG9jLAogICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBkb2N1bWVudC4gU3VwcG9ydHMgdHdvIGZvcm1zIC0tIHdpdGggb25seSBvbmUKICAgIC8vIGFyZ3VtZW50LCBpdCBjYWxscyB0aGF0IGZvciBlYWNoIGxpbmUgaW4gdGhlIGRvY3VtZW50LiBXaXRoCiAgICAvLyB0aHJlZSwgaXQgaXRlcmF0ZXMgb3ZlciB0aGUgcmFuZ2UgZ2l2ZW4gYnkgdGhlIGZpcnN0IHR3byAod2l0aAogICAgLy8gdGhlIHNlY29uZCBiZWluZyBub24taW5jbHVzaXZlKS4KICAgIGl0ZXI6IGZ1bmN0aW9uKGZyb20sIHRvLCBvcCkgewogICAgICBpZiAob3ApIHRoaXMuaXRlck4oZnJvbSAtIHRoaXMuZmlyc3QsIHRvIC0gZnJvbSwgb3ApOwogICAgICBlbHNlIHRoaXMuaXRlck4odGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6ZSwgZnJvbSk7CiAgICB9LAoKICAgIC8vIE5vbi1wdWJsaWMgaW50ZXJmYWNlIGZvciBhZGRpbmcgYW5kIHJlbW92aW5nIGxpbmVzLgogICAgaW5zZXJ0OiBmdW5jdGlvbihhdCwgbGluZXMpIHsKICAgICAgdmFyIGhlaWdodCA9IDA7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIGhlaWdodCArPSBsaW5lc1tpXS5oZWlnaHQ7CiAgICAgIHRoaXMuaW5zZXJ0SW5uZXIoYXQgLSB0aGlzLmZpcnN0LCBsaW5lcywgaGVpZ2h0KTsKICAgIH0sCiAgICByZW1vdmU6IGZ1bmN0aW9uKGF0LCBuKSB7IHRoaXMucmVtb3ZlSW5uZXIoYXQgLSB0aGlzLmZpcnN0LCBuKTsgfSwKCiAgICAvLyBGcm9tIGhlcmUsIHRoZSBtZXRob2RzIGFyZSBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBNb3N0CiAgICAvLyBhcmUgYWxzbyBhdmFpbGFibGUgZnJvbSBDb2RlTWlycm9yIChlZGl0b3IpIGluc3RhbmNlcy4KCiAgICBnZXRWYWx1ZTogZnVuY3Rpb24obGluZVNlcCkgewogICAgICB2YXIgbGluZXMgPSBnZXRMaW5lcyh0aGlzLCB0aGlzLmZpcnN0LCB0aGlzLmZpcnN0ICsgdGhpcy5zaXplKTsKICAgICAgaWYgKGxpbmVTZXAgPT09IGZhbHNlKSByZXR1cm4gbGluZXM7CiAgICAgIHJldHVybiBsaW5lcy5qb2luKGxpbmVTZXAgfHwgdGhpcy5saW5lU2VwYXJhdG9yKCkpOwogICAgfSwKICAgIHNldFZhbHVlOiBkb2NNZXRob2RPcChmdW5jdGlvbihjb2RlKSB7CiAgICAgIHZhciB0b3AgPSBQb3ModGhpcy5maXJzdCwgMCksIGxhc3QgPSB0aGlzLmZpcnN0ICsgdGhpcy5zaXplIC0gMTsKICAgICAgbWFrZUNoYW5nZSh0aGlzLCB7ZnJvbTogdG9wLCB0bzogUG9zKGxhc3QsIGdldExpbmUodGhpcywgbGFzdCkudGV4dC5sZW5ndGgpLAogICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnNwbGl0TGluZXMoY29kZSksIG9yaWdpbjogInNldFZhbHVlIiwgZnVsbDogdHJ1ZX0sIHRydWUpOwogICAgICBzZXRTZWxlY3Rpb24odGhpcywgc2ltcGxlU2VsZWN0aW9uKHRvcCkpOwogICAgfSksCiAgICByZXBsYWNlUmFuZ2U6IGZ1bmN0aW9uKGNvZGUsIGZyb20sIHRvLCBvcmlnaW4pIHsKICAgICAgZnJvbSA9IGNsaXBQb3ModGhpcywgZnJvbSk7CiAgICAgIHRvID0gdG8gPyBjbGlwUG9zKHRoaXMsIHRvKSA6IGZyb207CiAgICAgIHJlcGxhY2VSYW5nZSh0aGlzLCBjb2RlLCBmcm9tLCB0bywgb3JpZ2luKTsKICAgIH0sCiAgICBnZXRSYW5nZTogZnVuY3Rpb24oZnJvbSwgdG8sIGxpbmVTZXApIHsKICAgICAgdmFyIGxpbmVzID0gZ2V0QmV0d2Vlbih0aGlzLCBjbGlwUG9zKHRoaXMsIGZyb20pLCBjbGlwUG9zKHRoaXMsIHRvKSk7CiAgICAgIGlmIChsaW5lU2VwID09PSBmYWxzZSkgcmV0dXJuIGxpbmVzOwogICAgICByZXR1cm4gbGluZXMuam9pbihsaW5lU2VwIHx8IHRoaXMubGluZVNlcGFyYXRvcigpKTsKICAgIH0sCgogICAgZ2V0TGluZTogZnVuY3Rpb24obGluZSkge3ZhciBsID0gdGhpcy5nZXRMaW5lSGFuZGxlKGxpbmUpOyByZXR1cm4gbCAmJiBsLnRleHQ7fSwKCiAgICBnZXRMaW5lSGFuZGxlOiBmdW5jdGlvbihsaW5lKSB7aWYgKGlzTGluZSh0aGlzLCBsaW5lKSkgcmV0dXJuIGdldExpbmUodGhpcywgbGluZSk7fSwKICAgIGdldExpbmVOdW1iZXI6IGZ1bmN0aW9uKGxpbmUpIHtyZXR1cm4gbGluZU5vKGxpbmUpO30sCgogICAgZ2V0TGluZUhhbmRsZVZpc3VhbFN0YXJ0OiBmdW5jdGlvbihsaW5lKSB7CiAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVtYmVyIikgbGluZSA9IGdldExpbmUodGhpcywgbGluZSk7CiAgICAgIHJldHVybiB2aXN1YWxMaW5lKGxpbmUpOwogICAgfSwKCiAgICBsaW5lQ291bnQ6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnNpemU7fSwKICAgIGZpcnN0TGluZTogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZmlyc3Q7fSwKICAgIGxhc3RMaW5lOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5maXJzdCArIHRoaXMuc2l6ZSAtIDE7fSwKCiAgICBjbGlwUG9zOiBmdW5jdGlvbihwb3MpIHtyZXR1cm4gY2xpcFBvcyh0aGlzLCBwb3MpO30sCgogICAgZ2V0Q3Vyc29yOiBmdW5jdGlvbihzdGFydCkgewogICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlbC5wcmltYXJ5KCksIHBvczsKICAgICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPT0gImhlYWQiKSBwb3MgPSByYW5nZS5oZWFkOwogICAgICBlbHNlIGlmIChzdGFydCA9PSAiYW5jaG9yIikgcG9zID0gcmFuZ2UuYW5jaG9yOwogICAgICBlbHNlIGlmIChzdGFydCA9PSAiZW5kIiB8fCBzdGFydCA9PSAidG8iIHx8IHN0YXJ0ID09PSBmYWxzZSkgcG9zID0gcmFuZ2UudG8oKTsKICAgICAgZWxzZSBwb3MgPSByYW5nZS5mcm9tKCk7CiAgICAgIHJldHVybiBwb3M7CiAgICB9LAogICAgbGlzdFNlbGVjdGlvbnM6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5zZWwucmFuZ2VzOyB9LAogICAgc29tZXRoaW5nU2VsZWN0ZWQ6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnNlbC5zb21ldGhpbmdTZWxlY3RlZCgpO30sCgogICAgc2V0Q3Vyc29yOiBkb2NNZXRob2RPcChmdW5jdGlvbihsaW5lLCBjaCwgb3B0aW9ucykgewogICAgICBzZXRTaW1wbGVTZWxlY3Rpb24odGhpcywgY2xpcFBvcyh0aGlzLCB0eXBlb2YgbGluZSA9PSAibnVtYmVyIiA/IFBvcyhsaW5lLCBjaCB8fCAwKSA6IGxpbmUpLCBudWxsLCBvcHRpb25zKTsKICAgIH0pLAogICAgc2V0U2VsZWN0aW9uOiBkb2NNZXRob2RPcChmdW5jdGlvbihhbmNob3IsIGhlYWQsIG9wdGlvbnMpIHsKICAgICAgc2V0U2ltcGxlU2VsZWN0aW9uKHRoaXMsIGNsaXBQb3ModGhpcywgYW5jaG9yKSwgY2xpcFBvcyh0aGlzLCBoZWFkIHx8IGFuY2hvciksIG9wdGlvbnMpOwogICAgfSksCiAgICBleHRlbmRTZWxlY3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGhlYWQsIG90aGVyLCBvcHRpb25zKSB7CiAgICAgIGV4dGVuZFNlbGVjdGlvbih0aGlzLCBjbGlwUG9zKHRoaXMsIGhlYWQpLCBvdGhlciAmJiBjbGlwUG9zKHRoaXMsIG90aGVyKSwgb3B0aW9ucyk7CiAgICB9KSwKICAgIGV4dGVuZFNlbGVjdGlvbnM6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGhlYWRzLCBvcHRpb25zKSB7CiAgICAgIGV4dGVuZFNlbGVjdGlvbnModGhpcywgY2xpcFBvc0FycmF5KHRoaXMsIGhlYWRzLCBvcHRpb25zKSk7CiAgICB9KSwKICAgIGV4dGVuZFNlbGVjdGlvbnNCeTogZG9jTWV0aG9kT3AoZnVuY3Rpb24oZiwgb3B0aW9ucykgewogICAgICBleHRlbmRTZWxlY3Rpb25zKHRoaXMsIG1hcCh0aGlzLnNlbC5yYW5nZXMsIGYpLCBvcHRpb25zKTsKICAgIH0pLAogICAgc2V0U2VsZWN0aW9uczogZG9jTWV0aG9kT3AoZnVuY3Rpb24ocmFuZ2VzLCBwcmltYXJ5LCBvcHRpb25zKSB7CiAgICAgIGlmICghcmFuZ2VzLmxlbmd0aCkgcmV0dXJuOwogICAgICBmb3IgKHZhciBpID0gMCwgb3V0ID0gW107IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspCiAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKGNsaXBQb3ModGhpcywgcmFuZ2VzW2ldLmFuY2hvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBQb3ModGhpcywgcmFuZ2VzW2ldLmhlYWQpKTsKICAgICAgaWYgKHByaW1hcnkgPT0gbnVsbCkgcHJpbWFyeSA9IE1hdGgubWluKHJhbmdlcy5sZW5ndGggLSAxLCB0aGlzLnNlbC5wcmltSW5kZXgpOwogICAgICBzZXRTZWxlY3Rpb24odGhpcywgbm9ybWFsaXplU2VsZWN0aW9uKG91dCwgcHJpbWFyeSksIG9wdGlvbnMpOwogICAgfSksCiAgICBhZGRTZWxlY3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGFuY2hvciwgaGVhZCwgb3B0aW9ucykgewogICAgICB2YXIgcmFuZ2VzID0gdGhpcy5zZWwucmFuZ2VzLnNsaWNlKDApOwogICAgICByYW5nZXMucHVzaChuZXcgUmFuZ2UoY2xpcFBvcyh0aGlzLCBhbmNob3IpLCBjbGlwUG9zKHRoaXMsIGhlYWQgfHwgYW5jaG9yKSkpOwogICAgICBzZXRTZWxlY3Rpb24odGhpcywgbm9ybWFsaXplU2VsZWN0aW9uKHJhbmdlcywgcmFuZ2VzLmxlbmd0aCAtIDEpLCBvcHRpb25zKTsKICAgIH0pLAoKICAgIGdldFNlbGVjdGlvbjogZnVuY3Rpb24obGluZVNlcCkgewogICAgICB2YXIgcmFuZ2VzID0gdGhpcy5zZWwucmFuZ2VzLCBsaW5lczsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgc2VsID0gZ2V0QmV0d2Vlbih0aGlzLCByYW5nZXNbaV0uZnJvbSgpLCByYW5nZXNbaV0udG8oKSk7CiAgICAgICAgbGluZXMgPSBsaW5lcyA/IGxpbmVzLmNvbmNhdChzZWwpIDogc2VsOwogICAgICB9CiAgICAgIGlmIChsaW5lU2VwID09PSBmYWxzZSkgcmV0dXJuIGxpbmVzOwogICAgICBlbHNlIHJldHVybiBsaW5lcy5qb2luKGxpbmVTZXAgfHwgdGhpcy5saW5lU2VwYXJhdG9yKCkpOwogICAgfSwKICAgIGdldFNlbGVjdGlvbnM6IGZ1bmN0aW9uKGxpbmVTZXApIHsKICAgICAgdmFyIHBhcnRzID0gW10sIHJhbmdlcyA9IHRoaXMuc2VsLnJhbmdlczsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgc2VsID0gZ2V0QmV0d2Vlbih0aGlzLCByYW5nZXNbaV0uZnJvbSgpLCByYW5nZXNbaV0udG8oKSk7CiAgICAgICAgaWYgKGxpbmVTZXAgIT09IGZhbHNlKSBzZWwgPSBzZWwuam9pbihsaW5lU2VwIHx8IHRoaXMubGluZVNlcGFyYXRvcigpKTsKICAgICAgICBwYXJ0c1tpXSA9IHNlbDsKICAgICAgfQogICAgICByZXR1cm4gcGFydHM7CiAgICB9LAogICAgcmVwbGFjZVNlbGVjdGlvbjogZnVuY3Rpb24oY29kZSwgY29sbGFwc2UsIG9yaWdpbikgewogICAgICB2YXIgZHVwID0gW107CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKQogICAgICAgIGR1cFtpXSA9IGNvZGU7CiAgICAgIHRoaXMucmVwbGFjZVNlbGVjdGlvbnMoZHVwLCBjb2xsYXBzZSwgb3JpZ2luIHx8ICIraW5wdXQiKTsKICAgIH0sCiAgICByZXBsYWNlU2VsZWN0aW9uczogZG9jTWV0aG9kT3AoZnVuY3Rpb24oY29kZSwgY29sbGFwc2UsIG9yaWdpbikgewogICAgICB2YXIgY2hhbmdlcyA9IFtdLCBzZWwgPSB0aGlzLnNlbDsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJhbmdlID0gc2VsLnJhbmdlc1tpXTsKICAgICAgICBjaGFuZ2VzW2ldID0ge2Zyb206IHJhbmdlLmZyb20oKSwgdG86IHJhbmdlLnRvKCksIHRleHQ6IHRoaXMuc3BsaXRMaW5lcyhjb2RlW2ldKSwgb3JpZ2luOiBvcmlnaW59OwogICAgICB9CiAgICAgIHZhciBuZXdTZWwgPSBjb2xsYXBzZSAmJiBjb2xsYXBzZSAhPSAiZW5kIiAmJiBjb21wdXRlUmVwbGFjZWRTZWwodGhpcywgY2hhbmdlcywgY29sbGFwc2UpOwogICAgICBmb3IgKHZhciBpID0gY2hhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkKICAgICAgICBtYWtlQ2hhbmdlKHRoaXMsIGNoYW5nZXNbaV0pOwogICAgICBpZiAobmV3U2VsKSBzZXRTZWxlY3Rpb25SZXBsYWNlSGlzdG9yeSh0aGlzLCBuZXdTZWwpOwogICAgICBlbHNlIGlmICh0aGlzLmNtKSBlbnN1cmVDdXJzb3JWaXNpYmxlKHRoaXMuY20pOwogICAgfSksCiAgICB1bmRvOiBkb2NNZXRob2RPcChmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhpcywgInVuZG8iKTt9KSwKICAgIHJlZG86IGRvY01ldGhvZE9wKGZ1bmN0aW9uKCkge21ha2VDaGFuZ2VGcm9tSGlzdG9yeSh0aGlzLCAicmVkbyIpO30pLAogICAgdW5kb1NlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMsICJ1bmRvIiwgdHJ1ZSk7fSksCiAgICByZWRvU2VsZWN0aW9uOiBkb2NNZXRob2RPcChmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhpcywgInJlZG8iLCB0cnVlKTt9KSwKCiAgICBzZXRFeHRlbmRpbmc6IGZ1bmN0aW9uKHZhbCkge3RoaXMuZXh0ZW5kID0gdmFsO30sCiAgICBnZXRFeHRlbmRpbmc6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmV4dGVuZDt9LAoKICAgIGhpc3RvcnlTaXplOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIGhpc3QgPSB0aGlzLmhpc3RvcnksIGRvbmUgPSAwLCB1bmRvbmUgPSAwOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhpc3QuZG9uZS5sZW5ndGg7IGkrKykgaWYgKCFoaXN0LmRvbmVbaV0ucmFuZ2VzKSArK2RvbmU7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGlzdC51bmRvbmUubGVuZ3RoOyBpKyspIGlmICghaGlzdC51bmRvbmVbaV0ucmFuZ2VzKSArK3VuZG9uZTsKICAgICAgcmV0dXJuIHt1bmRvOiBkb25lLCByZWRvOiB1bmRvbmV9OwogICAgfSwKICAgIGNsZWFySGlzdG9yeTogZnVuY3Rpb24oKSB7dGhpcy5oaXN0b3J5ID0gbmV3IEhpc3RvcnkodGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pO30sCgogICAgbWFya0NsZWFuOiBmdW5jdGlvbigpIHsKICAgICAgdGhpcy5jbGVhbkdlbmVyYXRpb24gPSB0aGlzLmNoYW5nZUdlbmVyYXRpb24odHJ1ZSk7CiAgICB9LAogICAgY2hhbmdlR2VuZXJhdGlvbjogZnVuY3Rpb24oZm9yY2VTcGxpdCkgewogICAgICBpZiAoZm9yY2VTcGxpdCkKICAgICAgICB0aGlzLmhpc3RvcnkubGFzdE9wID0gdGhpcy5oaXN0b3J5Lmxhc3RTZWxPcCA9IHRoaXMuaGlzdG9yeS5sYXN0T3JpZ2luID0gbnVsbDsKICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9uOwogICAgfSwKICAgIGlzQ2xlYW46IGZ1bmN0aW9uIChnZW4pIHsKICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9uID09IChnZW4gfHwgdGhpcy5jbGVhbkdlbmVyYXRpb24pOwogICAgfSwKCiAgICBnZXRIaXN0b3J5OiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHtkb25lOiBjb3B5SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS5kb25lKSwKICAgICAgICAgICAgICB1bmRvbmU6IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LnVuZG9uZSl9OwogICAgfSwKICAgIHNldEhpc3Rvcnk6IGZ1bmN0aW9uKGhpc3REYXRhKSB7CiAgICAgIHZhciBoaXN0ID0gdGhpcy5oaXN0b3J5ID0gbmV3IEhpc3RvcnkodGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pOwogICAgICBoaXN0LmRvbmUgPSBjb3B5SGlzdG9yeUFycmF5KGhpc3REYXRhLmRvbmUuc2xpY2UoMCksIG51bGwsIHRydWUpOwogICAgICBoaXN0LnVuZG9uZSA9IGNvcHlIaXN0b3J5QXJyYXkoaGlzdERhdGEudW5kb25lLnNsaWNlKDApLCBudWxsLCB0cnVlKTsKICAgIH0sCgogICAgYWRkTGluZUNsYXNzOiBkb2NNZXRob2RPcChmdW5jdGlvbihoYW5kbGUsIHdoZXJlLCBjbHMpIHsKICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgaGFuZGxlLCB3aGVyZSA9PSAiZ3V0dGVyIiA/ICJndXR0ZXIiIDogImNsYXNzIiwgZnVuY3Rpb24obGluZSkgewogICAgICAgIHZhciBwcm9wID0gd2hlcmUgPT0gInRleHQiID8gInRleHRDbGFzcyIKICAgICAgICAgICAgICAgICA6IHdoZXJlID09ICJiYWNrZ3JvdW5kIiA/ICJiZ0NsYXNzIgogICAgICAgICAgICAgICAgIDogd2hlcmUgPT0gImd1dHRlciIgPyAiZ3V0dGVyQ2xhc3MiIDogIndyYXBDbGFzcyI7CiAgICAgICAgaWYgKCFsaW5lW3Byb3BdKSBsaW5lW3Byb3BdID0gY2xzOwogICAgICAgIGVsc2UgaWYgKGNsYXNzVGVzdChjbHMpLnRlc3QobGluZVtwcm9wXSkpIHJldHVybiBmYWxzZTsKICAgICAgICBlbHNlIGxpbmVbcHJvcF0gKz0gIiAiICsgY2xzOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9KTsKICAgIH0pLAogICAgcmVtb3ZlTGluZUNsYXNzOiBkb2NNZXRob2RPcChmdW5jdGlvbihoYW5kbGUsIHdoZXJlLCBjbHMpIHsKICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgaGFuZGxlLCB3aGVyZSA9PSAiZ3V0dGVyIiA/ICJndXR0ZXIiIDogImNsYXNzIiwgZnVuY3Rpb24obGluZSkgewogICAgICAgIHZhciBwcm9wID0gd2hlcmUgPT0gInRleHQiID8gInRleHRDbGFzcyIKICAgICAgICAgICAgICAgICA6IHdoZXJlID09ICJiYWNrZ3JvdW5kIiA/ICJiZ0NsYXNzIgogICAgICAgICAgICAgICAgIDogd2hlcmUgPT0gImd1dHRlciIgPyAiZ3V0dGVyQ2xhc3MiIDogIndyYXBDbGFzcyI7CiAgICAgICAgdmFyIGN1ciA9IGxpbmVbcHJvcF07CiAgICAgICAgaWYgKCFjdXIpIHJldHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlmIChjbHMgPT0gbnVsbCkgbGluZVtwcm9wXSA9IG51bGw7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICB2YXIgZm91bmQgPSBjdXIubWF0Y2goY2xhc3NUZXN0KGNscykpOwogICAgICAgICAgaWYgKCFmb3VuZCkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgdmFyIGVuZCA9IGZvdW5kLmluZGV4ICsgZm91bmRbMF0ubGVuZ3RoOwogICAgICAgICAgbGluZVtwcm9wXSA9IGN1ci5zbGljZSgwLCBmb3VuZC5pbmRleCkgKyAoIWZvdW5kLmluZGV4IHx8IGVuZCA9PSBjdXIubGVuZ3RoID8gIiIgOiAiICIpICsgY3VyLnNsaWNlKGVuZCkgfHwgbnVsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0pOwogICAgfSksCgogICAgYWRkTGluZVdpZGdldDogZG9jTWV0aG9kT3AoZnVuY3Rpb24oaGFuZGxlLCBub2RlLCBvcHRpb25zKSB7CiAgICAgIHJldHVybiBhZGRMaW5lV2lkZ2V0KHRoaXMsIGhhbmRsZSwgbm9kZSwgb3B0aW9ucyk7CiAgICB9KSwKICAgIHJlbW92ZUxpbmVXaWRnZXQ6IGZ1bmN0aW9uKHdpZGdldCkgeyB3aWRnZXQuY2xlYXIoKTsgfSwKCiAgICBtYXJrVGV4dDogZnVuY3Rpb24oZnJvbSwgdG8sIG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIG1hcmtUZXh0KHRoaXMsIGNsaXBQb3ModGhpcywgZnJvbSksIGNsaXBQb3ModGhpcywgdG8pLCBvcHRpb25zLCBvcHRpb25zICYmIG9wdGlvbnMudHlwZSB8fCAicmFuZ2UiKTsKICAgIH0sCiAgICBzZXRCb29rbWFyazogZnVuY3Rpb24ocG9zLCBvcHRpb25zKSB7CiAgICAgIHZhciByZWFsT3B0cyA9IHtyZXBsYWNlZFdpdGg6IG9wdGlvbnMgJiYgKG9wdGlvbnMubm9kZVR5cGUgPT0gbnVsbCA/IG9wdGlvbnMud2lkZ2V0IDogb3B0aW9ucyksCiAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRMZWZ0OiBvcHRpb25zICYmIG9wdGlvbnMuaW5zZXJ0TGVmdCwKICAgICAgICAgICAgICAgICAgICAgIGNsZWFyV2hlbkVtcHR5OiBmYWxzZSwgc2hhcmVkOiBvcHRpb25zICYmIG9wdGlvbnMuc2hhcmVkLAogICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTW91c2VFdmVudHM6IG9wdGlvbnMgJiYgb3B0aW9ucy5oYW5kbGVNb3VzZUV2ZW50c307CiAgICAgIHBvcyA9IGNsaXBQb3ModGhpcywgcG9zKTsKICAgICAgcmV0dXJuIG1hcmtUZXh0KHRoaXMsIHBvcywgcG9zLCByZWFsT3B0cywgImJvb2ttYXJrIik7CiAgICB9LAogICAgZmluZE1hcmtzQXQ6IGZ1bmN0aW9uKHBvcykgewogICAgICBwb3MgPSBjbGlwUG9zKHRoaXMsIHBvcyk7CiAgICAgIHZhciBtYXJrZXJzID0gW10sIHNwYW5zID0gZ2V0TGluZSh0aGlzLCBwb3MubGluZSkubWFya2VkU3BhbnM7CiAgICAgIGlmIChzcGFucykgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkgewogICAgICAgIHZhciBzcGFuID0gc3BhbnNbaV07CiAgICAgICAgaWYgKChzcGFuLmZyb20gPT0gbnVsbCB8fCBzcGFuLmZyb20gPD0gcG9zLmNoKSAmJgogICAgICAgICAgICAoc3Bhbi50byA9PSBudWxsIHx8IHNwYW4udG8gPj0gcG9zLmNoKSkKICAgICAgICAgIG1hcmtlcnMucHVzaChzcGFuLm1hcmtlci5wYXJlbnQgfHwgc3Bhbi5tYXJrZXIpOwogICAgICB9CiAgICAgIHJldHVybiBtYXJrZXJzOwogICAgfSwKICAgIGZpbmRNYXJrczogZnVuY3Rpb24oZnJvbSwgdG8sIGZpbHRlcikgewogICAgICBmcm9tID0gY2xpcFBvcyh0aGlzLCBmcm9tKTsgdG8gPSBjbGlwUG9zKHRoaXMsIHRvKTsKICAgICAgdmFyIGZvdW5kID0gW10sIGxpbmVObyA9IGZyb20ubGluZTsKICAgICAgdGhpcy5pdGVyKGZyb20ubGluZSwgdG8ubGluZSArIDEsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICB2YXIgc3BhbnMgPSBsaW5lLm1hcmtlZFNwYW5zOwogICAgICAgIGlmIChzcGFucykgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIHNwYW4gPSBzcGFuc1tpXTsKICAgICAgICAgIGlmICghKGxpbmVObyA9PSBmcm9tLmxpbmUgJiYgZnJvbS5jaCA+IHNwYW4udG8gfHwKICAgICAgICAgICAgICAgIHNwYW4uZnJvbSA9PSBudWxsICYmIGxpbmVObyAhPSBmcm9tLmxpbmV8fAogICAgICAgICAgICAgICAgbGluZU5vID09IHRvLmxpbmUgJiYgc3Bhbi5mcm9tID4gdG8uY2gpICYmCiAgICAgICAgICAgICAgKCFmaWx0ZXIgfHwgZmlsdGVyKHNwYW4ubWFya2VyKSkpCiAgICAgICAgICAgIGZvdW5kLnB1c2goc3Bhbi5tYXJrZXIucGFyZW50IHx8IHNwYW4ubWFya2VyKTsKICAgICAgICB9CiAgICAgICAgKytsaW5lTm87CiAgICAgIH0pOwogICAgICByZXR1cm4gZm91bmQ7CiAgICB9LAogICAgZ2V0QWxsTWFya3M6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgbWFya2VycyA9IFtdOwogICAgICB0aGlzLml0ZXIoZnVuY3Rpb24obGluZSkgewogICAgICAgIHZhciBzcHMgPSBsaW5lLm1hcmtlZFNwYW5zOwogICAgICAgIGlmIChzcHMpIGZvciAodmFyIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsgKytpKQogICAgICAgICAgaWYgKHNwc1tpXS5mcm9tICE9IG51bGwpIG1hcmtlcnMucHVzaChzcHNbaV0ubWFya2VyKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBtYXJrZXJzOwogICAgfSwKCiAgICBwb3NGcm9tSW5kZXg6IGZ1bmN0aW9uKG9mZikgewogICAgICB2YXIgY2gsIGxpbmVObyA9IHRoaXMuZmlyc3Q7CiAgICAgIHRoaXMuaXRlcihmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgdmFyIHN6ID0gbGluZS50ZXh0Lmxlbmd0aCArIDE7CiAgICAgICAgaWYgKHN6ID4gb2ZmKSB7IGNoID0gb2ZmOyByZXR1cm4gdHJ1ZTsgfQogICAgICAgIG9mZiAtPSBzejsKICAgICAgICArK2xpbmVObzsKICAgICAgfSk7CiAgICAgIHJldHVybiBjbGlwUG9zKHRoaXMsIFBvcyhsaW5lTm8sIGNoKSk7CiAgICB9LAogICAgaW5kZXhGcm9tUG9zOiBmdW5jdGlvbiAoY29vcmRzKSB7CiAgICAgIGNvb3JkcyA9IGNsaXBQb3ModGhpcywgY29vcmRzKTsKICAgICAgdmFyIGluZGV4ID0gY29vcmRzLmNoOwogICAgICBpZiAoY29vcmRzLmxpbmUgPCB0aGlzLmZpcnN0IHx8IGNvb3Jkcy5jaCA8IDApIHJldHVybiAwOwogICAgICB0aGlzLml0ZXIodGhpcy5maXJzdCwgY29vcmRzLmxpbmUsIGZ1bmN0aW9uIChsaW5lKSB7CiAgICAgICAgaW5kZXggKz0gbGluZS50ZXh0Lmxlbmd0aCArIDE7CiAgICAgIH0pOwogICAgICByZXR1cm4gaW5kZXg7CiAgICB9LAoKICAgIGNvcHk6IGZ1bmN0aW9uKGNvcHlIaXN0b3J5KSB7CiAgICAgIHZhciBkb2MgPSBuZXcgRG9jKGdldExpbmVzKHRoaXMsIHRoaXMuZmlyc3QsIHRoaXMuZmlyc3QgKyB0aGlzLnNpemUpLAogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVPcHRpb24sIHRoaXMuZmlyc3QsIHRoaXMubGluZVNlcCk7CiAgICAgIGRvYy5zY3JvbGxUb3AgPSB0aGlzLnNjcm9sbFRvcDsgZG9jLnNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbExlZnQ7CiAgICAgIGRvYy5zZWwgPSB0aGlzLnNlbDsKICAgICAgZG9jLmV4dGVuZCA9IGZhbHNlOwogICAgICBpZiAoY29weUhpc3RvcnkpIHsKICAgICAgICBkb2MuaGlzdG9yeS51bmRvRGVwdGggPSB0aGlzLmhpc3RvcnkudW5kb0RlcHRoOwogICAgICAgIGRvYy5zZXRIaXN0b3J5KHRoaXMuZ2V0SGlzdG9yeSgpKTsKICAgICAgfQogICAgICByZXR1cm4gZG9jOwogICAgfSwKCiAgICBsaW5rZWREb2M6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307CiAgICAgIHZhciBmcm9tID0gdGhpcy5maXJzdCwgdG8gPSB0aGlzLmZpcnN0ICsgdGhpcy5zaXplOwogICAgICBpZiAob3B0aW9ucy5mcm9tICE9IG51bGwgJiYgb3B0aW9ucy5mcm9tID4gZnJvbSkgZnJvbSA9IG9wdGlvbnMuZnJvbTsKICAgICAgaWYgKG9wdGlvbnMudG8gIT0gbnVsbCAmJiBvcHRpb25zLnRvIDwgdG8pIHRvID0gb3B0aW9ucy50bzsKICAgICAgdmFyIGNvcHkgPSBuZXcgRG9jKGdldExpbmVzKHRoaXMsIGZyb20sIHRvKSwgb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZU9wdGlvbiwgZnJvbSwgdGhpcy5saW5lU2VwKTsKICAgICAgaWYgKG9wdGlvbnMuc2hhcmVkSGlzdCkgY29weS5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5OwogICAgICAodGhpcy5saW5rZWQgfHwgKHRoaXMubGlua2VkID0gW10pKS5wdXNoKHtkb2M6IGNvcHksIHNoYXJlZEhpc3Q6IG9wdGlvbnMuc2hhcmVkSGlzdH0pOwogICAgICBjb3B5LmxpbmtlZCA9IFt7ZG9jOiB0aGlzLCBpc1BhcmVudDogdHJ1ZSwgc2hhcmVkSGlzdDogb3B0aW9ucy5zaGFyZWRIaXN0fV07CiAgICAgIGNvcHlTaGFyZWRNYXJrZXJzKGNvcHksIGZpbmRTaGFyZWRNYXJrZXJzKHRoaXMpKTsKICAgICAgcmV0dXJuIGNvcHk7CiAgICB9LAogICAgdW5saW5rRG9jOiBmdW5jdGlvbihvdGhlcikgewogICAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBDb2RlTWlycm9yKSBvdGhlciA9IG90aGVyLmRvYzsKICAgICAgaWYgKHRoaXMubGlua2VkKSBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGlua2VkLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIGxpbmsgPSB0aGlzLmxpbmtlZFtpXTsKICAgICAgICBpZiAobGluay5kb2MgIT0gb3RoZXIpIGNvbnRpbnVlOwogICAgICAgIHRoaXMubGlua2VkLnNwbGljZShpLCAxKTsKICAgICAgICBvdGhlci51bmxpbmtEb2ModGhpcyk7CiAgICAgICAgZGV0YWNoU2hhcmVkTWFya2VycyhmaW5kU2hhcmVkTWFya2Vycyh0aGlzKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgLy8gSWYgdGhlIGhpc3RvcmllcyB3ZXJlIHNoYXJlZCwgc3BsaXQgdGhlbSBhZ2FpbgogICAgICBpZiAob3RoZXIuaGlzdG9yeSA9PSB0aGlzLmhpc3RvcnkpIHsKICAgICAgICB2YXIgc3BsaXRJZHMgPSBbb3RoZXIuaWRdOwogICAgICAgIGxpbmtlZERvY3Mob3RoZXIsIGZ1bmN0aW9uKGRvYykge3NwbGl0SWRzLnB1c2goZG9jLmlkKTt9LCB0cnVlKTsKICAgICAgICBvdGhlci5oaXN0b3J5ID0gbmV3IEhpc3RvcnkobnVsbCk7CiAgICAgICAgb3RoZXIuaGlzdG9yeS5kb25lID0gY29weUhpc3RvcnlBcnJheSh0aGlzLmhpc3RvcnkuZG9uZSwgc3BsaXRJZHMpOwogICAgICAgIG90aGVyLmhpc3RvcnkudW5kb25lID0gY29weUhpc3RvcnlBcnJheSh0aGlzLmhpc3RvcnkudW5kb25lLCBzcGxpdElkcyk7CiAgICAgIH0KICAgIH0sCiAgICBpdGVyTGlua2VkRG9jczogZnVuY3Rpb24oZikge2xpbmtlZERvY3ModGhpcywgZik7fSwKCiAgICBnZXRNb2RlOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5tb2RlO30sCiAgICBnZXRFZGl0b3I6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmNtO30sCgogICAgc3BsaXRMaW5lczogZnVuY3Rpb24oc3RyKSB7CiAgICAgIGlmICh0aGlzLmxpbmVTZXApIHJldHVybiBzdHIuc3BsaXQodGhpcy5saW5lU2VwKTsKICAgICAgcmV0dXJuIHNwbGl0TGluZXNBdXRvKHN0cik7CiAgICB9LAogICAgbGluZVNlcGFyYXRvcjogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmxpbmVTZXAgfHwgIlxuIjsgfQogIH0pOwoKICAvLyBQdWJsaWMgYWxpYXMuCiAgRG9jLnByb3RvdHlwZS5lYWNoTGluZSA9IERvYy5wcm90b3R5cGUuaXRlcjsKCiAgLy8gU2V0IHVwIG1ldGhvZHMgb24gQ29kZU1pcnJvcidzIHByb3RvdHlwZSB0byByZWRpcmVjdCB0byB0aGUgZWRpdG9yJ3MgZG9jdW1lbnQuCiAgdmFyIGRvbnREZWxlZ2F0ZSA9ICJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRFZGl0b3IgY29uc3RydWN0b3IiLnNwbGl0KCIgIik7CiAgZm9yICh2YXIgcHJvcCBpbiBEb2MucHJvdG90eXBlKSBpZiAoRG9jLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJiBpbmRleE9mKGRvbnREZWxlZ2F0ZSwgcHJvcCkgPCAwKQogICAgQ29kZU1pcnJvci5wcm90b3R5cGVbcHJvcF0gPSAoZnVuY3Rpb24obWV0aG9kKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtyZXR1cm4gbWV0aG9kLmFwcGx5KHRoaXMuZG9jLCBhcmd1bWVudHMpO307CiAgICB9KShEb2MucHJvdG90eXBlW3Byb3BdKTsKCiAgZXZlbnRNaXhpbihEb2MpOwoKICAvLyBDYWxsIGYgZm9yIGFsbCBsaW5rZWQgZG9jdW1lbnRzLgogIGZ1bmN0aW9uIGxpbmtlZERvY3MoZG9jLCBmLCBzaGFyZWRIaXN0T25seSkgewogICAgZnVuY3Rpb24gcHJvcGFnYXRlKGRvYywgc2tpcCwgc2hhcmVkSGlzdCkgewogICAgICBpZiAoZG9jLmxpbmtlZCkgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2MubGlua2VkLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIHJlbCA9IGRvYy5saW5rZWRbaV07CiAgICAgICAgaWYgKHJlbC5kb2MgPT0gc2tpcCkgY29udGludWU7CiAgICAgICAgdmFyIHNoYXJlZCA9IHNoYXJlZEhpc3QgJiYgcmVsLnNoYXJlZEhpc3Q7CiAgICAgICAgaWYgKHNoYXJlZEhpc3RPbmx5ICYmICFzaGFyZWQpIGNvbnRpbnVlOwogICAgICAgIGYocmVsLmRvYywgc2hhcmVkKTsKICAgICAgICBwcm9wYWdhdGUocmVsLmRvYywgZG9jLCBzaGFyZWQpOwogICAgICB9CiAgICB9CiAgICBwcm9wYWdhdGUoZG9jLCBudWxsLCB0cnVlKTsKICB9CgogIC8vIEF0dGFjaCBhIGRvY3VtZW50IHRvIGFuIGVkaXRvci4KICBmdW5jdGlvbiBhdHRhY2hEb2MoY20sIGRvYykgewogICAgaWYgKGRvYy5jbSkgdGhyb3cgbmV3IEVycm9yKCJUaGlzIGRvY3VtZW50IGlzIGFscmVhZHkgaW4gdXNlLiIpOwogICAgY20uZG9jID0gZG9jOwogICAgZG9jLmNtID0gY207CiAgICBlc3RpbWF0ZUxpbmVIZWlnaHRzKGNtKTsKICAgIGxvYWRNb2RlKGNtKTsKICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIGZpbmRNYXhMaW5lKGNtKTsKICAgIGNtLm9wdGlvbnMubW9kZSA9IGRvYy5tb2RlT3B0aW9uOwogICAgcmVnQ2hhbmdlKGNtKTsKICB9CgogIC8vIExJTkUgVVRJTElUSUVTCgogIC8vIEZpbmQgdGhlIGxpbmUgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgbnVtYmVyLgogIGZ1bmN0aW9uIGdldExpbmUoZG9jLCBuKSB7CiAgICBuIC09IGRvYy5maXJzdDsKICAgIGlmIChuIDwgMCB8fCBuID49IGRvYy5zaXplKSB0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIG5vIGxpbmUgIiArIChuICsgZG9jLmZpcnN0KSArICIgaW4gdGhlIGRvY3VtZW50LiIpOwogICAgZm9yICh2YXIgY2h1bmsgPSBkb2M7ICFjaHVuay5saW5lczspIHsKICAgICAgZm9yICh2YXIgaSA9IDA7OyArK2kpIHsKICAgICAgICB2YXIgY2hpbGQgPSBjaHVuay5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTsKICAgICAgICBpZiAobiA8IHN6KSB7IGNodW5rID0gY2hpbGQ7IGJyZWFrOyB9CiAgICAgICAgbiAtPSBzejsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNodW5rLmxpbmVzW25dOwogIH0KCiAgLy8gR2V0IHRoZSBwYXJ0IG9mIGEgZG9jdW1lbnQgYmV0d2VlbiB0d28gcG9zaXRpb25zLCBhcyBhbiBhcnJheSBvZgogIC8vIHN0cmluZ3MuCiAgZnVuY3Rpb24gZ2V0QmV0d2Vlbihkb2MsIHN0YXJ0LCBlbmQpIHsKICAgIHZhciBvdXQgPSBbXSwgbiA9IHN0YXJ0LmxpbmU7CiAgICBkb2MuaXRlcihzdGFydC5saW5lLCBlbmQubGluZSArIDEsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgdmFyIHRleHQgPSBsaW5lLnRleHQ7CiAgICAgIGlmIChuID09IGVuZC5saW5lKSB0ZXh0ID0gdGV4dC5zbGljZSgwLCBlbmQuY2gpOwogICAgICBpZiAobiA9PSBzdGFydC5saW5lKSB0ZXh0ID0gdGV4dC5zbGljZShzdGFydC5jaCk7CiAgICAgIG91dC5wdXNoKHRleHQpOwogICAgICArK247CiAgICB9KTsKICAgIHJldHVybiBvdXQ7CiAgfQogIC8vIEdldCB0aGUgbGluZXMgYmV0d2VlbiBmcm9tIGFuZCB0bywgYXMgYXJyYXkgb2Ygc3RyaW5ncy4KICBmdW5jdGlvbiBnZXRMaW5lcyhkb2MsIGZyb20sIHRvKSB7CiAgICB2YXIgb3V0ID0gW107CiAgICBkb2MuaXRlcihmcm9tLCB0bywgZnVuY3Rpb24obGluZSkgeyBvdXQucHVzaChsaW5lLnRleHQpOyB9KTsKICAgIHJldHVybiBvdXQ7CiAgfQoKICAvLyBVcGRhdGUgdGhlIGhlaWdodCBvZiBhIGxpbmUsIHByb3BhZ2F0aW5nIHRoZSBoZWlnaHQgY2hhbmdlCiAgLy8gdXB3YXJkcyB0byBwYXJlbnQgbm9kZXMuCiAgZnVuY3Rpb24gdXBkYXRlTGluZUhlaWdodChsaW5lLCBoZWlnaHQpIHsKICAgIHZhciBkaWZmID0gaGVpZ2h0IC0gbGluZS5oZWlnaHQ7CiAgICBpZiAoZGlmZikgZm9yICh2YXIgbiA9IGxpbmU7IG47IG4gPSBuLnBhcmVudCkgbi5oZWlnaHQgKz0gZGlmZjsKICB9CgogIC8vIEdpdmVuIGEgbGluZSBvYmplY3QsIGZpbmQgaXRzIGxpbmUgbnVtYmVyIGJ5IHdhbGtpbmcgdXAgdGhyb3VnaAogIC8vIGl0cyBwYXJlbnQgbGlua3MuCiAgZnVuY3Rpb24gbGluZU5vKGxpbmUpIHsKICAgIGlmIChsaW5lLnBhcmVudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHZhciBjdXIgPSBsaW5lLnBhcmVudCwgbm8gPSBpbmRleE9mKGN1ci5saW5lcywgbGluZSk7CiAgICBmb3IgKHZhciBjaHVuayA9IGN1ci5wYXJlbnQ7IGNodW5rOyBjdXIgPSBjaHVuaywgY2h1bmsgPSBjaHVuay5wYXJlbnQpIHsKICAgICAgZm9yICh2YXIgaSA9IDA7OyArK2kpIHsKICAgICAgICBpZiAoY2h1bmsuY2hpbGRyZW5baV0gPT0gY3VyKSBicmVhazsKICAgICAgICBubyArPSBjaHVuay5jaGlsZHJlbltpXS5jaHVua1NpemUoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5vICsgY3VyLmZpcnN0OwogIH0KCiAgLy8gRmluZCB0aGUgbGluZSBhdCB0aGUgZ2l2ZW4gdmVydGljYWwgcG9zaXRpb24sIHVzaW5nIHRoZSBoZWlnaHQKICAvLyBpbmZvcm1hdGlvbiBpbiB0aGUgZG9jdW1lbnQgdHJlZS4KICBmdW5jdGlvbiBsaW5lQXRIZWlnaHQoY2h1bmssIGgpIHsKICAgIHZhciBuID0gY2h1bmsuZmlyc3Q7CiAgICBvdXRlcjogZG8gewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNodW5rLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIGNoaWxkID0gY2h1bmsuY2hpbGRyZW5baV0sIGNoID0gY2hpbGQuaGVpZ2h0OwogICAgICAgIGlmIChoIDwgY2gpIHsgY2h1bmsgPSBjaGlsZDsgY29udGludWUgb3V0ZXI7IH0KICAgICAgICBoIC09IGNoOwogICAgICAgIG4gKz0gY2hpbGQuY2h1bmtTaXplKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG47CiAgICB9IHdoaWxlICghY2h1bmsubGluZXMpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaHVuay5saW5lcy5sZW5ndGg7ICsraSkgewogICAgICB2YXIgbGluZSA9IGNodW5rLmxpbmVzW2ldLCBsaCA9IGxpbmUuaGVpZ2h0OwogICAgICBpZiAoaCA8IGxoKSBicmVhazsKICAgICAgaCAtPSBsaDsKICAgIH0KICAgIHJldHVybiBuICsgaTsKICB9CgoKICAvLyBGaW5kIHRoZSBoZWlnaHQgYWJvdmUgdGhlIGdpdmVuIGxpbmUuCiAgZnVuY3Rpb24gaGVpZ2h0QXRMaW5lKGxpbmVPYmopIHsKICAgIGxpbmVPYmogPSB2aXN1YWxMaW5lKGxpbmVPYmopOwoKICAgIHZhciBoID0gMCwgY2h1bmsgPSBsaW5lT2JqLnBhcmVudDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2h1bmsubGluZXMubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIGxpbmUgPSBjaHVuay5saW5lc1tpXTsKICAgICAgaWYgKGxpbmUgPT0gbGluZU9iaikgYnJlYWs7CiAgICAgIGVsc2UgaCArPSBsaW5lLmhlaWdodDsKICAgIH0KICAgIGZvciAodmFyIHAgPSBjaHVuay5wYXJlbnQ7IHA7IGNodW5rID0gcCwgcCA9IGNodW5rLnBhcmVudCkgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHAuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsKICAgICAgICB2YXIgY3VyID0gcC5jaGlsZHJlbltpXTsKICAgICAgICBpZiAoY3VyID09IGNodW5rKSBicmVhazsKICAgICAgICBlbHNlIGggKz0gY3VyLmhlaWdodDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGg7CiAgfQoKICAvLyBHZXQgdGhlIGJpZGkgb3JkZXJpbmcgZm9yIHRoZSBnaXZlbiBsaW5lIChhbmQgY2FjaGUgaXQpLiBSZXR1cm5zCiAgLy8gZmFsc2UgZm9yIGxpbmVzIHRoYXQgYXJlIGZ1bGx5IGxlZnQtdG8tcmlnaHQsIGFuZCBhbiBhcnJheSBvZgogIC8vIEJpZGlTcGFuIG9iamVjdHMgb3RoZXJ3aXNlLgogIGZ1bmN0aW9uIGdldE9yZGVyKGxpbmUpIHsKICAgIHZhciBvcmRlciA9IGxpbmUub3JkZXI7CiAgICBpZiAob3JkZXIgPT0gbnVsbCkgb3JkZXIgPSBsaW5lLm9yZGVyID0gYmlkaU9yZGVyaW5nKGxpbmUudGV4dCk7CiAgICByZXR1cm4gb3JkZXI7CiAgfQoKICAvLyBISVNUT1JZCgogIGZ1bmN0aW9uIEhpc3Rvcnkoc3RhcnRHZW4pIHsKICAgIC8vIEFycmF5cyBvZiBjaGFuZ2UgZXZlbnRzIGFuZCBzZWxlY3Rpb25zLiBEb2luZyBzb21ldGhpbmcgYWRkcyBhbgogICAgLy8gZXZlbnQgdG8gZG9uZSBhbmQgY2xlYXJzIHVuZG8uIFVuZG9pbmcgbW92ZXMgZXZlbnRzIGZyb20gZG9uZQogICAgLy8gdG8gdW5kb25lLCByZWRvaW5nIG1vdmVzIHRoZW0gaW4gdGhlIG90aGVyIGRpcmVjdGlvbi4KICAgIHRoaXMuZG9uZSA9IFtdOyB0aGlzLnVuZG9uZSA9IFtdOwogICAgdGhpcy51bmRvRGVwdGggPSBJbmZpbml0eTsKICAgIC8vIFVzZWQgdG8gdHJhY2sgd2hlbiBjaGFuZ2VzIGNhbiBiZSBtZXJnZWQgaW50byBhIHNpbmdsZSB1bmRvCiAgICAvLyBldmVudAogICAgdGhpcy5sYXN0TW9kVGltZSA9IHRoaXMubGFzdFNlbFRpbWUgPSAwOwogICAgdGhpcy5sYXN0T3AgPSB0aGlzLmxhc3RTZWxPcCA9IG51bGw7CiAgICB0aGlzLmxhc3RPcmlnaW4gPSB0aGlzLmxhc3RTZWxPcmlnaW4gPSBudWxsOwogICAgLy8gVXNlZCBieSB0aGUgaXNDbGVhbigpIG1ldGhvZAogICAgdGhpcy5nZW5lcmF0aW9uID0gdGhpcy5tYXhHZW5lcmF0aW9uID0gc3RhcnRHZW4gfHwgMTsKICB9CgogIC8vIENyZWF0ZSBhIGhpc3RvcnkgY2hhbmdlIGV2ZW50IGZyb20gYW4gdXBkYXRlRG9jLXN0eWxlIGNoYW5nZQogIC8vIG9iamVjdC4KICBmdW5jdGlvbiBoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShkb2MsIGNoYW5nZSkgewogICAgdmFyIGhpc3RDaGFuZ2UgPSB7ZnJvbTogY29weVBvcyhjaGFuZ2UuZnJvbSksIHRvOiBjaGFuZ2VFbmQoY2hhbmdlKSwgdGV4dDogZ2V0QmV0d2Vlbihkb2MsIGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pfTsKICAgIGF0dGFjaExvY2FsU3BhbnMoZG9jLCBoaXN0Q2hhbmdlLCBjaGFuZ2UuZnJvbS5saW5lLCBjaGFuZ2UudG8ubGluZSArIDEpOwogICAgbGlua2VkRG9jcyhkb2MsIGZ1bmN0aW9uKGRvYykge2F0dGFjaExvY2FsU3BhbnMoZG9jLCBoaXN0Q2hhbmdlLCBjaGFuZ2UuZnJvbS5saW5lLCBjaGFuZ2UudG8ubGluZSArIDEpO30sIHRydWUpOwogICAgcmV0dXJuIGhpc3RDaGFuZ2U7CiAgfQoKICAvLyBQb3AgYWxsIHNlbGVjdGlvbiBldmVudHMgb2ZmIHRoZSBlbmQgb2YgYSBoaXN0b3J5IGFycmF5LiBTdG9wIGF0CiAgLy8gYSBjaGFuZ2UgZXZlbnQuCiAgZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb25FdmVudHMoYXJyYXkpIHsKICAgIHdoaWxlIChhcnJheS5sZW5ndGgpIHsKICAgICAgdmFyIGxhc3QgPSBsc3QoYXJyYXkpOwogICAgICBpZiAobGFzdC5yYW5nZXMpIGFycmF5LnBvcCgpOwogICAgICBlbHNlIGJyZWFrOwogICAgfQogIH0KCiAgLy8gRmluZCB0aGUgdG9wIGNoYW5nZSBldmVudCBpbiB0aGUgaGlzdG9yeS4gUG9wIG9mZiBzZWxlY3Rpb24KICAvLyBldmVudHMgdGhhdCBhcmUgaW4gdGhlIHdheS4KICBmdW5jdGlvbiBsYXN0Q2hhbmdlRXZlbnQoaGlzdCwgZm9yY2UpIHsKICAgIGlmIChmb3JjZSkgewogICAgICBjbGVhclNlbGVjdGlvbkV2ZW50cyhoaXN0LmRvbmUpOwogICAgICByZXR1cm4gbHN0KGhpc3QuZG9uZSk7CiAgICB9IGVsc2UgaWYgKGhpc3QuZG9uZS5sZW5ndGggJiYgIWxzdChoaXN0LmRvbmUpLnJhbmdlcykgewogICAgICByZXR1cm4gbHN0KGhpc3QuZG9uZSk7CiAgICB9IGVsc2UgaWYgKGhpc3QuZG9uZS5sZW5ndGggPiAxICYmICFoaXN0LmRvbmVbaGlzdC5kb25lLmxlbmd0aCAtIDJdLnJhbmdlcykgewogICAgICBoaXN0LmRvbmUucG9wKCk7CiAgICAgIHJldHVybiBsc3QoaGlzdC5kb25lKTsKICAgIH0KICB9CgogIC8vIFJlZ2lzdGVyIGEgY2hhbmdlIGluIHRoZSBoaXN0b3J5LiBNZXJnZXMgY2hhbmdlcyB0aGF0IGFyZSB3aXRoaW4KICAvLyBhIHNpbmdsZSBvcGVyYXRpb24sIG9yZSBhcmUgY2xvc2UgdG9nZXRoZXIgd2l0aCBhbiBvcmlnaW4gdGhhdAogIC8vIGFsbG93cyBtZXJnaW5nIChzdGFydGluZyB3aXRoICIrIikgaW50byBhIHNpbmdsZSBldmVudC4KICBmdW5jdGlvbiBhZGRDaGFuZ2VUb0hpc3RvcnkoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBvcElkKSB7CiAgICB2YXIgaGlzdCA9IGRvYy5oaXN0b3J5OwogICAgaGlzdC51bmRvbmUubGVuZ3RoID0gMDsKICAgIHZhciB0aW1lID0gK25ldyBEYXRlLCBjdXI7CgogICAgaWYgKChoaXN0Lmxhc3RPcCA9PSBvcElkIHx8CiAgICAgICAgIGhpc3QubGFzdE9yaWdpbiA9PSBjaGFuZ2Uub3JpZ2luICYmIGNoYW5nZS5vcmlnaW4gJiYKICAgICAgICAgKChjaGFuZ2Uub3JpZ2luLmNoYXJBdCgwKSA9PSAiKyIgJiYgZG9jLmNtICYmIGhpc3QubGFzdE1vZFRpbWUgPiB0aW1lIC0gZG9jLmNtLm9wdGlvbnMuaGlzdG9yeUV2ZW50RGVsYXkpIHx8CiAgICAgICAgICBjaGFuZ2Uub3JpZ2luLmNoYXJBdCgwKSA9PSAiKiIpKSAmJgogICAgICAgIChjdXIgPSBsYXN0Q2hhbmdlRXZlbnQoaGlzdCwgaGlzdC5sYXN0T3AgPT0gb3BJZCkpKSB7CiAgICAgIC8vIE1lcmdlIHRoaXMgY2hhbmdlIGludG8gdGhlIGxhc3QgZXZlbnQKICAgICAgdmFyIGxhc3QgPSBsc3QoY3VyLmNoYW5nZXMpOwogICAgICBpZiAoY21wKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pID09IDAgJiYgY21wKGNoYW5nZS5mcm9tLCBsYXN0LnRvKSA9PSAwKSB7CiAgICAgICAgLy8gT3B0aW1pemVkIGNhc2UgZm9yIHNpbXBsZSBpbnNlcnRpb24gLS0gZG9uJ3Qgd2FudCB0byBhZGQKICAgICAgICAvLyBuZXcgY2hhbmdlc2V0cyBmb3IgZXZlcnkgY2hhcmFjdGVyIHR5cGVkCiAgICAgICAgbGFzdC50byA9IGNoYW5nZUVuZChjaGFuZ2UpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIEFkZCBuZXcgc3ViLWV2ZW50CiAgICAgICAgY3VyLmNoYW5nZXMucHVzaChoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShkb2MsIGNoYW5nZSkpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBDYW4gbm90IGJlIG1lcmdlZCwgc3RhcnQgYSBuZXcgZXZlbnQuCiAgICAgIHZhciBiZWZvcmUgPSBsc3QoaGlzdC5kb25lKTsKICAgICAgaWYgKCFiZWZvcmUgfHwgIWJlZm9yZS5yYW5nZXMpCiAgICAgICAgcHVzaFNlbGVjdGlvblRvSGlzdG9yeShkb2Muc2VsLCBoaXN0LmRvbmUpOwogICAgICBjdXIgPSB7Y2hhbmdlczogW2hpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKV0sCiAgICAgICAgICAgICBnZW5lcmF0aW9uOiBoaXN0LmdlbmVyYXRpb259OwogICAgICBoaXN0LmRvbmUucHVzaChjdXIpOwogICAgICB3aGlsZSAoaGlzdC5kb25lLmxlbmd0aCA+IGhpc3QudW5kb0RlcHRoKSB7CiAgICAgICAgaGlzdC5kb25lLnNoaWZ0KCk7CiAgICAgICAgaWYgKCFoaXN0LmRvbmVbMF0ucmFuZ2VzKSBoaXN0LmRvbmUuc2hpZnQoKTsKICAgICAgfQogICAgfQogICAgaGlzdC5kb25lLnB1c2goc2VsQWZ0ZXIpOwogICAgaGlzdC5nZW5lcmF0aW9uID0gKytoaXN0Lm1heEdlbmVyYXRpb247CiAgICBoaXN0Lmxhc3RNb2RUaW1lID0gaGlzdC5sYXN0U2VsVGltZSA9IHRpbWU7CiAgICBoaXN0Lmxhc3RPcCA9IGhpc3QubGFzdFNlbE9wID0gb3BJZDsKICAgIGhpc3QubGFzdE9yaWdpbiA9IGhpc3QubGFzdFNlbE9yaWdpbiA9IGNoYW5nZS5vcmlnaW47CgogICAgaWYgKCFsYXN0KSBzaWduYWwoZG9jLCAiaGlzdG9yeUFkZGVkIik7CiAgfQoKICBmdW5jdGlvbiBzZWxlY3Rpb25FdmVudENhbkJlTWVyZ2VkKGRvYywgb3JpZ2luLCBwcmV2LCBzZWwpIHsKICAgIHZhciBjaCA9IG9yaWdpbi5jaGFyQXQoMCk7CiAgICByZXR1cm4gY2ggPT0gIioiIHx8CiAgICAgIGNoID09ICIrIiAmJgogICAgICBwcmV2LnJhbmdlcy5sZW5ndGggPT0gc2VsLnJhbmdlcy5sZW5ndGggJiYKICAgICAgcHJldi5zb21ldGhpbmdTZWxlY3RlZCgpID09IHNlbC5zb21ldGhpbmdTZWxlY3RlZCgpICYmCiAgICAgIG5ldyBEYXRlIC0gZG9jLmhpc3RvcnkubGFzdFNlbFRpbWUgPD0gKGRvYy5jbSA/IGRvYy5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5IDogNTAwKTsKICB9CgogIC8vIENhbGxlZCB3aGVuZXZlciB0aGUgc2VsZWN0aW9uIGNoYW5nZXMsIHNldHMgdGhlIG5ldyBzZWxlY3Rpb24gYXMKICAvLyB0aGUgcGVuZGluZyBzZWxlY3Rpb24gaW4gdGhlIGhpc3RvcnksIGFuZCBwdXNoZXMgdGhlIG9sZCBwZW5kaW5nCiAgLy8gc2VsZWN0aW9uIGludG8gdGhlICdkb25lJyBhcnJheSB3aGVuIGl0IHdhcyBzaWduaWZpY2FudGx5CiAgLy8gZGlmZmVyZW50IChpbiBudW1iZXIgb2Ygc2VsZWN0ZWQgcmFuZ2VzLCBlbXB0aW5lc3MsIG9yIHRpbWUpLgogIGZ1bmN0aW9uIGFkZFNlbGVjdGlvblRvSGlzdG9yeShkb2MsIHNlbCwgb3BJZCwgb3B0aW9ucykgewogICAgdmFyIGhpc3QgPSBkb2MuaGlzdG9yeSwgb3JpZ2luID0gb3B0aW9ucyAmJiBvcHRpb25zLm9yaWdpbjsKCiAgICAvLyBBIG5ldyBldmVudCBpcyBzdGFydGVkIHdoZW4gdGhlIHByZXZpb3VzIG9yaWdpbiBkb2VzIG5vdCBtYXRjaAogICAgLy8gdGhlIGN1cnJlbnQsIG9yIHRoZSBvcmlnaW5zIGRvbid0IGFsbG93IG1hdGNoaW5nLiBPcmlnaW5zCiAgICAvLyBzdGFydGluZyB3aXRoICogYXJlIGFsd2F5cyBtZXJnZWQsIHRob3NlIHN0YXJ0aW5nIHdpdGggKyBhcmUKICAgIC8vIG1lcmdlZCB3aGVuIHNpbWlsYXIgYW5kIGNsb3NlIHRvZ2V0aGVyIGluIHRpbWUuCiAgICBpZiAob3BJZCA9PSBoaXN0Lmxhc3RTZWxPcCB8fAogICAgICAgIChvcmlnaW4gJiYgaGlzdC5sYXN0U2VsT3JpZ2luID09IG9yaWdpbiAmJgogICAgICAgICAoaGlzdC5sYXN0TW9kVGltZSA9PSBoaXN0Lmxhc3RTZWxUaW1lICYmIGhpc3QubGFzdE9yaWdpbiA9PSBvcmlnaW4gfHwKICAgICAgICAgIHNlbGVjdGlvbkV2ZW50Q2FuQmVNZXJnZWQoZG9jLCBvcmlnaW4sIGxzdChoaXN0LmRvbmUpLCBzZWwpKSkpCiAgICAgIGhpc3QuZG9uZVtoaXN0LmRvbmUubGVuZ3RoIC0gMV0gPSBzZWw7CiAgICBlbHNlCiAgICAgIHB1c2hTZWxlY3Rpb25Ub0hpc3Rvcnkoc2VsLCBoaXN0LmRvbmUpOwoKICAgIGhpc3QubGFzdFNlbFRpbWUgPSArbmV3IERhdGU7CiAgICBoaXN0Lmxhc3RTZWxPcmlnaW4gPSBvcmlnaW47CiAgICBoaXN0Lmxhc3RTZWxPcCA9IG9wSWQ7CiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmNsZWFyUmVkbyAhPT0gZmFsc2UpCiAgICAgIGNsZWFyU2VsZWN0aW9uRXZlbnRzKGhpc3QudW5kb25lKTsKICB9CgogIGZ1bmN0aW9uIHB1c2hTZWxlY3Rpb25Ub0hpc3Rvcnkoc2VsLCBkZXN0KSB7CiAgICB2YXIgdG9wID0gbHN0KGRlc3QpOwogICAgaWYgKCEodG9wICYmIHRvcC5yYW5nZXMgJiYgdG9wLmVxdWFscyhzZWwpKSkKICAgICAgZGVzdC5wdXNoKHNlbCk7CiAgfQoKICAvLyBVc2VkIHRvIHN0b3JlIG1hcmtlZCBzcGFuIGluZm9ybWF0aW9uIGluIHRoZSBoaXN0b3J5LgogIGZ1bmN0aW9uIGF0dGFjaExvY2FsU3BhbnMoZG9jLCBjaGFuZ2UsIGZyb20sIHRvKSB7CiAgICB2YXIgZXhpc3RpbmcgPSBjaGFuZ2VbInNwYW5zXyIgKyBkb2MuaWRdLCBuID0gMDsKICAgIGRvYy5pdGVyKE1hdGgubWF4KGRvYy5maXJzdCwgZnJvbSksIE1hdGgubWluKGRvYy5maXJzdCArIGRvYy5zaXplLCB0byksIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgaWYgKGxpbmUubWFya2VkU3BhbnMpCiAgICAgICAgKGV4aXN0aW5nIHx8IChleGlzdGluZyA9IGNoYW5nZVsic3BhbnNfIiArIGRvYy5pZF0gPSB7fSkpW25dID0gbGluZS5tYXJrZWRTcGFuczsKICAgICAgKytuOwogICAgfSk7CiAgfQoKICAvLyBXaGVuIHVuL3JlLWRvaW5nIHJlc3RvcmVzIHRleHQgY29udGFpbmluZyBtYXJrZWQgc3BhbnMsIHRob3NlCiAgLy8gdGhhdCBoYXZlIGJlZW4gZXhwbGljaXRseSBjbGVhcmVkIHNob3VsZCBub3QgYmUgcmVzdG9yZWQuCiAgZnVuY3Rpb24gcmVtb3ZlQ2xlYXJlZFNwYW5zKHNwYW5zKSB7CiAgICBpZiAoIXNwYW5zKSByZXR1cm4gbnVsbDsKICAgIGZvciAodmFyIGkgPSAwLCBvdXQ7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkgewogICAgICBpZiAoc3BhbnNbaV0ubWFya2VyLmV4cGxpY2l0bHlDbGVhcmVkKSB7IGlmICghb3V0KSBvdXQgPSBzcGFucy5zbGljZSgwLCBpKTsgfQogICAgICBlbHNlIGlmIChvdXQpIG91dC5wdXNoKHNwYW5zW2ldKTsKICAgIH0KICAgIHJldHVybiAhb3V0ID8gc3BhbnMgOiBvdXQubGVuZ3RoID8gb3V0IDogbnVsbDsKICB9CgogIC8vIFJldHJpZXZlIGFuZCBmaWx0ZXIgdGhlIG9sZCBtYXJrZWQgc3BhbnMgc3RvcmVkIGluIGEgY2hhbmdlIGV2ZW50LgogIGZ1bmN0aW9uIGdldE9sZFNwYW5zKGRvYywgY2hhbmdlKSB7CiAgICB2YXIgZm91bmQgPSBjaGFuZ2VbInNwYW5zXyIgKyBkb2MuaWRdOwogICAgaWYgKCFmb3VuZCkgcmV0dXJuIG51bGw7CiAgICBmb3IgKHZhciBpID0gMCwgbncgPSBbXTsgaSA8IGNoYW5nZS50ZXh0Lmxlbmd0aDsgKytpKQogICAgICBudy5wdXNoKHJlbW92ZUNsZWFyZWRTcGFucyhmb3VuZFtpXSkpOwogICAgcmV0dXJuIG53OwogIH0KCiAgLy8gVXNlZCBib3RoIHRvIHByb3ZpZGUgYSBKU09OLXNhZmUgb2JqZWN0IGluIC5nZXRIaXN0b3J5LCBhbmQsIHdoZW4KICAvLyBkZXRhY2hpbmcgYSBkb2N1bWVudCwgdG8gc3BsaXQgdGhlIGhpc3RvcnkgaW4gdHdvCiAgZnVuY3Rpb24gY29weUhpc3RvcnlBcnJheShldmVudHMsIG5ld0dyb3VwLCBpbnN0YW50aWF0ZVNlbCkgewogICAgZm9yICh2YXIgaSA9IDAsIGNvcHkgPSBbXTsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkgewogICAgICB2YXIgZXZlbnQgPSBldmVudHNbaV07CiAgICAgIGlmIChldmVudC5yYW5nZXMpIHsKICAgICAgICBjb3B5LnB1c2goaW5zdGFudGlhdGVTZWwgPyBTZWxlY3Rpb24ucHJvdG90eXBlLmRlZXBDb3B5LmNhbGwoZXZlbnQpIDogZXZlbnQpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHZhciBjaGFuZ2VzID0gZXZlbnQuY2hhbmdlcywgbmV3Q2hhbmdlcyA9IFtdOwogICAgICBjb3B5LnB1c2goe2NoYW5nZXM6IG5ld0NoYW5nZXN9KTsKICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaGFuZ2VzLmxlbmd0aDsgKytqKSB7CiAgICAgICAgdmFyIGNoYW5nZSA9IGNoYW5nZXNbal0sIG07CiAgICAgICAgbmV3Q2hhbmdlcy5wdXNoKHtmcm9tOiBjaGFuZ2UuZnJvbSwgdG86IGNoYW5nZS50bywgdGV4dDogY2hhbmdlLnRleHR9KTsKICAgICAgICBpZiAobmV3R3JvdXApIGZvciAodmFyIHByb3AgaW4gY2hhbmdlKSBpZiAobSA9IHByb3AubWF0Y2goL15zcGFuc18oXGQrKSQvKSkgewogICAgICAgICAgaWYgKGluZGV4T2YobmV3R3JvdXAsIE51bWJlcihtWzFdKSkgPiAtMSkgewogICAgICAgICAgICBsc3QobmV3Q2hhbmdlcylbcHJvcF0gPSBjaGFuZ2VbcHJvcF07CiAgICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VbcHJvcF07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gY29weTsKICB9CgogIC8vIFJlYmFzaW5nL3Jlc2V0dGluZyBoaXN0b3J5IHRvIGRlYWwgd2l0aCBleHRlcm5hbGx5LXNvdXJjZWQgY2hhbmdlcwoKICBmdW5jdGlvbiByZWJhc2VIaXN0U2VsU2luZ2xlKHBvcywgZnJvbSwgdG8sIGRpZmYpIHsKICAgIGlmICh0byA8IHBvcy5saW5lKSB7CiAgICAgIHBvcy5saW5lICs9IGRpZmY7CiAgICB9IGVsc2UgaWYgKGZyb20gPCBwb3MubGluZSkgewogICAgICBwb3MubGluZSA9IGZyb207CiAgICAgIHBvcy5jaCA9IDA7CiAgICB9CiAgfQoKICAvLyBUcmllcyB0byByZWJhc2UgYW4gYXJyYXkgb2YgaGlzdG9yeSBldmVudHMgZ2l2ZW4gYSBjaGFuZ2UgaW4gdGhlCiAgLy8gZG9jdW1lbnQuIElmIHRoZSBjaGFuZ2UgdG91Y2hlcyB0aGUgc2FtZSBsaW5lcyBhcyB0aGUgZXZlbnQsIHRoZQogIC8vIGV2ZW50LCBhbmQgZXZlcnl0aGluZyAnYmVoaW5kJyBpdCwgaXMgZGlzY2FyZGVkLiBJZiB0aGUgY2hhbmdlIGlzCiAgLy8gYmVmb3JlIHRoZSBldmVudCwgdGhlIGV2ZW50J3MgcG9zaXRpb25zIGFyZSB1cGRhdGVkLiBVc2VzIGEKICAvLyBjb3B5LW9uLXdyaXRlIHNjaGVtZSBmb3IgdGhlIHBvc2l0aW9ucywgdG8gYXZvaWQgaGF2aW5nIHRvCiAgLy8gcmVhbGxvY2F0ZSB0aGVtIGFsbCBvbiBldmVyeSByZWJhc2UsIGJ1dCBhbHNvIGF2b2lkIHByb2JsZW1zIHdpdGgKICAvLyBzaGFyZWQgcG9zaXRpb24gb2JqZWN0cyBiZWluZyB1bnNhZmVseSB1cGRhdGVkLgogIGZ1bmN0aW9uIHJlYmFzZUhpc3RBcnJheShhcnJheSwgZnJvbSwgdG8sIGRpZmYpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIHN1YiA9IGFycmF5W2ldLCBvayA9IHRydWU7CiAgICAgIGlmIChzdWIucmFuZ2VzKSB7CiAgICAgICAgaWYgKCFzdWIuY29waWVkKSB7IHN1YiA9IGFycmF5W2ldID0gc3ViLmRlZXBDb3B5KCk7IHN1Yi5jb3BpZWQgPSB0cnVlOyB9CiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdWIucmFuZ2VzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICByZWJhc2VIaXN0U2VsU2luZ2xlKHN1Yi5yYW5nZXNbal0uYW5jaG9yLCBmcm9tLCB0bywgZGlmZik7CiAgICAgICAgICByZWJhc2VIaXN0U2VsU2luZ2xlKHN1Yi5yYW5nZXNbal0uaGVhZCwgZnJvbSwgdG8sIGRpZmYpOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1Yi5jaGFuZ2VzLmxlbmd0aDsgKytqKSB7CiAgICAgICAgdmFyIGN1ciA9IHN1Yi5jaGFuZ2VzW2pdOwogICAgICAgIGlmICh0byA8IGN1ci5mcm9tLmxpbmUpIHsKICAgICAgICAgIGN1ci5mcm9tID0gUG9zKGN1ci5mcm9tLmxpbmUgKyBkaWZmLCBjdXIuZnJvbS5jaCk7CiAgICAgICAgICBjdXIudG8gPSBQb3MoY3VyLnRvLmxpbmUgKyBkaWZmLCBjdXIudG8uY2gpOwogICAgICAgIH0gZWxzZSBpZiAoZnJvbSA8PSBjdXIudG8ubGluZSkgewogICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIW9rKSB7CiAgICAgICAgYXJyYXkuc3BsaWNlKDAsIGkgKyAxKTsKICAgICAgICBpID0gMDsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gcmViYXNlSGlzdChoaXN0LCBjaGFuZ2UpIHsKICAgIHZhciBmcm9tID0gY2hhbmdlLmZyb20ubGluZSwgdG8gPSBjaGFuZ2UudG8ubGluZSwgZGlmZiA9IGNoYW5nZS50ZXh0Lmxlbmd0aCAtICh0byAtIGZyb20pIC0gMTsKICAgIHJlYmFzZUhpc3RBcnJheShoaXN0LmRvbmUsIGZyb20sIHRvLCBkaWZmKTsKICAgIHJlYmFzZUhpc3RBcnJheShoaXN0LnVuZG9uZSwgZnJvbSwgdG8sIGRpZmYpOwogIH0KCiAgLy8gRVZFTlQgVVRJTElUSUVTCgogIC8vIER1ZSB0byB0aGUgZmFjdCB0aGF0IHdlIHN0aWxsIHN1cHBvcnQganVyYXNzaWMgSUUgdmVyc2lvbnMsIHNvbWUKICAvLyBjb21wYXRpYmlsaXR5IHdyYXBwZXJzIGFyZSBuZWVkZWQuCgogIHZhciBlX3ByZXZlbnREZWZhdWx0ID0gQ29kZU1pcnJvci5lX3ByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oZSkgewogICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTsKICAgIGVsc2UgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOwogIH07CiAgdmFyIGVfc3RvcFByb3BhZ2F0aW9uID0gQ29kZU1pcnJvci5lX3N0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKGUpIHsKICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgIGVsc2UgZS5jYW5jZWxCdWJibGUgPSB0cnVlOwogIH07CiAgZnVuY3Rpb24gZV9kZWZhdWx0UHJldmVudGVkKGUpIHsKICAgIHJldHVybiBlLmRlZmF1bHRQcmV2ZW50ZWQgIT0gbnVsbCA/IGUuZGVmYXVsdFByZXZlbnRlZCA6IGUucmV0dXJuVmFsdWUgPT0gZmFsc2U7CiAgfQogIHZhciBlX3N0b3AgPSBDb2RlTWlycm9yLmVfc3RvcCA9IGZ1bmN0aW9uKGUpIHtlX3ByZXZlbnREZWZhdWx0KGUpOyBlX3N0b3BQcm9wYWdhdGlvbihlKTt9OwoKICBmdW5jdGlvbiBlX3RhcmdldChlKSB7cmV0dXJuIGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDt9CiAgZnVuY3Rpb24gZV9idXR0b24oZSkgewogICAgdmFyIGIgPSBlLndoaWNoOwogICAgaWYgKGIgPT0gbnVsbCkgewogICAgICBpZiAoZS5idXR0b24gJiAxKSBiID0gMTsKICAgICAgZWxzZSBpZiAoZS5idXR0b24gJiAyKSBiID0gMzsKICAgICAgZWxzZSBpZiAoZS5idXR0b24gJiA0KSBiID0gMjsKICAgIH0KICAgIGlmIChtYWMgJiYgZS5jdHJsS2V5ICYmIGIgPT0gMSkgYiA9IDM7CiAgICByZXR1cm4gYjsKICB9CgogIC8vIEVWRU5UIEhBTkRMSU5HCgogIC8vIExpZ2h0d2VpZ2h0IGV2ZW50IGZyYW1ld29yay4gb24vb2ZmIGFsc28gd29yayBvbiBET00gbm9kZXMsCiAgLy8gcmVnaXN0ZXJpbmcgbmF0aXZlIERPTSBoYW5kbGVycy4KCiAgdmFyIG9uID0gQ29kZU1pcnJvci5vbiA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUsIGYpIHsKICAgIGlmIChlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIpCiAgICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmLCBmYWxzZSk7CiAgICBlbHNlIGlmIChlbWl0dGVyLmF0dGFjaEV2ZW50KQogICAgICBlbWl0dGVyLmF0dGFjaEV2ZW50KCJvbiIgKyB0eXBlLCBmKTsKICAgIGVsc2UgewogICAgICB2YXIgbWFwID0gZW1pdHRlci5faGFuZGxlcnMgfHwgKGVtaXR0ZXIuX2hhbmRsZXJzID0ge30pOwogICAgICB2YXIgYXJyID0gbWFwW3R5cGVdIHx8IChtYXBbdHlwZV0gPSBbXSk7CiAgICAgIGFyci5wdXNoKGYpOwogICAgfQogIH07CgogIHZhciBub0hhbmRsZXJzID0gW10KICBmdW5jdGlvbiBnZXRIYW5kbGVycyhlbWl0dGVyLCB0eXBlLCBjb3B5KSB7CiAgICB2YXIgYXJyID0gZW1pdHRlci5faGFuZGxlcnMgJiYgZW1pdHRlci5faGFuZGxlcnNbdHlwZV0KICAgIGlmIChjb3B5KSByZXR1cm4gYXJyICYmIGFyci5sZW5ndGggPiAwID8gYXJyLnNsaWNlKCkgOiBub0hhbmRsZXJzCiAgICBlbHNlIHJldHVybiBhcnIgfHwgbm9IYW5kbGVycwogIH0KCiAgdmFyIG9mZiA9IENvZGVNaXJyb3Iub2ZmID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSwgZikgewogICAgaWYgKGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGYsIGZhbHNlKTsKICAgIGVsc2UgaWYgKGVtaXR0ZXIuZGV0YWNoRXZlbnQpCiAgICAgIGVtaXR0ZXIuZGV0YWNoRXZlbnQoIm9uIiArIHR5cGUsIGYpOwogICAgZWxzZSB7CiAgICAgIHZhciBoYW5kbGVycyA9IGdldEhhbmRsZXJzKGVtaXR0ZXIsIHR5cGUsIGZhbHNlKQogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhhbmRsZXJzLmxlbmd0aDsgKytpKQogICAgICAgIGlmIChoYW5kbGVyc1tpXSA9PSBmKSB7IGhhbmRsZXJzLnNwbGljZShpLCAxKTsgYnJlYWs7IH0KICAgIH0KICB9OwoKICB2YXIgc2lnbmFsID0gQ29kZU1pcnJvci5zaWduYWwgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlIC8qLCB2YWx1ZXMuLi4qLykgewogICAgdmFyIGhhbmRsZXJzID0gZ2V0SGFuZGxlcnMoZW1pdHRlciwgdHlwZSwgdHJ1ZSkKICAgIGlmICghaGFuZGxlcnMubGVuZ3RoKSByZXR1cm47CiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhhbmRsZXJzLmxlbmd0aDsgKytpKSBoYW5kbGVyc1tpXS5hcHBseShudWxsLCBhcmdzKTsKICB9OwoKICB2YXIgb3JwaGFuRGVsYXllZENhbGxiYWNrcyA9IG51bGw7CgogIC8vIE9mdGVuLCB3ZSB3YW50IHRvIHNpZ25hbCBldmVudHMgYXQgYSBwb2ludCB3aGVyZSB3ZSBhcmUgaW4gdGhlCiAgLy8gbWlkZGxlIG9mIHNvbWUgd29yaywgYnV0IGRvbid0IHdhbnQgdGhlIGhhbmRsZXIgdG8gc3RhcnQgY2FsbGluZwogIC8vIG90aGVyIG1ldGhvZHMgb24gdGhlIGVkaXRvciwgd2hpY2ggbWlnaHQgYmUgaW4gYW4gaW5jb25zaXN0ZW50CiAgLy8gc3RhdGUgb3Igc2ltcGx5IG5vdCBleHBlY3QgYW55IG90aGVyIGV2ZW50cyB0byBoYXBwZW4uCiAgLy8gc2lnbmFsTGF0ZXIgbG9va3Mgd2hldGhlciB0aGVyZSBhcmUgYW55IGhhbmRsZXJzLCBhbmQgc2NoZWR1bGVzCiAgLy8gdGhlbSB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBsYXN0IG9wZXJhdGlvbiBlbmRzLCBvciwgaWYgbm8KICAvLyBvcGVyYXRpb24gaXMgYWN0aXZlLCB3aGVuIGEgdGltZW91dCBmaXJlcy4KICBmdW5jdGlvbiBzaWduYWxMYXRlcihlbWl0dGVyLCB0eXBlIC8qLCB2YWx1ZXMuLi4qLykgewogICAgdmFyIGFyciA9IGdldEhhbmRsZXJzKGVtaXR0ZXIsIHR5cGUsIGZhbHNlKQogICAgaWYgKCFhcnIubGVuZ3RoKSByZXR1cm47CiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksIGxpc3Q7CiAgICBpZiAob3BlcmF0aW9uR3JvdXApIHsKICAgICAgbGlzdCA9IG9wZXJhdGlvbkdyb3VwLmRlbGF5ZWRDYWxsYmFja3M7CiAgICB9IGVsc2UgaWYgKG9ycGhhbkRlbGF5ZWRDYWxsYmFja3MpIHsKICAgICAgbGlzdCA9IG9ycGhhbkRlbGF5ZWRDYWxsYmFja3M7CiAgICB9IGVsc2UgewogICAgICBsaXN0ID0gb3JwaGFuRGVsYXllZENhbGxiYWNrcyA9IFtdOwogICAgICBzZXRUaW1lb3V0KGZpcmVPcnBoYW5EZWxheWVkLCAwKTsKICAgIH0KICAgIGZ1bmN0aW9uIGJuZChmKSB7cmV0dXJuIGZ1bmN0aW9uKCl7Zi5hcHBseShudWxsLCBhcmdzKTt9O307CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkKICAgICAgbGlzdC5wdXNoKGJuZChhcnJbaV0pKTsKICB9CgogIGZ1bmN0aW9uIGZpcmVPcnBoYW5EZWxheWVkKCkgewogICAgdmFyIGRlbGF5ZWQgPSBvcnBoYW5EZWxheWVkQ2FsbGJhY2tzOwogICAgb3JwaGFuRGVsYXllZENhbGxiYWNrcyA9IG51bGw7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGF5ZWQubGVuZ3RoOyArK2kpIGRlbGF5ZWRbaV0oKTsKICB9CgogIC8vIFRoZSBET00gZXZlbnRzIHRoYXQgQ29kZU1pcnJvciBoYW5kbGVzIGNhbiBiZSBvdmVycmlkZGVuIGJ5CiAgLy8gcmVnaXN0ZXJpbmcgYSAobm9uLURPTSkgaGFuZGxlciBvbiB0aGUgZWRpdG9yIGZvciB0aGUgZXZlbnQgbmFtZSwKICAvLyBhbmQgcHJldmVudERlZmF1bHQtaW5nIHRoZSBldmVudCBpbiB0aGF0IGhhbmRsZXIuCiAgZnVuY3Rpb24gc2lnbmFsRE9NRXZlbnQoY20sIGUsIG92ZXJyaWRlKSB7CiAgICBpZiAodHlwZW9mIGUgPT0gInN0cmluZyIpCiAgICAgIGUgPSB7dHlwZTogZSwgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkgeyB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9fTsKICAgIHNpZ25hbChjbSwgb3ZlcnJpZGUgfHwgZS50eXBlLCBjbSwgZSk7CiAgICByZXR1cm4gZV9kZWZhdWx0UHJldmVudGVkKGUpIHx8IGUuY29kZW1pcnJvcklnbm9yZTsKICB9CgogIGZ1bmN0aW9uIHNpZ25hbEN1cnNvckFjdGl2aXR5KGNtKSB7CiAgICB2YXIgYXJyID0gY20uX2hhbmRsZXJzICYmIGNtLl9oYW5kbGVycy5jdXJzb3JBY3Rpdml0eTsKICAgIGlmICghYXJyKSByZXR1cm47CiAgICB2YXIgc2V0ID0gY20uY3VyT3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVycyB8fCAoY20uY3VyT3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVycyA9IFtdKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSBpZiAoaW5kZXhPZihzZXQsIGFycltpXSkgPT0gLTEpCiAgICAgIHNldC5wdXNoKGFycltpXSk7CiAgfQoKICBmdW5jdGlvbiBoYXNIYW5kbGVyKGVtaXR0ZXIsIHR5cGUpIHsKICAgIHJldHVybiBnZXRIYW5kbGVycyhlbWl0dGVyLCB0eXBlKS5sZW5ndGggPiAwCiAgfQoKICAvLyBBZGQgb24gYW5kIG9mZiBtZXRob2RzIHRvIGEgY29uc3RydWN0b3IncyBwcm90b3R5cGUsIHRvIG1ha2UKICAvLyByZWdpc3RlcmluZyBldmVudHMgb24gc3VjaCBvYmplY3RzIG1vcmUgY29udmVuaWVudC4KICBmdW5jdGlvbiBldmVudE1peGluKGN0b3IpIHsKICAgIGN0b3IucHJvdG90eXBlLm9uID0gZnVuY3Rpb24odHlwZSwgZikge29uKHRoaXMsIHR5cGUsIGYpO307CiAgICBjdG9yLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbih0eXBlLCBmKSB7b2ZmKHRoaXMsIHR5cGUsIGYpO307CiAgfQoKICAvLyBNSVNDIFVUSUxJVElFUwoKICAvLyBOdW1iZXIgb2YgcGl4ZWxzIGFkZGVkIHRvIHNjcm9sbGVyIGFuZCBzaXplciB0byBoaWRlIHNjcm9sbGJhcgogIHZhciBzY3JvbGxlckdhcCA9IDMwOwoKICAvLyBSZXR1cm5lZCBvciB0aHJvd24gYnkgdmFyaW91cyBwcm90b2NvbHMgdG8gc2lnbmFsICdJJ20gbm90CiAgLy8gaGFuZGxpbmcgdGhpcycuCiAgdmFyIFBhc3MgPSBDb2RlTWlycm9yLlBhc3MgPSB7dG9TdHJpbmc6IGZ1bmN0aW9uKCl7cmV0dXJuICJDb2RlTWlycm9yLlBhc3MiO319OwoKICAvLyBSZXVzZWQgb3B0aW9uIG9iamVjdHMgZm9yIHNldFNlbGVjdGlvbiAmIGZyaWVuZHMKICB2YXIgc2VsX2RvbnRTY3JvbGwgPSB7c2Nyb2xsOiBmYWxzZX0sIHNlbF9tb3VzZSA9IHtvcmlnaW46ICIqbW91c2UifSwgc2VsX21vdmUgPSB7b3JpZ2luOiAiK21vdmUifTsKCiAgZnVuY3Rpb24gRGVsYXllZCgpIHt0aGlzLmlkID0gbnVsbDt9CiAgRGVsYXllZC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obXMsIGYpIHsKICAgIGNsZWFyVGltZW91dCh0aGlzLmlkKTsKICAgIHRoaXMuaWQgPSBzZXRUaW1lb3V0KGYsIG1zKTsKICB9OwoKICAvLyBDb3VudHMgdGhlIGNvbHVtbiBvZmZzZXQgaW4gYSBzdHJpbmcsIHRha2luZyB0YWJzIGludG8gYWNjb3VudC4KICAvLyBVc2VkIG1vc3RseSB0byBmaW5kIGluZGVudGF0aW9uLgogIHZhciBjb3VudENvbHVtbiA9IENvZGVNaXJyb3IuY291bnRDb2x1bW4gPSBmdW5jdGlvbihzdHJpbmcsIGVuZCwgdGFiU2l6ZSwgc3RhcnRJbmRleCwgc3RhcnRWYWx1ZSkgewogICAgaWYgKGVuZCA9PSBudWxsKSB7CiAgICAgIGVuZCA9IHN0cmluZy5zZWFyY2goL1teXHNcdTAwYTBdLyk7CiAgICAgIGlmIChlbmQgPT0gLTEpIGVuZCA9IHN0cmluZy5sZW5ndGg7CiAgICB9CiAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleCB8fCAwLCBuID0gc3RhcnRWYWx1ZSB8fCAwOzspIHsKICAgICAgdmFyIG5leHRUYWIgPSBzdHJpbmcuaW5kZXhPZigiXHQiLCBpKTsKICAgICAgaWYgKG5leHRUYWIgPCAwIHx8IG5leHRUYWIgPj0gZW5kKQogICAgICAgIHJldHVybiBuICsgKGVuZCAtIGkpOwogICAgICBuICs9IG5leHRUYWIgLSBpOwogICAgICBuICs9IHRhYlNpemUgLSAobiAlIHRhYlNpemUpOwogICAgICBpID0gbmV4dFRhYiArIDE7CiAgICB9CiAgfTsKCiAgLy8gVGhlIGludmVyc2Ugb2YgY291bnRDb2x1bW4gLS0gZmluZCB0aGUgb2Zmc2V0IHRoYXQgY29ycmVzcG9uZHMgdG8KICAvLyBhIHBhcnRpY3VsYXIgY29sdW1uLgogIHZhciBmaW5kQ29sdW1uID0gQ29kZU1pcnJvci5maW5kQ29sdW1uID0gZnVuY3Rpb24oc3RyaW5nLCBnb2FsLCB0YWJTaXplKSB7CiAgICBmb3IgKHZhciBwb3MgPSAwLCBjb2wgPSAwOzspIHsKICAgICAgdmFyIG5leHRUYWIgPSBzdHJpbmcuaW5kZXhPZigiXHQiLCBwb3MpOwogICAgICBpZiAobmV4dFRhYiA9PSAtMSkgbmV4dFRhYiA9IHN0cmluZy5sZW5ndGg7CiAgICAgIHZhciBza2lwcGVkID0gbmV4dFRhYiAtIHBvczsKICAgICAgaWYgKG5leHRUYWIgPT0gc3RyaW5nLmxlbmd0aCB8fCBjb2wgKyBza2lwcGVkID49IGdvYWwpCiAgICAgICAgcmV0dXJuIHBvcyArIE1hdGgubWluKHNraXBwZWQsIGdvYWwgLSBjb2wpOwogICAgICBjb2wgKz0gbmV4dFRhYiAtIHBvczsKICAgICAgY29sICs9IHRhYlNpemUgLSAoY29sICUgdGFiU2l6ZSk7CiAgICAgIHBvcyA9IG5leHRUYWIgKyAxOwogICAgICBpZiAoY29sID49IGdvYWwpIHJldHVybiBwb3M7CiAgICB9CiAgfQoKICB2YXIgc3BhY2VTdHJzID0gWyIiXTsKICBmdW5jdGlvbiBzcGFjZVN0cihuKSB7CiAgICB3aGlsZSAoc3BhY2VTdHJzLmxlbmd0aCA8PSBuKQogICAgICBzcGFjZVN0cnMucHVzaChsc3Qoc3BhY2VTdHJzKSArICIgIik7CiAgICByZXR1cm4gc3BhY2VTdHJzW25dOwogIH0KCiAgZnVuY3Rpb24gbHN0KGFycikgeyByZXR1cm4gYXJyW2Fyci5sZW5ndGgtMV07IH0KCiAgdmFyIHNlbGVjdElucHV0ID0gZnVuY3Rpb24obm9kZSkgeyBub2RlLnNlbGVjdCgpOyB9OwogIGlmIChpb3MpIC8vIE1vYmlsZSBTYWZhcmkgYXBwYXJlbnRseSBoYXMgYSBidWcgd2hlcmUgc2VsZWN0KCkgaXMgYnJva2VuLgogICAgc2VsZWN0SW5wdXQgPSBmdW5jdGlvbihub2RlKSB7IG5vZGUuc2VsZWN0aW9uU3RhcnQgPSAwOyBub2RlLnNlbGVjdGlvbkVuZCA9IG5vZGUudmFsdWUubGVuZ3RoOyB9OwogIGVsc2UgaWYgKGllKSAvLyBTdXBwcmVzcyBteXN0ZXJpb3VzIElFMTAgZXJyb3JzCiAgICBzZWxlY3RJbnB1dCA9IGZ1bmN0aW9uKG5vZGUpIHsgdHJ5IHsgbm9kZS5zZWxlY3QoKTsgfSBjYXRjaChfZSkge30gfTsKCiAgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgZWx0KSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKQogICAgICBpZiAoYXJyYXlbaV0gPT0gZWx0KSByZXR1cm4gaTsKICAgIHJldHVybiAtMTsKICB9CiAgZnVuY3Rpb24gbWFwKGFycmF5LCBmKSB7CiAgICB2YXIgb3V0ID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSBvdXRbaV0gPSBmKGFycmF5W2ldLCBpKTsKICAgIHJldHVybiBvdXQ7CiAgfQoKICBmdW5jdGlvbiBub3RoaW5nKCkge30KCiAgZnVuY3Rpb24gY3JlYXRlT2JqKGJhc2UsIHByb3BzKSB7CiAgICB2YXIgaW5zdDsKICAgIGlmIChPYmplY3QuY3JlYXRlKSB7CiAgICAgIGluc3QgPSBPYmplY3QuY3JlYXRlKGJhc2UpOwogICAgfSBlbHNlIHsKICAgICAgbm90aGluZy5wcm90b3R5cGUgPSBiYXNlOwogICAgICBpbnN0ID0gbmV3IG5vdGhpbmcoKTsKICAgIH0KICAgIGlmIChwcm9wcykgY29weU9iaihwcm9wcywgaW5zdCk7CiAgICByZXR1cm4gaW5zdDsKICB9OwoKICBmdW5jdGlvbiBjb3B5T2JqKG9iaiwgdGFyZ2V0LCBvdmVyd3JpdGUpIHsKICAgIGlmICghdGFyZ2V0KSB0YXJnZXQgPSB7fTsKICAgIGZvciAodmFyIHByb3AgaW4gb2JqKQogICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHByb3ApICYmIChvdmVyd3JpdGUgIT09IGZhbHNlIHx8ICF0YXJnZXQuaGFzT3duUHJvcGVydHkocHJvcCkpKQogICAgICAgIHRhcmdldFtwcm9wXSA9IG9ialtwcm9wXTsKICAgIHJldHVybiB0YXJnZXQ7CiAgfQoKICBmdW5jdGlvbiBiaW5kKGYpIHsKICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKICAgIHJldHVybiBmdW5jdGlvbigpe3JldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO307CiAgfQoKICB2YXIgbm9uQVNDSUlTaW5nbGVDYXNlV29yZENoYXIgPSAvW1x1MDBkZlx1MDU4N1x1MDU5MC1cdTA1ZjRcdTA2MDAtXHUwNmZmXHUzMDQwLVx1MzA5Zlx1MzBhMC1cdTMwZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YWMwMC1cdWQ3YWZdLzsKICB2YXIgaXNXb3JkQ2hhckJhc2ljID0gQ29kZU1pcnJvci5pc1dvcmRDaGFyID0gZnVuY3Rpb24oY2gpIHsKICAgIHJldHVybiAvXHcvLnRlc3QoY2gpIHx8IGNoID4gIlx4ODAiICYmCiAgICAgIChjaC50b1VwcGVyQ2FzZSgpICE9IGNoLnRvTG93ZXJDYXNlKCkgfHwgbm9uQVNDSUlTaW5nbGVDYXNlV29yZENoYXIudGVzdChjaCkpOwogIH07CiAgZnVuY3Rpb24gaXNXb3JkQ2hhcihjaCwgaGVscGVyKSB7CiAgICBpZiAoIWhlbHBlcikgcmV0dXJuIGlzV29yZENoYXJCYXNpYyhjaCk7CiAgICBpZiAoaGVscGVyLnNvdXJjZS5pbmRleE9mKCJcXHciKSA+IC0xICYmIGlzV29yZENoYXJCYXNpYyhjaCkpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGhlbHBlci50ZXN0KGNoKTsKICB9CgogIGZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7CiAgICBmb3IgKHZhciBuIGluIG9iaikgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShuKSAmJiBvYmpbbl0pIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgLy8gRXh0ZW5kaW5nIHVuaWNvZGUgY2hhcmFjdGVycy4gQSBzZXJpZXMgb2YgYSBub24tZXh0ZW5kaW5nIGNoYXIgKwogIC8vIGFueSBudW1iZXIgb2YgZXh0ZW5kaW5nIGNoYXJzIGlzIHRyZWF0ZWQgYXMgYSBzaW5nbGUgdW5pdCBhcyBmYXIKICAvLyBhcyBlZGl0aW5nIGFuZCBtZWFzdXJpbmcgaXMgY29uY2VybmVkLiBUaGlzIGlzIG5vdCBmdWxseSBjb3JyZWN0LAogIC8vIHNpbmNlIHNvbWUgc2NyaXB0cy9mb250cy9icm93c2VycyBhbHNvIHRyZWF0IG90aGVyIGNvbmZpZ3VyYXRpb25zCiAgLy8gb2YgY29kZSBwb2ludHMgYXMgYSBncm91cC4KICB2YXIgZXh0ZW5kaW5nQ2hhcnMgPSAvW1x1MDMwMC1cdTAzNmZcdTA0ODMtXHUwNDg5XHUwNTkxLVx1MDViZFx1MDViZlx1MDVjMVx1MDVjMlx1MDVjNFx1MDVjNVx1MDVjN1x1MDYxMC1cdTA2MWFcdTA2NGItXHUwNjVlXHUwNjcwXHUwNmQ2LVx1MDZkY1x1MDZkZS1cdTA2ZTRcdTA2ZTdcdTA2ZThcdTA2ZWEtXHUwNmVkXHUwNzExXHUwNzMwLVx1MDc0YVx1MDdhNi1cdTA3YjBcdTA3ZWItXHUwN2YzXHUwODE2LVx1MDgxOVx1MDgxYi1cdTA4MjNcdTA4MjUtXHUwODI3XHUwODI5LVx1MDgyZFx1MDkwMC1cdTA5MDJcdTA5M2NcdTA5NDEtXHUwOTQ4XHUwOTRkXHUwOTUxLVx1MDk1NVx1MDk2Mlx1MDk2M1x1MDk4MVx1MDliY1x1MDliZVx1MDljMS1cdTA5YzRcdTA5Y2RcdTA5ZDdcdTA5ZTJcdTA5ZTNcdTBhMDFcdTBhMDJcdTBhM2NcdTBhNDFcdTBhNDJcdTBhNDdcdTBhNDhcdTBhNGItXHUwYTRkXHUwYTUxXHUwYTcwXHUwYTcxXHUwYTc1XHUwYTgxXHUwYTgyXHUwYWJjXHUwYWMxLVx1MGFjNVx1MGFjN1x1MGFjOFx1MGFjZFx1MGFlMlx1MGFlM1x1MGIwMVx1MGIzY1x1MGIzZVx1MGIzZlx1MGI0MS1cdTBiNDRcdTBiNGRcdTBiNTZcdTBiNTdcdTBiNjJcdTBiNjNcdTBiODJcdTBiYmVcdTBiYzBcdTBiY2RcdTBiZDdcdTBjM2UtXHUwYzQwXHUwYzQ2LVx1MGM0OFx1MGM0YS1cdTBjNGRcdTBjNTVcdTBjNTZcdTBjNjJcdTBjNjNcdTBjYmNcdTBjYmZcdTBjYzJcdTBjYzZcdTBjY2NcdTBjY2RcdTBjZDVcdTBjZDZcdTBjZTJcdTBjZTNcdTBkM2VcdTBkNDEtXHUwZDQ0XHUwZDRkXHUwZDU3XHUwZDYyXHUwZDYzXHUwZGNhXHUwZGNmXHUwZGQyLVx1MGRkNFx1MGRkNlx1MGRkZlx1MGUzMVx1MGUzNC1cdTBlM2FcdTBlNDctXHUwZTRlXHUwZWIxXHUwZWI0LVx1MGViOVx1MGViYlx1MGViY1x1MGVjOC1cdTBlY2RcdTBmMThcdTBmMTlcdTBmMzVcdTBmMzdcdTBmMzlcdTBmNzEtXHUwZjdlXHUwZjgwLVx1MGY4NFx1MGY4Nlx1MGY4N1x1MGY5MC1cdTBmOTdcdTBmOTktXHUwZmJjXHUwZmM2XHUxMDJkLVx1MTAzMFx1MTAzMi1cdTEwMzdcdTEwMzlcdTEwM2FcdTEwM2RcdTEwM2VcdTEwNThcdTEwNTlcdTEwNWUtXHUxMDYwXHUxMDcxLVx1MTA3NFx1MTA4Mlx1MTA4NVx1MTA4Nlx1MTA4ZFx1MTA5ZFx1MTM1Zlx1MTcxMi1cdTE3MTRcdTE3MzItXHUxNzM0XHUxNzUyXHUxNzUzXHUxNzcyXHUxNzczXHUxN2I3LVx1MTdiZFx1MTdjNlx1MTdjOS1cdTE3ZDNcdTE3ZGRcdTE4MGItXHUxODBkXHUxOGE5XHUxOTIwLVx1MTkyMlx1MTkyN1x1MTkyOFx1MTkzMlx1MTkzOS1cdTE5M2JcdTFhMTdcdTFhMThcdTFhNTZcdTFhNTgtXHUxYTVlXHUxYTYwXHUxYTYyXHUxYTY1LVx1MWE2Y1x1MWE3My1cdTFhN2NcdTFhN2ZcdTFiMDAtXHUxYjAzXHUxYjM0XHUxYjM2LVx1MWIzYVx1MWIzY1x1MWI0Mlx1MWI2Yi1cdTFiNzNcdTFiODBcdTFiODFcdTFiYTItXHUxYmE1XHUxYmE4XHUxYmE5XHUxYzJjLVx1MWMzM1x1MWMzNlx1MWMzN1x1MWNkMC1cdTFjZDJcdTFjZDQtXHUxY2UwXHUxY2UyLVx1MWNlOFx1MWNlZFx1MWRjMC1cdTFkZTZcdTFkZmQtXHUxZGZmXHUyMDBjXHUyMDBkXHUyMGQwLVx1MjBmMFx1MmNlZi1cdTJjZjFcdTJkZTAtXHUyZGZmXHUzMDJhLVx1MzAyZlx1MzA5OVx1MzA5YVx1YTY2Zi1cdWE2NzJcdWE2N2NcdWE2N2RcdWE2ZjBcdWE2ZjFcdWE4MDJcdWE4MDZcdWE4MGJcdWE4MjVcdWE4MjZcdWE4YzRcdWE4ZTAtXHVhOGYxXHVhOTI2LVx1YTkyZFx1YTk0Ny1cdWE5NTFcdWE5ODAtXHVhOTgyXHVhOWIzXHVhOWI2LVx1YTliOVx1YTliY1x1YWEyOS1cdWFhMmVcdWFhMzFcdWFhMzJcdWFhMzVcdWFhMzZcdWFhNDNcdWFhNGNcdWFhYjBcdWFhYjItXHVhYWI0XHVhYWI3XHVhYWI4XHVhYWJlXHVhYWJmXHVhYWMxXHVhYmU1XHVhYmU4XHVhYmVkXHVkYzAwLVx1ZGZmZlx1ZmIxZVx1ZmUwMC1cdWZlMGZcdWZlMjAtXHVmZTI2XHVmZjllXHVmZjlmXS87CiAgZnVuY3Rpb24gaXNFeHRlbmRpbmdDaGFyKGNoKSB7IHJldHVybiBjaC5jaGFyQ29kZUF0KDApID49IDc2OCAmJiBleHRlbmRpbmdDaGFycy50ZXN0KGNoKTsgfQoKICAvLyBET00gVVRJTElUSUVTCgogIGZ1bmN0aW9uIGVsdCh0YWcsIGNvbnRlbnQsIGNsYXNzTmFtZSwgc3R5bGUpIHsKICAgIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOwogICAgaWYgKGNsYXNzTmFtZSkgZS5jbGFzc05hbWUgPSBjbGFzc05hbWU7CiAgICBpZiAoc3R5bGUpIGUuc3R5bGUuY3NzVGV4dCA9IHN0eWxlOwogICAgaWYgKHR5cGVvZiBjb250ZW50ID09ICJzdHJpbmciKSBlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbnRlbnQpKTsKICAgIGVsc2UgaWYgKGNvbnRlbnQpIGZvciAodmFyIGkgPSAwOyBpIDwgY29udGVudC5sZW5ndGg7ICsraSkgZS5hcHBlbmRDaGlsZChjb250ZW50W2ldKTsKICAgIHJldHVybiBlOwogIH0KCiAgdmFyIHJhbmdlOwogIGlmIChkb2N1bWVudC5jcmVhdGVSYW5nZSkgcmFuZ2UgPSBmdW5jdGlvbihub2RlLCBzdGFydCwgZW5kLCBlbmROb2RlKSB7CiAgICB2YXIgciA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICByLnNldEVuZChlbmROb2RlIHx8IG5vZGUsIGVuZCk7CiAgICByLnNldFN0YXJ0KG5vZGUsIHN0YXJ0KTsKICAgIHJldHVybiByOwogIH07CiAgZWxzZSByYW5nZSA9IGZ1bmN0aW9uKG5vZGUsIHN0YXJ0LCBlbmQpIHsKICAgIHZhciByID0gZG9jdW1lbnQuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTsKICAgIHRyeSB7IHIubW92ZVRvRWxlbWVudFRleHQobm9kZS5wYXJlbnROb2RlKTsgfQogICAgY2F0Y2goZSkgeyByZXR1cm4gcjsgfQogICAgci5jb2xsYXBzZSh0cnVlKTsKICAgIHIubW92ZUVuZCgiY2hhcmFjdGVyIiwgZW5kKTsKICAgIHIubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLCBzdGFydCk7CiAgICByZXR1cm4gcjsKICB9OwoKICBmdW5jdGlvbiByZW1vdmVDaGlsZHJlbihlKSB7CiAgICBmb3IgKHZhciBjb3VudCA9IGUuY2hpbGROb2Rlcy5sZW5ndGg7IGNvdW50ID4gMDsgLS1jb3VudCkKICAgICAgZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpOwogICAgcmV0dXJuIGU7CiAgfQoKICBmdW5jdGlvbiByZW1vdmVDaGlsZHJlbkFuZEFkZChwYXJlbnQsIGUpIHsKICAgIHJldHVybiByZW1vdmVDaGlsZHJlbihwYXJlbnQpLmFwcGVuZENoaWxkKGUpOwogIH0KCiAgdmFyIGNvbnRhaW5zID0gQ29kZU1pcnJvci5jb250YWlucyA9IGZ1bmN0aW9uKHBhcmVudCwgY2hpbGQpIHsKICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PSAzKSAvLyBBbmRyb2lkIGJyb3dzZXIgYWx3YXlzIHJldHVybnMgZmFsc2Ugd2hlbiBjaGlsZCBpcyBhIHRleHRub2RlCiAgICAgIGNoaWxkID0gY2hpbGQucGFyZW50Tm9kZTsKICAgIGlmIChwYXJlbnQuY29udGFpbnMpCiAgICAgIHJldHVybiBwYXJlbnQuY29udGFpbnMoY2hpbGQpOwogICAgZG8gewogICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT0gMTEpIGNoaWxkID0gY2hpbGQuaG9zdDsKICAgICAgaWYgKGNoaWxkID09IHBhcmVudCkgcmV0dXJuIHRydWU7CiAgICB9IHdoaWxlIChjaGlsZCA9IGNoaWxkLnBhcmVudE5vZGUpOwogIH07CgogIGZ1bmN0aW9uIGFjdGl2ZUVsdCgpIHsKICAgIHZhciBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsKICAgIHdoaWxlIChhY3RpdmVFbGVtZW50ICYmIGFjdGl2ZUVsZW1lbnQucm9vdCAmJiBhY3RpdmVFbGVtZW50LnJvb3QuYWN0aXZlRWxlbWVudCkKICAgICAgYWN0aXZlRWxlbWVudCA9IGFjdGl2ZUVsZW1lbnQucm9vdC5hY3RpdmVFbGVtZW50OwogICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnQ7CiAgfQogIC8vIE9sZGVyIHZlcnNpb25zIG9mIElFIHRocm93cyB1bnNwZWNpZmllZCBlcnJvciB3aGVuIHRvdWNoaW5nCiAgLy8gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbiBzb21lIGNhc2VzIChkdXJpbmcgbG9hZGluZywgaW4gaWZyYW1lKQogIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgMTEpIGFjdGl2ZUVsdCA9IGZ1bmN0aW9uKCkgewogICAgdHJ5IHsgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7IH0KICAgIGNhdGNoKGUpIHsgcmV0dXJuIGRvY3VtZW50LmJvZHk7IH0KICB9OwoKICBmdW5jdGlvbiBjbGFzc1Rlc3QoY2xzKSB7IHJldHVybiBuZXcgUmVnRXhwKCIoXnxcXHMpIiArIGNscyArICIoPzokfFxccylcXHMqIik7IH0KICB2YXIgcm1DbGFzcyA9IENvZGVNaXJyb3Iucm1DbGFzcyA9IGZ1bmN0aW9uKG5vZGUsIGNscykgewogICAgdmFyIGN1cnJlbnQgPSBub2RlLmNsYXNzTmFtZTsKICAgIHZhciBtYXRjaCA9IGNsYXNzVGVzdChjbHMpLmV4ZWMoY3VycmVudCk7CiAgICBpZiAobWF0Y2gpIHsKICAgICAgdmFyIGFmdGVyID0gY3VycmVudC5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7CiAgICAgIG5vZGUuY2xhc3NOYW1lID0gY3VycmVudC5zbGljZSgwLCBtYXRjaC5pbmRleCkgKyAoYWZ0ZXIgPyBtYXRjaFsxXSArIGFmdGVyIDogIiIpOwogICAgfQogIH07CiAgdmFyIGFkZENsYXNzID0gQ29kZU1pcnJvci5hZGRDbGFzcyA9IGZ1bmN0aW9uKG5vZGUsIGNscykgewogICAgdmFyIGN1cnJlbnQgPSBub2RlLmNsYXNzTmFtZTsKICAgIGlmICghY2xhc3NUZXN0KGNscykudGVzdChjdXJyZW50KSkgbm9kZS5jbGFzc05hbWUgKz0gKGN1cnJlbnQgPyAiICIgOiAiIikgKyBjbHM7CiAgfTsKICBmdW5jdGlvbiBqb2luQ2xhc3NlcyhhLCBiKSB7CiAgICB2YXIgYXMgPSBhLnNwbGl0KCIgIik7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFzLmxlbmd0aDsgaSsrKQogICAgICBpZiAoYXNbaV0gJiYgIWNsYXNzVGVzdChhc1tpXSkudGVzdChiKSkgYiArPSAiICIgKyBhc1tpXTsKICAgIHJldHVybiBiOwogIH0KCiAgLy8gV0lORE9XLVdJREUgRVZFTlRTCgogIC8vIFRoZXNlIG11c3QgYmUgaGFuZGxlZCBjYXJlZnVsbHksIGJlY2F1c2UgbmFpdmVseSByZWdpc3RlcmluZyBhCiAgLy8gaGFuZGxlciBmb3IgZWFjaCBlZGl0b3Igd2lsbCBjYXVzZSB0aGUgZWRpdG9ycyB0byBuZXZlciBiZQogIC8vIGdhcmJhZ2UgY29sbGVjdGVkLgoKICBmdW5jdGlvbiBmb3JFYWNoQ29kZU1pcnJvcihmKSB7CiAgICBpZiAoIWRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSkgcmV0dXJuOwogICAgdmFyIGJ5Q2xhc3MgPSBkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIkNvZGVNaXJyb3IiKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnlDbGFzcy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgY20gPSBieUNsYXNzW2ldLkNvZGVNaXJyb3I7CiAgICAgIGlmIChjbSkgZihjbSk7CiAgICB9CiAgfQoKICB2YXIgZ2xvYmFsc1JlZ2lzdGVyZWQgPSBmYWxzZTsKICBmdW5jdGlvbiBlbnN1cmVHbG9iYWxIYW5kbGVycygpIHsKICAgIGlmIChnbG9iYWxzUmVnaXN0ZXJlZCkgcmV0dXJuOwogICAgcmVnaXN0ZXJHbG9iYWxIYW5kbGVycygpOwogICAgZ2xvYmFsc1JlZ2lzdGVyZWQgPSB0cnVlOwogIH0KICBmdW5jdGlvbiByZWdpc3Rlckdsb2JhbEhhbmRsZXJzKCkgewogICAgLy8gV2hlbiB0aGUgd2luZG93IHJlc2l6ZXMsIHdlIG5lZWQgdG8gcmVmcmVzaCBhY3RpdmUgZWRpdG9ycy4KICAgIHZhciByZXNpemVUaW1lcjsKICAgIG9uKHdpbmRvdywgInJlc2l6ZSIsIGZ1bmN0aW9uKCkgewogICAgICBpZiAocmVzaXplVGltZXIgPT0gbnVsbCkgcmVzaXplVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIHJlc2l6ZVRpbWVyID0gbnVsbDsKICAgICAgICBmb3JFYWNoQ29kZU1pcnJvcihvblJlc2l6ZSk7CiAgICAgIH0sIDEwMCk7CiAgICB9KTsKICAgIC8vIFdoZW4gdGhlIHdpbmRvdyBsb3NlcyBmb2N1cywgd2Ugd2FudCB0byBzaG93IHRoZSBlZGl0b3IgYXMgYmx1cnJlZAogICAgb24od2luZG93LCAiYmx1ciIsIGZ1bmN0aW9uKCkgewogICAgICBmb3JFYWNoQ29kZU1pcnJvcihvbkJsdXIpOwogICAgfSk7CiAgfQoKICAvLyBGRUFUVVJFIERFVEVDVElPTgoKICAvLyBEZXRlY3QgZHJhZy1hbmQtZHJvcAogIHZhciBkcmFnQW5kRHJvcCA9IGZ1bmN0aW9uKCkgewogICAgLy8gVGhlcmUgaXMgKnNvbWUqIGtpbmQgb2YgZHJhZy1hbmQtZHJvcCBzdXBwb3J0IGluIElFNi04LCBidXQgSQogICAgLy8gY291bGRuJ3QgZ2V0IGl0IHRvIHdvcmsgeWV0LgogICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSByZXR1cm4gZmFsc2U7CiAgICB2YXIgZGl2ID0gZWx0KCdkaXYnKTsKICAgIHJldHVybiAiZHJhZ2dhYmxlIiBpbiBkaXYgfHwgImRyYWdEcm9wIiBpbiBkaXY7CiAgfSgpOwoKICB2YXIgendzcFN1cHBvcnRlZDsKICBmdW5jdGlvbiB6ZXJvV2lkdGhFbGVtZW50KG1lYXN1cmUpIHsKICAgIGlmICh6d3NwU3VwcG9ydGVkID09IG51bGwpIHsKICAgICAgdmFyIHRlc3QgPSBlbHQoInNwYW4iLCAiXHUyMDBiIik7CiAgICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKG1lYXN1cmUsIGVsdCgic3BhbiIsIFt0ZXN0LCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIpXSkpOwogICAgICBpZiAobWVhc3VyZS5maXJzdENoaWxkLm9mZnNldEhlaWdodCAhPSAwKQogICAgICAgIHp3c3BTdXBwb3J0ZWQgPSB0ZXN0Lm9mZnNldFdpZHRoIDw9IDEgJiYgdGVzdC5vZmZzZXRIZWlnaHQgPiAyICYmICEoaWUgJiYgaWVfdmVyc2lvbiA8IDgpOwogICAgfQogICAgdmFyIG5vZGUgPSB6d3NwU3VwcG9ydGVkID8gZWx0KCJzcGFuIiwgIlx1MjAwYiIpIDoKICAgICAgZWx0KCJzcGFuIiwgIlx1MDBhMCIsIG51bGwsICJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxcHg7IG1hcmdpbi1yaWdodDogLTFweCIpOwogICAgbm9kZS5zZXRBdHRyaWJ1dGUoImNtLXRleHQiLCAiIik7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIC8vIEZlYXR1cmUtZGV0ZWN0IElFJ3MgY3J1bW15IGNsaWVudCByZWN0IHJlcG9ydGluZyBmb3IgYmlkaSB0ZXh0CiAgdmFyIGJhZEJpZGlSZWN0czsKICBmdW5jdGlvbiBoYXNCYWRCaWRpUmVjdHMobWVhc3VyZSkgewogICAgaWYgKGJhZEJpZGlSZWN0cyAhPSBudWxsKSByZXR1cm4gYmFkQmlkaVJlY3RzOwogICAgdmFyIHR4dCA9IHJlbW92ZUNoaWxkcmVuQW5kQWRkKG1lYXN1cmUsIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJBXHUwNjJlQSIpKTsKICAgIHZhciByMCA9IHJhbmdlKHR4dCwgMCwgMSkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICBpZiAoIXIwIHx8IHIwLmxlZnQgPT0gcjAucmlnaHQpIHJldHVybiBmYWxzZTsgLy8gU2FmYXJpIHJldHVybnMgbnVsbCBpbiBzb21lIGNhc2VzICgjMjc4MCkKICAgIHZhciByMSA9IHJhbmdlKHR4dCwgMSwgMikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICByZXR1cm4gYmFkQmlkaVJlY3RzID0gKHIxLnJpZ2h0IC0gcjAucmlnaHQgPCAzKTsKICB9CgogIC8vIFNlZSBpZiAiIi5zcGxpdCBpcyB0aGUgYnJva2VuIElFIHZlcnNpb24sIGlmIHNvLCBwcm92aWRlIGFuCiAgLy8gYWx0ZXJuYXRpdmUgd2F5IHRvIHNwbGl0IGxpbmVzLgogIHZhciBzcGxpdExpbmVzQXV0byA9IENvZGVNaXJyb3Iuc3BsaXRMaW5lcyA9ICJcblxuYiIuc3BsaXQoL1xuLykubGVuZ3RoICE9IDMgPyBmdW5jdGlvbihzdHJpbmcpIHsKICAgIHZhciBwb3MgPSAwLCByZXN1bHQgPSBbXSwgbCA9IHN0cmluZy5sZW5ndGg7CiAgICB3aGlsZSAocG9zIDw9IGwpIHsKICAgICAgdmFyIG5sID0gc3RyaW5nLmluZGV4T2YoIlxuIiwgcG9zKTsKICAgICAgaWYgKG5sID09IC0xKSBubCA9IHN0cmluZy5sZW5ndGg7CiAgICAgIHZhciBsaW5lID0gc3RyaW5nLnNsaWNlKHBvcywgc3RyaW5nLmNoYXJBdChubCAtIDEpID09ICJcciIgPyBubCAtIDEgOiBubCk7CiAgICAgIHZhciBydCA9IGxpbmUuaW5kZXhPZigiXHIiKTsKICAgICAgaWYgKHJ0ICE9IC0xKSB7CiAgICAgICAgcmVzdWx0LnB1c2gobGluZS5zbGljZSgwLCBydCkpOwogICAgICAgIHBvcyArPSBydCArIDE7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0LnB1c2gobGluZSk7CiAgICAgICAgcG9zID0gbmwgKyAxOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0gOiBmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcuc3BsaXQoL1xyXG4/fFxuLyk7fTsKCiAgdmFyIGhhc1NlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24gPyBmdW5jdGlvbih0ZSkgewogICAgdHJ5IHsgcmV0dXJuIHRlLnNlbGVjdGlvblN0YXJ0ICE9IHRlLnNlbGVjdGlvbkVuZDsgfQogICAgY2F0Y2goZSkgeyByZXR1cm4gZmFsc2U7IH0KICB9IDogZnVuY3Rpb24odGUpIHsKICAgIHRyeSB7dmFyIHJhbmdlID0gdGUub3duZXJEb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTt9CiAgICBjYXRjaChlKSB7fQogICAgaWYgKCFyYW5nZSB8fCByYW5nZS5wYXJlbnRFbGVtZW50KCkgIT0gdGUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiByYW5nZS5jb21wYXJlRW5kUG9pbnRzKCJTdGFydFRvRW5kIiwgcmFuZ2UpICE9IDA7CiAgfTsKCiAgdmFyIGhhc0NvcHlFdmVudCA9IChmdW5jdGlvbigpIHsKICAgIHZhciBlID0gZWx0KCJkaXYiKTsKICAgIGlmICgib25jb3B5IiBpbiBlKSByZXR1cm4gdHJ1ZTsKICAgIGUuc2V0QXR0cmlidXRlKCJvbmNvcHkiLCAicmV0dXJuOyIpOwogICAgcmV0dXJuIHR5cGVvZiBlLm9uY29weSA9PSAiZnVuY3Rpb24iOwogIH0pKCk7CgogIHZhciBiYWRab29tZWRSZWN0cyA9IG51bGw7CiAgZnVuY3Rpb24gaGFzQmFkWm9vbWVkUmVjdHMobWVhc3VyZSkgewogICAgaWYgKGJhZFpvb21lZFJlY3RzICE9IG51bGwpIHJldHVybiBiYWRab29tZWRSZWN0czsKICAgIHZhciBub2RlID0gcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVhc3VyZSwgZWx0KCJzcGFuIiwgIngiKSk7CiAgICB2YXIgbm9ybWFsID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIHZhciBmcm9tUmFuZ2UgPSByYW5nZShub2RlLCAwLCAxKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIHJldHVybiBiYWRab29tZWRSZWN0cyA9IE1hdGguYWJzKG5vcm1hbC5sZWZ0IC0gZnJvbVJhbmdlLmxlZnQpID4gMTsKICB9CgogIC8vIEtFWSBOQU1FUwoKICB2YXIga2V5TmFtZXMgPSBDb2RlTWlycm9yLmtleU5hbWVzID0gewogICAgMzogIkVudGVyIiwgODogIkJhY2tzcGFjZSIsIDk6ICJUYWIiLCAxMzogIkVudGVyIiwgMTY6ICJTaGlmdCIsIDE3OiAiQ3RybCIsIDE4OiAiQWx0IiwKICAgIDE5OiAiUGF1c2UiLCAyMDogIkNhcHNMb2NrIiwgMjc6ICJFc2MiLCAzMjogIlNwYWNlIiwgMzM6ICJQYWdlVXAiLCAzNDogIlBhZ2VEb3duIiwgMzU6ICJFbmQiLAogICAgMzY6ICJIb21lIiwgMzc6ICJMZWZ0IiwgMzg6ICJVcCIsIDM5OiAiUmlnaHQiLCA0MDogIkRvd24iLCA0NDogIlByaW50U2NybiIsIDQ1OiAiSW5zZXJ0IiwKICAgIDQ2OiAiRGVsZXRlIiwgNTk6ICI7IiwgNjE6ICI9IiwgOTE6ICJNb2QiLCA5MjogIk1vZCIsIDkzOiAiTW9kIiwKICAgIDEwNjogIioiLCAxMDc6ICI9IiwgMTA5OiAiLSIsIDExMDogIi4iLCAxMTE6ICIvIiwgMTI3OiAiRGVsZXRlIiwKICAgIDE3MzogIi0iLCAxODY6ICI7IiwgMTg3OiAiPSIsIDE4ODogIiwiLCAxODk6ICItIiwgMTkwOiAiLiIsIDE5MTogIi8iLCAxOTI6ICJgIiwgMjE5OiAiWyIsIDIyMDogIlxcIiwKICAgIDIyMTogIl0iLCAyMjI6ICInIiwgNjMyMzI6ICJVcCIsIDYzMjMzOiAiRG93biIsIDYzMjM0OiAiTGVmdCIsIDYzMjM1OiAiUmlnaHQiLCA2MzI3MjogIkRlbGV0ZSIsCiAgICA2MzI3MzogIkhvbWUiLCA2MzI3NTogIkVuZCIsIDYzMjc2OiAiUGFnZVVwIiwgNjMyNzc6ICJQYWdlRG93biIsIDYzMzAyOiAiSW5zZXJ0IgogIH07CiAgKGZ1bmN0aW9uKCkgewogICAgLy8gTnVtYmVyIGtleXMKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykga2V5TmFtZXNbaSArIDQ4XSA9IGtleU5hbWVzW2kgKyA5Nl0gPSBTdHJpbmcoaSk7CiAgICAvLyBBbHBoYWJldGljIGtleXMKICAgIGZvciAodmFyIGkgPSA2NTsgaSA8PSA5MDsgaSsrKSBrZXlOYW1lc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7CiAgICAvLyBGdW5jdGlvbiBrZXlzCiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMjsgaSsrKSBrZXlOYW1lc1tpICsgMTExXSA9IGtleU5hbWVzW2kgKyA2MzIzNV0gPSAiRiIgKyBpOwogIH0pKCk7CgogIC8vIEJJREkgSEVMUEVSUwoKICBmdW5jdGlvbiBpdGVyYXRlQmlkaVNlY3Rpb25zKG9yZGVyLCBmcm9tLCB0bywgZikgewogICAgaWYgKCFvcmRlcikgcmV0dXJuIGYoZnJvbSwgdG8sICJsdHIiKTsKICAgIHZhciBmb3VuZCA9IGZhbHNlOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmRlci5sZW5ndGg7ICsraSkgewogICAgICB2YXIgcGFydCA9IG9yZGVyW2ldOwogICAgICBpZiAocGFydC5mcm9tIDwgdG8gJiYgcGFydC50byA+IGZyb20gfHwgZnJvbSA9PSB0byAmJiBwYXJ0LnRvID09IGZyb20pIHsKICAgICAgICBmKE1hdGgubWF4KHBhcnQuZnJvbSwgZnJvbSksIE1hdGgubWluKHBhcnQudG8sIHRvKSwgcGFydC5sZXZlbCA9PSAxID8gInJ0bCIgOiAibHRyIik7CiAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBpZiAoIWZvdW5kKSBmKGZyb20sIHRvLCAibHRyIik7CiAgfQoKICBmdW5jdGlvbiBiaWRpTGVmdChwYXJ0KSB7IHJldHVybiBwYXJ0LmxldmVsICUgMiA/IHBhcnQudG8gOiBwYXJ0LmZyb207IH0KICBmdW5jdGlvbiBiaWRpUmlnaHQocGFydCkgeyByZXR1cm4gcGFydC5sZXZlbCAlIDIgPyBwYXJ0LmZyb20gOiBwYXJ0LnRvOyB9CgogIGZ1bmN0aW9uIGxpbmVMZWZ0KGxpbmUpIHsgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSk7IHJldHVybiBvcmRlciA/IGJpZGlMZWZ0KG9yZGVyWzBdKSA6IDA7IH0KICBmdW5jdGlvbiBsaW5lUmlnaHQobGluZSkgewogICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSk7CiAgICBpZiAoIW9yZGVyKSByZXR1cm4gbGluZS50ZXh0Lmxlbmd0aDsKICAgIHJldHVybiBiaWRpUmlnaHQobHN0KG9yZGVyKSk7CiAgfQoKICBmdW5jdGlvbiBsaW5lU3RhcnQoY20sIGxpbmVOKSB7CiAgICB2YXIgbGluZSA9IGdldExpbmUoY20uZG9jLCBsaW5lTik7CiAgICB2YXIgdmlzdWFsID0gdmlzdWFsTGluZShsaW5lKTsKICAgIGlmICh2aXN1YWwgIT0gbGluZSkgbGluZU4gPSBsaW5lTm8odmlzdWFsKTsKICAgIHZhciBvcmRlciA9IGdldE9yZGVyKHZpc3VhbCk7CiAgICB2YXIgY2ggPSAhb3JkZXIgPyAwIDogb3JkZXJbMF0ubGV2ZWwgJSAyID8gbGluZVJpZ2h0KHZpc3VhbCkgOiBsaW5lTGVmdCh2aXN1YWwpOwogICAgcmV0dXJuIFBvcyhsaW5lTiwgY2gpOwogIH0KICBmdW5jdGlvbiBsaW5lRW5kKGNtLCBsaW5lTikgewogICAgdmFyIG1lcmdlZCwgbGluZSA9IGdldExpbmUoY20uZG9jLCBsaW5lTik7CiAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmUpKSB7CiAgICAgIGxpbmUgPSBtZXJnZWQuZmluZCgxLCB0cnVlKS5saW5lOwogICAgICBsaW5lTiA9IG51bGw7CiAgICB9CiAgICB2YXIgb3JkZXIgPSBnZXRPcmRlcihsaW5lKTsKICAgIHZhciBjaCA9ICFvcmRlciA/IGxpbmUudGV4dC5sZW5ndGggOiBvcmRlclswXS5sZXZlbCAlIDIgPyBsaW5lTGVmdChsaW5lKSA6IGxpbmVSaWdodChsaW5lKTsKICAgIHJldHVybiBQb3MobGluZU4gPT0gbnVsbCA/IGxpbmVObyhsaW5lKSA6IGxpbmVOLCBjaCk7CiAgfQogIGZ1bmN0aW9uIGxpbmVTdGFydFNtYXJ0KGNtLCBwb3MpIHsKICAgIHZhciBzdGFydCA9IGxpbmVTdGFydChjbSwgcG9zLmxpbmUpOwogICAgdmFyIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgc3RhcnQubGluZSk7CiAgICB2YXIgb3JkZXIgPSBnZXRPcmRlcihsaW5lKTsKICAgIGlmICghb3JkZXIgfHwgb3JkZXJbMF0ubGV2ZWwgPT0gMCkgewogICAgICB2YXIgZmlyc3ROb25XUyA9IE1hdGgubWF4KDAsIGxpbmUudGV4dC5zZWFyY2goL1xTLykpOwogICAgICB2YXIgaW5XUyA9IHBvcy5saW5lID09IHN0YXJ0LmxpbmUgJiYgcG9zLmNoIDw9IGZpcnN0Tm9uV1MgJiYgcG9zLmNoOwogICAgICByZXR1cm4gUG9zKHN0YXJ0LmxpbmUsIGluV1MgPyAwIDogZmlyc3ROb25XUyk7CiAgICB9CiAgICByZXR1cm4gc3RhcnQ7CiAgfQoKICBmdW5jdGlvbiBjb21wYXJlQmlkaUxldmVsKG9yZGVyLCBhLCBiKSB7CiAgICB2YXIgbGluZWRpciA9IG9yZGVyWzBdLmxldmVsOwogICAgaWYgKGEgPT0gbGluZWRpcikgcmV0dXJuIHRydWU7CiAgICBpZiAoYiA9PSBsaW5lZGlyKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gYSA8IGI7CiAgfQogIHZhciBiaWRpT3RoZXI7CiAgZnVuY3Rpb24gZ2V0QmlkaVBhcnRBdChvcmRlciwgcG9zKSB7CiAgICBiaWRpT3RoZXIgPSBudWxsOwogICAgZm9yICh2YXIgaSA9IDAsIGZvdW5kOyBpIDwgb3JkZXIubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIGN1ciA9IG9yZGVyW2ldOwogICAgICBpZiAoY3VyLmZyb20gPCBwb3MgJiYgY3VyLnRvID4gcG9zKSByZXR1cm4gaTsKICAgICAgaWYgKChjdXIuZnJvbSA9PSBwb3MgfHwgY3VyLnRvID09IHBvcykpIHsKICAgICAgICBpZiAoZm91bmQgPT0gbnVsbCkgewogICAgICAgICAgZm91bmQgPSBpOwogICAgICAgIH0gZWxzZSBpZiAoY29tcGFyZUJpZGlMZXZlbChvcmRlciwgY3VyLmxldmVsLCBvcmRlcltmb3VuZF0ubGV2ZWwpKSB7CiAgICAgICAgICBpZiAoY3VyLmZyb20gIT0gY3VyLnRvKSBiaWRpT3RoZXIgPSBmb3VuZDsKICAgICAgICAgIHJldHVybiBpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoY3VyLmZyb20gIT0gY3VyLnRvKSBiaWRpT3RoZXIgPSBpOwogICAgICAgICAgcmV0dXJuIGZvdW5kOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGZvdW5kOwogIH0KCiAgZnVuY3Rpb24gbW92ZUluTGluZShsaW5lLCBwb3MsIGRpciwgYnlVbml0KSB7CiAgICBpZiAoIWJ5VW5pdCkgcmV0dXJuIHBvcyArIGRpcjsKICAgIGRvIHBvcyArPSBkaXI7CiAgICB3aGlsZSAocG9zID4gMCAmJiBpc0V4dGVuZGluZ0NoYXIobGluZS50ZXh0LmNoYXJBdChwb3MpKSk7CiAgICByZXR1cm4gcG9zOwogIH0KCiAgLy8gVGhpcyBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gbW92ZSAndmlzdWFsbHknIHRocm91Z2ggYmktZGlyZWN0aW9uYWwKICAvLyB0ZXh0IC0tIGkuZS4sIHByZXNzaW5nIGxlZnQgc2hvdWxkIG1ha2UgdGhlIGN1cnNvciBnbyBsZWZ0LCBldmVuCiAgLy8gd2hlbiBpbiBSVEwgdGV4dC4gVGhlIHRyaWNreSBwYXJ0IGlzIHRoZSAnanVtcHMnLCB3aGVyZSBSVEwgYW5kCiAgLy8gTFRSIHRleHQgdG91Y2ggZWFjaCBvdGhlci4gVGhpcyBvZnRlbiByZXF1aXJlcyB0aGUgY3Vyc29yIG9mZnNldAogIC8vIHRvIG1vdmUgbW9yZSB0aGFuIG9uZSB1bml0LCBpbiBvcmRlciB0byB2aXN1YWxseSBtb3ZlIG9uZSB1bml0LgogIGZ1bmN0aW9uIG1vdmVWaXN1YWxseShsaW5lLCBzdGFydCwgZGlyLCBieVVuaXQpIHsKICAgIHZhciBiaWRpID0gZ2V0T3JkZXIobGluZSk7CiAgICBpZiAoIWJpZGkpIHJldHVybiBtb3ZlTG9naWNhbGx5KGxpbmUsIHN0YXJ0LCBkaXIsIGJ5VW5pdCk7CiAgICB2YXIgcG9zID0gZ2V0QmlkaVBhcnRBdChiaWRpLCBzdGFydCksIHBhcnQgPSBiaWRpW3Bvc107CiAgICB2YXIgdGFyZ2V0ID0gbW92ZUluTGluZShsaW5lLCBzdGFydCwgcGFydC5sZXZlbCAlIDIgPyAtZGlyIDogZGlyLCBieVVuaXQpOwoKICAgIGZvciAoOzspIHsKICAgICAgaWYgKHRhcmdldCA+IHBhcnQuZnJvbSAmJiB0YXJnZXQgPCBwYXJ0LnRvKSByZXR1cm4gdGFyZ2V0OwogICAgICBpZiAodGFyZ2V0ID09IHBhcnQuZnJvbSB8fCB0YXJnZXQgPT0gcGFydC50bykgewogICAgICAgIGlmIChnZXRCaWRpUGFydEF0KGJpZGksIHRhcmdldCkgPT0gcG9zKSByZXR1cm4gdGFyZ2V0OwogICAgICAgIHBhcnQgPSBiaWRpW3BvcyArPSBkaXJdOwogICAgICAgIHJldHVybiAoZGlyID4gMCkgPT0gcGFydC5sZXZlbCAlIDIgPyBwYXJ0LnRvIDogcGFydC5mcm9tOwogICAgICB9IGVsc2UgewogICAgICAgIHBhcnQgPSBiaWRpW3BvcyArPSBkaXJdOwogICAgICAgIGlmICghcGFydCkgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKChkaXIgPiAwKSA9PSBwYXJ0LmxldmVsICUgMikKICAgICAgICAgIHRhcmdldCA9IG1vdmVJbkxpbmUobGluZSwgcGFydC50bywgLTEsIGJ5VW5pdCk7CiAgICAgICAgZWxzZQogICAgICAgICAgdGFyZ2V0ID0gbW92ZUluTGluZShsaW5lLCBwYXJ0LmZyb20sIDEsIGJ5VW5pdCk7CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIG1vdmVMb2dpY2FsbHkobGluZSwgc3RhcnQsIGRpciwgYnlVbml0KSB7CiAgICB2YXIgdGFyZ2V0ID0gc3RhcnQgKyBkaXI7CiAgICBpZiAoYnlVbml0KSB3aGlsZSAodGFyZ2V0ID4gMCAmJiBpc0V4dGVuZGluZ0NoYXIobGluZS50ZXh0LmNoYXJBdCh0YXJnZXQpKSkgdGFyZ2V0ICs9IGRpcjsKICAgIHJldHVybiB0YXJnZXQgPCAwIHx8IHRhcmdldCA+IGxpbmUudGV4dC5sZW5ndGggPyBudWxsIDogdGFyZ2V0OwogIH0KCiAgLy8gQmlkaXJlY3Rpb25hbCBvcmRlcmluZyBhbGdvcml0aG0KICAvLyBTZWUgaHR0cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHI5L3RyOS0xMy5odG1sIGZvciB0aGUgYWxnb3JpdGhtCiAgLy8gdGhhdCB0aGlzIChwYXJ0aWFsbHkpIGltcGxlbWVudHMuCgogIC8vIE9uZS1jaGFyIGNvZGVzIHVzZWQgZm9yIGNoYXJhY3RlciB0eXBlczoKICAvLyBMIChMKTogICBMZWZ0LXRvLVJpZ2h0CiAgLy8gUiAoUik6ICAgUmlnaHQtdG8tTGVmdAogIC8vIHIgKEFMKTogIFJpZ2h0LXRvLUxlZnQgQXJhYmljCiAgLy8gMSAoRU4pOiAgRXVyb3BlYW4gTnVtYmVyCiAgLy8gKyAoRVMpOiAgRXVyb3BlYW4gTnVtYmVyIFNlcGFyYXRvcgogIC8vICUgKEVUKTogIEV1cm9wZWFuIE51bWJlciBUZXJtaW5hdG9yCiAgLy8gbiAoQU4pOiAgQXJhYmljIE51bWJlcgogIC8vICwgKENTKTogIENvbW1vbiBOdW1iZXIgU2VwYXJhdG9yCiAgLy8gbSAoTlNNKTogTm9uLVNwYWNpbmcgTWFyawogIC8vIGIgKEJOKTogIEJvdW5kYXJ5IE5ldXRyYWwKICAvLyBzIChCKTogICBQYXJhZ3JhcGggU2VwYXJhdG9yCiAgLy8gdCAoUyk6ICAgU2VnbWVudCBTZXBhcmF0b3IKICAvLyB3IChXUyk6ICBXaGl0ZXNwYWNlCiAgLy8gTiAoT04pOiAgT3RoZXIgTmV1dHJhbHMKCiAgLy8gUmV0dXJucyBudWxsIGlmIGNoYXJhY3RlcnMgYXJlIG9yZGVyZWQgYXMgdGhleSBhcHBlYXIKICAvLyAobGVmdC10by1yaWdodCksIG9yIGFuIGFycmF5IG9mIHNlY3Rpb25zICh7ZnJvbSwgdG8sIGxldmVsfQogIC8vIG9iamVjdHMpIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IG9jY3VyIHZpc3VhbGx5LgogIHZhciBiaWRpT3JkZXJpbmcgPSAoZnVuY3Rpb24oKSB7CiAgICAvLyBDaGFyYWN0ZXIgdHlwZXMgZm9yIGNvZGVwb2ludHMgMCB0byAweGZmCiAgICB2YXIgbG93VHlwZXMgPSAiYmJiYmJiYmJidHN0d3NiYmJiYmJiYmJiYmJiYnNzc3R3Tk4lJSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTmJiYmJiYnNiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4lJTExTkxOTk4xTE5OTk5OTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE4iOwogICAgLy8gQ2hhcmFjdGVyIHR5cGVzIGZvciBjb2RlcG9pbnRzIDB4NjAwIHRvIDB4NmZmCiAgICB2YXIgYXJhYmljVHlwZXMgPSAicnJycnJycnJycnJyLHJOTm1tbW1tbXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1ycnJycnJybm5ubm5ubm5ubiVubnJycm1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tbW1tbW1ObW1tbSI7CiAgICBmdW5jdGlvbiBjaGFyVHlwZShjb2RlKSB7CiAgICAgIGlmIChjb2RlIDw9IDB4ZjcpIHJldHVybiBsb3dUeXBlcy5jaGFyQXQoY29kZSk7CiAgICAgIGVsc2UgaWYgKDB4NTkwIDw9IGNvZGUgJiYgY29kZSA8PSAweDVmNCkgcmV0dXJuICJSIjsKICAgICAgZWxzZSBpZiAoMHg2MDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4NmVkKSByZXR1cm4gYXJhYmljVHlwZXMuY2hhckF0KGNvZGUgLSAweDYwMCk7CiAgICAgIGVsc2UgaWYgKDB4NmVlIDw9IGNvZGUgJiYgY29kZSA8PSAweDhhYykgcmV0dXJuICJyIjsKICAgICAgZWxzZSBpZiAoMHgyMDAwIDw9IGNvZGUgJiYgY29kZSA8PSAweDIwMGIpIHJldHVybiAidyI7CiAgICAgIGVsc2UgaWYgKGNvZGUgPT0gMHgyMDBjKSByZXR1cm4gImIiOwogICAgICBlbHNlIHJldHVybiAiTCI7CiAgICB9CgogICAgdmFyIGJpZGlSRSA9IC9bXHUwNTkwLVx1MDVmNFx1MDYwMC1cdTA2ZmZcdTA3MDAtXHUwOGFjXS87CiAgICB2YXIgaXNOZXV0cmFsID0gL1tzdHdOXS8sIGlzU3Ryb25nID0gL1tMUnJdLywgY291bnRzQXNMZWZ0ID0gL1tMYjFuXS8sIGNvdW50c0FzTnVtID0gL1sxbl0vOwogICAgLy8gQnJvd3NlcnMgc2VlbSB0byBhbHdheXMgdHJlYXQgdGhlIGJvdW5kYXJpZXMgb2YgYmxvY2sgZWxlbWVudHMgYXMgYmVpbmcgTC4KICAgIHZhciBvdXRlclR5cGUgPSAiTCI7CgogICAgZnVuY3Rpb24gQmlkaVNwYW4obGV2ZWwsIGZyb20sIHRvKSB7CiAgICAgIHRoaXMubGV2ZWwgPSBsZXZlbDsKICAgICAgdGhpcy5mcm9tID0gZnJvbTsgdGhpcy50byA9IHRvOwogICAgfQoKICAgIHJldHVybiBmdW5jdGlvbihzdHIpIHsKICAgICAgaWYgKCFiaWRpUkUudGVzdChzdHIpKSByZXR1cm4gZmFsc2U7CiAgICAgIHZhciBsZW4gPSBzdHIubGVuZ3RoLCB0eXBlcyA9IFtdOwogICAgICBmb3IgKHZhciBpID0gMCwgdHlwZTsgaSA8IGxlbjsgKytpKQogICAgICAgIHR5cGVzLnB1c2godHlwZSA9IGNoYXJUeXBlKHN0ci5jaGFyQ29kZUF0KGkpKSk7CgogICAgICAvLyBXMS4gRXhhbWluZSBlYWNoIG5vbi1zcGFjaW5nIG1hcmsgKE5TTSkgaW4gdGhlIGxldmVsIHJ1biwgYW5kCiAgICAgIC8vIGNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgTlNNIHRvIHRoZSB0eXBlIG9mIHRoZSBwcmV2aW91cwogICAgICAvLyBjaGFyYWN0ZXIuIElmIHRoZSBOU00gaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsZXZlbCBydW4sIGl0IHdpbGwKICAgICAgLy8gZ2V0IHRoZSB0eXBlIG9mIHNvci4KICAgICAgZm9yICh2YXIgaSA9IDAsIHByZXYgPSBvdXRlclR5cGU7IGkgPCBsZW47ICsraSkgewogICAgICAgIHZhciB0eXBlID0gdHlwZXNbaV07CiAgICAgICAgaWYgKHR5cGUgPT0gIm0iKSB0eXBlc1tpXSA9IHByZXY7CiAgICAgICAgZWxzZSBwcmV2ID0gdHlwZTsKICAgICAgfQoKICAgICAgLy8gVzIuIFNlYXJjaCBiYWNrd2FyZHMgZnJvbSBlYWNoIGluc3RhbmNlIG9mIGEgRXVyb3BlYW4gbnVtYmVyCiAgICAgIC8vIHVudGlsIHRoZSBmaXJzdCBzdHJvbmcgdHlwZSAoUiwgTCwgQUwsIG9yIHNvcikgaXMgZm91bmQuIElmIGFuCiAgICAgIC8vIEFMIGlzIGZvdW5kLCBjaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIEV1cm9wZWFuIG51bWJlciB0byBBcmFiaWMKICAgICAgLy8gbnVtYmVyLgogICAgICAvLyBXMy4gQ2hhbmdlIGFsbCBBTHMgdG8gUi4KICAgICAgZm9yICh2YXIgaSA9IDAsIGN1ciA9IG91dGVyVHlwZTsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1tpXTsKICAgICAgICBpZiAodHlwZSA9PSAiMSIgJiYgY3VyID09ICJyIikgdHlwZXNbaV0gPSAibiI7CiAgICAgICAgZWxzZSBpZiAoaXNTdHJvbmcudGVzdCh0eXBlKSkgeyBjdXIgPSB0eXBlOyBpZiAodHlwZSA9PSAiciIpIHR5cGVzW2ldID0gIlIiOyB9CiAgICAgIH0KCiAgICAgIC8vIFc0LiBBIHNpbmdsZSBFdXJvcGVhbiBzZXBhcmF0b3IgYmV0d2VlbiB0d28gRXVyb3BlYW4gbnVtYmVycwogICAgICAvLyBjaGFuZ2VzIHRvIGEgRXVyb3BlYW4gbnVtYmVyLiBBIHNpbmdsZSBjb21tb24gc2VwYXJhdG9yIGJldHdlZW4KICAgICAgLy8gdHdvIG51bWJlcnMgb2YgdGhlIHNhbWUgdHlwZSBjaGFuZ2VzIHRvIHRoYXQgdHlwZS4KICAgICAgZm9yICh2YXIgaSA9IDEsIHByZXYgPSB0eXBlc1swXTsgaSA8IGxlbiAtIDE7ICsraSkgewogICAgICAgIHZhciB0eXBlID0gdHlwZXNbaV07CiAgICAgICAgaWYgKHR5cGUgPT0gIisiICYmIHByZXYgPT0gIjEiICYmIHR5cGVzW2krMV0gPT0gIjEiKSB0eXBlc1tpXSA9ICIxIjsKICAgICAgICBlbHNlIGlmICh0eXBlID09ICIsIiAmJiBwcmV2ID09IHR5cGVzW2krMV0gJiYKICAgICAgICAgICAgICAgICAocHJldiA9PSAiMSIgfHwgcHJldiA9PSAibiIpKSB0eXBlc1tpXSA9IHByZXY7CiAgICAgICAgcHJldiA9IHR5cGU7CiAgICAgIH0KCiAgICAgIC8vIFc1LiBBIHNlcXVlbmNlIG9mIEV1cm9wZWFuIHRlcm1pbmF0b3JzIGFkamFjZW50IHRvIEV1cm9wZWFuCiAgICAgIC8vIG51bWJlcnMgY2hhbmdlcyB0byBhbGwgRXVyb3BlYW4gbnVtYmVycy4KICAgICAgLy8gVzYuIE90aGVyd2lzZSwgc2VwYXJhdG9ycyBhbmQgdGVybWluYXRvcnMgY2hhbmdlIHRvIE90aGVyCiAgICAgIC8vIE5ldXRyYWwuCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICB2YXIgdHlwZSA9IHR5cGVzW2ldOwogICAgICAgIGlmICh0eXBlID09ICIsIikgdHlwZXNbaV0gPSAiTiI7CiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSAiJSIpIHsKICAgICAgICAgIGZvciAodmFyIGVuZCA9IGkgKyAxOyBlbmQgPCBsZW4gJiYgdHlwZXNbZW5kXSA9PSAiJSI7ICsrZW5kKSB7fQogICAgICAgICAgdmFyIHJlcGxhY2UgPSAoaSAmJiB0eXBlc1tpLTFdID09ICIhIikgfHwgKGVuZCA8IGxlbiAmJiB0eXBlc1tlbmRdID09ICIxIikgPyAiMSIgOiAiTiI7CiAgICAgICAgICBmb3IgKHZhciBqID0gaTsgaiA8IGVuZDsgKytqKSB0eXBlc1tqXSA9IHJlcGxhY2U7CiAgICAgICAgICBpID0gZW5kIC0gMTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIFc3LiBTZWFyY2ggYmFja3dhcmRzIGZyb20gZWFjaCBpbnN0YW5jZSBvZiBhIEV1cm9wZWFuIG51bWJlcgogICAgICAvLyB1bnRpbCB0aGUgZmlyc3Qgc3Ryb25nIHR5cGUgKFIsIEwsIG9yIHNvcikgaXMgZm91bmQuIElmIGFuIEwgaXMKICAgICAgLy8gZm91bmQsIHRoZW4gY2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBFdXJvcGVhbiBudW1iZXIgdG8gTC4KICAgICAgZm9yICh2YXIgaSA9IDAsIGN1ciA9IG91dGVyVHlwZTsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1tpXTsKICAgICAgICBpZiAoY3VyID09ICJMIiAmJiB0eXBlID09ICIxIikgdHlwZXNbaV0gPSAiTCI7CiAgICAgICAgZWxzZSBpZiAoaXNTdHJvbmcudGVzdCh0eXBlKSkgY3VyID0gdHlwZTsKICAgICAgfQoKICAgICAgLy8gTjEuIEEgc2VxdWVuY2Ugb2YgbmV1dHJhbHMgdGFrZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUKICAgICAgLy8gc3Vycm91bmRpbmcgc3Ryb25nIHRleHQgaWYgdGhlIHRleHQgb24gYm90aCBzaWRlcyBoYXMgdGhlIHNhbWUKICAgICAgLy8gZGlyZWN0aW9uLiBFdXJvcGVhbiBhbmQgQXJhYmljIG51bWJlcnMgYWN0IGFzIGlmIHRoZXkgd2VyZSBSIGluCiAgICAgIC8vIHRlcm1zIG9mIHRoZWlyIGluZmx1ZW5jZSBvbiBuZXV0cmFscy4gU3RhcnQtb2YtbGV2ZWwtcnVuIChzb3IpCiAgICAgIC8vIGFuZCBlbmQtb2YtbGV2ZWwtcnVuIChlb3IpIGFyZSB1c2VkIGF0IGxldmVsIHJ1biBib3VuZGFyaWVzLgogICAgICAvLyBOMi4gQW55IHJlbWFpbmluZyBuZXV0cmFscyB0YWtlIHRoZSBlbWJlZGRpbmcgZGlyZWN0aW9uLgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgaWYgKGlzTmV1dHJhbC50ZXN0KHR5cGVzW2ldKSkgewogICAgICAgICAgZm9yICh2YXIgZW5kID0gaSArIDE7IGVuZCA8IGxlbiAmJiBpc05ldXRyYWwudGVzdCh0eXBlc1tlbmRdKTsgKytlbmQpIHt9CiAgICAgICAgICB2YXIgYmVmb3JlID0gKGkgPyB0eXBlc1tpLTFdIDogb3V0ZXJUeXBlKSA9PSAiTCI7CiAgICAgICAgICB2YXIgYWZ0ZXIgPSAoZW5kIDwgbGVuID8gdHlwZXNbZW5kXSA6IG91dGVyVHlwZSkgPT0gIkwiOwogICAgICAgICAgdmFyIHJlcGxhY2UgPSBiZWZvcmUgfHwgYWZ0ZXIgPyAiTCIgOiAiUiI7CiAgICAgICAgICBmb3IgKHZhciBqID0gaTsgaiA8IGVuZDsgKytqKSB0eXBlc1tqXSA9IHJlcGxhY2U7CiAgICAgICAgICBpID0gZW5kIC0gMTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIEhlcmUgd2UgZGVwYXJ0IGZyb20gdGhlIGRvY3VtZW50ZWQgYWxnb3JpdGhtLCBpbiBvcmRlciB0byBhdm9pZAogICAgICAvLyBidWlsZGluZyB1cCBhbiBhY3R1YWwgbGV2ZWxzIGFycmF5LiBTaW5jZSB0aGVyZSBhcmUgb25seSB0aHJlZQogICAgICAvLyBsZXZlbHMgKDAsIDEsIDIpIGluIGFuIGltcGxlbWVudGF0aW9uIHRoYXQgZG9lc24ndCB0YWtlCiAgICAgIC8vIGV4cGxpY2l0IGVtYmVkZGluZyBpbnRvIGFjY291bnQsIHdlIGNhbiBidWlsZCB1cCB0aGUgb3JkZXIgb24KICAgICAgLy8gdGhlIGZseSwgd2l0aG91dCBmb2xsb3dpbmcgdGhlIGxldmVsLWJhc2VkIGFsZ29yaXRobS4KICAgICAgdmFyIG9yZGVyID0gW10sIG07CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOykgewogICAgICAgIGlmIChjb3VudHNBc0xlZnQudGVzdCh0eXBlc1tpXSkpIHsKICAgICAgICAgIHZhciBzdGFydCA9IGk7CiAgICAgICAgICBmb3IgKCsraTsgaSA8IGxlbiAmJiBjb3VudHNBc0xlZnQudGVzdCh0eXBlc1tpXSk7ICsraSkge30KICAgICAgICAgIG9yZGVyLnB1c2gobmV3IEJpZGlTcGFuKDAsIHN0YXJ0LCBpKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhciBwb3MgPSBpLCBhdCA9IG9yZGVyLmxlbmd0aDsKICAgICAgICAgIGZvciAoKytpOyBpIDwgbGVuICYmIHR5cGVzW2ldICE9ICJMIjsgKytpKSB7fQogICAgICAgICAgZm9yICh2YXIgaiA9IHBvczsgaiA8IGk7KSB7CiAgICAgICAgICAgIGlmIChjb3VudHNBc051bS50ZXN0KHR5cGVzW2pdKSkgewogICAgICAgICAgICAgIGlmIChwb3MgPCBqKSBvcmRlci5zcGxpY2UoYXQsIDAsIG5ldyBCaWRpU3BhbigxLCBwb3MsIGopKTsKICAgICAgICAgICAgICB2YXIgbnN0YXJ0ID0gajsKICAgICAgICAgICAgICBmb3IgKCsrajsgaiA8IGkgJiYgY291bnRzQXNOdW0udGVzdCh0eXBlc1tqXSk7ICsraikge30KICAgICAgICAgICAgICBvcmRlci5zcGxpY2UoYXQsIDAsIG5ldyBCaWRpU3BhbigyLCBuc3RhcnQsIGopKTsKICAgICAgICAgICAgICBwb3MgPSBqOwogICAgICAgICAgICB9IGVsc2UgKytqOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHBvcyA8IGkpIG9yZGVyLnNwbGljZShhdCwgMCwgbmV3IEJpZGlTcGFuKDEsIHBvcywgaSkpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAob3JkZXJbMF0ubGV2ZWwgPT0gMSAmJiAobSA9IHN0ci5tYXRjaCgvXlxzKy8pKSkgewogICAgICAgIG9yZGVyWzBdLmZyb20gPSBtWzBdLmxlbmd0aDsKICAgICAgICBvcmRlci51bnNoaWZ0KG5ldyBCaWRpU3BhbigwLCAwLCBtWzBdLmxlbmd0aCkpOwogICAgICB9CiAgICAgIGlmIChsc3Qob3JkZXIpLmxldmVsID09IDEgJiYgKG0gPSBzdHIubWF0Y2goL1xzKyQvKSkpIHsKICAgICAgICBsc3Qob3JkZXIpLnRvIC09IG1bMF0ubGVuZ3RoOwogICAgICAgIG9yZGVyLnB1c2gobmV3IEJpZGlTcGFuKDAsIGxlbiAtIG1bMF0ubGVuZ3RoLCBsZW4pKTsKICAgICAgfQogICAgICBpZiAob3JkZXJbMF0ubGV2ZWwgPT0gMikKICAgICAgICBvcmRlci51bnNoaWZ0KG5ldyBCaWRpU3BhbigxLCBvcmRlclswXS50bywgb3JkZXJbMF0udG8pKTsKICAgICAgaWYgKG9yZGVyWzBdLmxldmVsICE9IGxzdChvcmRlcikubGV2ZWwpCiAgICAgICAgb3JkZXIucHVzaChuZXcgQmlkaVNwYW4ob3JkZXJbMF0ubGV2ZWwsIGxlbiwgbGVuKSk7CgogICAgICByZXR1cm4gb3JkZXI7CiAgICB9OwogIH0pKCk7CgogIC8vIFRIRSBFTkQKCiAgQ29kZU1pcnJvci52ZXJzaW9uID0gIjUuOS4wIjsKCiAgcmV0dXJuIENvZGVNaXJyb3I7Cn0pOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/js/gfm.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnMKLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHA6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFCgooZnVuY3Rpb24obW9kKSB7CiAgaWYgKHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIpIC8vIENvbW1vbkpTCiAgICBtb2QocmVxdWlyZSgiLi4vLi4vbGliL2NvZGVtaXJyb3IiKSwgcmVxdWlyZSgiLi4vbWFya2Rvd24vbWFya2Rvd24iKSwgcmVxdWlyZSgiLi4vLi4vYWRkb24vbW9kZS9vdmVybGF5IikpOwogIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kKSAvLyBBTUQKICAgIGRlZmluZShbIi4uLy4uL2xpYi9jb2RlbWlycm9yIiwgIi4uL21hcmtkb3duL21hcmtkb3duIiwgIi4uLy4uL2FkZG9uL21vZGUvb3ZlcmxheSJdLCBtb2QpOwogIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnYKICAgIG1vZChDb2RlTWlycm9yKTsKfSkoZnVuY3Rpb24oQ29kZU1pcnJvcikgewoidXNlIHN0cmljdCI7Cgp2YXIgdXJsUkUgPSAvXigoPzooPzphYWFzP3xhYm91dHxhY2FwfGFkaXVteHRyYXxhZltwc118YWltfGFwdHxhdHRhY2htZW50fGF3fGJlc2hhcmV8Yml0Y29pbnxib2xvfGNhbGx0b3xjYXB8Y2hyb21lKD86LWV4dGVuc2lvbik/fGNpZHxjb2FwfGNvbS1ldmVudGJyaXRlLWF0dGVuZGVlfGNvbnRlbnR8Y3JpZHxjdnN8ZGF0YXxkYXZ8ZGljdHxkbG5hLSg/OnBsYXljb250YWluZXJ8cGxheXNpbmdsZSl8ZG5zfGRvaXxkdG58ZHZifGVkMmt8ZmFjZXRpbWV8ZmVlZHxmaWxlfGZpbmdlcnxmaXNofGZ0cHxnZW98Z2d8Z2l0fGdpem1vcHJvamVjdHxnb3xnb3BoZXJ8Z3RhbGt8aDMyM3xoY3B8aHR0cHM/fGlheHxpY2FwfGljb258aW18aW1hcHxpbmZvfGlwbnxpcHB8aXJjWzZzXT98aXJpcyg/OlwuYmVlcHxcLmx3enxcLnhwY3xcLnhwY3MpP3xpdG1zfGphcnxqYXZhc2NyaXB0fGptc3xrZXlwYXJjfGxhc3RmbXxsZGFwcz98bWFnbmV0fG1haWx0b3xtYXBzfG1hcmtldHxtZXNzYWdlfG1pZHxtbXN8bXMtaGVscHxtc25pbXxtc3Jwcz98bXRxcHxtdW1ibGV8bXVwZGF0ZXxtdm58bmV3c3xuZnN8bmloP3xubnRwfG5vdGVzfG9pZHxvcGFxdWVsb2NrdG9rZW58cGFsbXxwYXBhcmF6eml8cGxhdGZvcm18cG9wfHByZXN8cHJveHl8cHN5Y3xxdWVyeXxyZXMoPzpvdXJjZSk/fHJtaXxyc3luY3xydG1wfHJ0c3B8c2Vjb25kbGlmZXxzZXJ2aWNlfHNlc3Npb258c2Z0cHxzZ258c2h0dHB8c2lldmV8c2lwcz98c2t5cGV8c21bYnNdfHNubXB8c29hcFwuYmVlcHM/fHNvbGRhdHxzcG90aWZ5fHNzaHxzdGVhbXxzdm58dGFnfHRlYW1zcGVha3x0ZWwoPzpuZXQpP3x0ZnRwfHRoaW5nc3x0aGlzbWVzc2FnZXx0aXB8dG4zMjcwfHR2fHVkcHx1bnJlYWx8dXJufHV0MjAwNHx2ZW1taXx2ZW50cmlsb3x2aWV3LXNvdXJjZXx3ZWJjYWx8d3NzP3x3dGFpfHd5Y2l3eWd8eGNvbig/Oi11c2VyaWQpP3x4ZmlyZXx4bWxycGNcLmJlZXBzP3x4bXBwfHhyaXx5bXNncnx6MzlcLjUwW3JzXT8pOig/OlwvezEsM318W2EtejAtOSVdKXx3d3dcZHswLDN9Wy5dfFthLXowLTkuXC1dK1suXVthLXpdezIsNH1cLykoPzpbXlxzKCk8Pl18XChbXlxzKCk8Pl0qXCkpKyg/OlwoW15ccygpPD5dKlwpfFteXHNgKiEoKVxbXF17fTs6JyIuLDw+P8KrwrvigJzigJ3igJjigJldKSkvaQoKQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJnZm0iLCBmdW5jdGlvbihjb25maWcsIG1vZGVDb25maWcpIHsKICB2YXIgY29kZURlcHRoID0gMDsKICBmdW5jdGlvbiBibGFua0xpbmUoc3RhdGUpIHsKICAgIHN0YXRlLmNvZGUgPSBmYWxzZTsKICAgIHJldHVybiBudWxsOwogIH0KICB2YXIgZ2ZtT3ZlcmxheSA9IHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gewogICAgICAgIGNvZGU6IGZhbHNlLAogICAgICAgIGNvZGVCbG9jazogZmFsc2UsCiAgICAgICAgYXRlU3BhY2U6IGZhbHNlCiAgICAgIH07CiAgICB9LAogICAgY29weVN0YXRlOiBmdW5jdGlvbihzKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgY29kZTogcy5jb2RlLAogICAgICAgIGNvZGVCbG9jazogcy5jb2RlQmxvY2ssCiAgICAgICAgYXRlU3BhY2U6IHMuYXRlU3BhY2UKICAgICAgfTsKICAgIH0sCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBzdGF0ZS5jb21iaW5lVG9rZW5zID0gbnVsbDsKCiAgICAgIC8vIEhhY2sgdG8gcHJldmVudCBmb3JtYXR0aW5nIG92ZXJyaWRlIGluc2lkZSBjb2RlIGJsb2NrcyAoYmxvY2sgYW5kIGlubGluZSkKICAgICAgaWYgKHN0YXRlLmNvZGVCbG9jaykgewogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15gYGArLykpIHsKICAgICAgICAgIHN0YXRlLmNvZGVCbG9jayA9IGZhbHNlOwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgc3RhdGUuY29kZSA9IGZhbHNlOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uc29sKCkgJiYgc3RyZWFtLm1hdGNoKC9eYGBgKy8pKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHN0YXRlLmNvZGVCbG9jayA9IHRydWU7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgLy8gSWYgdGhpcyBibG9jayBpcyBjaGFuZ2VkLCBpdCBtYXkgbmVlZCB0byBiZSB1cGRhdGVkIGluIE1hcmtkb3duIG1vZGUKICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICdgJykgewogICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgdmFyIGJlZm9yZSA9IHN0cmVhbS5wb3M7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKCdgJyk7CiAgICAgICAgdmFyIGRpZmZlcmVuY2UgPSAxICsgc3RyZWFtLnBvcyAtIGJlZm9yZTsKICAgICAgICBpZiAoIXN0YXRlLmNvZGUpIHsKICAgICAgICAgIGNvZGVEZXB0aCA9IGRpZmZlcmVuY2U7CiAgICAgICAgICBzdGF0ZS5jb2RlID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGRpZmZlcmVuY2UgPT09IGNvZGVEZXB0aCkgeyAvLyBNdXN0IGJlIGV4YWN0CiAgICAgICAgICAgIHN0YXRlLmNvZGUgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0gZWxzZSBpZiAoc3RhdGUuY29kZSkgewogICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgLy8gQ2hlY2sgaWYgc3BhY2UuIElmIHNvLCBsaW5rcyBjYW4gYmUgZm9ybWF0dGVkIGxhdGVyIG9uCiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICAgIHN0YXRlLmF0ZVNwYWNlID0gdHJ1ZTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBpZiAoc3RyZWFtLnNvbCgpIHx8IHN0YXRlLmF0ZVNwYWNlKSB7CiAgICAgICAgc3RhdGUuYXRlU3BhY2UgPSBmYWxzZTsKICAgICAgICBpZiAobW9kZUNvbmZpZy5naXRIdWJTcGljZSAhPT0gZmFsc2UpIHsKICAgICAgICAgIGlmKHN0cmVhbS5tYXRjaCgvXig/OlthLXpBLVowLTlcLV9dK1wvKT8oPzpbYS16QS1aMC05XC1fXStAKT8oPzpbYS1mMC05XXs3LDQwfVxiKS8pKSB7CiAgICAgICAgICAgIC8vIFVzZXIvUHJvamVjdEBTSEEKICAgICAgICAgICAgLy8gVXNlckBTSEEKICAgICAgICAgICAgLy8gU0hBCiAgICAgICAgICAgIHN0YXRlLmNvbWJpbmVUb2tlbnMgPSB0cnVlOwogICAgICAgICAgICByZXR1cm4gImxpbmsiOwogICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL14oPzpbYS16QS1aMC05XC1fXStcLyk/KD86W2EtekEtWjAtOVwtX10rKT8jWzAtOV0rXGIvKSkgewogICAgICAgICAgICAvLyBVc2VyL1Byb2plY3QjTnVtCiAgICAgICAgICAgIC8vIFVzZXIjTnVtCiAgICAgICAgICAgIC8vICNOdW0KICAgICAgICAgICAgc3RhdGUuY29tYmluZVRva2VucyA9IHRydWU7CiAgICAgICAgICAgIHJldHVybiAibGluayI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdHJlYW0ubWF0Y2godXJsUkUpICYmCiAgICAgICAgICBzdHJlYW0uc3RyaW5nLnNsaWNlKHN0cmVhbS5zdGFydCAtIDIsIHN0cmVhbS5zdGFydCkgIT0gIl0oIiAmJgogICAgICAgICAgKHN0cmVhbS5zdGFydCA9PSAwIHx8IC9cVy8udGVzdChzdHJlYW0uc3RyaW5nLmNoYXJBdChzdHJlYW0uc3RhcnQgLSAxKSkpKSB7CiAgICAgICAgLy8gVVJMcwogICAgICAgIC8vIFRha2VuIGZyb20gaHR0cDovL2RhcmluZ2ZpcmViYWxsLm5ldC8yMDEwLzA3L2ltcHJvdmVkX3JlZ2V4X2Zvcl9tYXRjaGluZ191cmxzCiAgICAgICAgLy8gQW5kIHRoZW4gKGlzc3VlICMxMTYwKSBzaW1wbGlmaWVkIHRvIG1ha2UgaXQgbm90IGNyYXNoIHRoZSBDaHJvbWUgUmVnZXhwIGVuZ2luZQogICAgICAgIC8vIEFuZCB0aGVuIGxpbWl0ZWQgdXJsIHNjaGVtZXMgdG8gdGhlIENvbW1vbk1hcmsgbGlzdCwgc28gZm9vOmJhciBpc24ndCBtYXRjaGVkIGFzIGEgVVJMCiAgICAgICAgc3RhdGUuY29tYmluZVRva2VucyA9IHRydWU7CiAgICAgICAgcmV0dXJuICJsaW5rIjsKICAgICAgfQogICAgICBzdHJlYW0ubmV4dCgpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0sCiAgICBibGFua0xpbmU6IGJsYW5rTGluZQogIH07CgogIHZhciBtYXJrZG93bkNvbmZpZyA9IHsKICAgIHVuZGVyc2NvcmVzQnJlYWtXb3JkczogZmFsc2UsCiAgICB0YXNrTGlzdHM6IHRydWUsCiAgICBmZW5jZWRDb2RlQmxvY2tzOiAnYGBgJywKICAgIHN0cmlrZXRocm91Z2g6IHRydWUKICB9OwogIGZvciAodmFyIGF0dHIgaW4gbW9kZUNvbmZpZykgewogICAgbWFya2Rvd25Db25maWdbYXR0cl0gPSBtb2RlQ29uZmlnW2F0dHJdOwogIH0KICBtYXJrZG93bkNvbmZpZy5uYW1lID0gIm1hcmtkb3duIjsKICByZXR1cm4gQ29kZU1pcnJvci5vdmVybGF5TW9kZShDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBtYXJrZG93bkNvbmZpZyksIGdmbU92ZXJsYXkpOwoKfSwgIm1hcmtkb3duIik7CgogIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWdmbSIsICJnZm0iKTsKfSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/js/htmleditor.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIFVJa2l0IDIuMjQuMiB8IGh0dHA6Ly93d3cuZ2V0dWlraXQuY29tIHwgKGMpIDIwMTQgWU9PdGhlbWUgfCBNSVQgTGljZW5zZSAqLwohZnVuY3Rpb24odCl7dmFyIGU7d2luZG93LlVJa2l0JiYoZT10KFVJa2l0KSksImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJ1aWtpdC1odG1sZWRpdG9yIixbInVpa2l0Il0sZnVuY3Rpb24oKXtyZXR1cm4gZXx8dChVSWtpdCl9KX0oZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPVtdO3JldHVybiB0LmNvbXBvbmVudCgiaHRtbGVkaXRvciIse2RlZmF1bHRzOntpZnJhbWU6ITEsbW9kZToic3BsaXQiLG1hcmtkb3duOiExLGF1dG9jb21wbGV0ZTohMCxoZWlnaHQ6NTAwLG1heHNwbGl0c2l6ZToxZTMsY29kZW1pcnJvcjp7bW9kZToiaHRtbG1peGVkIixsaW5lV3JhcHBpbmc6ITAsZHJhZ0Ryb3A6ITEsYXV0b0Nsb3NlVGFnczohMCxtYXRjaFRhZ3M6ITAsYXV0b0Nsb3NlQnJhY2tldHM6ITAsbWF0Y2hCcmFja2V0czohMCxpbmRlbnRVbml0OjQsaW5kZW50V2l0aFRhYnM6ITEsdGFiU2l6ZTo0LGhpbnRPcHRpb25zOntjb21wbGV0aW9uU2luZ2xlOiExfX0sdG9vbGJhcjpbImJvbGQiLCJpdGFsaWMiLCJzdHJpa2UiLCJsaW5rIiwiaW1hZ2UiLCJibG9ja3F1b3RlIiwibGlzdFVsIiwibGlzdE9sIl0sbGJsUHJldmlldzoiUHJldmlldyIsbGJsQ29kZXZpZXc6IkhUTUwiLGxibE1hcmtlZHZpZXc6Ik1hcmtkb3duIn0sYm9vdDpmdW5jdGlvbigpe3QucmVhZHkoZnVuY3Rpb24oZSl7dC4kKCJ0ZXh0YXJlYVtkYXRhLXVrLWh0bWxlZGl0b3JdIixlKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dC4kKHRoaXMpO2UuZGF0YSgiaHRtbGVkaXRvciIpfHx0Lmh0bWxlZGl0b3IoZSx0LlV0aWxzLm9wdGlvbnMoZS5hdHRyKCJkYXRhLXVrLWh0bWxlZGl0b3IiKSkpfSl9KX0saW5pdDpmdW5jdGlvbigpe3ZhciBpPXRoaXMsbz10LmNvbXBvbmVudHMuaHRtbGVkaXRvci50ZW1wbGF0ZTt0aGlzLkNvZGVNaXJyb3I9dGhpcy5vcHRpb25zLkNvZGVNaXJyb3J8fENvZGVNaXJyb3IsdGhpcy5idXR0b25zPXt9LG89by5yZXBsYWNlKC9cezpsYmxQcmV2aWV3fS9nLHRoaXMub3B0aW9ucy5sYmxQcmV2aWV3KSxvPW8ucmVwbGFjZSgvXHs6bGJsQ29kZXZpZXd9L2csdGhpcy5vcHRpb25zLmxibENvZGV2aWV3KSx0aGlzLmh0bWxlZGl0b3I9dC4kKG8pLHRoaXMuY29udGVudD10aGlzLmh0bWxlZGl0b3IuZmluZCgiLnVrLWh0bWxlZGl0b3ItY29udGVudCIpLHRoaXMudG9vbGJhcj10aGlzLmh0bWxlZGl0b3IuZmluZCgiLnVrLWh0bWxlZGl0b3ItdG9vbGJhciIpLHRoaXMucHJldmlldz10aGlzLmh0bWxlZGl0b3IuZmluZCgiLnVrLWh0bWxlZGl0b3ItcHJldmlldyIpLmNoaWxkcmVuKCkuZXEoMCksdGhpcy5jb2RlPXRoaXMuaHRtbGVkaXRvci5maW5kKCIudWstaHRtbGVkaXRvci1jb2RlIiksdGhpcy5lbGVtZW50LmJlZm9yZSh0aGlzLmh0bWxlZGl0b3IpLmFwcGVuZFRvKHRoaXMuY29kZSksdGhpcy5lZGl0b3I9dGhpcy5Db2RlTWlycm9yLmZyb21UZXh0QXJlYSh0aGlzLmVsZW1lbnRbMF0sdGhpcy5vcHRpb25zLmNvZGVtaXJyb3IpLHRoaXMuZWRpdG9yLmh0bWxlZGl0b3I9dGhpcyx0aGlzLmVkaXRvci5vbigiY2hhbmdlIix0LlV0aWxzLmRlYm91bmNlKGZ1bmN0aW9uKCl7aS5yZW5kZXIoKX0sMTUwKSksdGhpcy5lZGl0b3Iub24oImNoYW5nZSIsZnVuY3Rpb24oKXtpLmVkaXRvci5zYXZlKCksaS5lbGVtZW50LnRyaWdnZXIoImlucHV0Iil9KSx0aGlzLmNvZGUuZmluZCgiLkNvZGVNaXJyb3IiKS5jc3MoImhlaWdodCIsdGhpcy5vcHRpb25zLmhlaWdodCksdGhpcy5vcHRpb25zLmlmcmFtZT8odGhpcy5pZnJhbWU9dC4kKCc8aWZyYW1lIGNsYXNzPSJ1ay1odG1sZWRpdG9yLWlmcmFtZSIgZnJhbWVib3JkZXI9IjAiIHNjcm9sbGluZz0iYXV0byIgaGVpZ2h0PSIxMDAiIHdpZHRoPSIxMDAlIj48L2lmcmFtZT4nKSx0aGlzLnByZXZpZXcuYXBwZW5kKHRoaXMuaWZyYW1lKSx0aGlzLmlmcmFtZVswXS5jb250ZW50V2luZG93LmRvY3VtZW50Lm9wZW4oKSx0aGlzLmlmcmFtZVswXS5jb250ZW50V2luZG93LmRvY3VtZW50LmNsb3NlKCksdGhpcy5wcmV2aWV3LmNvbnRhaW5lcj10LiQodGhpcy5pZnJhbWVbMF0uY29udGVudFdpbmRvdy5kb2N1bWVudCkuZmluZCgiYm9keSIpLCJzdHJpbmciPT10eXBlb2YgdGhpcy5vcHRpb25zLmlmcmFtZSYmdGhpcy5wcmV2aWV3LmNvbnRhaW5lci5wYXJlbnQoKS5hcHBlbmQoJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iJyt0aGlzLm9wdGlvbnMuaWZyYW1lKyciPicpKTp0aGlzLnByZXZpZXcuY29udGFpbmVyPXRoaXMucHJldmlldyx0LiR3aW4ub24oInJlc2l6ZSBsb2FkIix0LlV0aWxzLmRlYm91bmNlKGZ1bmN0aW9uKCl7aS5maXQoKX0sMjAwKSk7dmFyIHI9dGhpcy5pZnJhbWU/dGhpcy5wcmV2aWV3LmNvbnRhaW5lcjppLnByZXZpZXcucGFyZW50KCksbj10aGlzLmNvZGUuZmluZCgiLkNvZGVNaXJyb3Itc2l6ZXIiKSxsPXRoaXMuY29kZS5maW5kKCIuQ29kZU1pcnJvci1zY3JvbGwiKS5vbigic2Nyb2xsIix0LlV0aWxzLmRlYm91bmNlKGZ1bmN0aW9uKCl7aWYoInRhYiIhPWkuaHRtbGVkaXRvci5hdHRyKCJkYXRhLW1vZGUiKSl7dmFyIHQ9bi5oZWlnaHQoKS1sLmhlaWdodCgpLGU9clswXS5zY3JvbGxIZWlnaHQtKGkuaWZyYW1lP2kuaWZyYW1lLmhlaWdodCgpOnIuaGVpZ2h0KCkpLG89ZS90LHM9bC5zY3JvbGxUb3AoKSpvO3Iuc2Nyb2xsVG9wKHMpfX0sMTApKTt0aGlzLmh0bWxlZGl0b3Iub24oImNsaWNrIiwiLnVrLWh0bWxlZGl0b3ItYnV0dG9uLWNvZGUsIC51ay1odG1sZWRpdG9yLWJ1dHRvbi1wcmV2aWV3IixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksInRhYiI9PWkuaHRtbGVkaXRvci5hdHRyKCJkYXRhLW1vZGUiKSYmKGkuaHRtbGVkaXRvci5maW5kKCIudWstaHRtbGVkaXRvci1idXR0b24tY29kZSwgLnVrLWh0bWxlZGl0b3ItYnV0dG9uLXByZXZpZXciKS5yZW1vdmVDbGFzcygidWstYWN0aXZlIikuZmlsdGVyKHRoaXMpLmFkZENsYXNzKCJ1ay1hY3RpdmUiKSxpLmFjdGl2ZXRhYj10LiQodGhpcykuaGFzQ2xhc3MoInVrLWh0bWxlZGl0b3ItYnV0dG9uLWNvZGUiKT8iY29kZSI6InByZXZpZXciLGkuaHRtbGVkaXRvci5hdHRyKCJkYXRhLWFjdGl2ZS10YWIiLGkuYWN0aXZldGFiKSxpLmVkaXRvci5yZWZyZXNoKCkpfSksdGhpcy5odG1sZWRpdG9yLm9uKCJjbGljayIsImFbZGF0YS1odG1sZWRpdG9yLWJ1dHRvbl0iLGZ1bmN0aW9uKCl7aS5jb2RlLmlzKCI6dmlzaWJsZSIpJiZpLnRyaWdnZXIoImFjdGlvbi4iK3QuJCh0aGlzKS5kYXRhKCJodG1sZWRpdG9yLWJ1dHRvbiIpLFtpLmVkaXRvcl0pfSksdGhpcy5wcmV2aWV3LnBhcmVudCgpLmNzcygiaGVpZ2h0Iix0aGlzLmNvZGUuaGVpZ2h0KCkpLHRoaXMub3B0aW9ucy5hdXRvY29tcGxldGUmJnRoaXMuQ29kZU1pcnJvci5zaG93SGludCYmdGhpcy5Db2RlTWlycm9yLmhpbnQmJnRoaXMuQ29kZU1pcnJvci5oaW50Lmh0bWwmJnRoaXMuZWRpdG9yLm9uKCJpbnB1dFJlYWQiLHQuVXRpbHMuZGVib3VuY2UoZnVuY3Rpb24oKXt2YXIgdD1pLmVkaXRvci5nZXREb2MoKSxlPXQuZ2V0Q3Vyc29yKCksbz1pLkNvZGVNaXJyb3IuaW5uZXJNb2RlKGkuZWRpdG9yLmdldE1vZGUoKSxpLmVkaXRvci5nZXRUb2tlbkF0KGUpLnN0YXRlKS5tb2RlLm5hbWU7aWYoInhtbCI9PW8pe3ZhciByPWkuZWRpdG9yLmdldEN1cnNvcigpLG49aS5lZGl0b3IuZ2V0VG9rZW5BdChyKTsoIjwiPT1uLnN0cmluZy5jaGFyQXQoMCl8fCJhdHRyaWJ1dGUiPT1uLnR5cGUpJiZpLkNvZGVNaXJyb3Iuc2hvd0hpbnQoaS5lZGl0b3IsaS5Db2RlTWlycm9yLmhpbnQuaHRtbCx7Y29tcGxldGVTaW5nbGU6ITF9KX19LDEwMCkpLHRoaXMuZGVib3VuY2VkUmVkcmF3PXQuVXRpbHMuZGVib3VuY2UoZnVuY3Rpb24oKXtpLnJlZHJhdygpfSw1KSx0aGlzLm9uKCJpbml0LnVrLmNvbXBvbmVudCIsZnVuY3Rpb24oKXtpLmRlYm91bmNlZFJlZHJhdygpfSksdGhpcy5lbGVtZW50LmF0dHIoImRhdGEtdWstY2hlY2stZGlzcGxheSIsMSkub24oImRpc3BsYXkudWsuY2hlY2siLGZ1bmN0aW9uKCl7dGhpcy5odG1sZWRpdG9yLmlzKCI6dmlzaWJsZSIpJiZ0aGlzLmZpdCgpfS5iaW5kKHRoaXMpKSxlLnB1c2godGhpcyl9LGFkZEJ1dHRvbjpmdW5jdGlvbih0LGUpe3RoaXMuYnV0dG9uc1t0XT1lfSxhZGRCdXR0b25zOmZ1bmN0aW9uKGUpe3QuJC5leHRlbmQodGhpcy5idXR0b25zLGUpfSxyZXBsYWNlSW5QcmV2aWV3OmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gaSh0KXt2YXIgZT1vLmdldFZhbHVlKCkuc3Vic3RyaW5nKDAsdCkuc3BsaXQoIlxuIik7cmV0dXJue2xpbmU6ZS5sZW5ndGgtMSxjaDplW2UubGVuZ3RoLTFdLmxlbmd0aH19dmFyIG89dGhpcy5lZGl0b3Iscj1bXSxuPW8uZ2V0VmFsdWUoKSxsPS0xLHM9MDtyZXR1cm4gdGhpcy5jdXJyZW50dmFsdWU9dGhpcy5jdXJyZW50dmFsdWUucmVwbGFjZSh0LGZ1bmN0aW9uKCl7bD1uLmluZGV4T2YoYXJndW1lbnRzWzBdLCsrbCk7dmFyIHQ9e21hdGNoZXM6YXJndW1lbnRzLGZyb206aShsKSx0bzppKGwrYXJndW1lbnRzWzBdLmxlbmd0aCkscmVwbGFjZTpmdW5jdGlvbihlKXtvLnJlcGxhY2VSYW5nZShlLHQuZnJvbSx0LnRvKX0saW5SYW5nZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5saW5lPT09dC5mcm9tLmxpbmUmJmUubGluZT09PXQudG8ubGluZT9lLmNoPj10LmZyb20uY2gmJmUuY2g8dC50by5jaDplLmxpbmU9PT10LmZyb20ubGluZSYmZS5jaD49dC5mcm9tLmNofHxlLmxpbmU+dC5mcm9tLmxpbmUmJmUubGluZTx0LnRvLmxpbmV8fGUubGluZT09PXQudG8ubGluZSYmZS5jaDx0LnRvLmNofX0sYT1lKHQscyk7cmV0dXJuIGE/KHMrKyxyLnB1c2godCksYSk6YXJndW1lbnRzWzBdfSkscn0sX2J1aWxkdG9vbGJhcjpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy50b29sYmFyJiZ0aGlzLm9wdGlvbnMudG9vbGJhci5sZW5ndGgpe3ZhciB0PXRoaXMsZT1bXTt0aGlzLnRvb2xiYXIuZW1wdHkoKSx0aGlzLm9wdGlvbnMudG9vbGJhci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2lmKHQuYnV0dG9uc1tpXSl7dmFyIG89dC5idXR0b25zW2ldLnRpdGxlP3QuYnV0dG9uc1tpXS50aXRsZTppO2UucHVzaCgnPGxpPjxhIGRhdGEtaHRtbGVkaXRvci1idXR0b249IicraSsnIiB0aXRsZT0iJytvKyciIGRhdGEtdWstdG9vbHRpcD4nK3QuYnV0dG9uc1tpXS5sYWJlbCsiPC9hPjwvbGk+Iil9fSksdGhpcy50b29sYmFyLmh0bWwoZS5qb2luKCJcbiIpKX19LGZpdDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5tb2RlOyJzcGxpdCI9PXQmJnRoaXMuaHRtbGVkaXRvci53aWR0aCgpPHRoaXMub3B0aW9ucy5tYXhzcGxpdHNpemUmJih0PSJ0YWIiKSwidGFiIj09dCYmKHRoaXMuYWN0aXZldGFifHwodGhpcy5hY3RpdmV0YWI9ImNvZGUiLHRoaXMuaHRtbGVkaXRvci5hdHRyKCJkYXRhLWFjdGl2ZS10YWIiLHRoaXMuYWN0aXZldGFiKSksdGhpcy5odG1sZWRpdG9yLmZpbmQoIi51ay1odG1sZWRpdG9yLWJ1dHRvbi1jb2RlLCAudWstaHRtbGVkaXRvci1idXR0b24tcHJldmlldyIpLnJlbW92ZUNsYXNzKCJ1ay1hY3RpdmUiKS5maWx0ZXIoImNvZGUiPT10aGlzLmFjdGl2ZXRhYj8iLnVrLWh0bWxlZGl0b3ItYnV0dG9uLWNvZGUiOiIudWstaHRtbGVkaXRvci1idXR0b24tcHJldmlldyIpLmFkZENsYXNzKCJ1ay1hY3RpdmUiKSksdGhpcy5lZGl0b3IucmVmcmVzaCgpLHRoaXMucHJldmlldy5wYXJlbnQoKS5jc3MoImhlaWdodCIsdGhpcy5jb2RlLmhlaWdodCgpKSx0aGlzLmh0bWxlZGl0b3IuYXR0cigiZGF0YS1tb2RlIix0KX0scmVkcmF3OmZ1bmN0aW9uKCl7dGhpcy5fYnVpbGR0b29sYmFyKCksdGhpcy5yZW5kZXIoKSx0aGlzLmZpdCgpfSxnZXRNb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRpdG9yLmdldE9wdGlvbigibW9kZSIpfSxnZXRDdXJzb3JNb2RlOmZ1bmN0aW9uKCl7dmFyIHQ9e21vZGU6Imh0bWwifTtyZXR1cm4gdGhpcy50cmlnZ2VyKCJjdXJzb3JNb2RlIixbdF0pLHQubW9kZX0scmVuZGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudHZhbHVlPXRoaXMuZWRpdG9yLmdldFZhbHVlKCksdGhpcy5jdXJyZW50dmFsdWU/KHRoaXMudHJpZ2dlcigicmVuZGVyIixbdGhpc10pLHRoaXMudHJpZ2dlcigicmVuZGVyTGF0ZSIsW3RoaXNdKSx0aGlzLnByZXZpZXcuY29udGFpbmVyLmh0bWwodGhpcy5jdXJyZW50dmFsdWUpLHZvaWQgMCk6KHRoaXMuZWxlbWVudC52YWwoIiIpLHRoaXMucHJldmlldy5jb250YWluZXIuaHRtbCgiIiksdm9pZCAwKX0sYWRkU2hvcnRjdXQ6ZnVuY3Rpb24oZSxpKXt2YXIgbz17fTtyZXR1cm4gdC4kLmlzQXJyYXkoZSl8fChlPVtlXSksZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe29bdF09aX0pLHRoaXMuZWRpdG9yLmFkZEtleU1hcChvKSxvfSxhZGRTaG9ydGN1dEFjdGlvbjpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXM7dGhpcy5hZGRTaG9ydGN1dChlLGZ1bmN0aW9uKCl7aS5lbGVtZW50LnRyaWdnZXIoImFjdGlvbi4iK3QsW2kuZWRpdG9yXSl9KX0scmVwbGFjZVNlbGVjdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmVkaXRvci5nZXRTZWxlY3Rpb24oKTtpZighZS5sZW5ndGgpe2Zvcih2YXIgaT10aGlzLmVkaXRvci5nZXRDdXJzb3IoKSxvPXRoaXMuZWRpdG9yLmdldExpbmUoaS5saW5lKSxyPWkuY2gsbj1yO248by5sZW5ndGgmJi9bXHckXSsvLnRlc3Qoby5jaGFyQXQobikpOykrK247Zm9yKDtyJiYvW1x3JF0rLy50ZXN0KG8uY2hhckF0KHItMSkpOyktLXI7dmFyIGw9ciE9biYmby5zbGljZShyLG4pO2wmJih0aGlzLmVkaXRvci5zZXRTZWxlY3Rpb24oe2xpbmU6aS5saW5lLGNoOnJ9LHtsaW5lOmkubGluZSxjaDpufSksZT1sKX12YXIgcz10LnJlcGxhY2UoIiQxIixlKTt0aGlzLmVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKHMsImVuZCIpLHRoaXMuZWRpdG9yLmZvY3VzKCl9LHJlcGxhY2VMaW5lOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZWRpdG9yLmdldERvYygpLmdldEN1cnNvcigpLGk9dGhpcy5lZGl0b3IuZ2V0TGluZShlLmxpbmUpLG89dC5yZXBsYWNlKCIkMSIsaSk7dGhpcy5lZGl0b3IucmVwbGFjZVJhbmdlKG8se2xpbmU6ZS5saW5lLGNoOjB9LHtsaW5lOmUubGluZSxjaDppLmxlbmd0aH0pLHRoaXMuZWRpdG9yLnNldEN1cnNvcih7bGluZTplLmxpbmUsY2g6by5sZW5ndGh9KSx0aGlzLmVkaXRvci5mb2N1cygpfSxzYXZlOmZ1bmN0aW9uKCl7dGhpcy5lZGl0b3Iuc2F2ZSgpfX0pLHQuY29tcG9uZW50cy5odG1sZWRpdG9yLnRlbXBsYXRlPVsnPGRpdiBjbGFzcz0idWstaHRtbGVkaXRvciB1ay1jbGVhcmZpeCIgZGF0YS1tb2RlPSJzcGxpdCI+JywnPGRpdiBjbGFzcz0idWstaHRtbGVkaXRvci1uYXZiYXIiPicsJzx1bCBjbGFzcz0idWstaHRtbGVkaXRvci1uYXZiYXItbmF2IHVrLWh0bWxlZGl0b3ItdG9vbGJhciI+PC91bD4nLCc8ZGl2IGNsYXNzPSJ1ay1odG1sZWRpdG9yLW5hdmJhci1mbGlwIj4nLCc8dWwgY2xhc3M9InVrLWh0bWxlZGl0b3ItbmF2YmFyLW5hdiI+JywnPGxpIGNsYXNzPSJ1ay1odG1sZWRpdG9yLWJ1dHRvbi1jb2RlIj48YT57OmxibENvZGV2aWV3fTwvYT48L2xpPicsJzxsaSBjbGFzcz0idWstaHRtbGVkaXRvci1idXR0b24tcHJldmlldyI+PGE+ezpsYmxQcmV2aWV3fTwvYT48L2xpPicsJzxsaT48YSBkYXRhLWh0bWxlZGl0b3ItYnV0dG9uPSJmdWxsc2NyZWVuIj48aSBjbGFzcz0idWstaWNvbi1leHBhbmQiPjwvaT48L2E+PC9saT4nLCI8L3VsPiIsIjwvZGl2PiIsIjwvZGl2PiIsJzxkaXYgY2xhc3M9InVrLWh0bWxlZGl0b3ItY29udGVudCI+JywnPGRpdiBjbGFzcz0idWstaHRtbGVkaXRvci1jb2RlIj48L2Rpdj4nLCc8ZGl2IGNsYXNzPSJ1ay1odG1sZWRpdG9yLXByZXZpZXciPjxkaXY+PC9kaXY+PC9kaXY+JywiPC9kaXY+IiwiPC9kaXY+Il0uam9pbigiIiksdC5wbHVnaW4oImh0bWxlZGl0b3IiLCJiYXNlIix7aW5pdDpmdW5jdGlvbihlKXtmdW5jdGlvbiBpKHQsaSxvKXtlLm9uKCJhY3Rpb24uIit0LGZ1bmN0aW9uKCl7Imh0bWwiPT1lLmdldEN1cnNvck1vZGUoKSYmZVsicmVwbGFjZUxpbmUiPT1vPyJyZXBsYWNlTGluZSI6InJlcGxhY2VTZWxlY3Rpb24iXShpKX0pfWUuYWRkQnV0dG9ucyh7ZnVsbHNjcmVlbjp7dGl0bGU6IkZ1bGxzY3JlZW4iLGxhYmVsOic8aSBjbGFzcz0idWstaWNvbi1leHBhbmQiPjwvaT4nfSxib2xkOnt0aXRsZToiQm9sZCIsbGFiZWw6JzxpIGNsYXNzPSJ1ay1pY29uLWJvbGQiPjwvaT4nfSxpdGFsaWM6e3RpdGxlOiJJdGFsaWMiLGxhYmVsOic8aSBjbGFzcz0idWstaWNvbi1pdGFsaWMiPjwvaT4nfSxzdHJpa2U6e3RpdGxlOiJTdHJpa2V0aHJvdWdoIixsYWJlbDonPGkgY2xhc3M9InVrLWljb24tc3RyaWtldGhyb3VnaCI+PC9pPid9LGJsb2NrcXVvdGU6e3RpdGxlOiJCbG9ja3F1b3RlIixsYWJlbDonPGkgY2xhc3M9InVrLWljb24tcXVvdGUtcmlnaHQiPjwvaT4nfSxsaW5rOnt0aXRsZToiTGluayIsbGFiZWw6JzxpIGNsYXNzPSJ1ay1pY29uLWxpbmsiPjwvaT4nfSxpbWFnZTp7dGl0bGU6IkltYWdlIixsYWJlbDonPGkgY2xhc3M9InVrLWljb24tcGljdHVyZS1vIj48L2k+J30sbGlzdFVsOnt0aXRsZToiVW5vcmRlcmVkIExpc3QiLGxhYmVsOic8aSBjbGFzcz0idWstaWNvbi1saXN0LXVsIj48L2k+J30sbGlzdE9sOnt0aXRsZToiT3JkZXJlZCBMaXN0IixsYWJlbDonPGkgY2xhc3M9InVrLWljb24tbGlzdC1vbCI+PC9pPid9fSksaSgiYm9sZCIsIjxzdHJvbmc+JDE8L3N0cm9uZz4iKSxpKCJpdGFsaWMiLCI8ZW0+JDE8L2VtPiIpLGkoInN0cmlrZSIsIjxkZWw+JDE8L2RlbD4iKSxpKCJibG9ja3F1b3RlIiwiPGJsb2NrcXVvdGU+PHA+JDE8L3A+PC9ibG9ja3F1b3RlPiIsInJlcGxhY2VMaW5lIiksaSgibGluayIsJzxhIGhyZWY9Imh0dHA6Ly8iPiQxPC9hPicpLGkoImltYWdlIiwnPGltZyBzcmM9Imh0dHA6Ly8iIGFsdD0iJDEiPicpO3ZhciBvPWZ1bmN0aW9uKCl7aWYoImh0bWwiPT1lLmdldEN1cnNvck1vZGUoKSl7Zm9yKHZhciB0PWUuZWRpdG9yLGk9dC5nZXREb2MoKS5nZXRDdXJzb3IoITApLG89dC5nZXREb2MoKS5nZXRDdXJzb3IoITEpLHI9aS5saW5lO3I8by5saW5lKzE7cisrKXQucmVwbGFjZVJhbmdlKCI8bGk+Iit0LmdldExpbmUocikrIjwvbGk+Iix7bGluZTpyLGNoOjB9LHtsaW5lOnIsY2g6dC5nZXRMaW5lKHIpLmxlbmd0aH0pO3Quc2V0Q3Vyc29yKHtsaW5lOm8ubGluZSxjaDp0LmdldExpbmUoby5saW5lKS5sZW5ndGh9KSx0LmZvY3VzKCl9fTtlLm9uKCJhY3Rpb24ubGlzdFVsIixmdW5jdGlvbigpe28oKX0pLGUub24oImFjdGlvbi5saXN0T2wiLGZ1bmN0aW9uKCl7bygpfSksZS5odG1sZWRpdG9yLm9uKCJjbGljayIsJ2FbZGF0YS1odG1sZWRpdG9yLWJ1dHRvbj0iZnVsbHNjcmVlbiJdJyxmdW5jdGlvbigpe2UuaHRtbGVkaXRvci50b2dnbGVDbGFzcygidWstaHRtbGVkaXRvci1mdWxsc2NyZWVuIik7dmFyIGk9ZS5lZGl0b3IuZ2V0V3JhcHBlckVsZW1lbnQoKTtpZihlLmh0bWxlZGl0b3IuaGFzQ2xhc3MoInVrLWh0bWxlZGl0b3ItZnVsbHNjcmVlbiIpKWUuZWRpdG9yLnN0YXRlLmZ1bGxTY3JlZW5SZXN0b3JlPXtzY3JvbGxUb3A6d2luZG93LnBhZ2VZT2Zmc2V0LHNjcm9sbExlZnQ6d2luZG93LnBhZ2VYT2Zmc2V0LHdpZHRoOmkuc3R5bGUud2lkdGgsaGVpZ2h0Omkuc3R5bGUuaGVpZ2h0fSxpLnN0eWxlLndpZHRoPSIiLGkuc3R5bGUuaGVpZ2h0PWUuY29udGVudC5oZWlnaHQoKSsicHgiLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIjtlbHNle2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0iIjt2YXIgbz1lLmVkaXRvci5zdGF0ZS5mdWxsU2NyZWVuUmVzdG9yZTtpLnN0eWxlLndpZHRoPW8ud2lkdGgsaS5zdHlsZS5oZWlnaHQ9by5oZWlnaHQsd2luZG93LnNjcm9sbFRvKG8uc2Nyb2xsTGVmdCxvLnNjcm9sbFRvcCl9c2V0VGltZW91dChmdW5jdGlvbigpe2UuZml0KCksdC4kd2luLnRyaWdnZXIoInJlc2l6ZSIpfSw1MCl9KSxlLmFkZFNob3J0Y3V0KFsiQ3RybC1TIiwiQ21kLVMiXSxmdW5jdGlvbigpe2UuZWxlbWVudC50cmlnZ2VyKCJodG1sZWRpdG9yLXNhdmUiLFtlXSl9KSxlLmFkZFNob3J0Y3V0QWN0aW9uKCJib2xkIixbIkN0cmwtQiIsIkNtZC1CIl0pfX0pLHQucGx1Z2luKCJodG1sZWRpdG9yIiwibWFya2Rvd24iLHtpbml0OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkoKXtlLmVkaXRvci5zZXRPcHRpb24oIm1vZGUiLCJnZm0iKSxlLmh0bWxlZGl0b3IuZmluZCgiLnVrLWh0bWxlZGl0b3ItYnV0dG9uLWNvZGUgYSIpLmh0bWwoZS5vcHRpb25zLmxibE1hcmtlZHZpZXcpfWZ1bmN0aW9uIG8odCxpLG8pe2Uub24oImFjdGlvbi4iK3QsZnVuY3Rpb24oKXsibWFya2Rvd24iPT1lLmdldEN1cnNvck1vZGUoKSYmZVsicmVwbGFjZUxpbmUiPT1vPyJyZXBsYWNlTGluZSI6InJlcGxhY2VTZWxlY3Rpb24iXShpKX0pfXZhciByPWUub3B0aW9ucy5tZG1hcmtkb3dufHxtYXJrZWR8fG51bGw7ciYmKGUub3B0aW9ucy5tYXJrZG93biYmaSgpLG8oImJvbGQiLCIqKiQxKioiKSxvKCJpdGFsaWMiLCIqJDEqIiksbygic3RyaWtlIiwifn4kMX5+IiksbygiYmxvY2txdW90ZSIsIj4gJDEiLCJyZXBsYWNlTGluZSIpLG8oImxpbmsiLCJbJDFdKGh0dHA6Ly8pIiksbygiaW1hZ2UiLCIhWyQxXShodHRwOi8vKSIpLGUub24oImFjdGlvbi5saXN0VWwiLGZ1bmN0aW9uKCl7aWYoIm1hcmtkb3duIj09ZS5nZXRDdXJzb3JNb2RlKCkpe2Zvcih2YXIgdD1lLmVkaXRvcixpPXQuZ2V0RG9jKCkuZ2V0Q3Vyc29yKCEwKSxvPXQuZ2V0RG9jKCkuZ2V0Q3Vyc29yKCExKSxyPWkubGluZTtyPG8ubGluZSsxO3IrKyl0LnJlcGxhY2VSYW5nZSgiKiAiK3QuZ2V0TGluZShyKSx7bGluZTpyLGNoOjB9LHtsaW5lOnIsY2g6dC5nZXRMaW5lKHIpLmxlbmd0aH0pO3Quc2V0Q3Vyc29yKHtsaW5lOm8ubGluZSxjaDp0LmdldExpbmUoby5saW5lKS5sZW5ndGh9KSx0LmZvY3VzKCl9fSksZS5vbigiYWN0aW9uLmxpc3RPbCIsZnVuY3Rpb24oKXtpZigibWFya2Rvd24iPT1lLmdldEN1cnNvck1vZGUoKSl7dmFyIHQ9ZS5lZGl0b3IsaT10LmdldERvYygpLmdldEN1cnNvcighMCksbz10LmdldERvYygpLmdldEN1cnNvcighMSkscj0xO2lmKGkubGluZT4wKXt2YXIgbixsPXQuZ2V0TGluZShpLmxpbmUtMSk7KG49bC5tYXRjaCgvXihcZCspXC4vKSkmJihyPU51bWJlcihuWzFdKSsxKX1mb3IodmFyIHM9aS5saW5lO3M8by5saW5lKzE7cysrKXQucmVwbGFjZVJhbmdlKHIrIi4gIit0LmdldExpbmUocykse2xpbmU6cyxjaDowfSx7bGluZTpzLGNoOnQuZ2V0TGluZShzKS5sZW5ndGh9KSxyKys7dC5zZXRDdXJzb3Ioe2xpbmU6by5saW5lLGNoOnQuZ2V0TGluZShvLmxpbmUpLmxlbmd0aH0pLHQuZm9jdXMoKX19KSxlLm9uKCJyZW5kZXJMYXRlIixmdW5jdGlvbigpeyJnZm0iPT1lLmVkaXRvci5vcHRpb25zLm1vZGUmJihlLmN1cnJlbnR2YWx1ZT1yKGUuY3VycmVudHZhbHVlKSl9KSxlLm9uKCJjdXJzb3JNb2RlIixmdW5jdGlvbih0LGkpe2lmKCJnZm0iPT1lLmVkaXRvci5vcHRpb25zLm1vZGUpe3ZhciBvPWUuZWRpdG9yLmdldERvYygpLmdldEN1cnNvcigpO2UuZWRpdG9yLmdldFRva2VuQXQobykuc3RhdGUuYmFzZS5odG1sU3RhdGV8fChpLm1vZGU9Im1hcmtkb3duIil9fSksdC4kLmV4dGVuZChlLHtlbmFibGVNYXJrZG93bjpmdW5jdGlvbigpe2koKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlTWFya2Rvd246ZnVuY3Rpb24oKXt0aGlzLmVkaXRvci5zZXRPcHRpb24oIm1vZGUiLCJodG1sbWl4ZWQiKSx0aGlzLmh0bWxlZGl0b3IuZmluZCgiLnVrLWh0bWxlZGl0b3ItYnV0dG9uLWNvZGUgYSIpLmh0bWwodGhpcy5vcHRpb25zLmxibENvZGV2aWV3KSx0aGlzLnJlbmRlcigpfX0pLGUub24oe2VuYWJsZU1hcmtkb3duOmZ1bmN0aW9uKCl7ZS5lbmFibGVNYXJrZG93bigpfSxkaXNhYmxlTWFya2Rvd246ZnVuY3Rpb24oKXtlLmRpc2FibGVNYXJrZG93bigpfX0pKX19KSx0Lmh0bWxlZGl0b3J9KTs=]]></data>
	</file>
	<file>
	  <filename>/lib/js/markdown.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnMKLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHA6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFCgooZnVuY3Rpb24obW9kKSB7CiAgaWYgKHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIpIC8vIENvbW1vbkpTCiAgICBtb2QocmVxdWlyZSgiLi4vLi4vbGliL2NvZGVtaXJyb3IiKSwgcmVxdWlyZSgiLi4veG1sL3htbCIpLCByZXF1aXJlKCIuLi9tZXRhIikpOwogIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kKSAvLyBBTUQKICAgIGRlZmluZShbIi4uLy4uL2xpYi9jb2RlbWlycm9yIiwgIi4uL3htbC94bWwiLCAiLi4vbWV0YSJdLCBtb2QpOwogIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnYKICAgIG1vZChDb2RlTWlycm9yKTsKfSkoZnVuY3Rpb24oQ29kZU1pcnJvcikgewoidXNlIHN0cmljdCI7CgpDb2RlTWlycm9yLmRlZmluZU1vZGUoIm1hcmtkb3duIiwgZnVuY3Rpb24oY21DZmcsIG1vZGVDZmcpIHsKCiAgdmFyIGh0bWxGb3VuZCA9IENvZGVNaXJyb3IubW9kZXMuaGFzT3duUHJvcGVydHkoInhtbCIpOwogIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjbUNmZywgaHRtbEZvdW5kID8ge25hbWU6ICJ4bWwiLCBodG1sTW9kZTogdHJ1ZX0gOiAidGV4dC9wbGFpbiIpOwoKICBmdW5jdGlvbiBnZXRNb2RlKG5hbWUpIHsKICAgIGlmIChDb2RlTWlycm9yLmZpbmRNb2RlQnlOYW1lKSB7CiAgICAgIHZhciBmb3VuZCA9IENvZGVNaXJyb3IuZmluZE1vZGVCeU5hbWUobmFtZSk7CiAgICAgIGlmIChmb3VuZCkgbmFtZSA9IGZvdW5kLm1pbWUgfHwgZm91bmQubWltZXNbMF07CiAgICB9CiAgICB2YXIgbW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjbUNmZywgbmFtZSk7CiAgICByZXR1cm4gbW9kZS5uYW1lID09ICJudWxsIiA/IG51bGwgOiBtb2RlOwogIH0KCiAgLy8gU2hvdWxkIGNoYXJhY3RlcnMgdGhhdCBhZmZlY3QgaGlnaGxpZ2h0aW5nIGJlIGhpZ2hsaWdodGVkIHNlcGFyYXRlPwogIC8vIERvZXMgbm90IGluY2x1ZGUgY2hhcmFjdGVycyB0aGF0IHdpbGwgYmUgb3V0cHV0IChzdWNoIGFzIGAxLmAgYW5kIGAtYCBmb3IgbGlzdHMpCiAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZyA9PT0gdW5kZWZpbmVkKQogICAgbW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nID0gZmFsc2U7CgogIC8vIE1heGltdW0gbnVtYmVyIG9mIG5lc3RlZCBibG9ja3F1b3Rlcy4gU2V0IHRvIDAgZm9yIGluZmluaXRlIG5lc3RpbmcuCiAgLy8gRXhjZXNzIGA+YCB3aWxsIGVtaXQgYGVycm9yYCB0b2tlbi4KICBpZiAobW9kZUNmZy5tYXhCbG9ja3F1b3RlRGVwdGggPT09IHVuZGVmaW5lZCkKICAgIG1vZGVDZmcubWF4QmxvY2txdW90ZURlcHRoID0gMDsKCiAgLy8gU2hvdWxkIHVuZGVyc2NvcmVzIGluIHdvcmRzIG9wZW4vY2xvc2UgZW0vc3Ryb25nPwogIGlmIChtb2RlQ2ZnLnVuZGVyc2NvcmVzQnJlYWtXb3JkcyA9PT0gdW5kZWZpbmVkKQogICAgbW9kZUNmZy51bmRlcnNjb3Jlc0JyZWFrV29yZHMgPSB0cnVlOwoKICAvLyBVc2UgYGZlbmNlZENvZGVCbG9ja3NgIHRvIGNvbmZpZ3VyZSBmZW5jZWQgY29kZSBibG9ja3MuIGZhbHNlIHRvCiAgLy8gZGlzYWJsZSwgc3RyaW5nIHRvIHNwZWNpZnkgYSBwcmVjaXNlIHJlZ2V4cCB0aGF0IHRoZSBmZW5jZSBzaG91bGQKICAvLyBtYXRjaCwgYW5kIHRydWUgdG8gYWxsb3cgdGhyZWUgb3IgbW9yZSBiYWNrdGlja3Mgb3IgdGlsZGVzIChhcwogIC8vIHBlciBDb21tb25NYXJrKS4KCiAgLy8gVHVybiBvbiB0YXNrIGxpc3RzPyAoIi0gWyBdICIgYW5kICItIFt4XSAiKQogIGlmIChtb2RlQ2ZnLnRhc2tMaXN0cyA9PT0gdW5kZWZpbmVkKSBtb2RlQ2ZnLnRhc2tMaXN0cyA9IGZhbHNlOwoKICAvLyBUdXJuIG9uIHN0cmlrZXRocm91Z2ggc3ludGF4CiAgaWYgKG1vZGVDZmcuc3RyaWtldGhyb3VnaCA9PT0gdW5kZWZpbmVkKQogICAgbW9kZUNmZy5zdHJpa2V0aHJvdWdoID0gZmFsc2U7CgogIC8vIEFsbG93IHRva2VuIHR5cGVzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdXNlci1wcm92aWRlZCB0b2tlbiB0eXBlcy4KICBpZiAobW9kZUNmZy50b2tlblR5cGVPdmVycmlkZXMgPT09IHVuZGVmaW5lZCkKICAgIG1vZGVDZmcudG9rZW5UeXBlT3ZlcnJpZGVzID0ge307CgogIHZhciBjb2RlRGVwdGggPSAwOwoKICB2YXIgdG9rZW5UeXBlcyA9IHsKICAgIGhlYWRlcjogImhlYWRlciIsCiAgICBjb2RlOiAiY29tbWVudCIsCiAgICBxdW90ZTogInF1b3RlIiwKICAgIGxpc3QxOiAidmFyaWFibGUtMiIsCiAgICBsaXN0MjogInZhcmlhYmxlLTMiLAogICAgbGlzdDM6ICJrZXl3b3JkIiwKICAgIGhyOiAiaHIiLAogICAgaW1hZ2U6ICJ0YWciLAogICAgZm9ybWF0dGluZzogImZvcm1hdHRpbmciLAogICAgbGlua0lubGluZTogImxpbmsiLAogICAgbGlua0VtYWlsOiAibGluayIsCiAgICBsaW5rVGV4dDogImxpbmsiLAogICAgbGlua0hyZWY6ICJzdHJpbmciLAogICAgZW06ICJlbSIsCiAgICBzdHJvbmc6ICJzdHJvbmciLAogICAgc3RyaWtldGhyb3VnaDogInN0cmlrZXRocm91Z2giCiAgfTsKCiAgZm9yICh2YXIgdG9rZW5UeXBlIGluIHRva2VuVHlwZXMpIHsKICAgIGlmICh0b2tlblR5cGVzLmhhc093blByb3BlcnR5KHRva2VuVHlwZSkgJiYgbW9kZUNmZy50b2tlblR5cGVPdmVycmlkZXNbdG9rZW5UeXBlXSkgewogICAgICB0b2tlblR5cGVzW3Rva2VuVHlwZV0gPSBtb2RlQ2ZnLnRva2VuVHlwZU92ZXJyaWRlc1t0b2tlblR5cGVdOwogICAgfQogIH0KCiAgdmFyIGhyUkUgPSAvXihbKlwtX10pKD86XHMqXDEpezIsfVxzKiQvCiAgLCAgIHVsUkUgPSAvXlsqXC0rXVxzKy8KICAsICAgb2xSRSA9IC9eWzAtOV0rKFsuKV0pXHMrLwogICwgICB0YXNrTGlzdFJFID0gL15cWyh4fCApXF0oPz1ccykvIC8vIE11c3QgZm9sbG93IHVsUkUgb3Igb2xSRQogICwgICBhdHhIZWFkZXJSRSA9IG1vZGVDZmcuYWxsb3dBdHhIZWFkZXJXaXRob3V0U3BhY2UgPyAvXigjKykvIDogL14oIyspKD86IHwkKS8KICAsICAgc2V0ZXh0SGVhZGVyUkUgPSAvXiAqKD86XD17MSx9fC17MSx9KVxzKiQvCiAgLCAgIHRleHRSRSA9IC9eW14jIVxbXF0qX1xcPD5gICInKH5dKy8KICAsICAgZmVuY2VkQ29kZVJFID0gbmV3IFJlZ0V4cCgiXigiICsgKG1vZGVDZmcuZmVuY2VkQ29kZUJsb2NrcyA9PT0gdHJ1ZSA/ICJ+fn4rfGBgYCsiIDogbW9kZUNmZy5mZW5jZWRDb2RlQmxvY2tzKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIilbIFxcdF0qKFtcXHcrI10qKSIpOwoKICBmdW5jdGlvbiBzd2l0Y2hJbmxpbmUoc3RyZWFtLCBzdGF0ZSwgZikgewogICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGY7CiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKICB9CgogIGZ1bmN0aW9uIHN3aXRjaEJsb2NrKHN0cmVhbSwgc3RhdGUsIGYpIHsKICAgIHN0YXRlLmYgPSBzdGF0ZS5ibG9jayA9IGY7CiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKICB9CgogIGZ1bmN0aW9uIGxpbmVJc0VtcHR5KGxpbmUpIHsKICAgIHJldHVybiAhbGluZSB8fCAhL1xTLy50ZXN0KGxpbmUuc3RyaW5nKQogIH0KCiAgLy8gQmxvY2tzCgogIGZ1bmN0aW9uIGJsYW5rTGluZShzdGF0ZSkgewogICAgLy8gUmVzZXQgbGlua1RpdGxlIHN0YXRlCiAgICBzdGF0ZS5saW5rVGl0bGUgPSBmYWxzZTsKICAgIC8vIFJlc2V0IEVNIHN0YXRlCiAgICBzdGF0ZS5lbSA9IGZhbHNlOwogICAgLy8gUmVzZXQgU1RST05HIHN0YXRlCiAgICBzdGF0ZS5zdHJvbmcgPSBmYWxzZTsKICAgIC8vIFJlc2V0IHN0cmlrZXRocm91Z2ggc3RhdGUKICAgIHN0YXRlLnN0cmlrZXRocm91Z2ggPSBmYWxzZTsKICAgIC8vIFJlc2V0IHN0YXRlLnF1b3RlCiAgICBzdGF0ZS5xdW90ZSA9IDA7CiAgICAvLyBSZXNldCBzdGF0ZS5pbmRlbnRlZENvZGUKICAgIHN0YXRlLmluZGVudGVkQ29kZSA9IGZhbHNlOwogICAgaWYgKCFodG1sRm91bmQgJiYgc3RhdGUuZiA9PSBodG1sQmxvY2spIHsKICAgICAgc3RhdGUuZiA9IGlubGluZU5vcm1hbDsKICAgICAgc3RhdGUuYmxvY2sgPSBibG9ja05vcm1hbDsKICAgIH0KICAgIC8vIFJlc2V0IHN0YXRlLnRyYWlsaW5nU3BhY2UKICAgIHN0YXRlLnRyYWlsaW5nU3BhY2UgPSAwOwogICAgc3RhdGUudHJhaWxpbmdTcGFjZU5ld0xpbmUgPSBmYWxzZTsKICAgIC8vIE1hcmsgdGhpcyBsaW5lIGFzIGJsYW5rCiAgICBzdGF0ZS5wcmV2TGluZSA9IHN0YXRlLnRoaXNMaW5lCiAgICBzdGF0ZS50aGlzTGluZSA9IG51bGwKICAgIHJldHVybiBudWxsOwogIH0KCiAgZnVuY3Rpb24gYmxvY2tOb3JtYWwoc3RyZWFtLCBzdGF0ZSkgewoKICAgIHZhciBzb2wgPSBzdHJlYW0uc29sKCk7CgogICAgdmFyIHByZXZMaW5lSXNMaXN0ID0gc3RhdGUubGlzdCAhPT0gZmFsc2UsCiAgICAgICAgcHJldkxpbmVJc0luZGVudGVkQ29kZSA9IHN0YXRlLmluZGVudGVkQ29kZTsKCiAgICBzdGF0ZS5pbmRlbnRlZENvZGUgPSBmYWxzZTsKCiAgICBpZiAocHJldkxpbmVJc0xpc3QpIHsKICAgICAgaWYgKHN0YXRlLmluZGVudGF0aW9uRGlmZiA+PSAwKSB7IC8vIENvbnRpbnVlZCBsaXN0CiAgICAgICAgaWYgKHN0YXRlLmluZGVudGF0aW9uRGlmZiA8IDQpIHsgLy8gT25seSBhZGp1c3QgaW5kZW50YXRpb24gaWYgKm5vdCogYSBjb2RlIGJsb2NrCiAgICAgICAgICBzdGF0ZS5pbmRlbnRhdGlvbiAtPSBzdGF0ZS5pbmRlbnRhdGlvbkRpZmY7CiAgICAgICAgfQogICAgICAgIHN0YXRlLmxpc3QgPSBudWxsOwogICAgICB9IGVsc2UgaWYgKHN0YXRlLmluZGVudGF0aW9uID4gMCkgewogICAgICAgIHN0YXRlLmxpc3QgPSBudWxsOwogICAgICAgIHN0YXRlLmxpc3REZXB0aCA9IE1hdGguZmxvb3Ioc3RhdGUuaW5kZW50YXRpb24gLyA0KTsKICAgICAgfSBlbHNlIHsgLy8gTm8gbG9uZ2VyIGEgbGlzdAogICAgICAgIHN0YXRlLmxpc3QgPSBmYWxzZTsKICAgICAgICBzdGF0ZS5saXN0RGVwdGggPSAwOwogICAgICB9CiAgICB9CgogICAgdmFyIG1hdGNoID0gbnVsbDsKICAgIGlmIChzdGF0ZS5pbmRlbnRhdGlvbkRpZmYgPj0gNCkgewogICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgIGlmIChwcmV2TGluZUlzSW5kZW50ZWRDb2RlIHx8IGxpbmVJc0VtcHR5KHN0YXRlLnByZXZMaW5lKSkgewogICAgICAgIHN0YXRlLmluZGVudGF0aW9uIC09IDQ7CiAgICAgICAgc3RhdGUuaW5kZW50ZWRDb2RlID0gdHJ1ZTsKICAgICAgICByZXR1cm4gdG9rZW5UeXBlcy5jb2RlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIGlmICgobWF0Y2ggPSBzdHJlYW0ubWF0Y2goYXR4SGVhZGVyUkUpKSAmJiBtYXRjaFsxXS5sZW5ndGggPD0gNikgewogICAgICBzdGF0ZS5oZWFkZXIgPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSAiaGVhZGVyIjsKICAgICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZTsKICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpOwogICAgfSBlbHNlIGlmICghbGluZUlzRW1wdHkoc3RhdGUucHJldkxpbmUpICYmICFzdGF0ZS5xdW90ZSAmJiAhcHJldkxpbmVJc0xpc3QgJiYKICAgICAgICAgICAgICAgIXByZXZMaW5lSXNJbmRlbnRlZENvZGUgJiYgKG1hdGNoID0gc3RyZWFtLm1hdGNoKHNldGV4dEhlYWRlclJFKSkpIHsKICAgICAgc3RhdGUuaGVhZGVyID0gbWF0Y2hbMF0uY2hhckF0KDApID09ICc9JyA/IDEgOiAyOwogICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gImhlYWRlciI7CiAgICAgIHN0YXRlLmYgPSBzdGF0ZS5pbmxpbmU7CiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTsKICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdCgnPicpKSB7CiAgICAgIHN0YXRlLnF1b3RlID0gc29sID8gMSA6IHN0YXRlLnF1b3RlICsgMTsKICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9ICJxdW90ZSI7CiAgICAgIHN0cmVhbS5lYXRTcGFjZSgpOwogICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7CiAgICB9IGVsc2UgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICdbJykgewogICAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIGZvb3Rub3RlTGluayk7CiAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChoclJFLCB0cnVlKSkgewogICAgICBzdGF0ZS5ociA9IHRydWU7CiAgICAgIHJldHVybiB0b2tlblR5cGVzLmhyOwogICAgfSBlbHNlIGlmICgobGluZUlzRW1wdHkoc3RhdGUucHJldkxpbmUpIHx8IHByZXZMaW5lSXNMaXN0KSAmJiAoc3RyZWFtLm1hdGNoKHVsUkUsIGZhbHNlKSB8fCBzdHJlYW0ubWF0Y2gob2xSRSwgZmFsc2UpKSkgewogICAgICB2YXIgbGlzdFR5cGUgPSBudWxsOwogICAgICBpZiAoc3RyZWFtLm1hdGNoKHVsUkUsIHRydWUpKSB7CiAgICAgICAgbGlzdFR5cGUgPSAndWwnOwogICAgICB9IGVsc2UgewogICAgICAgIHN0cmVhbS5tYXRjaChvbFJFLCB0cnVlKTsKICAgICAgICBsaXN0VHlwZSA9ICdvbCc7CiAgICAgIH0KICAgICAgc3RhdGUuaW5kZW50YXRpb24gPSBzdHJlYW0uY29sdW1uKCkgKyBzdHJlYW0uY3VycmVudCgpLmxlbmd0aDsKICAgICAgc3RhdGUubGlzdCA9IHRydWU7CiAgICAgIHN0YXRlLmxpc3REZXB0aCsrOwogICAgICBpZiAobW9kZUNmZy50YXNrTGlzdHMgJiYgc3RyZWFtLm1hdGNoKHRhc2tMaXN0UkUsIGZhbHNlKSkgewogICAgICAgIHN0YXRlLnRhc2tMaXN0ID0gdHJ1ZTsKICAgICAgfQogICAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lOwogICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gWyJsaXN0IiwgImxpc3QtIiArIGxpc3RUeXBlXTsKICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpOwogICAgfSBlbHNlIGlmIChtb2RlQ2ZnLmZlbmNlZENvZGVCbG9ja3MgJiYgKG1hdGNoID0gc3RyZWFtLm1hdGNoKGZlbmNlZENvZGVSRSwgdHJ1ZSkpKSB7CiAgICAgIHN0YXRlLmZlbmNlZENoYXJzID0gbWF0Y2hbMV0KICAgICAgLy8gdHJ5IHN3aXRjaGluZyBtb2RlCiAgICAgIHN0YXRlLmxvY2FsTW9kZSA9IGdldE1vZGUobWF0Y2hbMl0pOwogICAgICBpZiAoc3RhdGUubG9jYWxNb2RlKSBzdGF0ZS5sb2NhbFN0YXRlID0gc3RhdGUubG9jYWxNb2RlLnN0YXJ0U3RhdGUoKTsKICAgICAgc3RhdGUuZiA9IHN0YXRlLmJsb2NrID0gbG9jYWw7CiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSAiY29kZS1ibG9jayI7CiAgICAgIHN0YXRlLmNvZGUgPSB0cnVlOwogICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7CiAgICB9CgogICAgcmV0dXJuIHN3aXRjaElubGluZShzdHJlYW0sIHN0YXRlLCBzdGF0ZS5pbmxpbmUpOwogIH0KCiAgZnVuY3Rpb24gaHRtbEJsb2NrKHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBzdHlsZSA9IGh0bWxNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUuaHRtbFN0YXRlKTsKICAgIGlmICgoaHRtbEZvdW5kICYmIHN0YXRlLmh0bWxTdGF0ZS50YWdTdGFydCA9PT0gbnVsbCAmJgogICAgICAgICAoIXN0YXRlLmh0bWxTdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmh0bWxTdGF0ZS50b2tlbml6ZS5pc0luVGV4dCkpIHx8CiAgICAgICAgKHN0YXRlLm1kX2luc2lkZSAmJiBzdHJlYW0uY3VycmVudCgpLmluZGV4T2YoIj4iKSA+IC0xKSkgewogICAgICBzdGF0ZS5mID0gaW5saW5lTm9ybWFsOwogICAgICBzdGF0ZS5ibG9jayA9IGJsb2NrTm9ybWFsOwogICAgICBzdGF0ZS5odG1sU3RhdGUgPSBudWxsOwogICAgfQogICAgcmV0dXJuIHN0eWxlOwogIH0KCiAgZnVuY3Rpb24gbG9jYWwoc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKHN0cmVhbS5zb2woKSAmJiBzdGF0ZS5mZW5jZWRDaGFycyAmJiBzdHJlYW0ubWF0Y2goc3RhdGUuZmVuY2VkQ2hhcnMsIGZhbHNlKSkgewogICAgICBzdGF0ZS5sb2NhbE1vZGUgPSBzdGF0ZS5sb2NhbFN0YXRlID0gbnVsbDsKICAgICAgc3RhdGUuZiA9IHN0YXRlLmJsb2NrID0gbGVhdmluZ0xvY2FsOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSBpZiAoc3RhdGUubG9jYWxNb2RlKSB7CiAgICAgIHJldHVybiBzdGF0ZS5sb2NhbE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5sb2NhbFN0YXRlKTsKICAgIH0gZWxzZSB7CiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgcmV0dXJuIHRva2VuVHlwZXMuY29kZTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGxlYXZpbmdMb2NhbChzdHJlYW0sIHN0YXRlKSB7CiAgICBzdHJlYW0ubWF0Y2goc3RhdGUuZmVuY2VkQ2hhcnMpOwogICAgc3RhdGUuYmxvY2sgPSBibG9ja05vcm1hbDsKICAgIHN0YXRlLmYgPSBpbmxpbmVOb3JtYWw7CiAgICBzdGF0ZS5mZW5jZWRDaGFycyA9IG51bGw7CiAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gImNvZGUtYmxvY2siOwogICAgc3RhdGUuY29kZSA9IHRydWU7CiAgICB2YXIgcmV0dXJuVHlwZSA9IGdldFR5cGUoc3RhdGUpOwogICAgc3RhdGUuY29kZSA9IGZhbHNlOwogICAgcmV0dXJuIHJldHVyblR5cGU7CiAgfQoKICAvLyBJbmxpbmUKICBmdW5jdGlvbiBnZXRUeXBlKHN0YXRlKSB7CiAgICB2YXIgc3R5bGVzID0gW107CgogICAgaWYgKHN0YXRlLmZvcm1hdHRpbmcpIHsKICAgICAgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5mb3JtYXR0aW5nKTsKCiAgICAgIGlmICh0eXBlb2Ygc3RhdGUuZm9ybWF0dGluZyA9PT0gInN0cmluZyIpIHN0YXRlLmZvcm1hdHRpbmcgPSBbc3RhdGUuZm9ybWF0dGluZ107CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmZvcm1hdHRpbmcubGVuZ3RoOyBpKyspIHsKICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmZvcm1hdHRpbmcgKyAiLSIgKyBzdGF0ZS5mb3JtYXR0aW5nW2ldKTsKCiAgICAgICAgaWYgKHN0YXRlLmZvcm1hdHRpbmdbaV0gPT09ICJoZWFkZXIiKSB7CiAgICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmZvcm1hdHRpbmcgKyAiLSIgKyBzdGF0ZS5mb3JtYXR0aW5nW2ldICsgIi0iICsgc3RhdGUuaGVhZGVyKTsKICAgICAgICB9CgogICAgICAgIC8vIEFkZCBgZm9ybWF0dGluZy1xdW90ZWAgYW5kIGBmb3JtYXR0aW5nLXF1b3RlLSNgIGZvciBibG9ja3F1b3RlcwogICAgICAgIC8vIEFkZCBgZXJyb3JgIGluc3RlYWQgaWYgdGhlIG1heGltdW0gYmxvY2txdW90ZSBuZXN0aW5nIGRlcHRoIGlzIHBhc3NlZAogICAgICAgIGlmIChzdGF0ZS5mb3JtYXR0aW5nW2ldID09PSAicXVvdGUiKSB7CiAgICAgICAgICBpZiAoIW1vZGVDZmcubWF4QmxvY2txdW90ZURlcHRoIHx8IG1vZGVDZmcubWF4QmxvY2txdW90ZURlcHRoID49IHN0YXRlLnF1b3RlKSB7CiAgICAgICAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMuZm9ybWF0dGluZyArICItIiArIHN0YXRlLmZvcm1hdHRpbmdbaV0gKyAiLSIgKyBzdGF0ZS5xdW90ZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdHlsZXMucHVzaCgiZXJyb3IiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBpZiAoc3RhdGUudGFza09wZW4pIHsKICAgICAgc3R5bGVzLnB1c2goIm1ldGEiKTsKICAgICAgcmV0dXJuIHN0eWxlcy5sZW5ndGggPyBzdHlsZXMuam9pbignICcpIDogbnVsbDsKICAgIH0KICAgIGlmIChzdGF0ZS50YXNrQ2xvc2VkKSB7CiAgICAgIHN0eWxlcy5wdXNoKCJwcm9wZXJ0eSIpOwogICAgICByZXR1cm4gc3R5bGVzLmxlbmd0aCA/IHN0eWxlcy5qb2luKCcgJykgOiBudWxsOwogICAgfQoKICAgIGlmIChzdGF0ZS5saW5rSHJlZikgewogICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmxpbmtIcmVmLCAidXJsIik7CiAgICB9IGVsc2UgeyAvLyBPbmx5IGFwcGx5IGlubGluZSBzdHlsZXMgdG8gbm9uLXVybCB0ZXh0CiAgICAgIGlmIChzdGF0ZS5zdHJvbmcpIHsgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5zdHJvbmcpOyB9CiAgICAgIGlmIChzdGF0ZS5lbSkgeyBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmVtKTsgfQogICAgICBpZiAoc3RhdGUuc3RyaWtldGhyb3VnaCkgeyBzdHlsZXMucHVzaCh0b2tlblR5cGVzLnN0cmlrZXRocm91Z2gpOyB9CiAgICAgIGlmIChzdGF0ZS5saW5rVGV4dCkgeyBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmxpbmtUZXh0KTsgfQogICAgICBpZiAoc3RhdGUuY29kZSkgeyBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmNvZGUpOyB9CiAgICB9CgogICAgaWYgKHN0YXRlLmhlYWRlcikgeyBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmhlYWRlciwgdG9rZW5UeXBlcy5oZWFkZXIgKyAiLSIgKyBzdGF0ZS5oZWFkZXIpOyB9CgogICAgaWYgKHN0YXRlLnF1b3RlKSB7CiAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMucXVvdGUpOwoKICAgICAgLy8gQWRkIGBxdW90ZS0jYCB3aGVyZSB0aGUgbWF4aW11bSBmb3IgYCNgIGlzIG1vZGVDZmcubWF4QmxvY2txdW90ZURlcHRoCiAgICAgIGlmICghbW9kZUNmZy5tYXhCbG9ja3F1b3RlRGVwdGggfHwgbW9kZUNmZy5tYXhCbG9ja3F1b3RlRGVwdGggPj0gc3RhdGUucXVvdGUpIHsKICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLnF1b3RlICsgIi0iICsgc3RhdGUucXVvdGUpOwogICAgICB9IGVsc2UgewogICAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMucXVvdGUgKyAiLSIgKyBtb2RlQ2ZnLm1heEJsb2NrcXVvdGVEZXB0aCk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoc3RhdGUubGlzdCAhPT0gZmFsc2UpIHsKICAgICAgdmFyIGxpc3RNb2QgPSAoc3RhdGUubGlzdERlcHRoIC0gMSkgJSAzOwogICAgICBpZiAoIWxpc3RNb2QpIHsKICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmxpc3QxKTsKICAgICAgfSBlbHNlIGlmIChsaXN0TW9kID09PSAxKSB7CiAgICAgICAgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5saXN0Mik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5saXN0Myk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoc3RhdGUudHJhaWxpbmdTcGFjZU5ld0xpbmUpIHsKICAgICAgc3R5bGVzLnB1c2goInRyYWlsaW5nLXNwYWNlLW5ldy1saW5lIik7CiAgICB9IGVsc2UgaWYgKHN0YXRlLnRyYWlsaW5nU3BhY2UpIHsKICAgICAgc3R5bGVzLnB1c2goInRyYWlsaW5nLXNwYWNlLSIgKyAoc3RhdGUudHJhaWxpbmdTcGFjZSAlIDIgPyAiYSIgOiAiYiIpKTsKICAgIH0KCiAgICByZXR1cm4gc3R5bGVzLmxlbmd0aCA/IHN0eWxlcy5qb2luKCcgJykgOiBudWxsOwogIH0KCiAgZnVuY3Rpb24gaGFuZGxlVGV4dChzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAoc3RyZWFtLm1hdGNoKHRleHRSRSwgdHJ1ZSkpIHsKICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpOwogICAgfQogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIGZ1bmN0aW9uIGlubGluZU5vcm1hbChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgc3R5bGUgPSBzdGF0ZS50ZXh0KHN0cmVhbSwgc3RhdGUpOwogICAgaWYgKHR5cGVvZiBzdHlsZSAhPT0gJ3VuZGVmaW5lZCcpCiAgICAgIHJldHVybiBzdHlsZTsKCiAgICBpZiAoc3RhdGUubGlzdCkgeyAvLyBMaXN0IG1hcmtlciAoKiwgKywgLSwgMS4sIGV0YykKICAgICAgc3RhdGUubGlzdCA9IG51bGw7CiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTsKICAgIH0KCiAgICBpZiAoc3RhdGUudGFza0xpc3QpIHsKICAgICAgdmFyIHRhc2tPcGVuID0gc3RyZWFtLm1hdGNoKHRhc2tMaXN0UkUsIHRydWUpWzFdICE9PSAieCI7CiAgICAgIGlmICh0YXNrT3Blbikgc3RhdGUudGFza09wZW4gPSB0cnVlOwogICAgICBlbHNlIHN0YXRlLnRhc2tDbG9zZWQgPSB0cnVlOwogICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gInRhc2siOwogICAgICBzdGF0ZS50YXNrTGlzdCA9IGZhbHNlOwogICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7CiAgICB9CgogICAgc3RhdGUudGFza09wZW4gPSBmYWxzZTsKICAgIHN0YXRlLnRhc2tDbG9zZWQgPSBmYWxzZTsKCiAgICBpZiAoc3RhdGUuaGVhZGVyICYmIHN0cmVhbS5tYXRjaCgvXiMrJC8sIHRydWUpKSB7CiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSAiaGVhZGVyIjsKICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpOwogICAgfQoKICAgIC8vIEdldCBzb2woKSB2YWx1ZSBub3csIGJlZm9yZSBjaGFyYWN0ZXIgaXMgY29uc3VtZWQKICAgIHZhciBzb2wgPSBzdHJlYW0uc29sKCk7CgogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKCiAgICBpZiAoY2ggPT09ICdcXCcpIHsKICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgewogICAgICAgIHZhciB0eXBlID0gZ2V0VHlwZShzdGF0ZSk7CiAgICAgICAgdmFyIGZvcm1hdHRpbmdFc2NhcGUgPSB0b2tlblR5cGVzLmZvcm1hdHRpbmcgKyAiLWVzY2FwZSI7CiAgICAgICAgcmV0dXJuIHR5cGUgPyB0eXBlICsgIiAiICsgZm9ybWF0dGluZ0VzY2FwZSA6IGZvcm1hdHRpbmdFc2NhcGU7CiAgICAgIH0KICAgIH0KCiAgICAvLyBNYXRjaGVzIGxpbmsgdGl0bGVzIHByZXNlbnQgb24gbmV4dCBsaW5lCiAgICBpZiAoc3RhdGUubGlua1RpdGxlKSB7CiAgICAgIHN0YXRlLmxpbmtUaXRsZSA9IGZhbHNlOwogICAgICB2YXIgbWF0Y2hDaCA9IGNoOwogICAgICBpZiAoY2ggPT09ICcoJykgewogICAgICAgIG1hdGNoQ2ggPSAnKSc7CiAgICAgIH0KICAgICAgbWF0Y2hDaCA9IChtYXRjaENoKycnKS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywgIlxcJDEiKTsKICAgICAgdmFyIHJlZ2V4ID0gJ15cXHMqKD86W14nICsgbWF0Y2hDaCArICdcXFxcXSt8XFxcXFxcXFx8XFxcXC4pJyArIG1hdGNoQ2g7CiAgICAgIGlmIChzdHJlYW0ubWF0Y2gobmV3IFJlZ0V4cChyZWdleCksIHRydWUpKSB7CiAgICAgICAgcmV0dXJuIHRva2VuVHlwZXMubGlua0hyZWY7CiAgICAgIH0KICAgIH0KCiAgICAvLyBJZiB0aGlzIGJsb2NrIGlzIGNoYW5nZWQsIGl0IG1heSBuZWVkIHRvIGJlIHVwZGF0ZWQgaW4gR0ZNIG1vZGUKICAgIGlmIChjaCA9PT0gJ2AnKSB7CiAgICAgIHZhciBwcmV2aW91c0Zvcm1hdHRpbmcgPSBzdGF0ZS5mb3JtYXR0aW5nOwogICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gImNvZGUiOwogICAgICB2YXIgdCA9IGdldFR5cGUoc3RhdGUpOwogICAgICB2YXIgYmVmb3JlID0gc3RyZWFtLnBvczsKICAgICAgc3RyZWFtLmVhdFdoaWxlKCdgJyk7CiAgICAgIHZhciBkaWZmZXJlbmNlID0gMSArIHN0cmVhbS5wb3MgLSBiZWZvcmU7CiAgICAgIGlmICghc3RhdGUuY29kZSkgewogICAgICAgIGNvZGVEZXB0aCA9IGRpZmZlcmVuY2U7CiAgICAgICAgc3RhdGUuY29kZSA9IHRydWU7CiAgICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChkaWZmZXJlbmNlID09PSBjb2RlRGVwdGgpIHsgLy8gTXVzdCBiZSBleGFjdAogICAgICAgICAgc3RhdGUuY29kZSA9IGZhbHNlOwogICAgICAgICAgcmV0dXJuIHQ7CiAgICAgICAgfQogICAgICAgIHN0YXRlLmZvcm1hdHRpbmcgPSBwcmV2aW91c0Zvcm1hdHRpbmc7CiAgICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHN0YXRlLmNvZGUpIHsKICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpOwogICAgfQoKICAgIGlmIChjaCA9PT0gJyEnICYmIHN0cmVhbS5tYXRjaCgvXFtbXlxdXSpcXSA/KD86XCh8XFspLywgZmFsc2UpKSB7CiAgICAgIHN0cmVhbS5tYXRjaCgvXFtbXlxdXSpcXS8pOwogICAgICBzdGF0ZS5pbmxpbmUgPSBzdGF0ZS5mID0gbGlua0hyZWY7CiAgICAgIHJldHVybiB0b2tlblR5cGVzLmltYWdlOwogICAgfQoKICAgIGlmIChjaCA9PT0gJ1snICYmIHN0cmVhbS5tYXRjaCgvLipcXShcKC4qXCl8ID9cWy4qXF0pLywgZmFsc2UpKSB7CiAgICAgIHN0YXRlLmxpbmtUZXh0ID0gdHJ1ZTsKICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9ICJsaW5rIjsKICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpOwogICAgfQoKICAgIGlmIChjaCA9PT0gJ10nICYmIHN0YXRlLmxpbmtUZXh0ICYmIHN0cmVhbS5tYXRjaCgvXCguKlwpfCA/XFsuKlxdLywgZmFsc2UpKSB7CiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSAibGluayI7CiAgICAgIHZhciB0eXBlID0gZ2V0VHlwZShzdGF0ZSk7CiAgICAgIHN0YXRlLmxpbmtUZXh0ID0gZmFsc2U7CiAgICAgIHN0YXRlLmlubGluZSA9IHN0YXRlLmYgPSBsaW5rSHJlZjsKICAgICAgcmV0dXJuIHR5cGU7CiAgICB9CgogICAgaWYgKGNoID09PSAnPCcgJiYgc3RyZWFtLm1hdGNoKC9eKGh0dHBzP3xmdHBzPyk6XC9cLyg/OlteXFw+XXxcXC4pKz4vLCBmYWxzZSkpIHsKICAgICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGxpbmtJbmxpbmU7CiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSAibGluayI7CiAgICAgIHZhciB0eXBlID0gZ2V0VHlwZShzdGF0ZSk7CiAgICAgIGlmICh0eXBlKXsKICAgICAgICB0eXBlICs9ICIgIjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0eXBlID0gIiI7CiAgICAgIH0KICAgICAgcmV0dXJuIHR5cGUgKyB0b2tlblR5cGVzLmxpbmtJbmxpbmU7CiAgICB9CgogICAgaWYgKGNoID09PSAnPCcgJiYgc3RyZWFtLm1hdGNoKC9eW14+IFxcXStAKD86W15cXD5dfFxcLikrPi8sIGZhbHNlKSkgewogICAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lID0gbGlua0lubGluZTsKICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9ICJsaW5rIjsKICAgICAgdmFyIHR5cGUgPSBnZXRUeXBlKHN0YXRlKTsKICAgICAgaWYgKHR5cGUpewogICAgICAgIHR5cGUgKz0gIiAiOwogICAgICB9IGVsc2UgewogICAgICAgIHR5cGUgPSAiIjsKICAgICAgfQogICAgICByZXR1cm4gdHlwZSArIHRva2VuVHlwZXMubGlua0VtYWlsOwogICAgfQoKICAgIGlmIChjaCA9PT0gJzwnICYmIHN0cmVhbS5tYXRjaCgvXighLS18XHcpLywgZmFsc2UpKSB7CiAgICAgIHZhciBlbmQgPSBzdHJlYW0uc3RyaW5nLmluZGV4T2YoIj4iLCBzdHJlYW0ucG9zKTsKICAgICAgaWYgKGVuZCAhPSAtMSkgewogICAgICAgIHZhciBhdHRzID0gc3RyZWFtLnN0cmluZy5zdWJzdHJpbmcoc3RyZWFtLnN0YXJ0LCBlbmQpOwogICAgICAgIGlmICgvbWFya2Rvd25ccyo9XHMqKCd8Iil7MCwxfTEoJ3wiKXswLDF9Ly50ZXN0KGF0dHMpKSBzdGF0ZS5tZF9pbnNpZGUgPSB0cnVlOwogICAgICB9CiAgICAgIHN0cmVhbS5iYWNrVXAoMSk7CiAgICAgIHN0YXRlLmh0bWxTdGF0ZSA9IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShodG1sTW9kZSk7CiAgICAgIHJldHVybiBzd2l0Y2hCbG9jayhzdHJlYW0sIHN0YXRlLCBodG1sQmxvY2spOwogICAgfQoKICAgIGlmIChjaCA9PT0gJzwnICYmIHN0cmVhbS5tYXRjaCgvXlwvXHcqPz4vKSkgewogICAgICBzdGF0ZS5tZF9pbnNpZGUgPSBmYWxzZTsKICAgICAgcmV0dXJuICJ0YWciOwogICAgfQoKICAgIHZhciBpZ25vcmVVbmRlcnNjb3JlID0gZmFsc2U7CiAgICBpZiAoIW1vZGVDZmcudW5kZXJzY29yZXNCcmVha1dvcmRzKSB7CiAgICAgIGlmIChjaCA9PT0gJ18nICYmIHN0cmVhbS5wZWVrKCkgIT09ICdfJyAmJiBzdHJlYW0ubWF0Y2goLyhcdykvLCBmYWxzZSkpIHsKICAgICAgICB2YXIgcHJldlBvcyA9IHN0cmVhbS5wb3MgLSAyOwogICAgICAgIGlmIChwcmV2UG9zID49IDApIHsKICAgICAgICAgIHZhciBwcmV2Q2ggPSBzdHJlYW0uc3RyaW5nLmNoYXJBdChwcmV2UG9zKTsKICAgICAgICAgIGlmIChwcmV2Q2ggIT09ICdfJyAmJiBwcmV2Q2gubWF0Y2goLyhcdykvLCBmYWxzZSkpIHsKICAgICAgICAgICAgaWdub3JlVW5kZXJzY29yZSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoY2ggPT09ICcqJyB8fCAoY2ggPT09ICdfJyAmJiAhaWdub3JlVW5kZXJzY29yZSkpIHsKICAgICAgaWYgKHNvbCAmJiBzdHJlYW0ucGVlaygpID09PSAnICcpIHsKICAgICAgICAvLyBEbyBub3RoaW5nLCBzdXJyb3VuZGVkIGJ5IG5ld2xpbmUgYW5kIHNwYWNlCiAgICAgIH0gZWxzZSBpZiAoc3RhdGUuc3Ryb25nID09PSBjaCAmJiBzdHJlYW0uZWF0KGNoKSkgeyAvLyBSZW1vdmUgU1RST05HCiAgICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9ICJzdHJvbmciOwogICAgICAgIHZhciB0ID0gZ2V0VHlwZShzdGF0ZSk7CiAgICAgICAgc3RhdGUuc3Ryb25nID0gZmFsc2U7CiAgICAgICAgcmV0dXJuIHQ7CiAgICAgIH0gZWxzZSBpZiAoIXN0YXRlLnN0cm9uZyAmJiBzdHJlYW0uZWF0KGNoKSkgeyAvLyBBZGQgU1RST05HCiAgICAgICAgc3RhdGUuc3Ryb25nID0gY2g7CiAgICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9ICJzdHJvbmciOwogICAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTsKICAgICAgfSBlbHNlIGlmIChzdGF0ZS5lbSA9PT0gY2gpIHsgLy8gUmVtb3ZlIEVNCiAgICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9ICJlbSI7CiAgICAgICAgdmFyIHQgPSBnZXRUeXBlKHN0YXRlKTsKICAgICAgICBzdGF0ZS5lbSA9IGZhbHNlOwogICAgICAgIHJldHVybiB0OwogICAgICB9IGVsc2UgaWYgKCFzdGF0ZS5lbSkgeyAvLyBBZGQgRU0KICAgICAgICBzdGF0ZS5lbSA9IGNoOwogICAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSAiZW0iOwogICAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChjaCA9PT0gJyAnKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCcqJykgfHwgc3RyZWFtLmVhdCgnXycpKSB7IC8vIFByb2JhYmx5IHN1cnJvdW5kZWQgYnkgc3BhY2VzCiAgICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICcgJykgeyAvLyBTdXJyb3VuZGVkIGJ5IHNwYWNlcywgaWdub3JlCiAgICAgICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7CiAgICAgICAgfSBlbHNlIHsgLy8gTm90IHN1cnJvdW5kZWQgYnkgc3BhY2VzLCBiYWNrIHVwIHBvaW50ZXIKICAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKG1vZGVDZmcuc3RyaWtldGhyb3VnaCkgewogICAgICBpZiAoY2ggPT09ICd+JyAmJiBzdHJlYW0uZWF0V2hpbGUoY2gpKSB7CiAgICAgICAgaWYgKHN0YXRlLnN0cmlrZXRocm91Z2gpIHsvLyBSZW1vdmUgc3RyaWtldGhyb3VnaAogICAgICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9ICJzdHJpa2V0aHJvdWdoIjsKICAgICAgICAgIHZhciB0ID0gZ2V0VHlwZShzdGF0ZSk7CiAgICAgICAgICBzdGF0ZS5zdHJpa2V0aHJvdWdoID0gZmFsc2U7CiAgICAgICAgICByZXR1cm4gdDsKICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvXlteXHNdLywgZmFsc2UpKSB7Ly8gQWRkIHN0cmlrZXRocm91Z2gKICAgICAgICAgIHN0YXRlLnN0cmlrZXRocm91Z2ggPSB0cnVlOwogICAgICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9ICJzdHJpa2V0aHJvdWdoIjsKICAgICAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICcgJykgewogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15+fi8sIHRydWUpKSB7IC8vIFByb2JhYmx5IHN1cnJvdW5kZWQgYnkgc3BhY2UKICAgICAgICAgIGlmIChzdHJlYW0ucGVlaygpID09PSAnICcpIHsgLy8gU3Vycm91bmRlZCBieSBzcGFjZXMsIGlnbm9yZQogICAgICAgICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7CiAgICAgICAgICB9IGVsc2UgeyAvLyBOb3Qgc3Vycm91bmRlZCBieSBzcGFjZXMsIGJhY2sgdXAgcG9pbnRlcgogICAgICAgICAgICBzdHJlYW0uYmFja1VwKDIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmIChjaCA9PT0gJyAnKSB7CiAgICAgIGlmIChzdHJlYW0ubWF0Y2goLyArJC8sIGZhbHNlKSkgewogICAgICAgIHN0YXRlLnRyYWlsaW5nU3BhY2UrKzsKICAgICAgfSBlbHNlIGlmIChzdGF0ZS50cmFpbGluZ1NwYWNlKSB7CiAgICAgICAgc3RhdGUudHJhaWxpbmdTcGFjZU5ld0xpbmUgPSB0cnVlOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpOwogIH0KCiAgZnVuY3Rpb24gbGlua0lubGluZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwoKICAgIGlmIChjaCA9PT0gIj4iKSB7CiAgICAgIHN0YXRlLmYgPSBzdGF0ZS5pbmxpbmUgPSBpbmxpbmVOb3JtYWw7CiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSAibGluayI7CiAgICAgIHZhciB0eXBlID0gZ2V0VHlwZShzdGF0ZSk7CiAgICAgIGlmICh0eXBlKXsKICAgICAgICB0eXBlICs9ICIgIjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0eXBlID0gIiI7CiAgICAgIH0KICAgICAgcmV0dXJuIHR5cGUgKyB0b2tlblR5cGVzLmxpbmtJbmxpbmU7CiAgICB9CgogICAgc3RyZWFtLm1hdGNoKC9eW14+XSsvLCB0cnVlKTsKCiAgICByZXR1cm4gdG9rZW5UeXBlcy5saW5rSW5saW5lOwogIH0KCiAgZnVuY3Rpb24gbGlua0hyZWYoc3RyZWFtLCBzdGF0ZSkgewogICAgLy8gQ2hlY2sgaWYgc3BhY2UsIGFuZCByZXR1cm4gTlVMTCBpZiBzbyAodG8gYXZvaWQgbWFya2luZyB0aGUgc3BhY2UpCiAgICBpZihzdHJlYW0uZWF0U3BhY2UoKSl7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PT0gJygnIHx8IGNoID09PSAnWycpIHsKICAgICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGdldExpbmtIcmVmSW5zaWRlKGNoID09PSAiKCIgPyAiKSIgOiAiXSIpOwogICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gImxpbmstc3RyaW5nIjsKICAgICAgc3RhdGUubGlua0hyZWYgPSB0cnVlOwogICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7CiAgICB9CiAgICByZXR1cm4gJ2Vycm9yJzsKICB9CgogIGZ1bmN0aW9uIGdldExpbmtIcmVmSW5zaWRlKGVuZENoYXIpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CgogICAgICBpZiAoY2ggPT09IGVuZENoYXIpIHsKICAgICAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lID0gaW5saW5lTm9ybWFsOwogICAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSAibGluay1zdHJpbmciOwogICAgICAgIHZhciByZXR1cm5TdGF0ZSA9IGdldFR5cGUoc3RhdGUpOwogICAgICAgIHN0YXRlLmxpbmtIcmVmID0gZmFsc2U7CiAgICAgICAgcmV0dXJuIHJldHVyblN0YXRlOwogICAgICB9CgogICAgICBpZiAoc3RyZWFtLm1hdGNoKGlubGluZVJFKGVuZENoYXIpLCB0cnVlKSkgewogICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7CiAgICAgIH0KCiAgICAgIHN0YXRlLmxpbmtIcmVmID0gdHJ1ZTsKICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIGZvb3Rub3RlTGluayhzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eW15cXV0qXF06LywgZmFsc2UpKSB7CiAgICAgIHN0YXRlLmYgPSBmb290bm90ZUxpbmtJbnNpZGU7CiAgICAgIHN0cmVhbS5uZXh0KCk7IC8vIENvbnN1bWUgWwogICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gImxpbmsiOwogICAgICBzdGF0ZS5saW5rVGV4dCA9IHRydWU7CiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTsKICAgIH0KICAgIHJldHVybiBzd2l0Y2hJbmxpbmUoc3RyZWFtLCBzdGF0ZSwgaW5saW5lTm9ybWFsKTsKICB9CgogIGZ1bmN0aW9uIGZvb3Rub3RlTGlua0luc2lkZShzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXF06LywgdHJ1ZSkpIHsKICAgICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGZvb3Rub3RlVXJsOwogICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gImxpbmsiOwogICAgICB2YXIgcmV0dXJuVHlwZSA9IGdldFR5cGUoc3RhdGUpOwogICAgICBzdGF0ZS5saW5rVGV4dCA9IGZhbHNlOwogICAgICByZXR1cm4gcmV0dXJuVHlwZTsKICAgIH0KCiAgICBzdHJlYW0ubWF0Y2goL15bXlxdXSsvLCB0cnVlKTsKCiAgICByZXR1cm4gdG9rZW5UeXBlcy5saW5rVGV4dDsKICB9CgogIGZ1bmN0aW9uIGZvb3Rub3RlVXJsKHN0cmVhbSwgc3RhdGUpIHsKICAgIC8vIENoZWNrIGlmIHNwYWNlLCBhbmQgcmV0dXJuIE5VTEwgaWYgc28gKHRvIGF2b2lkIG1hcmtpbmcgdGhlIHNwYWNlKQogICAgaWYoc3RyZWFtLmVhdFNwYWNlKCkpewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIC8vIE1hdGNoIFVSTAogICAgc3RyZWFtLm1hdGNoKC9eW15cc10rLywgdHJ1ZSk7CiAgICAvLyBDaGVjayBmb3IgbGluayB0aXRsZQogICAgaWYgKHN0cmVhbS5wZWVrKCkgPT09IHVuZGVmaW5lZCkgeyAvLyBFbmQgb2YgbGluZSwgc2V0IGZsYWcgdG8gY2hlY2sgbmV4dCBsaW5lCiAgICAgIHN0YXRlLmxpbmtUaXRsZSA9IHRydWU7CiAgICB9IGVsc2UgeyAvLyBNb3JlIGNvbnRlbnQgb24gbGluZSwgY2hlY2sgaWYgbGluayB0aXRsZQogICAgICBzdHJlYW0ubWF0Y2goL14oPzpccysoPzoiKD86W14iXFxdfFxcXFx8XFwuKSsifCcoPzpbXidcXF18XFxcXHxcXC4pKyd8XCgoPzpbXilcXF18XFxcXHxcXC4pK1wpKSk/LywgdHJ1ZSk7CiAgICB9CiAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lID0gaW5saW5lTm9ybWFsOwogICAgcmV0dXJuIHRva2VuVHlwZXMubGlua0hyZWYgKyAiIHVybCI7CiAgfQoKICB2YXIgc2F2ZWRJbmxpbmVSRSA9IFtdOwogIGZ1bmN0aW9uIGlubGluZVJFKGVuZENoYXIpIHsKICAgIGlmICghc2F2ZWRJbmxpbmVSRVtlbmRDaGFyXSkgewogICAgICAvLyBFc2NhcGUgZW5kQ2hhciBmb3IgUmVnRXhwICh0YWtlbiBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ5NDEyMi81MjY3NDEpCiAgICAgIGVuZENoYXIgPSAoZW5kQ2hhcisnJykucmVwbGFjZSgvKFsuPyorXiRbXF1cXCgpe318LV0pL2csICJcXCQxIik7CiAgICAgIC8vIE1hdGNoIGFueSBub24tZW5kQ2hhciwgZXNjYXBlZCBjaGFyYWN0ZXIsIGFzIHdlbGwgYXMgdGhlIGNsb3NpbmcKICAgICAgLy8gZW5kQ2hhci4KICAgICAgc2F2ZWRJbmxpbmVSRVtlbmRDaGFyXSA9IG5ldyBSZWdFeHAoJ14oPzpbXlxcXFxdfFxcXFwuKSo/KCcgKyBlbmRDaGFyICsgJyknKTsKICAgIH0KICAgIHJldHVybiBzYXZlZElubGluZVJFW2VuZENoYXJdOwogIH0KCiAgdmFyIG1vZGUgPSB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBmOiBibG9ja05vcm1hbCwKCiAgICAgICAgcHJldkxpbmU6IG51bGwsCiAgICAgICAgdGhpc0xpbmU6IG51bGwsCgogICAgICAgIGJsb2NrOiBibG9ja05vcm1hbCwKICAgICAgICBodG1sU3RhdGU6IG51bGwsCiAgICAgICAgaW5kZW50YXRpb246IDAsCgogICAgICAgIGlubGluZTogaW5saW5lTm9ybWFsLAogICAgICAgIHRleHQ6IGhhbmRsZVRleHQsCgogICAgICAgIGZvcm1hdHRpbmc6IGZhbHNlLAogICAgICAgIGxpbmtUZXh0OiBmYWxzZSwKICAgICAgICBsaW5rSHJlZjogZmFsc2UsCiAgICAgICAgbGlua1RpdGxlOiBmYWxzZSwKICAgICAgICBlbTogZmFsc2UsCiAgICAgICAgc3Ryb25nOiBmYWxzZSwKICAgICAgICBoZWFkZXI6IDAsCiAgICAgICAgaHI6IGZhbHNlLAogICAgICAgIHRhc2tMaXN0OiBmYWxzZSwKICAgICAgICBsaXN0OiBmYWxzZSwKICAgICAgICBsaXN0RGVwdGg6IDAsCiAgICAgICAgcXVvdGU6IDAsCiAgICAgICAgdHJhaWxpbmdTcGFjZTogMCwKICAgICAgICB0cmFpbGluZ1NwYWNlTmV3TGluZTogZmFsc2UsCiAgICAgICAgc3RyaWtldGhyb3VnaDogZmFsc2UsCiAgICAgICAgZmVuY2VkQ2hhcnM6IG51bGwKICAgICAgfTsKICAgIH0sCgogICAgY29weVN0YXRlOiBmdW5jdGlvbihzKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgZjogcy5mLAoKICAgICAgICBwcmV2TGluZTogcy5wcmV2TGluZSwKICAgICAgICB0aGlzTGluZTogcy50aGlzTGluZSwKCiAgICAgICAgYmxvY2s6IHMuYmxvY2ssCiAgICAgICAgaHRtbFN0YXRlOiBzLmh0bWxTdGF0ZSAmJiBDb2RlTWlycm9yLmNvcHlTdGF0ZShodG1sTW9kZSwgcy5odG1sU3RhdGUpLAogICAgICAgIGluZGVudGF0aW9uOiBzLmluZGVudGF0aW9uLAoKICAgICAgICBsb2NhbE1vZGU6IHMubG9jYWxNb2RlLAogICAgICAgIGxvY2FsU3RhdGU6IHMubG9jYWxNb2RlID8gQ29kZU1pcnJvci5jb3B5U3RhdGUocy5sb2NhbE1vZGUsIHMubG9jYWxTdGF0ZSkgOiBudWxsLAoKICAgICAgICBpbmxpbmU6IHMuaW5saW5lLAogICAgICAgIHRleHQ6IHMudGV4dCwKICAgICAgICBmb3JtYXR0aW5nOiBmYWxzZSwKICAgICAgICBsaW5rVGl0bGU6IHMubGlua1RpdGxlLAogICAgICAgIGNvZGU6IHMuY29kZSwKICAgICAgICBlbTogcy5lbSwKICAgICAgICBzdHJvbmc6IHMuc3Ryb25nLAogICAgICAgIHN0cmlrZXRocm91Z2g6IHMuc3RyaWtldGhyb3VnaCwKICAgICAgICBoZWFkZXI6IHMuaGVhZGVyLAogICAgICAgIGhyOiBzLmhyLAogICAgICAgIHRhc2tMaXN0OiBzLnRhc2tMaXN0LAogICAgICAgIGxpc3Q6IHMubGlzdCwKICAgICAgICBsaXN0RGVwdGg6IHMubGlzdERlcHRoLAogICAgICAgIHF1b3RlOiBzLnF1b3RlLAogICAgICAgIGluZGVudGVkQ29kZTogcy5pbmRlbnRlZENvZGUsCiAgICAgICAgdHJhaWxpbmdTcGFjZTogcy50cmFpbGluZ1NwYWNlLAogICAgICAgIHRyYWlsaW5nU3BhY2VOZXdMaW5lOiBzLnRyYWlsaW5nU3BhY2VOZXdMaW5lLAogICAgICAgIG1kX2luc2lkZTogcy5tZF9pbnNpZGUsCiAgICAgICAgZmVuY2VkQ2hhcnM6IHMuZmVuY2VkQ2hhcnMKICAgICAgfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKCiAgICAgIC8vIFJlc2V0IHN0YXRlLmZvcm1hdHRpbmcKICAgICAgc3RhdGUuZm9ybWF0dGluZyA9IGZhbHNlOwoKICAgICAgaWYgKHN0cmVhbSAhPSBzdGF0ZS50aGlzTGluZSkgewogICAgICAgIHZhciBmb3JjZUJsYW5rTGluZSA9IHN0YXRlLmhlYWRlciB8fCBzdGF0ZS5ocjsKCiAgICAgICAgLy8gUmVzZXQgc3RhdGUuaGVhZGVyIGFuZCBzdGF0ZS5ocgogICAgICAgIHN0YXRlLmhlYWRlciA9IDA7CiAgICAgICAgc3RhdGUuaHIgPSBmYWxzZTsKCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxzKiQvLCB0cnVlKSB8fCBmb3JjZUJsYW5rTGluZSkgewogICAgICAgICAgYmxhbmtMaW5lKHN0YXRlKTsKICAgICAgICAgIGlmICghZm9yY2VCbGFua0xpbmUpIHJldHVybiBudWxsCiAgICAgICAgICBzdGF0ZS5wcmV2TGluZSA9IG51bGwKICAgICAgICB9CgogICAgICAgIHN0YXRlLnByZXZMaW5lID0gc3RhdGUudGhpc0xpbmUKICAgICAgICBzdGF0ZS50aGlzTGluZSA9IHN0cmVhbQoKICAgICAgICAvLyBSZXNldCBzdGF0ZS50YXNrTGlzdAogICAgICAgIHN0YXRlLnRhc2tMaXN0ID0gZmFsc2U7CgogICAgICAgIC8vIFJlc2V0IHN0YXRlLnRyYWlsaW5nU3BhY2UKICAgICAgICBzdGF0ZS50cmFpbGluZ1NwYWNlID0gMDsKICAgICAgICBzdGF0ZS50cmFpbGluZ1NwYWNlTmV3TGluZSA9IGZhbHNlOwoKICAgICAgICBzdGF0ZS5mID0gc3RhdGUuYmxvY2s7CiAgICAgICAgdmFyIGluZGVudGF0aW9uID0gc3RyZWFtLm1hdGNoKC9eXHMqLywgdHJ1ZSlbMF0ucmVwbGFjZSgvXHQvZywgJyAgICAnKS5sZW5ndGg7CiAgICAgICAgdmFyIGRpZmZlcmVuY2UgPSBNYXRoLmZsb29yKChpbmRlbnRhdGlvbiAtIHN0YXRlLmluZGVudGF0aW9uKSAvIDQpICogNDsKICAgICAgICBpZiAoZGlmZmVyZW5jZSA+IDQpIGRpZmZlcmVuY2UgPSA0OwogICAgICAgIHZhciBhZGp1c3RlZEluZGVudGF0aW9uID0gc3RhdGUuaW5kZW50YXRpb24gKyBkaWZmZXJlbmNlOwogICAgICAgIHN0YXRlLmluZGVudGF0aW9uRGlmZiA9IGFkanVzdGVkSW5kZW50YXRpb24gLSBzdGF0ZS5pbmRlbnRhdGlvbjsKICAgICAgICBzdGF0ZS5pbmRlbnRhdGlvbiA9IGFkanVzdGVkSW5kZW50YXRpb247CiAgICAgICAgaWYgKGluZGVudGF0aW9uID4gMCkgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0YXRlLmYoc3RyZWFtLCBzdGF0ZSk7CiAgICB9LAoKICAgIGlubmVyTW9kZTogZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgaWYgKHN0YXRlLmJsb2NrID09IGh0bWxCbG9jaykgcmV0dXJuIHtzdGF0ZTogc3RhdGUuaHRtbFN0YXRlLCBtb2RlOiBodG1sTW9kZX07CiAgICAgIGlmIChzdGF0ZS5sb2NhbFN0YXRlKSByZXR1cm4ge3N0YXRlOiBzdGF0ZS5sb2NhbFN0YXRlLCBtb2RlOiBzdGF0ZS5sb2NhbE1vZGV9OwogICAgICByZXR1cm4ge3N0YXRlOiBzdGF0ZSwgbW9kZTogbW9kZX07CiAgICB9LAoKICAgIGJsYW5rTGluZTogYmxhbmtMaW5lLAoKICAgIGdldFR5cGU6IGdldFR5cGUsCgogICAgZm9sZDogIm1hcmtkb3duIgogIH07CiAgcmV0dXJuIG1vZGU7Cn0sICJ4bWwiKTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LW1hcmtkb3duIiwgIm1hcmtkb3duIik7Cgp9KTsK]]></data>
	</file>
	<file>
	  <filename>/lib/js/marked.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIG1hcmtlZCAtIGEgbWFya2Rvd24gbWFya2Rvd24KICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTQsIENocmlzdG9waGVyIEplZmZyZXkuIChNSVQgTGljZW5zZWQpCiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGpqL21hcmtlZAogKi8KCjsoZnVuY3Rpb24oKSB7CgovKioKICogQmxvY2stTGV2ZWwgR3JhbW1hcgogKi8KCnZhciBibG9jayA9IHsKICBuZXdsaW5lOiAvXlxuKy8sCiAgY29kZTogL14oIHs0fVteXG5dK1xuKikrLywKICBmZW5jZXM6IG5vb3AsCiAgaHI6IC9eKCAqWy0qX10pezMsfSAqKD86XG4rfCQpLywKICBoZWFkaW5nOiAvXiAqKCN7MSw2fSkgKihbXlxuXSs/KSAqIyogKig/OlxuK3wkKS8sCiAgbnB0YWJsZTogbm9vcCwKICBsaGVhZGluZzogL14oW15cbl0rKVxuICooPXwtKXsyLH0gKig/OlxuK3wkKS8sCiAgYmxvY2txdW90ZTogL14oICo+W15cbl0rKFxuKD8hZGVmKVteXG5dKykqXG4qKSsvLAogIGxpc3Q6IC9eKCAqKShidWxsKSBbXHNcU10rPyg/OmhyfGRlZnxcbnsyLH0oPyEgKSg/IVwxYnVsbCApXG4qfFxzKiQpLywKICBodG1sOiAvXiAqKD86Y29tbWVudCAqKD86XG58XHMqJCl8Y2xvc2VkICooPzpcbnsyLH18XHMqJCl8Y2xvc2luZyAqKD86XG57Mix9fFxzKiQpKS8sCiAgZGVmOiAvXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArWyIoXShbXlxuXSspWyIpXSk/ICooPzpcbit8JCkvLAogIHRhYmxlOiBub29wLAogIHBhcmFncmFwaDogL14oKD86W15cbl0rXG4/KD8haHJ8aGVhZGluZ3xsaGVhZGluZ3xibG9ja3F1b3RlfHRhZ3xkZWYpKSspXG4qLywKICB0ZXh0OiAvXlteXG5dKy8KfTsKCmJsb2NrLmJ1bGxldCA9IC8oPzpbKistXXxcZCtcLikvOwpibG9jay5pdGVtID0gL14oICopKGJ1bGwpIFteXG5dKig/OlxuKD8hXDFidWxsIClbXlxuXSopKi87CmJsb2NrLml0ZW0gPSByZXBsYWNlKGJsb2NrLml0ZW0sICdnbScpCiAgKC9idWxsL2csIGJsb2NrLmJ1bGxldCkKICAoKTsKCmJsb2NrLmxpc3QgPSByZXBsYWNlKGJsb2NrLmxpc3QpCiAgKC9idWxsL2csIGJsb2NrLmJ1bGxldCkKICAoJ2hyJywgJ1xcbisoPz1cXDE/KD86Wy0qX10gKil7Myx9KD86XFxuK3wkKSknKQogICgnZGVmJywgJ1xcbisoPz0nICsgYmxvY2suZGVmLnNvdXJjZSArICcpJykKICAoKTsKCmJsb2NrLmJsb2NrcXVvdGUgPSByZXBsYWNlKGJsb2NrLmJsb2NrcXVvdGUpCiAgKCdkZWYnLCBibG9jay5kZWYpCiAgKCk7CgpibG9jay5fdGFnID0gJyg/ISg/OicKICArICdhfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZScKICArICd8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG8nCiAgKyAnfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOi98W15cXHdcXHNAXSpAKVxcYic7CgpibG9jay5odG1sID0gcmVwbGFjZShibG9jay5odG1sKQogICgnY29tbWVudCcsIC88IS0tW1xzXFNdKj8tLT4vKQogICgnY2xvc2VkJywgLzwodGFnKVtcc1xTXSs/PFwvXDE+LykKICAoJ2Nsb3NpbmcnLCAvPHRhZyg/OiJbXiJdKiJ8J1teJ10qJ3xbXiciPl0pKj8+LykKICAoL3RhZy9nLCBibG9jay5fdGFnKQogICgpOwoKYmxvY2sucGFyYWdyYXBoID0gcmVwbGFjZShibG9jay5wYXJhZ3JhcGgpCiAgKCdocicsIGJsb2NrLmhyKQogICgnaGVhZGluZycsIGJsb2NrLmhlYWRpbmcpCiAgKCdsaGVhZGluZycsIGJsb2NrLmxoZWFkaW5nKQogICgnYmxvY2txdW90ZScsIGJsb2NrLmJsb2NrcXVvdGUpCiAgKCd0YWcnLCAnPCcgKyBibG9jay5fdGFnKQogICgnZGVmJywgYmxvY2suZGVmKQogICgpOwoKLyoqCiAqIE5vcm1hbCBCbG9jayBHcmFtbWFyCiAqLwoKYmxvY2subm9ybWFsID0gbWVyZ2Uoe30sIGJsb2NrKTsKCi8qKgogKiBHRk0gQmxvY2sgR3JhbW1hcgogKi8KCmJsb2NrLmdmbSA9IG1lcmdlKHt9LCBibG9jay5ub3JtYWwsIHsKICBmZW5jZXM6IC9eICooYHszLH18fnszLH0pWyBcLl0qKFxTKyk/ICpcbihbXHNcU10qPylccypcMSAqKD86XG4rfCQpLywKICBwYXJhZ3JhcGg6IC9eLywKICBoZWFkaW5nOiAvXiAqKCN7MSw2fSkgKyhbXlxuXSs/KSAqIyogKig/OlxuK3wkKS8KfSk7CgpibG9jay5nZm0ucGFyYWdyYXBoID0gcmVwbGFjZShibG9jay5wYXJhZ3JhcGgpCiAgKCcoPyEnLCAnKD8hJwogICAgKyBibG9jay5nZm0uZmVuY2VzLnNvdXJjZS5yZXBsYWNlKCdcXDEnLCAnXFwyJykgKyAnfCcKICAgICsgYmxvY2subGlzdC5zb3VyY2UucmVwbGFjZSgnXFwxJywgJ1xcMycpICsgJ3wnKQogICgpOwoKLyoqCiAqIEdGTSArIFRhYmxlcyBCbG9jayBHcmFtbWFyCiAqLwoKYmxvY2sudGFibGVzID0gbWVyZ2Uoe30sIGJsb2NrLmdmbSwgewogIG5wdGFibGU6IC9eICooXFMuKlx8LiopXG4gKihbLTpdKyAqXHxbLXwgOl0qKVxuKCg/Oi4qXHwuKig/OlxufCQpKSopXG4qLywKICB0YWJsZTogL14gKlx8KC4rKVxuICpcfCggKlstOl0rWy18IDpdKilcbigoPzogKlx8LiooPzpcbnwkKSkqKVxuKi8KfSk7CgovKioKICogQmxvY2sgTGV4ZXIKICovCgpmdW5jdGlvbiBMZXhlcihvcHRpb25zKSB7CiAgdGhpcy50b2tlbnMgPSBbXTsKICB0aGlzLnRva2Vucy5saW5rcyA9IHt9OwogIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgbWFya2VkLmRlZmF1bHRzOwogIHRoaXMucnVsZXMgPSBibG9jay5ub3JtYWw7CgogIGlmICh0aGlzLm9wdGlvbnMuZ2ZtKSB7CiAgICBpZiAodGhpcy5vcHRpb25zLnRhYmxlcykgewogICAgICB0aGlzLnJ1bGVzID0gYmxvY2sudGFibGVzOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5ydWxlcyA9IGJsb2NrLmdmbTsKICAgIH0KICB9Cn0KCi8qKgogKiBFeHBvc2UgQmxvY2sgUnVsZXMKICovCgpMZXhlci5ydWxlcyA9IGJsb2NrOwoKLyoqCiAqIFN0YXRpYyBMZXggTWV0aG9kCiAqLwoKTGV4ZXIubGV4ID0gZnVuY3Rpb24oc3JjLCBvcHRpb25zKSB7CiAgdmFyIGxleGVyID0gbmV3IExleGVyKG9wdGlvbnMpOwogIHJldHVybiBsZXhlci5sZXgoc3JjKTsKfTsKCi8qKgogKiBQcmVwcm9jZXNzaW5nCiAqLwoKTGV4ZXIucHJvdG90eXBlLmxleCA9IGZ1bmN0aW9uKHNyYykgewogIHNyYyA9IHNyYwogICAgLnJlcGxhY2UoL1xyXG58XHIvZywgJ1xuJykKICAgIC5yZXBsYWNlKC9cdC9nLCAnICAgICcpCiAgICAucmVwbGFjZSgvXHUwMGEwL2csICcgJykKICAgIC5yZXBsYWNlKC9cdTI0MjQvZywgJ1xuJyk7CgogIHJldHVybiB0aGlzLnRva2VuKHNyYywgdHJ1ZSk7Cn07CgovKioKICogTGV4aW5nCiAqLwoKTGV4ZXIucHJvdG90eXBlLnRva2VuID0gZnVuY3Rpb24oc3JjLCB0b3AsIGJxKSB7CiAgdmFyIHNyYyA9IHNyYy5yZXBsYWNlKC9eICskL2dtLCAnJykKICAgICwgbmV4dAogICAgLCBsb29zZQogICAgLCBjYXAKICAgICwgYnVsbAogICAgLCBiCiAgICAsIGl0ZW0KICAgICwgc3BhY2UKICAgICwgaQogICAgLCBsOwoKICB3aGlsZSAoc3JjKSB7CiAgICAvLyBuZXdsaW5lCiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5uZXdsaW5lLmV4ZWMoc3JjKSkgewogICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpOwogICAgICBpZiAoY2FwWzBdLmxlbmd0aCA+IDEpIHsKICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHsKICAgICAgICAgIHR5cGU6ICdzcGFjZScKICAgICAgICB9KTsKICAgICAgfQogICAgfQoKICAgIC8vIGNvZGUKICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmNvZGUuZXhlYyhzcmMpKSB7CiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7CiAgICAgIGNhcCA9IGNhcFswXS5yZXBsYWNlKC9eIHs0fS9nbSwgJycpOwogICAgICB0aGlzLnRva2Vucy5wdXNoKHsKICAgICAgICB0eXBlOiAnY29kZScsCiAgICAgICAgdGV4dDogIXRoaXMub3B0aW9ucy5wZWRhbnRpYwogICAgICAgICAgPyBjYXAucmVwbGFjZSgvXG4rJC8sICcnKQogICAgICAgICAgOiBjYXAKICAgICAgfSk7CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIC8vIGZlbmNlcyAoZ2ZtKQogICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuZmVuY2VzLmV4ZWMoc3JjKSkgewogICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpOwogICAgICB0aGlzLnRva2Vucy5wdXNoKHsKICAgICAgICB0eXBlOiAnY29kZScsCiAgICAgICAgbGFuZzogY2FwWzJdLAogICAgICAgIHRleHQ6IGNhcFszXSB8fCAnJwogICAgICB9KTsKICAgICAgY29udGludWU7CiAgICB9CgogICAgLy8gaGVhZGluZwogICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuaGVhZGluZy5leGVjKHNyYykpIHsKICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTsKICAgICAgdGhpcy50b2tlbnMucHVzaCh7CiAgICAgICAgdHlwZTogJ2hlYWRpbmcnLAogICAgICAgIGRlcHRoOiBjYXBbMV0ubGVuZ3RoLAogICAgICAgIHRleHQ6IGNhcFsyXQogICAgICB9KTsKICAgICAgY29udGludWU7CiAgICB9CgogICAgLy8gdGFibGUgbm8gbGVhZGluZyBwaXBlIChnZm0pCiAgICBpZiAodG9wICYmIChjYXAgPSB0aGlzLnJ1bGVzLm5wdGFibGUuZXhlYyhzcmMpKSkgewogICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpOwoKICAgICAgaXRlbSA9IHsKICAgICAgICB0eXBlOiAndGFibGUnLAogICAgICAgIGhlYWRlcjogY2FwWzFdLnJlcGxhY2UoL14gKnwgKlx8ICokL2csICcnKS5zcGxpdCgvICpcfCAqLyksCiAgICAgICAgYWxpZ246IGNhcFsyXS5yZXBsYWNlKC9eICp8XHwgKiQvZywgJycpLnNwbGl0KC8gKlx8ICovKSwKICAgICAgICBjZWxsczogY2FwWzNdLnJlcGxhY2UoL1xuJC8sICcnKS5zcGxpdCgnXG4nKQogICAgICB9OwoKICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW0uYWxpZ24ubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoL14gKi0rOiAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkgewogICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdyaWdodCc7CiAgICAgICAgfSBlbHNlIGlmICgvXiAqOi0rOiAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkgewogICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdjZW50ZXInOwogICAgICAgIH0gZWxzZSBpZiAoL14gKjotKyAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkgewogICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdsZWZ0JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaXRlbS5hbGlnbltpXSA9IG51bGw7CiAgICAgICAgfQogICAgICB9CgogICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbS5jZWxscy5sZW5ndGg7IGkrKykgewogICAgICAgIGl0ZW0uY2VsbHNbaV0gPSBpdGVtLmNlbGxzW2ldLnNwbGl0KC8gKlx8ICovKTsKICAgICAgfQoKICAgICAgdGhpcy50b2tlbnMucHVzaChpdGVtKTsKCiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIC8vIGxoZWFkaW5nCiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5saGVhZGluZy5leGVjKHNyYykpIHsKICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTsKICAgICAgdGhpcy50b2tlbnMucHVzaCh7CiAgICAgICAgdHlwZTogJ2hlYWRpbmcnLAogICAgICAgIGRlcHRoOiBjYXBbMl0gPT09ICc9JyA/IDEgOiAyLAogICAgICAgIHRleHQ6IGNhcFsxXQogICAgICB9KTsKICAgICAgY29udGludWU7CiAgICB9CgogICAgLy8gaHIKICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmhyLmV4ZWMoc3JjKSkgewogICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpOwogICAgICB0aGlzLnRva2Vucy5wdXNoKHsKICAgICAgICB0eXBlOiAnaHInCiAgICAgIH0pOwogICAgICBjb250aW51ZTsKICAgIH0KCiAgICAvLyBibG9ja3F1b3RlCiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5ibG9ja3F1b3RlLmV4ZWMoc3JjKSkgewogICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpOwoKICAgICAgdGhpcy50b2tlbnMucHVzaCh7CiAgICAgICAgdHlwZTogJ2Jsb2NrcXVvdGVfc3RhcnQnCiAgICAgIH0pOwoKICAgICAgY2FwID0gY2FwWzBdLnJlcGxhY2UoL14gKj4gPy9nbSwgJycpOwoKICAgICAgLy8gUGFzcyBgdG9wYCB0byBrZWVwIHRoZSBjdXJyZW50CiAgICAgIC8vICJ0b3BsZXZlbCIgc3RhdGUuIFRoaXMgaXMgZXhhY3RseQogICAgICAvLyBob3cgbWFya2Rvd24ucGwgd29ya3MuCiAgICAgIHRoaXMudG9rZW4oY2FwLCB0b3AsIHRydWUpOwoKICAgICAgdGhpcy50b2tlbnMucHVzaCh7CiAgICAgICAgdHlwZTogJ2Jsb2NrcXVvdGVfZW5kJwogICAgICB9KTsKCiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIC8vIGxpc3QKICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmxpc3QuZXhlYyhzcmMpKSB7CiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7CiAgICAgIGJ1bGwgPSBjYXBbMl07CgogICAgICB0aGlzLnRva2Vucy5wdXNoKHsKICAgICAgICB0eXBlOiAnbGlzdF9zdGFydCcsCiAgICAgICAgb3JkZXJlZDogYnVsbC5sZW5ndGggPiAxCiAgICAgIH0pOwoKICAgICAgLy8gR2V0IGVhY2ggdG9wLWxldmVsIGl0ZW0uCiAgICAgIGNhcCA9IGNhcFswXS5tYXRjaCh0aGlzLnJ1bGVzLml0ZW0pOwoKICAgICAgbmV4dCA9IGZhbHNlOwogICAgICBsID0gY2FwLmxlbmd0aDsKICAgICAgaSA9IDA7CgogICAgICBmb3IgKDsgaSA8IGw7IGkrKykgewogICAgICAgIGl0ZW0gPSBjYXBbaV07CgogICAgICAgIC8vIFJlbW92ZSB0aGUgbGlzdCBpdGVtJ3MgYnVsbGV0CiAgICAgICAgLy8gc28gaXQgaXMgc2VlbiBhcyB0aGUgbmV4dCB0b2tlbi4KICAgICAgICBzcGFjZSA9IGl0ZW0ubGVuZ3RoOwogICAgICAgIGl0ZW0gPSBpdGVtLnJlcGxhY2UoL14gKihbKistXXxcZCtcLikgKy8sICcnKTsKCiAgICAgICAgLy8gT3V0ZGVudCB3aGF0ZXZlciB0aGUKICAgICAgICAvLyBsaXN0IGl0ZW0gY29udGFpbnMuIEhhY2t5LgogICAgICAgIGlmICh+aXRlbS5pbmRleE9mKCdcbiAnKSkgewogICAgICAgICAgc3BhY2UgLT0gaXRlbS5sZW5ndGg7CiAgICAgICAgICBpdGVtID0gIXRoaXMub3B0aW9ucy5wZWRhbnRpYwogICAgICAgICAgICA/IGl0ZW0ucmVwbGFjZShuZXcgUmVnRXhwKCdeIHsxLCcgKyBzcGFjZSArICd9JywgJ2dtJyksICcnKQogICAgICAgICAgICA6IGl0ZW0ucmVwbGFjZSgvXiB7MSw0fS9nbSwgJycpOwogICAgICAgIH0KCiAgICAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG5leHQgbGlzdCBpdGVtIGJlbG9uZ3MgaGVyZS4KICAgICAgICAvLyBCYWNrcGVkYWwgaWYgaXQgZG9lcyBub3QgYmVsb25nIGluIHRoaXMgbGlzdC4KICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNtYXJ0TGlzdHMgJiYgaSAhPT0gbCAtIDEpIHsKICAgICAgICAgIGIgPSBibG9jay5idWxsZXQuZXhlYyhjYXBbaSArIDFdKVswXTsKICAgICAgICAgIGlmIChidWxsICE9PSBiICYmICEoYnVsbC5sZW5ndGggPiAxICYmIGIubGVuZ3RoID4gMSkpIHsKICAgICAgICAgICAgc3JjID0gY2FwLnNsaWNlKGkgKyAxKS5qb2luKCdcbicpICsgc3JjOwogICAgICAgICAgICBpID0gbCAtIDE7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBpdGVtIGlzIGxvb3NlIG9yIG5vdC4KICAgICAgICAvLyBVc2U6IC8oXnxcbikoPyEgKVteXG5dK1xuXG4oPyFccyokKS8KICAgICAgICAvLyBmb3IgZGlzY291bnQgYmVoYXZpb3IuCiAgICAgICAgbG9vc2UgPSBuZXh0IHx8IC9cblxuKD8hXHMqJCkvLnRlc3QoaXRlbSk7CiAgICAgICAgaWYgKGkgIT09IGwgLSAxKSB7CiAgICAgICAgICBuZXh0ID0gaXRlbS5jaGFyQXQoaXRlbS5sZW5ndGggLSAxKSA9PT0gJ1xuJzsKICAgICAgICAgIGlmICghbG9vc2UpIGxvb3NlID0gbmV4dDsKICAgICAgICB9CgogICAgICAgIHRoaXMudG9rZW5zLnB1c2goewogICAgICAgICAgdHlwZTogbG9vc2UKICAgICAgICAgICAgPyAnbG9vc2VfaXRlbV9zdGFydCcKICAgICAgICAgICAgOiAnbGlzdF9pdGVtX3N0YXJ0JwogICAgICAgIH0pOwoKICAgICAgICAvLyBSZWN1cnNlLgogICAgICAgIHRoaXMudG9rZW4oaXRlbSwgZmFsc2UsIGJxKTsKCiAgICAgICAgdGhpcy50b2tlbnMucHVzaCh7CiAgICAgICAgICB0eXBlOiAnbGlzdF9pdGVtX2VuZCcKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgdGhpcy50b2tlbnMucHVzaCh7CiAgICAgICAgdHlwZTogJ2xpc3RfZW5kJwogICAgICB9KTsKCiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIC8vIGh0bWwKICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmh0bWwuZXhlYyhzcmMpKSB7CiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7CiAgICAgIHRoaXMudG9rZW5zLnB1c2goewogICAgICAgIHR5cGU6IHRoaXMub3B0aW9ucy5zYW5pdGl6ZQogICAgICAgICAgPyAncGFyYWdyYXBoJwogICAgICAgICAgOiAnaHRtbCcsCiAgICAgICAgcHJlOiAhdGhpcy5vcHRpb25zLnNhbml0aXplcgogICAgICAgICAgJiYgKGNhcFsxXSA9PT0gJ3ByZScgfHwgY2FwWzFdID09PSAnc2NyaXB0JyB8fCBjYXBbMV0gPT09ICdzdHlsZScpLAogICAgICAgIHRleHQ6IGNhcFswXQogICAgICB9KTsKICAgICAgY29udGludWU7CiAgICB9CgogICAgLy8gZGVmCiAgICBpZiAoKCFicSAmJiB0b3ApICYmIChjYXAgPSB0aGlzLnJ1bGVzLmRlZi5leGVjKHNyYykpKSB7CiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7CiAgICAgIHRoaXMudG9rZW5zLmxpbmtzW2NhcFsxXS50b0xvd2VyQ2FzZSgpXSA9IHsKICAgICAgICBocmVmOiBjYXBbMl0sCiAgICAgICAgdGl0bGU6IGNhcFszXQogICAgICB9OwogICAgICBjb250aW51ZTsKICAgIH0KCiAgICAvLyB0YWJsZSAoZ2ZtKQogICAgaWYgKHRvcCAmJiAoY2FwID0gdGhpcy5ydWxlcy50YWJsZS5leGVjKHNyYykpKSB7CiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7CgogICAgICBpdGVtID0gewogICAgICAgIHR5cGU6ICd0YWJsZScsCiAgICAgICAgaGVhZGVyOiBjYXBbMV0ucmVwbGFjZSgvXiAqfCAqXHwgKiQvZywgJycpLnNwbGl0KC8gKlx8ICovKSwKICAgICAgICBhbGlnbjogY2FwWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCAnJykuc3BsaXQoLyAqXHwgKi8pLAogICAgICAgIGNlbGxzOiBjYXBbM10ucmVwbGFjZSgvKD86ICpcfCAqKT9cbiQvLCAnJykuc3BsaXQoJ1xuJykKICAgICAgfTsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtLmFsaWduLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKC9eICotKzogKiQvLnRlc3QoaXRlbS5hbGlnbltpXSkpIHsKICAgICAgICAgIGl0ZW0uYWxpZ25baV0gPSAncmlnaHQnOwogICAgICAgIH0gZWxzZSBpZiAoL14gKjotKzogKiQvLnRlc3QoaXRlbS5hbGlnbltpXSkpIHsKICAgICAgICAgIGl0ZW0uYWxpZ25baV0gPSAnY2VudGVyJzsKICAgICAgICB9IGVsc2UgaWYgKC9eICo6LSsgKiQvLnRlc3QoaXRlbS5hbGlnbltpXSkpIHsKICAgICAgICAgIGl0ZW0uYWxpZ25baV0gPSAnbGVmdCc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGl0ZW0uYWxpZ25baV0gPSBudWxsOwogICAgICAgIH0KICAgICAgfQoKICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW0uY2VsbHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpdGVtLmNlbGxzW2ldID0gaXRlbS5jZWxsc1tpXQogICAgICAgICAgLnJlcGxhY2UoL14gKlx8ICp8ICpcfCAqJC9nLCAnJykKICAgICAgICAgIC5zcGxpdCgvICpcfCAqLyk7CiAgICAgIH0KCiAgICAgIHRoaXMudG9rZW5zLnB1c2goaXRlbSk7CgogICAgICBjb250aW51ZTsKICAgIH0KCiAgICAvLyB0b3AtbGV2ZWwgcGFyYWdyYXBoCiAgICBpZiAodG9wICYmIChjYXAgPSB0aGlzLnJ1bGVzLnBhcmFncmFwaC5leGVjKHNyYykpKSB7CiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7CiAgICAgIHRoaXMudG9rZW5zLnB1c2goewogICAgICAgIHR5cGU6ICdwYXJhZ3JhcGgnLAogICAgICAgIHRleHQ6IGNhcFsxXS5jaGFyQXQoY2FwWzFdLmxlbmd0aCAtIDEpID09PSAnXG4nCiAgICAgICAgICA/IGNhcFsxXS5zbGljZSgwLCAtMSkKICAgICAgICAgIDogY2FwWzFdCiAgICAgIH0pOwogICAgICBjb250aW51ZTsKICAgIH0KCiAgICAvLyB0ZXh0CiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy50ZXh0LmV4ZWMoc3JjKSkgewogICAgICAvLyBUb3AtbGV2ZWwgc2hvdWxkIG5ldmVyIHJlYWNoIGhlcmUuCiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7CiAgICAgIHRoaXMudG9rZW5zLnB1c2goewogICAgICAgIHR5cGU6ICd0ZXh0JywKICAgICAgICB0ZXh0OiBjYXBbMF0KICAgICAgfSk7CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIGlmIChzcmMpIHsKICAgICAgdGhyb3cgbmV3CiAgICAgICAgRXJyb3IoJ0luZmluaXRlIGxvb3Agb24gYnl0ZTogJyArIHNyYy5jaGFyQ29kZUF0KDApKTsKICAgIH0KICB9CgogIHJldHVybiB0aGlzLnRva2VuczsKfTsKCi8qKgogKiBJbmxpbmUtTGV2ZWwgR3JhbW1hcgogKi8KCnZhciBpbmxpbmUgPSB7CiAgZXNjYXBlOiAvXlxcKFtcXGAqe31cW1xdKCkjK1wtLiFfPl0pLywKICBhdXRvbGluazogL148KFteID5dKyhAfDpcLylbXiA+XSspPi8sCiAgdXJsOiBub29wLAogIHRhZzogL148IS0tW1xzXFNdKj8tLT58XjxcLz9cdysoPzoiW14iXSoifCdbXiddKid8W14nIj5dKSo/Pi8sCiAgbGluazogL14hP1xbKGluc2lkZSlcXVwoaHJlZlwpLywKICByZWZsaW5rOiAvXiE/XFsoaW5zaWRlKVxdXHMqXFsoW15cXV0qKVxdLywKICBub2xpbms6IC9eIT9cWygoPzpcW1teXF1dKlxdfFteXFtcXV0pKilcXS8sCiAgc3Ryb25nOiAvXl9fKFtcc1xTXSs/KV9fKD8hXyl8XlwqXCooW1xzXFNdKz8pXCpcKig/IVwqKS8sCiAgZW06IC9eXGJfKCg/OlteX118X18pKz8pX1xifF5cKigoPzpcKlwqfFtcc1xTXSkrPylcKig/IVwqKS8sCiAgY29kZTogL14oYCspXHMqKFtcc1xTXSo/W15gXSlccypcMSg/IWApLywKICBicjogL14gezIsfVxuKD8hXHMqJCkvLAogIGRlbDogbm9vcCwKICB0ZXh0OiAvXltcc1xTXSs/KD89W1xcPCFcW18qYF18IHsyLH1cbnwkKS8KfTsKCmlubGluZS5faW5zaWRlID0gLyg/OlxbW15cXV0qXF18W15cW1xdXXxcXSg/PVteXFtdKlxdKSkqLzsKaW5saW5lLl9ocmVmID0gL1xzKjw/KFtcc1xTXSo/KT4/KD86XHMrWyciXShbXHNcU10qPylbJyJdKT9ccyovOwoKaW5saW5lLmxpbmsgPSByZXBsYWNlKGlubGluZS5saW5rKQogICgnaW5zaWRlJywgaW5saW5lLl9pbnNpZGUpCiAgKCdocmVmJywgaW5saW5lLl9ocmVmKQogICgpOwoKaW5saW5lLnJlZmxpbmsgPSByZXBsYWNlKGlubGluZS5yZWZsaW5rKQogICgnaW5zaWRlJywgaW5saW5lLl9pbnNpZGUpCiAgKCk7CgovKioKICogTm9ybWFsIElubGluZSBHcmFtbWFyCiAqLwoKaW5saW5lLm5vcm1hbCA9IG1lcmdlKHt9LCBpbmxpbmUpOwoKLyoqCiAqIFBlZGFudGljIElubGluZSBHcmFtbWFyCiAqLwoKaW5saW5lLnBlZGFudGljID0gbWVyZ2Uoe30sIGlubGluZS5ub3JtYWwsIHsKICBzdHJvbmc6IC9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8pfF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8sCiAgZW06IC9eXyg/PVxTKShbXHNcU10qP1xTKV8oPyFfKXxeXCooPz1cUykoW1xzXFNdKj9cUylcKig/IVwqKS8KfSk7CgovKioKICogR0ZNIElubGluZSBHcmFtbWFyCiAqLwoKaW5saW5lLmdmbSA9IG1lcmdlKHt9LCBpbmxpbmUubm9ybWFsLCB7CiAgZXNjYXBlOiByZXBsYWNlKGlubGluZS5lc2NhcGUpKCddKScsICd+fF0pJykoKSwKICB1cmw6IC9eKGh0dHBzPzpcL1wvW15cczxdK1tePC4sOjsiJylcXVxzXSkvLAogIGRlbDogL15+fig/PVxTKShbXHNcU10qP1xTKX5+LywKICB0ZXh0OiByZXBsYWNlKGlubGluZS50ZXh0KQogICAgKCddfCcsICd+XXwnKQogICAgKCd8JywgJ3xodHRwcz86Ly98JykKICAgICgpCn0pOwoKLyoqCiAqIEdGTSArIExpbmUgQnJlYWtzIElubGluZSBHcmFtbWFyCiAqLwoKaW5saW5lLmJyZWFrcyA9IG1lcmdlKHt9LCBpbmxpbmUuZ2ZtLCB7CiAgYnI6IHJlcGxhY2UoaW5saW5lLmJyKSgnezIsfScsICcqJykoKSwKICB0ZXh0OiByZXBsYWNlKGlubGluZS5nZm0udGV4dCkoJ3syLH0nLCAnKicpKCkKfSk7CgovKioKICogSW5saW5lIExleGVyICYgQ29tcGlsZXIKICovCgpmdW5jdGlvbiBJbmxpbmVMZXhlcihsaW5rcywgb3B0aW9ucykgewogIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgbWFya2VkLmRlZmF1bHRzOwogIHRoaXMubGlua3MgPSBsaW5rczsKICB0aGlzLnJ1bGVzID0gaW5saW5lLm5vcm1hbDsKICB0aGlzLnJlbmRlcmVyID0gdGhpcy5vcHRpb25zLnJlbmRlcmVyIHx8IG5ldyBSZW5kZXJlcjsKICB0aGlzLnJlbmRlcmVyLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7CgogIGlmICghdGhpcy5saW5rcykgewogICAgdGhyb3cgbmV3CiAgICAgIEVycm9yKCdUb2tlbnMgYXJyYXkgcmVxdWlyZXMgYSBgbGlua3NgIHByb3BlcnR5LicpOwogIH0KCiAgaWYgKHRoaXMub3B0aW9ucy5nZm0pIHsKICAgIGlmICh0aGlzLm9wdGlvbnMuYnJlYWtzKSB7CiAgICAgIHRoaXMucnVsZXMgPSBpbmxpbmUuYnJlYWtzOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5ydWxlcyA9IGlubGluZS5nZm07CiAgICB9CiAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMucGVkYW50aWMpIHsKICAgIHRoaXMucnVsZXMgPSBpbmxpbmUucGVkYW50aWM7CiAgfQp9CgovKioKICogRXhwb3NlIElubGluZSBSdWxlcwogKi8KCklubGluZUxleGVyLnJ1bGVzID0gaW5saW5lOwoKLyoqCiAqIFN0YXRpYyBMZXhpbmcvQ29tcGlsaW5nIE1ldGhvZAogKi8KCklubGluZUxleGVyLm91dHB1dCA9IGZ1bmN0aW9uKHNyYywgbGlua3MsIG9wdGlvbnMpIHsKICB2YXIgaW5saW5lID0gbmV3IElubGluZUxleGVyKGxpbmtzLCBvcHRpb25zKTsKICByZXR1cm4gaW5saW5lLm91dHB1dChzcmMpOwp9OwoKLyoqCiAqIExleGluZy9Db21waWxpbmcKICovCgpJbmxpbmVMZXhlci5wcm90b3R5cGUub3V0cHV0ID0gZnVuY3Rpb24oc3JjKSB7CiAgdmFyIG91dCA9ICcnCiAgICAsIGxpbmsKICAgICwgdGV4dAogICAgLCBocmVmCiAgICAsIGNhcDsKCiAgd2hpbGUgKHNyYykgewogICAgLy8gZXNjYXBlCiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5lc2NhcGUuZXhlYyhzcmMpKSB7CiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7CiAgICAgIG91dCArPSBjYXBbMV07CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIC8vIGF1dG9saW5rCiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5hdXRvbGluay5leGVjKHNyYykpIHsKICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTsKICAgICAgaWYgKGNhcFsyXSA9PT0gJ0AnKSB7CiAgICAgICAgdGV4dCA9IGNhcFsxXS5jaGFyQXQoNikgPT09ICc6JwogICAgICAgICAgPyB0aGlzLm1hbmdsZShjYXBbMV0uc3Vic3RyaW5nKDcpKQogICAgICAgICAgOiB0aGlzLm1hbmdsZShjYXBbMV0pOwogICAgICAgIGhyZWYgPSB0aGlzLm1hbmdsZSgnbWFpbHRvOicpICsgdGV4dDsKICAgICAgfSBlbHNlIHsKICAgICAgICB0ZXh0ID0gZXNjYXBlKGNhcFsxXSk7CiAgICAgICAgaHJlZiA9IHRleHQ7CiAgICAgIH0KICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIubGluayhocmVmLCBudWxsLCB0ZXh0KTsKICAgICAgY29udGludWU7CiAgICB9CgogICAgLy8gdXJsIChnZm0pCiAgICBpZiAoIXRoaXMuaW5MaW5rICYmIChjYXAgPSB0aGlzLnJ1bGVzLnVybC5leGVjKHNyYykpKSB7CiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7CiAgICAgIHRleHQgPSBlc2NhcGUoY2FwWzFdKTsKICAgICAgaHJlZiA9IHRleHQ7CiAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmxpbmsoaHJlZiwgbnVsbCwgdGV4dCk7CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIC8vIHRhZwogICAgaWYgKGNhcCA9IHRoaXMucnVsZXMudGFnLmV4ZWMoc3JjKSkgewogICAgICBpZiAoIXRoaXMuaW5MaW5rICYmIC9ePGEgL2kudGVzdChjYXBbMF0pKSB7CiAgICAgICAgdGhpcy5pbkxpbmsgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKHRoaXMuaW5MaW5rICYmIC9ePFwvYT4vaS50ZXN0KGNhcFswXSkpIHsKICAgICAgICB0aGlzLmluTGluayA9IGZhbHNlOwogICAgICB9CiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7CiAgICAgIG91dCArPSB0aGlzLm9wdGlvbnMuc2FuaXRpemUKICAgICAgICA/IHRoaXMub3B0aW9ucy5zYW5pdGl6ZXIKICAgICAgICAgID8gdGhpcy5vcHRpb25zLnNhbml0aXplcihjYXBbMF0pCiAgICAgICAgICA6IGVzY2FwZShjYXBbMF0pCiAgICAgICAgOiBjYXBbMF0KICAgICAgY29udGludWU7CiAgICB9CgogICAgLy8gbGluawogICAgaWYgKGNhcCA9IHRoaXMucnVsZXMubGluay5leGVjKHNyYykpIHsKICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTsKICAgICAgdGhpcy5pbkxpbmsgPSB0cnVlOwogICAgICBvdXQgKz0gdGhpcy5vdXRwdXRMaW5rKGNhcCwgewogICAgICAgIGhyZWY6IGNhcFsyXSwKICAgICAgICB0aXRsZTogY2FwWzNdCiAgICAgIH0pOwogICAgICB0aGlzLmluTGluayA9IGZhbHNlOwogICAgICBjb250aW51ZTsKICAgIH0KCiAgICAvLyByZWZsaW5rLCBub2xpbmsKICAgIGlmICgoY2FwID0gdGhpcy5ydWxlcy5yZWZsaW5rLmV4ZWMoc3JjKSkKICAgICAgICB8fCAoY2FwID0gdGhpcy5ydWxlcy5ub2xpbmsuZXhlYyhzcmMpKSkgewogICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpOwogICAgICBsaW5rID0gKGNhcFsyXSB8fCBjYXBbMV0pLnJlcGxhY2UoL1xzKy9nLCAnICcpOwogICAgICBsaW5rID0gdGhpcy5saW5rc1tsaW5rLnRvTG93ZXJDYXNlKCldOwogICAgICBpZiAoIWxpbmsgfHwgIWxpbmsuaHJlZikgewogICAgICAgIG91dCArPSBjYXBbMF0uY2hhckF0KDApOwogICAgICAgIHNyYyA9IGNhcFswXS5zdWJzdHJpbmcoMSkgKyBzcmM7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgdGhpcy5pbkxpbmsgPSB0cnVlOwogICAgICBvdXQgKz0gdGhpcy5vdXRwdXRMaW5rKGNhcCwgbGluayk7CiAgICAgIHRoaXMuaW5MaW5rID0gZmFsc2U7CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIC8vIHN0cm9uZwogICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuc3Ryb25nLmV4ZWMoc3JjKSkgewogICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpOwogICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5zdHJvbmcodGhpcy5vdXRwdXQoY2FwWzJdIHx8IGNhcFsxXSkpOwogICAgICBjb250aW51ZTsKICAgIH0KCiAgICAvLyBlbQogICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuZW0uZXhlYyhzcmMpKSB7CiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7CiAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmVtKHRoaXMub3V0cHV0KGNhcFsyXSB8fCBjYXBbMV0pKTsKICAgICAgY29udGludWU7CiAgICB9CgogICAgLy8gY29kZQogICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuY29kZS5leGVjKHNyYykpIHsKICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTsKICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuY29kZXNwYW4oZXNjYXBlKGNhcFsyXSwgdHJ1ZSkpOwogICAgICBjb250aW51ZTsKICAgIH0KCiAgICAvLyBicgogICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuYnIuZXhlYyhzcmMpKSB7CiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7CiAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmJyKCk7CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIC8vIGRlbCAoZ2ZtKQogICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuZGVsLmV4ZWMoc3JjKSkgewogICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpOwogICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5kZWwodGhpcy5vdXRwdXQoY2FwWzFdKSk7CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIC8vIHRleHQKICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLnRleHQuZXhlYyhzcmMpKSB7CiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7CiAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLnRleHQoZXNjYXBlKHRoaXMuc21hcnR5cGFudHMoY2FwWzBdKSkpOwogICAgICBjb250aW51ZTsKICAgIH0KCiAgICBpZiAoc3JjKSB7CiAgICAgIHRocm93IG5ldwogICAgICAgIEVycm9yKCdJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICcgKyBzcmMuY2hhckNvZGVBdCgwKSk7CiAgICB9CiAgfQoKICByZXR1cm4gb3V0Owp9OwoKLyoqCiAqIENvbXBpbGUgTGluawogKi8KCklubGluZUxleGVyLnByb3RvdHlwZS5vdXRwdXRMaW5rID0gZnVuY3Rpb24oY2FwLCBsaW5rKSB7CiAgdmFyIGhyZWYgPSBlc2NhcGUobGluay5ocmVmKQogICAgLCB0aXRsZSA9IGxpbmsudGl0bGUgPyBlc2NhcGUobGluay50aXRsZSkgOiBudWxsOwoKICByZXR1cm4gY2FwWzBdLmNoYXJBdCgwKSAhPT0gJyEnCiAgICA/IHRoaXMucmVuZGVyZXIubGluayhocmVmLCB0aXRsZSwgdGhpcy5vdXRwdXQoY2FwWzFdKSkKICAgIDogdGhpcy5yZW5kZXJlci5pbWFnZShocmVmLCB0aXRsZSwgZXNjYXBlKGNhcFsxXSkpOwp9OwoKLyoqCiAqIFNtYXJ0eXBhbnRzIFRyYW5zZm9ybWF0aW9ucwogKi8KCklubGluZUxleGVyLnByb3RvdHlwZS5zbWFydHlwYW50cyA9IGZ1bmN0aW9uKHRleHQpIHsKICBpZiAoIXRoaXMub3B0aW9ucy5zbWFydHlwYW50cykgcmV0dXJuIHRleHQ7CiAgcmV0dXJuIHRleHQKICAgIC8vIGVtLWRhc2hlcwogICAgLnJlcGxhY2UoLy0tLS9nLCAnXHUyMDE0JykKICAgIC8vIGVuLWRhc2hlcwogICAgLnJlcGxhY2UoLy0tL2csICdcdTIwMTMnKQogICAgLy8gb3BlbmluZyBzaW5nbGVzCiAgICAucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCAnJDFcdTIwMTgnKQogICAgLy8gY2xvc2luZyBzaW5nbGVzICYgYXBvc3Ryb3BoZXMKICAgIC5yZXBsYWNlKC8nL2csICdcdTIwMTknKQogICAgLy8gb3BlbmluZyBkb3VibGVzCiAgICAucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csICckMVx1MjAxYycpCiAgICAvLyBjbG9zaW5nIGRvdWJsZXMKICAgIC5yZXBsYWNlKC8iL2csICdcdTIwMWQnKQogICAgLy8gZWxsaXBzZXMKICAgIC5yZXBsYWNlKC9cLnszfS9nLCAnXHUyMDI2Jyk7Cn07CgovKioKICogTWFuZ2xlIExpbmtzCiAqLwoKSW5saW5lTGV4ZXIucHJvdG90eXBlLm1hbmdsZSA9IGZ1bmN0aW9uKHRleHQpIHsKICBpZiAoIXRoaXMub3B0aW9ucy5tYW5nbGUpIHJldHVybiB0ZXh0OwogIHZhciBvdXQgPSAnJwogICAgLCBsID0gdGV4dC5sZW5ndGgKICAgICwgaSA9IDAKICAgICwgY2g7CgogIGZvciAoOyBpIDwgbDsgaSsrKSB7CiAgICBjaCA9IHRleHQuY2hhckNvZGVBdChpKTsKICAgIGlmIChNYXRoLnJhbmRvbSgpID4gMC41KSB7CiAgICAgIGNoID0gJ3gnICsgY2gudG9TdHJpbmcoMTYpOwogICAgfQogICAgb3V0ICs9ICcmIycgKyBjaCArICc7JzsKICB9CgogIHJldHVybiBvdXQ7Cn07CgovKioKICogUmVuZGVyZXIKICovCgpmdW5jdGlvbiBSZW5kZXJlcihvcHRpb25zKSB7CiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKfQoKUmVuZGVyZXIucHJvdG90eXBlLmNvZGUgPSBmdW5jdGlvbihjb2RlLCBsYW5nLCBlc2NhcGVkKSB7CiAgaWYgKHRoaXMub3B0aW9ucy5oaWdobGlnaHQpIHsKICAgIHZhciBvdXQgPSB0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KGNvZGUsIGxhbmcpOwogICAgaWYgKG91dCAhPSBudWxsICYmIG91dCAhPT0gY29kZSkgewogICAgICBlc2NhcGVkID0gdHJ1ZTsKICAgICAgY29kZSA9IG91dDsKICAgIH0KICB9CgogIGlmICghbGFuZykgewogICAgcmV0dXJuICc8cHJlPjxjb2RlPicKICAgICAgKyAoZXNjYXBlZCA/IGNvZGUgOiBlc2NhcGUoY29kZSwgdHJ1ZSkpCiAgICAgICsgJ1xuPC9jb2RlPjwvcHJlPic7CiAgfQoKICByZXR1cm4gJzxwcmU+PGNvZGUgY2xhc3M9IicKICAgICsgdGhpcy5vcHRpb25zLmxhbmdQcmVmaXgKICAgICsgZXNjYXBlKGxhbmcsIHRydWUpCiAgICArICciPicKICAgICsgKGVzY2FwZWQgPyBjb2RlIDogZXNjYXBlKGNvZGUsIHRydWUpKQogICAgKyAnXG48L2NvZGU+PC9wcmU+XG4nOwp9OwoKUmVuZGVyZXIucHJvdG90eXBlLmJsb2NrcXVvdGUgPSBmdW5jdGlvbihxdW90ZSkgewogIHJldHVybiAnPGJsb2NrcXVvdGU+XG4nICsgcXVvdGUgKyAnPC9ibG9ja3F1b3RlPlxuJzsKfTsKClJlbmRlcmVyLnByb3RvdHlwZS5odG1sID0gZnVuY3Rpb24oaHRtbCkgewogIHJldHVybiBodG1sOwp9OwoKUmVuZGVyZXIucHJvdG90eXBlLmhlYWRpbmcgPSBmdW5jdGlvbih0ZXh0LCBsZXZlbCwgcmF3KSB7CiAgcmV0dXJuICc8aCcKICAgICsgbGV2ZWwKICAgICsgJyBpZD0iJwogICAgKyB0aGlzLm9wdGlvbnMuaGVhZGVyUHJlZml4CiAgICArIHJhdy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teXHddKy9nLCAnLScpCiAgICArICciPicKICAgICsgdGV4dAogICAgKyAnPC9oJwogICAgKyBsZXZlbAogICAgKyAnPlxuJzsKfTsKClJlbmRlcmVyLnByb3RvdHlwZS5ociA9IGZ1bmN0aW9uKCkgewogIHJldHVybiB0aGlzLm9wdGlvbnMueGh0bWwgPyAnPGhyLz5cbicgOiAnPGhyPlxuJzsKfTsKClJlbmRlcmVyLnByb3RvdHlwZS5saXN0ID0gZnVuY3Rpb24oYm9keSwgb3JkZXJlZCkgewogIHZhciB0eXBlID0gb3JkZXJlZCA/ICdvbCcgOiAndWwnOwogIHJldHVybiAnPCcgKyB0eXBlICsgJz5cbicgKyBib2R5ICsgJzwvJyArIHR5cGUgKyAnPlxuJzsKfTsKClJlbmRlcmVyLnByb3RvdHlwZS5saXN0aXRlbSA9IGZ1bmN0aW9uKHRleHQpIHsKICByZXR1cm4gJzxsaT4nICsgdGV4dCArICc8L2xpPlxuJzsKfTsKClJlbmRlcmVyLnByb3RvdHlwZS5wYXJhZ3JhcGggPSBmdW5jdGlvbih0ZXh0KSB7CiAgcmV0dXJuICc8cD4nICsgdGV4dCArICc8L3A+XG4nOwp9OwoKUmVuZGVyZXIucHJvdG90eXBlLnRhYmxlID0gZnVuY3Rpb24oaGVhZGVyLCBib2R5KSB7CiAgcmV0dXJuICc8dGFibGU+XG4nCiAgICArICc8dGhlYWQ+XG4nCiAgICArIGhlYWRlcgogICAgKyAnPC90aGVhZD5cbicKICAgICsgJzx0Ym9keT5cbicKICAgICsgYm9keQogICAgKyAnPC90Ym9keT5cbicKICAgICsgJzwvdGFibGU+XG4nOwp9OwoKUmVuZGVyZXIucHJvdG90eXBlLnRhYmxlcm93ID0gZnVuY3Rpb24oY29udGVudCkgewogIHJldHVybiAnPHRyPlxuJyArIGNvbnRlbnQgKyAnPC90cj5cbic7Cn07CgpSZW5kZXJlci5wcm90b3R5cGUudGFibGVjZWxsID0gZnVuY3Rpb24oY29udGVudCwgZmxhZ3MpIHsKICB2YXIgdHlwZSA9IGZsYWdzLmhlYWRlciA/ICd0aCcgOiAndGQnOwogIHZhciB0YWcgPSBmbGFncy5hbGlnbgogICAgPyAnPCcgKyB0eXBlICsgJyBzdHlsZT0idGV4dC1hbGlnbjonICsgZmxhZ3MuYWxpZ24gKyAnIj4nCiAgICA6ICc8JyArIHR5cGUgKyAnPic7CiAgcmV0dXJuIHRhZyArIGNvbnRlbnQgKyAnPC8nICsgdHlwZSArICc+XG4nOwp9OwoKLy8gc3BhbiBsZXZlbCByZW5kZXJlcgpSZW5kZXJlci5wcm90b3R5cGUuc3Ryb25nID0gZnVuY3Rpb24odGV4dCkgewogIHJldHVybiAnPHN0cm9uZz4nICsgdGV4dCArICc8L3N0cm9uZz4nOwp9OwoKUmVuZGVyZXIucHJvdG90eXBlLmVtID0gZnVuY3Rpb24odGV4dCkgewogIHJldHVybiAnPGVtPicgKyB0ZXh0ICsgJzwvZW0+JzsKfTsKClJlbmRlcmVyLnByb3RvdHlwZS5jb2Rlc3BhbiA9IGZ1bmN0aW9uKHRleHQpIHsKICByZXR1cm4gJzxjb2RlPicgKyB0ZXh0ICsgJzwvY29kZT4nOwp9OwoKUmVuZGVyZXIucHJvdG90eXBlLmJyID0gZnVuY3Rpb24oKSB7CiAgcmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbCA/ICc8YnIvPicgOiAnPGJyPic7Cn07CgpSZW5kZXJlci5wcm90b3R5cGUuZGVsID0gZnVuY3Rpb24odGV4dCkgewogIHJldHVybiAnPGRlbD4nICsgdGV4dCArICc8L2RlbD4nOwp9OwoKUmVuZGVyZXIucHJvdG90eXBlLmxpbmsgPSBmdW5jdGlvbihocmVmLCB0aXRsZSwgdGV4dCkgewogIGlmICh0aGlzLm9wdGlvbnMuc2FuaXRpemUpIHsKICAgIHRyeSB7CiAgICAgIHZhciBwcm90ID0gZGVjb2RlVVJJQ29tcG9uZW50KHVuZXNjYXBlKGhyZWYpKQogICAgICAgIC5yZXBsYWNlKC9bXlx3Ol0vZywgJycpCiAgICAgICAgLnRvTG93ZXJDYXNlKCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJldHVybiAnJzsKICAgIH0KICAgIGlmIChwcm90LmluZGV4T2YoJ2phdmFzY3JpcHQ6JykgPT09IDAgfHwgcHJvdC5pbmRleE9mKCd2YnNjcmlwdDonKSA9PT0gMCkgewogICAgICByZXR1cm4gJyc7CiAgICB9CiAgfQogIHZhciBvdXQgPSAnPGEgaHJlZj0iJyArIGhyZWYgKyAnIic7CiAgaWYgKHRpdGxlKSB7CiAgICBvdXQgKz0gJyB0aXRsZT0iJyArIHRpdGxlICsgJyInOwogIH0KICBvdXQgKz0gJz4nICsgdGV4dCArICc8L2E+JzsKICByZXR1cm4gb3V0Owp9OwoKUmVuZGVyZXIucHJvdG90eXBlLmltYWdlID0gZnVuY3Rpb24oaHJlZiwgdGl0bGUsIHRleHQpIHsKICB2YXIgb3V0ID0gJzxpbWcgc3JjPSInICsgaHJlZiArICciIGFsdD0iJyArIHRleHQgKyAnIic7CiAgaWYgKHRpdGxlKSB7CiAgICBvdXQgKz0gJyB0aXRsZT0iJyArIHRpdGxlICsgJyInOwogIH0KICBvdXQgKz0gdGhpcy5vcHRpb25zLnhodG1sID8gJy8+JyA6ICc+JzsKICByZXR1cm4gb3V0Owp9OwoKUmVuZGVyZXIucHJvdG90eXBlLnRleHQgPSBmdW5jdGlvbih0ZXh0KSB7CiAgcmV0dXJuIHRleHQ7Cn07CgovKioKICogUGFyc2luZyAmIENvbXBpbGluZwogKi8KCmZ1bmN0aW9uIE1hcmtkb3duKG9wdGlvbnMpIHsKICB0aGlzLnRva2VucyA9IFtdOwogIHRoaXMudG9rZW4gPSBudWxsOwogIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgbWFya2VkLmRlZmF1bHRzOwogIHRoaXMub3B0aW9ucy5yZW5kZXJlciA9IHRoaXMub3B0aW9ucy5yZW5kZXJlciB8fCBuZXcgUmVuZGVyZXI7CiAgdGhpcy5yZW5kZXJlciA9IHRoaXMub3B0aW9ucy5yZW5kZXJlcjsKICB0aGlzLnJlbmRlcmVyLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7Cn0KCi8qKgogKiBTdGF0aWMgUGFyc2UgTWV0aG9kCiAqLwoKTWFya2Rvd24ucGFyc2UgPSBmdW5jdGlvbihzcmMsIG9wdGlvbnMsIHJlbmRlcmVyKSB7CiAgdmFyIG1hcmtkb3duID0gbmV3IE1hcmtkb3duKG9wdGlvbnMsIHJlbmRlcmVyKTsKICByZXR1cm4gbWFya2Rvd24ucGFyc2Uoc3JjKTsKfTsKCi8qKgogKiBQYXJzZSBMb29wCiAqLwoKTWFya2Rvd24ucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24oc3JjKSB7CiAgdGhpcy5pbmxpbmUgPSBuZXcgSW5saW5lTGV4ZXIoc3JjLmxpbmtzLCB0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyZXIpOwogIHRoaXMudG9rZW5zID0gc3JjLnJldmVyc2UoKTsKCiAgdmFyIG91dCA9ICcnOwogIHdoaWxlICh0aGlzLm5leHQoKSkgewogICAgb3V0ICs9IHRoaXMudG9rKCk7CiAgfQoKICByZXR1cm4gb3V0Owp9OwoKLyoqCiAqIE5leHQgVG9rZW4KICovCgpNYXJrZG93bi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKCkgewogIHJldHVybiB0aGlzLnRva2VuID0gdGhpcy50b2tlbnMucG9wKCk7Cn07CgovKioKICogUHJldmlldyBOZXh0IFRva2VuCiAqLwoKTWFya2Rvd24ucHJvdG90eXBlLnBlZWsgPSBmdW5jdGlvbigpIHsKICByZXR1cm4gdGhpcy50b2tlbnNbdGhpcy50b2tlbnMubGVuZ3RoIC0gMV0gfHwgMDsKfTsKCi8qKgogKiBQYXJzZSBUZXh0IFRva2VucwogKi8KCk1hcmtkb3duLnByb3RvdHlwZS5wYXJzZVRleHQgPSBmdW5jdGlvbigpIHsKICB2YXIgYm9keSA9IHRoaXMudG9rZW4udGV4dDsKCiAgd2hpbGUgKHRoaXMucGVlaygpLnR5cGUgPT09ICd0ZXh0JykgewogICAgYm9keSArPSAnXG4nICsgdGhpcy5uZXh0KCkudGV4dDsKICB9CgogIHJldHVybiB0aGlzLmlubGluZS5vdXRwdXQoYm9keSk7Cn07CgovKioKICogUGFyc2UgQ3VycmVudCBUb2tlbgogKi8KCk1hcmtkb3duLnByb3RvdHlwZS50b2sgPSBmdW5jdGlvbigpIHsKICBzd2l0Y2ggKHRoaXMudG9rZW4udHlwZSkgewogICAgY2FzZSAnc3BhY2UnOiB7CiAgICAgIHJldHVybiAnJzsKICAgIH0KICAgIGNhc2UgJ2hyJzogewogICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5ocigpOwogICAgfQogICAgY2FzZSAnaGVhZGluZyc6IHsKICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuaGVhZGluZygKICAgICAgICB0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSwKICAgICAgICB0aGlzLnRva2VuLmRlcHRoLAogICAgICAgIHRoaXMudG9rZW4udGV4dCk7CiAgICB9CiAgICBjYXNlICdjb2RlJzogewogICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5jb2RlKHRoaXMudG9rZW4udGV4dCwKICAgICAgICB0aGlzLnRva2VuLmxhbmcsCiAgICAgICAgdGhpcy50b2tlbi5lc2NhcGVkKTsKICAgIH0KICAgIGNhc2UgJ3RhYmxlJzogewogICAgICB2YXIgaGVhZGVyID0gJycKICAgICAgICAsIGJvZHkgPSAnJwogICAgICAgICwgaQogICAgICAgICwgcm93CiAgICAgICAgLCBjZWxsCiAgICAgICAgLCBmbGFncwogICAgICAgICwgajsKCiAgICAgIC8vIGhlYWRlcgogICAgICBjZWxsID0gJyc7CiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRva2VuLmhlYWRlci5sZW5ndGg7IGkrKykgewogICAgICAgIGZsYWdzID0geyBoZWFkZXI6IHRydWUsIGFsaWduOiB0aGlzLnRva2VuLmFsaWduW2ldIH07CiAgICAgICAgY2VsbCArPSB0aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCgKICAgICAgICAgIHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLmhlYWRlcltpXSksCiAgICAgICAgICB7IGhlYWRlcjogdHJ1ZSwgYWxpZ246IHRoaXMudG9rZW4uYWxpZ25baV0gfQogICAgICAgICk7CiAgICAgIH0KICAgICAgaGVhZGVyICs9IHRoaXMucmVuZGVyZXIudGFibGVyb3coY2VsbCk7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy50b2tlbi5jZWxscy5sZW5ndGg7IGkrKykgewogICAgICAgIHJvdyA9IHRoaXMudG9rZW4uY2VsbHNbaV07CgogICAgICAgIGNlbGwgPSAnJzsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7CiAgICAgICAgICBjZWxsICs9IHRoaXMucmVuZGVyZXIudGFibGVjZWxsKAogICAgICAgICAgICB0aGlzLmlubGluZS5vdXRwdXQocm93W2pdKSwKICAgICAgICAgICAgeyBoZWFkZXI6IGZhbHNlLCBhbGlnbjogdGhpcy50b2tlbi5hbGlnbltqXSB9CiAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgYm9keSArPSB0aGlzLnJlbmRlcmVyLnRhYmxlcm93KGNlbGwpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLnRhYmxlKGhlYWRlciwgYm9keSk7CiAgICB9CiAgICBjYXNlICdibG9ja3F1b3RlX3N0YXJ0JzogewogICAgICB2YXIgYm9keSA9ICcnOwoKICAgICAgd2hpbGUgKHRoaXMubmV4dCgpLnR5cGUgIT09ICdibG9ja3F1b3RlX2VuZCcpIHsKICAgICAgICBib2R5ICs9IHRoaXMudG9rKCk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUoYm9keSk7CiAgICB9CiAgICBjYXNlICdsaXN0X3N0YXJ0JzogewogICAgICB2YXIgYm9keSA9ICcnCiAgICAgICAgLCBvcmRlcmVkID0gdGhpcy50b2tlbi5vcmRlcmVkOwoKICAgICAgd2hpbGUgKHRoaXMubmV4dCgpLnR5cGUgIT09ICdsaXN0X2VuZCcpIHsKICAgICAgICBib2R5ICs9IHRoaXMudG9rKCk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmxpc3QoYm9keSwgb3JkZXJlZCk7CiAgICB9CiAgICBjYXNlICdsaXN0X2l0ZW1fc3RhcnQnOiB7CiAgICAgIHZhciBib2R5ID0gJyc7CgogICAgICB3aGlsZSAodGhpcy5uZXh0KCkudHlwZSAhPT0gJ2xpc3RfaXRlbV9lbmQnKSB7CiAgICAgICAgYm9keSArPSB0aGlzLnRva2VuLnR5cGUgPT09ICd0ZXh0JwogICAgICAgICAgPyB0aGlzLnBhcnNlVGV4dCgpCiAgICAgICAgICA6IHRoaXMudG9rKCk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmxpc3RpdGVtKGJvZHkpOwogICAgfQogICAgY2FzZSAnbG9vc2VfaXRlbV9zdGFydCc6IHsKICAgICAgdmFyIGJvZHkgPSAnJzsKCiAgICAgIHdoaWxlICh0aGlzLm5leHQoKS50eXBlICE9PSAnbGlzdF9pdGVtX2VuZCcpIHsKICAgICAgICBib2R5ICs9IHRoaXMudG9rKCk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmxpc3RpdGVtKGJvZHkpOwogICAgfQogICAgY2FzZSAnaHRtbCc6IHsKICAgICAgdmFyIGh0bWwgPSAhdGhpcy50b2tlbi5wcmUgJiYgIXRoaXMub3B0aW9ucy5wZWRhbnRpYwogICAgICAgID8gdGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4udGV4dCkKICAgICAgICA6IHRoaXMudG9rZW4udGV4dDsKICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuaHRtbChodG1sKTsKICAgIH0KICAgIGNhc2UgJ3BhcmFncmFwaCc6IHsKICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpKTsKICAgIH0KICAgIGNhc2UgJ3RleHQnOiB7CiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLnBhcnNlVGV4dCgpKTsKICAgIH0KICB9Cn07CgovKioKICogSGVscGVycwogKi8KCmZ1bmN0aW9uIGVzY2FwZShodG1sLCBlbmNvZGUpIHsKICByZXR1cm4gaHRtbAogICAgLnJlcGxhY2UoIWVuY29kZSA/IC8mKD8hIz9cdys7KS9nIDogLyYvZywgJyZhbXA7JykKICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JykKICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JykKICAgIC5yZXBsYWNlKC8iL2csICcmcXVvdDsnKQogICAgLnJlcGxhY2UoLycvZywgJyYjMzk7Jyk7Cn0KCmZ1bmN0aW9uIHVuZXNjYXBlKGh0bWwpIHsKICByZXR1cm4gaHRtbC5yZXBsYWNlKC8mKFsjXHddKyk7L2csIGZ1bmN0aW9uKF8sIG4pIHsKICAgIG4gPSBuLnRvTG93ZXJDYXNlKCk7CiAgICBpZiAobiA9PT0gJ2NvbG9uJykgcmV0dXJuICc6JzsKICAgIGlmIChuLmNoYXJBdCgwKSA9PT0gJyMnKSB7CiAgICAgIHJldHVybiBuLmNoYXJBdCgxKSA9PT0gJ3gnCiAgICAgICAgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KG4uc3Vic3RyaW5nKDIpLCAxNikpCiAgICAgICAgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKCtuLnN1YnN0cmluZygxKSk7CiAgICB9CiAgICByZXR1cm4gJyc7CiAgfSk7Cn0KCmZ1bmN0aW9uIHJlcGxhY2UocmVnZXgsIG9wdCkgewogIHJlZ2V4ID0gcmVnZXguc291cmNlOwogIG9wdCA9IG9wdCB8fCAnJzsKICByZXR1cm4gZnVuY3Rpb24gc2VsZihuYW1lLCB2YWwpIHsKICAgIGlmICghbmFtZSkgcmV0dXJuIG5ldyBSZWdFeHAocmVnZXgsIG9wdCk7CiAgICB2YWwgPSB2YWwuc291cmNlIHx8IHZhbDsKICAgIHZhbCA9IHZhbC5yZXBsYWNlKC8oXnxbXlxbXSlcXi9nLCAnJDEnKTsKICAgIHJlZ2V4ID0gcmVnZXgucmVwbGFjZShuYW1lLCB2YWwpOwogICAgcmV0dXJuIHNlbGY7CiAgfTsKfQoKZnVuY3Rpb24gbm9vcCgpIHt9Cm5vb3AuZXhlYyA9IG5vb3A7CgpmdW5jdGlvbiBtZXJnZShvYmopIHsKICB2YXIgaSA9IDEKICAgICwgdGFyZ2V0CiAgICAsIGtleTsKCiAgZm9yICg7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgIHRhcmdldCA9IGFyZ3VtZW50c1tpXTsKICAgIGZvciAoa2V5IGluIHRhcmdldCkgewogICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwga2V5KSkgewogICAgICAgIG9ialtrZXldID0gdGFyZ2V0W2tleV07CiAgICAgIH0KICAgIH0KICB9CgogIHJldHVybiBvYmo7Cn0KCgovKioKICogTWFya2VkCiAqLwoKZnVuY3Rpb24gbWFya2VkKHNyYywgb3B0LCBjYWxsYmFjaykgewogIGlmIChjYWxsYmFjayB8fCB0eXBlb2Ygb3B0ID09PSAnZnVuY3Rpb24nKSB7CiAgICBpZiAoIWNhbGxiYWNrKSB7CiAgICAgIGNhbGxiYWNrID0gb3B0OwogICAgICBvcHQgPSBudWxsOwogICAgfQoKICAgIG9wdCA9IG1lcmdlKHt9LCBtYXJrZWQuZGVmYXVsdHMsIG9wdCB8fCB7fSk7CgogICAgdmFyIGhpZ2hsaWdodCA9IG9wdC5oaWdobGlnaHQKICAgICAgLCB0b2tlbnMKICAgICAgLCBwZW5kaW5nCiAgICAgICwgaSA9IDA7CgogICAgdHJ5IHsKICAgICAgdG9rZW5zID0gTGV4ZXIubGV4KHNyYywgb3B0KQogICAgfSBjYXRjaCAoZSkgewogICAgICByZXR1cm4gY2FsbGJhY2soZSk7CiAgICB9CgogICAgcGVuZGluZyA9IHRva2Vucy5sZW5ndGg7CgogICAgdmFyIGRvbmUgPSBmdW5jdGlvbihlcnIpIHsKICAgICAgaWYgKGVycikgewogICAgICAgIG9wdC5oaWdobGlnaHQgPSBoaWdobGlnaHQ7CiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7CiAgICAgIH0KCiAgICAgIHZhciBvdXQ7CgogICAgICB0cnkgewogICAgICAgIG91dCA9IE1hcmtkb3duLnBhcnNlKHRva2Vucywgb3B0KTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGVyciA9IGU7CiAgICAgIH0KCiAgICAgIG9wdC5oaWdobGlnaHQgPSBoaWdobGlnaHQ7CgogICAgICByZXR1cm4gZXJyCiAgICAgICAgPyBjYWxsYmFjayhlcnIpCiAgICAgICAgOiBjYWxsYmFjayhudWxsLCBvdXQpOwogICAgfTsKCiAgICBpZiAoIWhpZ2hsaWdodCB8fCBoaWdobGlnaHQubGVuZ3RoIDwgMykgewogICAgICByZXR1cm4gZG9uZSgpOwogICAgfQoKICAgIGRlbGV0ZSBvcHQuaGlnaGxpZ2h0OwoKICAgIGlmICghcGVuZGluZykgcmV0dXJuIGRvbmUoKTsKCiAgICBmb3IgKDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAoZnVuY3Rpb24odG9rZW4pIHsKICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gJ2NvZGUnKSB7CiAgICAgICAgICByZXR1cm4gLS1wZW5kaW5nIHx8IGRvbmUoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGhpZ2hsaWdodCh0b2tlbi50ZXh0LCB0b2tlbi5sYW5nLCBmdW5jdGlvbihlcnIsIGNvZGUpIHsKICAgICAgICAgIGlmIChlcnIpIHJldHVybiBkb25lKGVycik7CiAgICAgICAgICBpZiAoY29kZSA9PSBudWxsIHx8IGNvZGUgPT09IHRva2VuLnRleHQpIHsKICAgICAgICAgICAgcmV0dXJuIC0tcGVuZGluZyB8fCBkb25lKCk7CiAgICAgICAgICB9CiAgICAgICAgICB0b2tlbi50ZXh0ID0gY29kZTsKICAgICAgICAgIHRva2VuLmVzY2FwZWQgPSB0cnVlOwogICAgICAgICAgLS1wZW5kaW5nIHx8IGRvbmUoKTsKICAgICAgICB9KTsKICAgICAgfSkodG9rZW5zW2ldKTsKICAgIH0KCiAgICByZXR1cm47CiAgfQogIHRyeSB7CiAgICBpZiAob3B0KSBvcHQgPSBtZXJnZSh7fSwgbWFya2VkLmRlZmF1bHRzLCBvcHQpOwogICAgcmV0dXJuIE1hcmtkb3duLnBhcnNlKExleGVyLmxleChzcmMsIG9wdCksIG9wdCk7CiAgfSBjYXRjaCAoZSkgewogICAgZS5tZXNzYWdlICs9ICdcblBsZWFzZSByZXBvcnQgdGhpcyB0byBodHRwczovL2dpdGh1Yi5jb20vY2hqai9tYXJrZWQuJzsKICAgIGlmICgob3B0IHx8IG1hcmtlZC5kZWZhdWx0cykuc2lsZW50KSB7CiAgICAgIHJldHVybiAnPHA+QW4gZXJyb3Igb2NjdXJlZDo8L3A+PHByZT4nCiAgICAgICAgKyBlc2NhcGUoZS5tZXNzYWdlICsgJycsIHRydWUpCiAgICAgICAgKyAnPC9wcmU+JzsKICAgIH0KICAgIHRocm93IGU7CiAgfQp9CgovKioKICogT3B0aW9ucwogKi8KCm1hcmtlZC5vcHRpb25zID0KbWFya2VkLnNldE9wdGlvbnMgPSBmdW5jdGlvbihvcHQpIHsKICBtZXJnZShtYXJrZWQuZGVmYXVsdHMsIG9wdCk7CiAgcmV0dXJuIG1hcmtlZDsKfTsKCm1hcmtlZC5kZWZhdWx0cyA9IHsKICBnZm06IHRydWUsCiAgdGFibGVzOiB0cnVlLAogIGJyZWFrczogZmFsc2UsCiAgcGVkYW50aWM6IGZhbHNlLAogIHNhbml0aXplOiBmYWxzZSwKICBzYW5pdGl6ZXI6IG51bGwsCiAgbWFuZ2xlOiB0cnVlLAogIHNtYXJ0TGlzdHM6IGZhbHNlLAogIHNpbGVudDogZmFsc2UsCiAgaGlnaGxpZ2h0OiBudWxsLAogIGxhbmdQcmVmaXg6ICdsYW5nLScsCiAgc21hcnR5cGFudHM6IGZhbHNlLAogIGhlYWRlclByZWZpeDogJycsCiAgcmVuZGVyZXI6IG5ldyBSZW5kZXJlciwKICB4aHRtbDogZmFsc2UKfTsKCi8qKgogKiBFeHBvc2UKICovCgptYXJrZWQuTWFya2Rvd24gPSBNYXJrZG93bjsKbWFya2VkLm1hcmtkb3duID0gTWFya2Rvd24ucGFyc2U7CgptYXJrZWQuUmVuZGVyZXIgPSBSZW5kZXJlcjsKCm1hcmtlZC5MZXhlciA9IExleGVyOwptYXJrZWQubGV4ZXIgPSBMZXhlci5sZXg7CgptYXJrZWQuSW5saW5lTGV4ZXIgPSBJbmxpbmVMZXhlcjsKbWFya2VkLmlubGluZUxleGVyID0gSW5saW5lTGV4ZXIub3V0cHV0OwoKbWFya2VkLnBhcnNlID0gbWFya2VkOwoKaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JykgewogIG1vZHVsZS5leHBvcnRzID0gbWFya2VkOwp9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgewogIGRlZmluZShmdW5jdGlvbigpIHsgcmV0dXJuIG1hcmtlZDsgfSk7Cn0gZWxzZSB7CiAgdGhpcy5tYXJrZWQgPSBtYXJrZWQ7Cn0KCn0pLmNhbGwoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIHRoaXMgfHwgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKTsKfSgpKTsK]]></data>
	</file>
	<file>
	  <filename>/lib/js/overlay.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnMKLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHA6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFCgovLyBVdGlsaXR5IGZ1bmN0aW9uIHRoYXQgYWxsb3dzIG1vZGVzIHRvIGJlIGNvbWJpbmVkLiBUaGUgbW9kZSBnaXZlbgovLyBhcyB0aGUgYmFzZSBhcmd1bWVudCB0YWtlcyBjYXJlIG9mIG1vc3Qgb2YgdGhlIG5vcm1hbCBtb2RlCi8vIGZ1bmN0aW9uYWxpdHksIGJ1dCBhIHNlY29uZCAodHlwaWNhbGx5IHNpbXBsZSkgbW9kZSBpcyB1c2VkLCB3aGljaAovLyBjYW4gb3ZlcnJpZGUgdGhlIHN0eWxlIG9mIHRleHQuIEJvdGggbW9kZXMgZ2V0IHRvIHBhcnNlIGFsbCBvZiB0aGUKLy8gdGV4dCwgYnV0IHdoZW4gYm90aCBhc3NpZ24gYSBub24tbnVsbCBzdHlsZSB0byBhIHBpZWNlIG9mIGNvZGUsIHRoZQovLyBvdmVybGF5IHdpbnMsIHVubGVzcyB0aGUgY29tYmluZSBhcmd1bWVudCB3YXMgdHJ1ZSBhbmQgbm90IG92ZXJyaWRkZW4sCi8vIG9yIHN0YXRlLm92ZXJsYXkuY29tYmluZVRva2VucyB3YXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSB0aGUgc3R5bGVzIGFyZQovLyBjb21iaW5lZC4KCihmdW5jdGlvbihtb2QpIHsKICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgdHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IikgLy8gQ29tbW9uSlMKICAgIG1vZChyZXF1aXJlKCIuLi8uLi9saWIvY29kZW1pcnJvciIpKTsKICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgLy8gQU1ECiAgICBkZWZpbmUoWyIuLi8uLi9saWIvY29kZW1pcnJvciJdLCBtb2QpOwogIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnYKICAgIG1vZChDb2RlTWlycm9yKTsKfSkoZnVuY3Rpb24oQ29kZU1pcnJvcikgewoidXNlIHN0cmljdCI7CgpDb2RlTWlycm9yLm92ZXJsYXlNb2RlID0gZnVuY3Rpb24oYmFzZSwgb3ZlcmxheSwgY29tYmluZSkgewogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBiYXNlOiBDb2RlTWlycm9yLnN0YXJ0U3RhdGUoYmFzZSksCiAgICAgICAgb3ZlcmxheTogQ29kZU1pcnJvci5zdGFydFN0YXRlKG92ZXJsYXkpLAogICAgICAgIGJhc2VQb3M6IDAsIGJhc2VDdXI6IG51bGwsCiAgICAgICAgb3ZlcmxheVBvczogMCwgb3ZlcmxheUN1cjogbnVsbCwKICAgICAgICBzdHJlYW1TZWVuOiBudWxsCiAgICAgIH07CiAgICB9LAogICAgY29weVN0YXRlOiBmdW5jdGlvbihzdGF0ZSkgewogICAgICByZXR1cm4gewogICAgICAgIGJhc2U6IENvZGVNaXJyb3IuY29weVN0YXRlKGJhc2UsIHN0YXRlLmJhc2UpLAogICAgICAgIG92ZXJsYXk6IENvZGVNaXJyb3IuY29weVN0YXRlKG92ZXJsYXksIHN0YXRlLm92ZXJsYXkpLAogICAgICAgIGJhc2VQb3M6IHN0YXRlLmJhc2VQb3MsIGJhc2VDdXI6IG51bGwsCiAgICAgICAgb3ZlcmxheVBvczogc3RhdGUub3ZlcmxheVBvcywgb3ZlcmxheUN1cjogbnVsbAogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtICE9IHN0YXRlLnN0cmVhbVNlZW4gfHwKICAgICAgICAgIE1hdGgubWluKHN0YXRlLmJhc2VQb3MsIHN0YXRlLm92ZXJsYXlQb3MpIDwgc3RyZWFtLnN0YXJ0KSB7CiAgICAgICAgc3RhdGUuc3RyZWFtU2VlbiA9IHN0cmVhbTsKICAgICAgICBzdGF0ZS5iYXNlUG9zID0gc3RhdGUub3ZlcmxheVBvcyA9IHN0cmVhbS5zdGFydDsKICAgICAgfQoKICAgICAgaWYgKHN0cmVhbS5zdGFydCA9PSBzdGF0ZS5iYXNlUG9zKSB7CiAgICAgICAgc3RhdGUuYmFzZUN1ciA9IGJhc2UudG9rZW4oc3RyZWFtLCBzdGF0ZS5iYXNlKTsKICAgICAgICBzdGF0ZS5iYXNlUG9zID0gc3RyZWFtLnBvczsKICAgICAgfQogICAgICBpZiAoc3RyZWFtLnN0YXJ0ID09IHN0YXRlLm92ZXJsYXlQb3MpIHsKICAgICAgICBzdHJlYW0ucG9zID0gc3RyZWFtLnN0YXJ0OwogICAgICAgIHN0YXRlLm92ZXJsYXlDdXIgPSBvdmVybGF5LnRva2VuKHN0cmVhbSwgc3RhdGUub3ZlcmxheSk7CiAgICAgICAgc3RhdGUub3ZlcmxheVBvcyA9IHN0cmVhbS5wb3M7CiAgICAgIH0KICAgICAgc3RyZWFtLnBvcyA9IE1hdGgubWluKHN0YXRlLmJhc2VQb3MsIHN0YXRlLm92ZXJsYXlQb3MpOwoKICAgICAgLy8gc3RhdGUub3ZlcmxheS5jb21iaW5lVG9rZW5zIGFsd2F5cyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgY29tYmluZSwKICAgICAgLy8gdW5sZXNzIHNldCB0byBudWxsCiAgICAgIGlmIChzdGF0ZS5vdmVybGF5Q3VyID09IG51bGwpIHJldHVybiBzdGF0ZS5iYXNlQ3VyOwogICAgICBlbHNlIGlmIChzdGF0ZS5iYXNlQ3VyICE9IG51bGwgJiYKICAgICAgICAgICAgICAgc3RhdGUub3ZlcmxheS5jb21iaW5lVG9rZW5zIHx8CiAgICAgICAgICAgICAgIGNvbWJpbmUgJiYgc3RhdGUub3ZlcmxheS5jb21iaW5lVG9rZW5zID09IG51bGwpCiAgICAgICAgcmV0dXJuIHN0YXRlLmJhc2VDdXIgKyAiICIgKyBzdGF0ZS5vdmVybGF5Q3VyOwogICAgICBlbHNlIHJldHVybiBzdGF0ZS5vdmVybGF5Q3VyOwogICAgfSwKCiAgICBpbmRlbnQ6IGJhc2UuaW5kZW50ICYmIGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgcmV0dXJuIGJhc2UuaW5kZW50KHN0YXRlLmJhc2UsIHRleHRBZnRlcik7CiAgICB9LAogICAgZWxlY3RyaWNDaGFyczogYmFzZS5lbGVjdHJpY0NoYXJzLAoKICAgIGlubmVyTW9kZTogZnVuY3Rpb24oc3RhdGUpIHsgcmV0dXJuIHtzdGF0ZTogc3RhdGUuYmFzZSwgbW9kZTogYmFzZX07IH0sCgogICAgYmxhbmtMaW5lOiBmdW5jdGlvbihzdGF0ZSkgewogICAgICBpZiAoYmFzZS5ibGFua0xpbmUpIGJhc2UuYmxhbmtMaW5lKHN0YXRlLmJhc2UpOwogICAgICBpZiAob3ZlcmxheS5ibGFua0xpbmUpIG92ZXJsYXkuYmxhbmtMaW5lKHN0YXRlLm92ZXJsYXkpOwogICAgfQogIH07Cn07Cgp9KTsK]]></data>
	</file>
	<file>
	  <filename>/lib/js/uikit.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIFVJa2l0IDIuMjQuMiB8IGh0dHA6Ly93d3cuZ2V0dWlraXQuY29tIHwgKGMpIDIwMTQgWU9PdGhlbWUgfCBNSVQgTGljZW5zZSAqLwohZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJ1aWtpdCIsZnVuY3Rpb24oKXt2YXIgaT13aW5kb3cuVUlraXR8fHQod2luZG93LHdpbmRvdy5qUXVlcnksd2luZG93LmRvY3VtZW50KTtyZXR1cm4gaS5sb2FkPWZ1bmN0aW9uKHQsZSxuLG8pe3ZhciBzLGE9dC5zcGxpdCgiLCIpLHI9W10sbD0oby5jb25maWcmJm8uY29uZmlnLnVpa2l0JiZvLmNvbmZpZy51aWtpdC5iYXNlP28uY29uZmlnLnVpa2l0LmJhc2U6IiIpLnJlcGxhY2UoL1wvKyQvZywiIik7aWYoIWwpdGhyb3cgbmV3IEVycm9yKCJQbGVhc2UgZGVmaW5lIGJhc2UgcGF0aCB0byBVSWtpdCBpbiB0aGUgcmVxdWlyZWpzIGNvbmZpZy4iKTtmb3Iocz0wO3M8YS5sZW5ndGg7cys9MSl7dmFyIGM9YVtzXS5yZXBsYWNlKC9cLi9nLCIvIik7ci5wdXNoKGwrIi9jb21wb25lbnRzLyIrYyl9ZShyLGZ1bmN0aW9uKCl7bihpKX0pfSxpfSksIXdpbmRvdy5qUXVlcnkpdGhyb3cgbmV3IEVycm9yKCJVSWtpdCByZXF1aXJlcyBqUXVlcnkiKTt3aW5kb3cmJndpbmRvdy5qUXVlcnkmJnQod2luZG93LHdpbmRvdy5qUXVlcnksd2luZG93LmRvY3VtZW50KX0oZnVuY3Rpb24odCxpLGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fSxvPXQuVUlraXQ/T2JqZWN0LmNyZWF0ZSh0LlVJa2l0KTp2b2lkIDA7aWYobi52ZXJzaW9uPSIyLjI0LjIiLG4ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBvJiYodC5VSWtpdD1vLGkuVUlraXQ9byxpLmZuLnVrPW8uZm4pLG59LG4ucHJlZml4PWZ1bmN0aW9uKHQpe3JldHVybiB0fSxuLiQ9aSxuLiRkb2M9bi4kKGRvY3VtZW50KSxuLiR3aW49bi4kKHdpbmRvdyksbi4kaHRtbD1uLiQoImh0bWwiKSxuLnN1cHBvcnQ9e30sbi5zdXBwb3J0LnRyYW5zaXRpb249ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe3ZhciB0LGk9ZS5ib2R5fHxlLmRvY3VtZW50RWxlbWVudCxuPXtXZWJraXRUcmFuc2l0aW9uOiJ3ZWJraXRUcmFuc2l0aW9uRW5kIixNb3pUcmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIixPVHJhbnNpdGlvbjoib1RyYW5zaXRpb25FbmQgb3RyYW5zaXRpb25lbmQiLHRyYW5zaXRpb246InRyYW5zaXRpb25lbmQifTtmb3IodCBpbiBuKWlmKHZvaWQgMCE9PWkuc3R5bGVbdF0pcmV0dXJuIG5bdF19KCk7cmV0dXJuIHQmJntlbmQ6dH19KCksbi5zdXBwb3J0LmFuaW1hdGlvbj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKCl7dmFyIHQsaT1lLmJvZHl8fGUuZG9jdW1lbnRFbGVtZW50LG49e1dlYmtpdEFuaW1hdGlvbjoid2Via2l0QW5pbWF0aW9uRW5kIixNb3pBbmltYXRpb246ImFuaW1hdGlvbmVuZCIsT0FuaW1hdGlvbjoib0FuaW1hdGlvbkVuZCBvYW5pbWF0aW9uZW5kIixhbmltYXRpb246ImFuaW1hdGlvbmVuZCJ9O2Zvcih0IGluIG4paWYodm9pZCAwIT09aS5zdHlsZVt0XSlyZXR1cm4gblt0XX0oKTtyZXR1cm4gdCYme2VuZDp0fX0oKSxmdW5jdGlvbigpe0RhdGUubm93PURhdGUubm93fHxmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfTtmb3IodmFyIHQ9WyJ3ZWJraXQiLCJtb3oiXSxpPTA7aTx0Lmxlbmd0aCYmIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7KytpKXt2YXIgZT10W2ldO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9d2luZG93W2UrIlJlcXVlc3RBbmltYXRpb25GcmFtZSJdLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZT13aW5kb3dbZSsiQ2FuY2VsQW5pbWF0aW9uRnJhbWUiXXx8d2luZG93W2UrIkNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSJdfWlmKC9pUChhZHxob25lfG9kKS4qT1MgNi8udGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCl8fCF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwhd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKXt2YXIgbj0wO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24odCl7dmFyIGk9RGF0ZS5ub3coKSxlPU1hdGgubWF4KG4rMTYsaSk7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0KG49ZSl9LGUtaSl9LHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZT1jbGVhclRpbWVvdXR9fSgpLG4uc3VwcG9ydC50b3VjaD0ib250b3VjaHN0YXJ0ImluIGRvY3VtZW50fHx0LkRvY3VtZW50VG91Y2gmJmRvY3VtZW50IGluc3RhbmNlb2YgdC5Eb2N1bWVudFRvdWNofHx0Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkJiZ0Lm5hdmlnYXRvci5tc01heFRvdWNoUG9pbnRzPjB8fHQubmF2aWdhdG9yLnBvaW50ZXJFbmFibGVkJiZ0Lm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cz4wfHwhMSxuLnN1cHBvcnQubXV0YXRpb25vYnNlcnZlcj10Lk11dGF0aW9uT2JzZXJ2ZXJ8fHQuV2ViS2l0TXV0YXRpb25PYnNlcnZlcnx8bnVsbCxuLlV0aWxzPXt9LG4uVXRpbHMuaXNGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxkb2N1bWVudC5tb3pGdWxsU2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQubXNGdWxsc2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnR8fCExfSxuLlV0aWxzLnN0cjJqc29uPWZ1bmN0aW9uKHQsaSl7dHJ5e3JldHVybiBpP0pTT04ucGFyc2UodC5yZXBsYWNlKC8oW1wkXHddKylccyo6L2csZnVuY3Rpb24odCxpKXtyZXR1cm4nIicraSsnIjonfSkucmVwbGFjZSgvJyhbXiddKyknL2csZnVuY3Rpb24odCxpKXtyZXR1cm4nIicraSsnIid9KSk6bmV3IEZ1bmN0aW9uKCIiLCJ2YXIganNvbiA9ICIrdCsiOyByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShqc29uKSk7IikoKX1jYXRjaChlKXtyZXR1cm4hMX19LG4uVXRpbHMuZGVib3VuY2U9ZnVuY3Rpb24odCxpLGUpe3ZhciBuO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMscz1hcmd1bWVudHMsYT1mdW5jdGlvbigpe249bnVsbCxlfHx0LmFwcGx5KG8scyl9LHI9ZSYmIW47Y2xlYXJUaW1lb3V0KG4pLG49c2V0VGltZW91dChhLGkpLHImJnQuYXBwbHkobyxzKX19LG4uVXRpbHMucmVtb3ZlQ3NzUnVsZXM9ZnVuY3Rpb24odCl7dmFyIGksZSxuLG8scyxhLHIsbCxjLHU7dCYmc2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtmb3IodT1kb2N1bWVudC5zdHlsZVNoZWV0cyxvPTAscj11Lmxlbmd0aDtyPm87bysrKXtmb3Iobj11W29dLGU9W10sbi5jc3NSdWxlcz1uLmNzc1J1bGVzLGk9cz0wLGw9bi5jc3NSdWxlcy5sZW5ndGg7bD5zO2k9KytzKW4uY3NzUnVsZXNbaV0udHlwZT09PUNTU1J1bGUuU1RZTEVfUlVMRSYmdC50ZXN0KG4uY3NzUnVsZXNbaV0uc2VsZWN0b3JUZXh0KSYmZS51bnNoaWZ0KGkpO2ZvcihhPTAsYz1lLmxlbmd0aDtjPmE7YSsrKW4uZGVsZXRlUnVsZShlW2FdKX19Y2F0Y2goaCl7fX0sMCl9LG4uVXRpbHMuaXNJblZpZXc9ZnVuY3Rpb24odCxlKXt2YXIgbz1pKHQpO2lmKCFvLmlzKCI6dmlzaWJsZSIpKXJldHVybiExO3ZhciBzPW4uJHdpbi5zY3JvbGxMZWZ0KCksYT1uLiR3aW4uc2Nyb2xsVG9wKCkscj1vLm9mZnNldCgpLGw9ci5sZWZ0LGM9ci50b3A7cmV0dXJuIGU9aS5leHRlbmQoe3RvcG9mZnNldDowLGxlZnRvZmZzZXQ6MH0sZSksYytvLmhlaWdodCgpPj1hJiZjLWUudG9wb2Zmc2V0PD1hK24uJHdpbi5oZWlnaHQoKSYmbCtvLndpZHRoKCk+PXMmJmwtZS5sZWZ0b2Zmc2V0PD1zK24uJHdpbi53aWR0aCgpPyEwOiExfSxuLlV0aWxzLmNoZWNrRGlzcGxheT1mdW5jdGlvbih0LGUpe3ZhciBvPW4uJCgiW2RhdGEtdWstbWFyZ2luXSwgW2RhdGEtdWstZ3JpZC1tYXRjaF0sIFtkYXRhLXVrLWdyaWQtbWFyZ2luXSwgW2RhdGEtdWstY2hlY2stZGlzcGxheV0iLHR8fGRvY3VtZW50KTtyZXR1cm4gdCYmIW8ubGVuZ3RoJiYobz1pKHQpKSxvLnRyaWdnZXIoImRpc3BsYXkudWsuY2hlY2siKSxlJiYoInN0cmluZyIhPXR5cGVvZiBlJiYoZT0nW2NsYXNzKj0idWstYW5pbWF0aW9uLSJdJyksby5maW5kKGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLiQodGhpcyksaT10LmF0dHIoImNsYXNzIiksZT1pLm1hdGNoKC91a1wtYW5pbWF0aW9uXC0oLispLyk7dC5yZW1vdmVDbGFzcyhlWzBdKS53aWR0aCgpLHQuYWRkQ2xhc3MoZVswXSl9KSksb30sbi5VdGlscy5vcHRpb25zPWZ1bmN0aW9uKHQpe2lmKGkuaXNQbGFpbk9iamVjdCh0KSlyZXR1cm4gdDt2YXIgZT10P3QuaW5kZXhPZigieyIpOi0xLG89e307aWYoLTEhPWUpdHJ5e289bi5VdGlscy5zdHIyanNvbih0LnN1YnN0cihlKSl9Y2F0Y2gocyl7fXJldHVybiBvfSxuLlV0aWxzLmFuaW1hdGU9ZnVuY3Rpb24odCxlKXt2YXIgbz1pLkRlZmVycmVkKCk7cmV0dXJuIHQ9bi4kKHQpLGU9ZSx0LmNzcygiZGlzcGxheSIsIm5vbmUiKS5hZGRDbGFzcyhlKS5vbmUobi5zdXBwb3J0LmFuaW1hdGlvbi5lbmQsZnVuY3Rpb24oKXt0LnJlbW92ZUNsYXNzKGUpLG8ucmVzb2x2ZSgpfSkud2lkdGgoKSx0LmNzcygiZGlzcGxheSIsIiIpLG8ucHJvbWlzZSgpfSxuLlV0aWxzLnVpZD1mdW5jdGlvbih0KXtyZXR1cm4odHx8ImlkIikrKG5ldyBEYXRlKS5nZXRUaW1lKCkrIlJBTkQiK01hdGguY2VpbCgxZTUqTWF0aC5yYW5kb20oKSl9LG4uVXRpbHMudGVtcGxhdGU9ZnVuY3Rpb24odCxpKXtmb3IodmFyIGUsbixvLHMsYT10LnJlcGxhY2UoL1xuL2csIlxcbiIpLnJlcGxhY2UoL1x7XHtce1xzKiguKz8pXHMqXH1cfVx9L2csInt7ISQxfX0iKS5zcGxpdCgvKFx7XHtccyooLis/KVxzKlx9XH0pL2cpLHI9MCxsPVtdLGM9MDtyPGEubGVuZ3RoOyl7aWYoZT1hW3JdLGUubWF0Y2goL1x7XHtccyooLis/KVxzKlx9XH0vKSlzd2l0Y2gocis9MSxlPWFbcl0sbj1lWzBdLG89ZS5zdWJzdHJpbmcoZS5tYXRjaCgvXihcXnxcI3xcIXxcfnxcOikvKT8xOjApLG4pe2Nhc2UifiI6bC5wdXNoKCJmb3IodmFyICRpPTA7JGk8IitvKyIubGVuZ3RoOyRpKyspIHsgdmFyICRpdGVtID0gIitvKyJbJGldOyIpLGMrKzticmVhaztjYXNlIjoiOmwucHVzaCgiZm9yKHZhciAka2V5IGluICIrbysiKSB7IHZhciAkdmFsID0gIitvKyJbJGtleV07IiksYysrO2JyZWFrO2Nhc2UiIyI6bC5wdXNoKCJpZigiK28rIikgeyIpLGMrKzticmVhaztjYXNlIl4iOmwucHVzaCgiaWYoISIrbysiKSB7IiksYysrO2JyZWFrO2Nhc2UiLyI6bC5wdXNoKCJ9IiksYy0tO2JyZWFrO2Nhc2UiISI6bC5wdXNoKCJfX3JldC5wdXNoKCIrbysiKTsiKTticmVhaztkZWZhdWx0OmwucHVzaCgiX19yZXQucHVzaChlc2NhcGUoIitvKyIpKTsiKX1lbHNlIGwucHVzaCgiX19yZXQucHVzaCgnIitlLnJlcGxhY2UoL1wnL2csIlxcJyIpKyInKTsiKTtyKz0xfXJldHVybiBzPW5ldyBGdW5jdGlvbigiJGRhdGEiLFsidmFyIF9fcmV0ID0gW107IiwidHJ5IHsiLCJ3aXRoKCRkYXRhKXsiLGM/J19fcmV0ID0gWyJOb3QgYWxsIGJsb2NrcyBhcmUgY2xvc2VkIGNvcnJlY3RseS4iXSc6bC5qb2luKCIiKSwifTsiLCJ9Y2F0Y2goZSl7X19yZXQgPSBbZS5tZXNzYWdlXTt9IiwncmV0dXJuIF9fcmV0LmpvaW4oIiIpLnJlcGxhY2UoL1xcblxcbi9nLCAiXFxuIik7JywiZnVuY3Rpb24gZXNjYXBlKGh0bWwpIHsgcmV0dXJuIFN0cmluZyhodG1sKS5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpO30iXS5qb2luKCJcbiIpKSxpP3MoaSk6c30sbi5VdGlscy5ldmVudHM9e30sbi5VdGlscy5ldmVudHMuY2xpY2s9bi5zdXBwb3J0LnRvdWNoPyJ0YXAiOiJjbGljayIsdC5VSWtpdD1uLG4uZm49ZnVuY3Rpb24odCxlKXt2YXIgbz1hcmd1bWVudHMscz10Lm1hdGNoKC9eKFthLXpcLV0rKSg/OlwuKFthLXpdKykpPy9pKSxhPXNbMV0scj1zWzJdO3JldHVybiBuW2FdP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PWkodGhpcykscz10LmRhdGEoYSk7c3x8dC5kYXRhKGEscz1uW2FdKHRoaXMscj92b2lkIDA6ZSkpLHImJnNbcl0uYXBwbHkocyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvLDEpKX0pOihpLmVycm9yKCJVSWtpdCBjb21wb25lbnQgWyIrYSsiXSBkb2VzIG5vdCBleGlzdC4iKSx0aGlzKX0saS5VSWtpdD1uLGkuZm4udWs9bi5mbixuLmxhbmdkaXJlY3Rpb249InJ0bCI9PW4uJGh0bWwuYXR0cigiZGlyIik/InJpZ2h0IjoibGVmdCIsbi5jb21wb25lbnRzPXt9LG4uY29tcG9uZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG89ZnVuY3Rpb24oZSxzKXt2YXIgYT10aGlzO3JldHVybiB0aGlzLlVJa2l0PW4sdGhpcy5lbGVtZW50PWU/bi4kKGUpOm51bGwsdGhpcy5vcHRpb25zPWkuZXh0ZW5kKCEwLHt9LHRoaXMuZGVmYXVsdHMscyksdGhpcy5wbHVnaW5zPXt9LHRoaXMuZWxlbWVudCYmdGhpcy5lbGVtZW50LmRhdGEodCx0aGlzKSx0aGlzLmluaXQoKSwodGhpcy5vcHRpb25zLnBsdWdpbnMubGVuZ3RoP3RoaXMub3B0aW9ucy5wbHVnaW5zOk9iamVjdC5rZXlzKG8ucGx1Z2lucykpLmZvckVhY2goZnVuY3Rpb24odCl7by5wbHVnaW5zW3RdLmluaXQmJihvLnBsdWdpbnNbdF0uaW5pdChhKSxhLnBsdWdpbnNbdF09ITApfSksdGhpcy50cmlnZ2VyKCJpbml0LnVrLmNvbXBvbmVudCIsW3QsdGhpc10pLHRoaXN9O3JldHVybiBvLnBsdWdpbnM9e30saS5leHRlbmQoITAsby5wcm90b3R5cGUse2RlZmF1bHRzOntwbHVnaW5zOltdfSxib290OmZ1bmN0aW9uKCl7fSxpbml0OmZ1bmN0aW9uKCl7fSxvbjpmdW5jdGlvbih0LGksZSl7cmV0dXJuIG4uJCh0aGlzLmVsZW1lbnR8fHRoaXMpLm9uKHQsaSxlKX0sb25lOmZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gbi4kKHRoaXMuZWxlbWVudHx8dGhpcykub25lKHQsaSxlKX0sb2ZmOmZ1bmN0aW9uKHQpe3JldHVybiBuLiQodGhpcy5lbGVtZW50fHx0aGlzKS5vZmYodCl9LHRyaWdnZXI6ZnVuY3Rpb24odCxpKXtyZXR1cm4gbi4kKHRoaXMuZWxlbWVudHx8dGhpcykudHJpZ2dlcih0LGkpfSxmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBuLiQodGhpcy5lbGVtZW50P3RoaXMuZWxlbWVudDpbXSkuZmluZCh0KX0scHJveHk6ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzO2kuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2VbaV18fChlW2ldPWZ1bmN0aW9uKCl7cmV0dXJuIHRbaV0uYXBwbHkodCxhcmd1bWVudHMpfSl9KX0sbWl4aW46ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzO2kuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2VbaV18fChlW2ldPXRbaV0uYmluZChlKSl9KX0sb3B0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vcHRpb25zW2FyZ3VtZW50c1swXV18fHZvaWQgMDooMj09YXJndW1lbnRzLmxlbmd0aCYmKHRoaXMub3B0aW9uc1thcmd1bWVudHNbMF1dPWFyZ3VtZW50c1sxXSksdm9pZCAwKX19LGUpLHRoaXMuY29tcG9uZW50c1t0XT1vLHRoaXNbdF09ZnVuY3Rpb24oKXt2YXIgZSxvO2lmKGFyZ3VtZW50cy5sZW5ndGgpc3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMToic3RyaW5nIj09dHlwZW9mIGFyZ3VtZW50c1swXXx8YXJndW1lbnRzWzBdLm5vZGVUeXBlfHxhcmd1bWVudHNbMF1pbnN0YW5jZW9mIGpRdWVyeT9lPWkoYXJndW1lbnRzWzBdKTpvPWFyZ3VtZW50c1swXTticmVhaztjYXNlIDI6ZT1pKGFyZ3VtZW50c1swXSksbz1hcmd1bWVudHNbMV19cmV0dXJuIGUmJmUuZGF0YSh0KT9lLmRhdGEodCk6bmV3IG4uY29tcG9uZW50c1t0XShlLG8pfSxuLmRvbXJlYWR5JiZuLmNvbXBvbmVudC5ib290KHQpLG99LG4ucGx1Z2luPWZ1bmN0aW9uKHQsaSxlKXt0aGlzLmNvbXBvbmVudHNbdF0ucGx1Z2luc1tpXT1lfSxuLmNvbXBvbmVudC5ib290PWZ1bmN0aW9uKHQpe24uY29tcG9uZW50c1t0XS5wcm90b3R5cGUmJm4uY29tcG9uZW50c1t0XS5wcm90b3R5cGUuYm9vdCYmIW4uY29tcG9uZW50c1t0XS5ib290ZWQmJihuLmNvbXBvbmVudHNbdF0ucHJvdG90eXBlLmJvb3QuYXBwbHkobixbXSksbi5jb21wb25lbnRzW3RdLmJvb3RlZD0hMCl9LG4uY29tcG9uZW50LmJvb3RDb21wb25lbnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIG4uY29tcG9uZW50cyluLmNvbXBvbmVudC5ib290KHQpfSxuLmRvbU9ic2VydmVycz1bXSxuLmRvbXJlYWR5PSExLG4ucmVhZHk9ZnVuY3Rpb24odCl7bi5kb21PYnNlcnZlcnMucHVzaCh0KSxuLmRvbXJlYWR5JiZ0KGRvY3VtZW50KX0sbi5vbj1mdW5jdGlvbih0LGksZSl7cmV0dXJuIHQmJnQuaW5kZXhPZigicmVhZHkudWsuZG9tIik+LTEmJm4uZG9tcmVhZHkmJmkuYXBwbHkobi4kZG9jKSxuLiRkb2Mub24odCxpLGUpfSxuLm9uZT1mdW5jdGlvbih0LGksZSl7cmV0dXJuIHQmJnQuaW5kZXhPZigicmVhZHkudWsuZG9tIik+LTEmJm4uZG9tcmVhZHk/KGkuYXBwbHkobi4kZG9jKSxuLiRkb2MpOm4uJGRvYy5vbmUodCxpLGUpfSxuLnRyaWdnZXI9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbi4kZG9jLnRyaWdnZXIodCxpKX0sbi5kb21PYnNlcnZlPWZ1bmN0aW9uKHQsaSl7bi5zdXBwb3J0Lm11dGF0aW9ub2JzZXJ2ZXImJihpPWl8fGZ1bmN0aW9uKCl7fSxuLiQodCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1uLiQodCk7aWYoIWUuZGF0YSgib2JzZXJ2ZXIiKSl0cnl7dmFyIG89bmV3IG4uc3VwcG9ydC5tdXRhdGlvbm9ic2VydmVyKG4uVXRpbHMuZGVib3VuY2UoZnVuY3Rpb24oKXtpLmFwcGx5KHQsW10pLGUudHJpZ2dlcigiY2hhbmdlZC51ay5kb20iKX0sNTApKTtvLm9ic2VydmUodCx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxlLmRhdGEoIm9ic2VydmVyIixvKX1jYXRjaChzKXt9fSkpfSxuLmluaXQ9ZnVuY3Rpb24odCl7dD10fHxkb2N1bWVudCxuLmRvbU9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kodCl9KX0sbi5vbigiZG9tcmVhZHkudWsuZG9tIixmdW5jdGlvbigpe24uaW5pdCgpLG4uZG9tcmVhZHkmJm4uVXRpbHMuY2hlY2tEaXNwbGF5KCl9KSxpKGZ1bmN0aW9uKCl7bi4kYm9keT1uLiQoImJvZHkiKSxuLnJlYWR5KGZ1bmN0aW9uKCl7bi5kb21PYnNlcnZlKCJbZGF0YS11ay1vYnNlcnZlXSIpfSksbi5vbigiY2hhbmdlZC51ay5kb20iLGZ1bmN0aW9uKHQpe24uaW5pdCh0LnRhcmdldCksbi5VdGlscy5jaGVja0Rpc3BsYXkodC50YXJnZXQpfSksbi50cmlnZ2VyKCJiZWZvcmVyZWFkeS51ay5kb20iKSxuLmNvbXBvbmVudC5ib290Q29tcG9uZW50cygpLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3ZhciB0LGk9e3g6d2luZG93LnBhZ2VYT2Zmc2V0LHk6d2luZG93LnBhZ2VZT2Zmc2V0fSxlPWZ1bmN0aW9uKCl7KGkueCE9d2luZG93LnBhZ2VYT2Zmc2V0fHxpLnkhPXdpbmRvdy5wYWdlWU9mZnNldCkmJih0PXt4OjAseTowfSx3aW5kb3cucGFnZVhPZmZzZXQhPWkueCYmKHQueD13aW5kb3cucGFnZVhPZmZzZXQ+aS54PzE6LTEpLHdpbmRvdy5wYWdlWU9mZnNldCE9aS55JiYodC55PXdpbmRvdy5wYWdlWU9mZnNldD5pLnk/MTotMSksaT17ZGlyOnQseDp3aW5kb3cucGFnZVhPZmZzZXQseTp3aW5kb3cucGFnZVlPZmZzZXR9LG4uJGRvYy50cmlnZ2VyKCJzY3JvbGxpbmcudWsuZG9jdW1lbnQiLFtpXSkpLHJlcXVlc3RBbmltYXRpb25GcmFtZShlKX07cmV0dXJuIG4uc3VwcG9ydC50b3VjaCYmbi4kaHRtbC5vbigidG91Y2htb3ZlIHRvdWNoZW5kIE1TUG9pbnRlck1vdmUgTVNQb2ludGVyVXAgcG9pbnRlcm1vdmUgcG9pbnRlcnVwIixlKSwoaS54fHxpLnkpJiZlKCksZX0oKSksbi50cmlnZ2VyKCJkb21yZWFkeS51ay5kb20iKSxuLnN1cHBvcnQudG91Y2gmJm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goLyhpUGFkfGlQaG9uZXxpUG9kKS9nKSYmbi4kd2luLm9uKCJsb2FkIG9yaWVudGF0aW9uY2hhbmdlIHJlc2l6ZSIsbi5VdGlscy5kZWJvdW5jZShmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKCl7cmV0dXJuIGkoIi51ay1oZWlnaHQtdmlld3BvcnQiKS5jc3MoImhlaWdodCIsd2luZG93LmlubmVySGVpZ2h0KSx0fTtyZXR1cm4gdCgpfSgpLDEwMCkpLG4udHJpZ2dlcigiYWZ0ZXJyZWFkeS51ay5kb20iKSxuLmRvbXJlYWR5PSEwfSksbi4kaHRtbC5hZGRDbGFzcyhuLnN1cHBvcnQudG91Y2g/InVrLXRvdWNoIjoidWstbm90b3VjaCIpLG4uc3VwcG9ydC50b3VjaCl7dmFyIHMsYT0hMSxyPSJ1ay1ob3ZlciIsbD0iLnVrLW92ZXJsYXksIC51ay1vdmVybGF5LWhvdmVyLCAudWstb3ZlcmxheS10b2dnbGUsIC51ay1hbmltYXRpb24taG92ZXIsIC51ay1oYXMtaG92ZXIiO24uJGh0bWwub24oIm1vdXNlZW50ZXIgdG91Y2hzdGFydCBNU1BvaW50ZXJEb3duIHBvaW50ZXJkb3duIixsLGZ1bmN0aW9uKCl7YSYmaSgiLiIrcikucmVtb3ZlQ2xhc3MociksYT1pKHRoaXMpLmFkZENsYXNzKHIpfSkub24oIm1vdXNlbGVhdmUgdG91Y2hlbmQgTVNQb2ludGVyVXAgcG9pbnRlcnVwIixmdW5jdGlvbih0KXtzPWkodC50YXJnZXQpLnBhcmVudHMobCksYSYmYS5ub3QocykucmVtb3ZlQ2xhc3Mocil9KX1yZXR1cm4gbn0pLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGkodCxpLGUsbil7cmV0dXJuIE1hdGguYWJzKHQtaSk+PU1hdGguYWJzKGUtbik/dC1pPjA/IkxlZnQiOiJSaWdodCI6ZS1uPjA/IlVwIjoiRG93biJ9ZnVuY3Rpb24gZSgpe2M9bnVsbCxoLmxhc3QmJih2b2lkIDAhPT1oLmVsJiZoLmVsLnRyaWdnZXIoImxvbmdUYXAiKSxoPXt9KX1mdW5jdGlvbiBuKCl7YyYmY2xlYXJUaW1lb3V0KGMpLGM9bnVsbH1mdW5jdGlvbiBvKCl7YSYmY2xlYXJUaW1lb3V0KGEpLHImJmNsZWFyVGltZW91dChyKSxsJiZjbGVhclRpbWVvdXQobCksYyYmY2xlYXJUaW1lb3V0KGMpLGE9cj1sPWM9bnVsbCxoPXt9fWZ1bmN0aW9uIHModCl7cmV0dXJuIHQucG9pbnRlclR5cGU9PXQuTVNQT0lOVEVSX1RZUEVfVE9VQ0gmJnQuaXNQcmltYXJ5fWlmKCF0LmZuLnN3aXBlTGVmdCl7dmFyIGEscixsLGMsdSxoPXt9LGQ9NzUwO3QoZnVuY3Rpb24oKXt2YXIgcCxmLG0sZz0wLHY9MDsiTVNHZXN0dXJlImluIHdpbmRvdyYmKHU9bmV3IE1TR2VzdHVyZSx1LnRhcmdldD1kb2N1bWVudC5ib2R5KSx0KGRvY3VtZW50KS5vbigiTVNHZXN0dXJlRW5kIGdlc3R1cmVlbmQiLGZ1bmN0aW9uKHQpe3ZhciBpPXQub3JpZ2luYWxFdmVudC52ZWxvY2l0eVg+MT8iUmlnaHQiOnQub3JpZ2luYWxFdmVudC52ZWxvY2l0eVg8LTE/IkxlZnQiOnQub3JpZ2luYWxFdmVudC52ZWxvY2l0eVk+MT8iRG93biI6dC5vcmlnaW5hbEV2ZW50LnZlbG9jaXR5WTwtMT8iVXAiOm51bGw7aSYmdm9pZCAwIT09aC5lbCYmKGguZWwudHJpZ2dlcigic3dpcGUiKSxoLmVsLnRyaWdnZXIoInN3aXBlIitpKSl9KS5vbigidG91Y2hzdGFydCBNU1BvaW50ZXJEb3duIHBvaW50ZXJkb3duIixmdW5jdGlvbihpKXsoIk1TUG9pbnRlckRvd24iIT1pLnR5cGV8fHMoaS5vcmlnaW5hbEV2ZW50KSkmJihtPSJNU1BvaW50ZXJEb3duIj09aS50eXBlfHwicG9pbnRlcmRvd24iPT1pLnR5cGU/aTppLm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXSxwPURhdGUubm93KCksZj1wLShoLmxhc3R8fHApLGguZWw9dCgidGFnTmFtZSJpbiBtLnRhcmdldD9tLnRhcmdldDptLnRhcmdldC5wYXJlbnROb2RlKSxhJiZjbGVhclRpbWVvdXQoYSksaC54MT1tLnBhZ2VYLGgueTE9bS5wYWdlWSxmPjAmJjI1MD49ZiYmKGguaXNEb3VibGVUYXA9ITApLGgubGFzdD1wLGM9c2V0VGltZW91dChlLGQpLCF1fHwiTVNQb2ludGVyRG93biIhPWkudHlwZSYmInBvaW50ZXJkb3duIiE9aS50eXBlJiYidG91Y2hzdGFydCIhPWkudHlwZXx8dS5hZGRQb2ludGVyKGkub3JpZ2luYWxFdmVudC5wb2ludGVySWQpKX0pLm9uKCJ0b3VjaG1vdmUgTVNQb2ludGVyTW92ZSBwb2ludGVybW92ZSIsZnVuY3Rpb24odCl7KCJNU1BvaW50ZXJNb3ZlIiE9dC50eXBlfHxzKHQub3JpZ2luYWxFdmVudCkpJiYobT0iTVNQb2ludGVyTW92ZSI9PXQudHlwZXx8InBvaW50ZXJtb3ZlIj09dC50eXBlP3Q6dC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0sbigpLGgueDI9bS5wYWdlWCxoLnkyPW0ucGFnZVksZys9TWF0aC5hYnMoaC54MS1oLngyKSx2Kz1NYXRoLmFicyhoLnkxLWgueTIpKX0pLm9uKCJ0b3VjaGVuZCBNU1BvaW50ZXJVcCBwb2ludGVydXAiLGZ1bmN0aW9uKGUpeygiTVNQb2ludGVyVXAiIT1lLnR5cGV8fHMoZS5vcmlnaW5hbEV2ZW50KSkmJihuKCksaC54MiYmTWF0aC5hYnMoaC54MS1oLngyKT4zMHx8aC55MiYmTWF0aC5hYnMoaC55MS1oLnkyKT4zMD9sPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2b2lkIDAhPT1oLmVsJiYoaC5lbC50cmlnZ2VyKCJzd2lwZSIpLGguZWwudHJpZ2dlcigic3dpcGUiK2koaC54MSxoLngyLGgueTEsaC55MikpKSxoPXt9fSwwKToibGFzdCJpbiBoJiYoaXNOYU4oZyl8fDMwPmcmJjMwPnY/cj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGk9dC5FdmVudCgidGFwIik7aS5jYW5jZWxUb3VjaD1vLHZvaWQgMCE9PWguZWwmJmguZWwudHJpZ2dlcihpKSxoLmlzRG91YmxlVGFwPyh2b2lkIDAhPT1oLmVsJiZoLmVsLnRyaWdnZXIoImRvdWJsZVRhcCIpLGg9e30pOmE9c2V0VGltZW91dChmdW5jdGlvbigpe2E9bnVsbCx2b2lkIDAhPT1oLmVsJiZoLmVsLnRyaWdnZXIoInNpbmdsZVRhcCIpLGg9e319LDI1MCl9LDApOmg9e30sZz12PTApKX0pLm9uKCJ0b3VjaGNhbmNlbCBNU1BvaW50ZXJDYW5jZWwiLG8pLHQod2luZG93KS5vbigic2Nyb2xsIixvKX0pLFsic3dpcGUiLCJzd2lwZUxlZnQiLCJzd2lwZVJpZ2h0Iiwic3dpcGVVcCIsInN3aXBlRG93biIsImRvdWJsZVRhcCIsInRhcCIsInNpbmdsZVRhcCIsImxvbmdUYXAiXS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3QuZm5baV09ZnVuY3Rpb24oZSl7cmV0dXJuIHQodGhpcykub24oaSxlKX19KX19KGpRdWVyeSksZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBpPVtdO3QuY29tcG9uZW50KCJzdGFja01hcmdpbiIse2RlZmF1bHRzOntjbHM6InVrLW1hcmdpbi1zbWFsbC10b3AifSxib290OmZ1bmN0aW9uKCl7dC5yZWFkeShmdW5jdGlvbihpKXt0LiQoIltkYXRhLXVrLW1hcmdpbl0iLGkpLmVhY2goZnVuY3Rpb24oKXt2YXIgaSxlPXQuJCh0aGlzKTtlLmRhdGEoInN0YWNrTWFyZ2luIil8fChpPXQuc3RhY2tNYXJnaW4oZSx0LlV0aWxzLm9wdGlvbnMoZS5hdHRyKCJkYXRhLXVrLW1hcmdpbiIpKSkpfSl9KX0saW5pdDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5jb2x1bW5zPVtdLHQuJHdpbi5vbigicmVzaXplIG9yaWVudGF0aW9uY2hhbmdlIixmdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKCl7ZS5wcm9jZXNzKCl9O3JldHVybiB0LiQoZnVuY3Rpb24oKXtpKCksdC4kd2luLm9uKCJsb2FkIixpKX0pLHQuVXRpbHMuZGVib3VuY2UoaSwyMCl9KCkpLHQuJGh0bWwub24oImNoYW5nZWQudWsuZG9tIixmdW5jdGlvbigpe2UucHJvY2VzcygpfSksdGhpcy5vbigiZGlzcGxheS51ay5jaGVjayIsZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuaXMoIjp2aXNpYmxlIikmJnRoaXMucHJvY2VzcygpfS5iaW5kKHRoaXMpKSxpLnB1c2godGhpcyl9LHByb2Nlc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2x1bW5zPXRoaXMuZWxlbWVudC5jaGlsZHJlbigpLHQuVXRpbHMuc3RhY2tNYXJnaW4odGhpcy5jb2x1bW5zLHRoaXMub3B0aW9ucyksdGhpc30scmV2ZXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuY2xzKSx0aGlzfX0pLGZ1bmN0aW9uKCl7dmFyIGk9W10sZT1mdW5jdGlvbih0KXtpZih0LmlzKCI6dmlzaWJsZSIpKXt2YXIgaT10LnBhcmVudCgpLndpZHRoKCksZT10LmRhdGEoIndpZHRoIiksbj1pL2Usbz1NYXRoLmZsb29yKG4qdC5kYXRhKCJoZWlnaHQiKSk7dC5jc3Moe2hlaWdodDplPmk/bzp0LmRhdGEoImhlaWdodCIpfSl9fTt0LmNvbXBvbmVudCgicmVzcG9uc2l2ZUVsZW1lbnQiLHtkZWZhdWx0czp7fSxib290OmZ1bmN0aW9uKCl7dC5yZWFkeShmdW5jdGlvbihpKXt0LiQoImlmcmFtZS51ay1yZXNwb25zaXZlLXdpZHRoLCBbZGF0YS11ay1yZXNwb25zaXZlXSIsaSkuZWFjaChmdW5jdGlvbigpe3ZhciBpLGU9dC4kKHRoaXMpO2UuZGF0YSgicmVzcG9uc2l2ZUlmcmFtZSIpfHwoaT10LnJlc3BvbnNpdmVFbGVtZW50KGUse30pKX0pfSl9LGluaXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQ7dC5hdHRyKCJ3aWR0aCIpJiZ0LmF0dHIoImhlaWdodCIpJiYodC5kYXRhKHt3aWR0aDp0LmF0dHIoIndpZHRoIiksaGVpZ2h0OnQuYXR0cigiaGVpZ2h0Iil9KS5vbigiZGlzcGxheS51ay5jaGVjayIsZnVuY3Rpb24oKXtlKHQpfSksZSh0KSxpLnB1c2godCkpfX0pLHQuJHdpbi5vbigicmVzaXplIGxvYWQiLHQuVXRpbHMuZGVib3VuY2UoZnVuY3Rpb24oKXtpLmZvckVhY2goZnVuY3Rpb24odCl7ZSh0KX0pfSwxNSkpfSgpLHQuVXRpbHMuc3RhY2tNYXJnaW49ZnVuY3Rpb24oaSxlKXtlPXQuJC5leHRlbmQoe2NsczoidWstbWFyZ2luLXNtYWxsLXRvcCJ9LGUpLGUuY2xzPWUuY2xzLGk9dC4kKGkpLnJlbW92ZUNsYXNzKGUuY2xzKTt2YXIgbj0hMSxvPWkuZmlsdGVyKCI6dmlzaWJsZTpmaXJzdCIpLHM9by5sZW5ndGg/by5wb3NpdGlvbigpLnRvcCtvLm91dGVySGVpZ2h0KCktMTohMTtzIT09ITEmJjEhPWkubGVuZ3RoJiZpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10LiQodGhpcyk7aS5pcygiOnZpc2libGUiKSYmKG4/aS5hZGRDbGFzcyhlLmNscyk6aS5wb3NpdGlvbigpLnRvcD49cyYmKG49aS5hZGRDbGFzcyhlLmNscykpKX0pfSx0LlV0aWxzLm1hdGNoSGVpZ2h0cz1mdW5jdGlvbihpLGUpe2k9dC4kKGkpLmNzcygibWluLWhlaWdodCIsIiIpLGU9dC4kLmV4dGVuZCh7cm93OiEwfSxlKTt2YXIgbj1mdW5jdGlvbihpKXtpZighKGkubGVuZ3RoPDIpKXt2YXIgZT0wO2kuZWFjaChmdW5jdGlvbigpe2U9TWF0aC5tYXgoZSx0LiQodGhpcykub3V0ZXJIZWlnaHQoKSl9KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dC4kKHRoaXMpLG49ZS0oImJvcmRlci1ib3giPT1pLmNzcygiYm94LXNpemluZyIpPzA6aS5vdXRlckhlaWdodCgpLWkuaGVpZ2h0KCkpO2kuY3NzKCJtaW4taGVpZ2h0IixuKyJweCIpfSl9fTtlLnJvdz8oaS5maXJzdCgpLndpZHRoKCksc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBlPSExLG89W107aS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dC4kKHRoaXMpLHM9aS5vZmZzZXQoKS50b3A7cyE9ZSYmby5sZW5ndGgmJihuKHQuJChvKSksbz1bXSxzPWkub2Zmc2V0KCkudG9wKSxvLnB1c2goaSksZT1zfSksby5sZW5ndGgmJm4odC4kKG8pKX0sMCkpOm4oaSl9LGZ1bmN0aW9uKGkpe3QuVXRpbHMuaW5saW5lU3ZnPWZ1bmN0aW9uKGUsbil7dC4kKGV8fCdpbWdbc3JjJD0iLnN2ZyJdJyxufHxkb2N1bWVudCkuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQuJCh0aGlzKSxuPWUuYXR0cigic3JjIik7aWYoIWlbbl0pe3ZhciBvPXQuJC5EZWZlcnJlZCgpO3QuJC5nZXQobix7bmM6TWF0aC5yYW5kb20oKX0sZnVuY3Rpb24oaSl7by5yZXNvbHZlKHQuJChpKS5maW5kKCJzdmciKSl9KSxpW25dPW8ucHJvbWlzZSgpfWlbbl0udGhlbihmdW5jdGlvbihpKXt2YXIgbj10LiQoaSkuY2xvbmUoKTtlLmF0dHIoImlkIikmJm4uYXR0cigiaWQiLGUuYXR0cigiaWQiKSksZS5hdHRyKCJjbGFzcyIpJiZuLmF0dHIoImNsYXNzIixlLmF0dHIoImNsYXNzIikpLGUuYXR0cigic3R5bGUiKSYmbi5hdHRyKCJzdHlsZSIsZS5hdHRyKCJzdHlsZSIpKSxlLmF0dHIoIndpZHRoIikmJihuLmF0dHIoIndpZHRoIixlLmF0dHIoIndpZHRoIikpLGUuYXR0cigiaGVpZ2h0Iil8fG4ucmVtb3ZlQXR0cigiaGVpZ2h0IikpLGUuYXR0cigiaGVpZ2h0IikmJihuLmF0dHIoImhlaWdodCIsZS5hdHRyKCJoZWlnaHQiKSksZS5hdHRyKCJ3aWR0aCIpfHxuLnJlbW92ZUF0dHIoIndpZHRoIikpLGUucmVwbGFjZVdpdGgobil9KX0pfSx0LnJlYWR5KGZ1bmN0aW9uKGkpe3QuVXRpbHMuaW5saW5lU3ZnKCJbZGF0YS11ay1zdmddIixpKX0pfSh7fSl9KFVJa2l0KSxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaShpLGUpe2U9dC4kLmV4dGVuZCh7ZHVyYXRpb246MWUzLHRyYW5zaXRpb246ImVhc2VPdXRFeHBvIixvZmZzZXQ6MCxjb21wbGV0ZTpmdW5jdGlvbigpe319LGUpO3ZhciBuPWkub2Zmc2V0KCkudG9wLWUub2Zmc2V0LG89dC4kZG9jLmhlaWdodCgpLHM9d2luZG93LmlubmVySGVpZ2h0O24rcz5vJiYobj1vLXMpLHQuJCgiaHRtbCxib2R5Iikuc3RvcCgpLmFuaW1hdGUoe3Njcm9sbFRvcDpufSxlLmR1cmF0aW9uLGUudHJhbnNpdGlvbikucHJvbWlzZSgpLmRvbmUoZS5jb21wbGV0ZSl9dC5jb21wb25lbnQoInNtb290aFNjcm9sbCIse2Jvb3Q6ZnVuY3Rpb24oKXt0LiRodG1sLm9uKCJjbGljay5zbW9vdGgtc2Nyb2xsLnVpa2l0IiwiW2RhdGEtdWstc21vb3RoLXNjcm9sbF0iLGZ1bmN0aW9uKCl7dmFyIGk9dC4kKHRoaXMpO2lmKCFpLmRhdGEoInNtb290aFNjcm9sbCIpKXt7dC5zbW9vdGhTY3JvbGwoaSx0LlV0aWxzLm9wdGlvbnMoaS5hdHRyKCJkYXRhLXVrLXNtb290aC1zY3JvbGwiKSkpfWkudHJpZ2dlcigiY2xpY2siKX1yZXR1cm4hMX0pfSxpbml0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLm9uKCJjbGljayIsZnVuY3Rpb24obil7bi5wcmV2ZW50RGVmYXVsdCgpLGkodC4kKHRoaXMuaGFzaCkubGVuZ3RoP3QuJCh0aGlzLmhhc2gpOnQuJCgiYm9keSIpLGUub3B0aW9ucyl9KX19KSx0LlV0aWxzLnNjcm9sbFRvRWxlbWVudD1pLHQuJC5lYXNpbmcuZWFzZU91dEV4cG98fCh0LiQuZWFzaW5nLmVhc2VPdXRFeHBvPWZ1bmN0aW9uKHQsaSxlLG4sbyl7cmV0dXJuIGk9PW8/ZStuOm4qKC1NYXRoLnBvdygyLC0xMCppL28pKzEpK2V9KX0oVUlraXQpLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgaT10LiR3aW4sZT10LiRkb2Msbj1bXSxvPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxuLmxlbmd0aDt0Kyspd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5hcHBseSh3aW5kb3csW25bdF0uY2hlY2tdKX07dC5jb21wb25lbnQoInNjcm9sbHNweSIse2RlZmF1bHRzOnt0YXJnZXQ6ITEsY2xzOiJ1ay1zY3JvbGxzcHktaW52aWV3Iixpbml0Y2xzOiJ1ay1zY3JvbGxzcHktaW5pdC1pbnZpZXciLHRvcG9mZnNldDowLGxlZnRvZmZzZXQ6MCxyZXBlYXQ6ITEsZGVsYXk6MH0sYm9vdDpmdW5jdGlvbigpe2Uub24oInNjcm9sbGluZy51ay5kb2N1bWVudCIsbyksaS5vbigibG9hZCByZXNpemUgb3JpZW50YXRpb25jaGFuZ2UiLHQuVXRpbHMuZGVib3VuY2Uobyw1MCkpLHQucmVhZHkoZnVuY3Rpb24oaSl7dC4kKCJbZGF0YS11ay1zY3JvbGxzcHldIixpKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dC4kKHRoaXMpO2lmKCFpLmRhdGEoInNjcm9sbHNweSIpKXt0LnNjcm9sbHNweShpLHQuVXRpbHMub3B0aW9ucyhpLmF0dHIoImRhdGEtdWstc2Nyb2xsc3B5IikpKX19KX0pfSxpbml0OmZ1bmN0aW9uKCl7dmFyIGksZT10aGlzLG89dGhpcy5vcHRpb25zLmNscy5zcGxpdCgvLC8pLHM9ZnVuY3Rpb24oKXt2YXIgbj1lLm9wdGlvbnMudGFyZ2V0P2UuZWxlbWVudC5maW5kKGUub3B0aW9ucy50YXJnZXQpOmUuZWxlbWVudCxzPTE9PT1uLmxlbmd0aD8xOjAsYT0wO24uZWFjaChmdW5jdGlvbigpe3ZhciBuPXQuJCh0aGlzKSxyPW4uZGF0YSgiaW52aWV3c3RhdGUiKSxsPXQuVXRpbHMuaXNJblZpZXcobixlLm9wdGlvbnMpLGM9bi5kYXRhKCJ1a1Njcm9sbHNweUNscyIpfHxvW2FdLnRyaW0oKTshbHx8cnx8bi5kYXRhKCJzY3JvbGxzcHktaWRsZSIpfHwoaXx8KG4uYWRkQ2xhc3MoZS5vcHRpb25zLmluaXRjbHMpLGUub2Zmc2V0PW4ub2Zmc2V0KCksaT0hMCxuLnRyaWdnZXIoImluaXQudWsuc2Nyb2xsc3B5IikpLG4uZGF0YSgic2Nyb2xsc3B5LWlkbGUiLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLmFkZENsYXNzKCJ1ay1zY3JvbGxzcHktaW52aWV3IikudG9nZ2xlQ2xhc3MoYykud2lkdGgoKSxuLnRyaWdnZXIoImludmlldy51ay5zY3JvbGxzcHkiKSxuLmRhdGEoInNjcm9sbHNweS1pZGxlIiwhMSksbi5kYXRhKCJpbnZpZXdzdGF0ZSIsITApfSxlLm9wdGlvbnMuZGVsYXkqcykpLHMrKyksIWwmJnImJmUub3B0aW9ucy5yZXBlYXQmJihuLmRhdGEoInNjcm9sbHNweS1pZGxlIikmJmNsZWFyVGltZW91dChuLmRhdGEoInNjcm9sbHNweS1pZGxlIikpLG4ucmVtb3ZlQ2xhc3MoInVrLXNjcm9sbHNweS1pbnZpZXciKS50b2dnbGVDbGFzcyhjKSxuLmRhdGEoImludmlld3N0YXRlIiwhMSksbi50cmlnZ2VyKCJvdXR2aWV3LnVrLnNjcm9sbHNweSIpKSxhPW9bYSsxXT9hKzE6MH0pfTtzKCksdGhpcy5jaGVjaz1zLG4ucHVzaCh0aGlzKX19KTt2YXIgcz1bXSxhPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxzLmxlbmd0aDt0Kyspd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5hcHBseSh3aW5kb3csW3NbdF0uY2hlY2tdKX07dC5jb21wb25lbnQoInNjcm9sbHNweW5hdiIse2RlZmF1bHRzOntjbHM6InVrLWFjdGl2ZSIsY2xvc2VzdDohMSx0b3BvZmZzZXQ6MCxsZWZ0b2Zmc2V0OjAsc21vb3Roc2Nyb2xsOiExfSxib290OmZ1bmN0aW9uKCl7ZS5vbigic2Nyb2xsaW5nLnVrLmRvY3VtZW50IixhKSxpLm9uKCJyZXNpemUgb3JpZW50YXRpb25jaGFuZ2UiLHQuVXRpbHMuZGVib3VuY2UoYSw1MCkpLHQucmVhZHkoZnVuY3Rpb24oaSl7dC4kKCJbZGF0YS11ay1zY3JvbGxzcHktbmF2XSIsaSkuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQuJCh0aGlzKTtpZighaS5kYXRhKCJzY3JvbGxzcHluYXYiKSl7dC5zY3JvbGxzcHluYXYoaSx0LlV0aWxzLm9wdGlvbnMoaS5hdHRyKCJkYXRhLXVrLXNjcm9sbHNweS1uYXYiKSkpfX0pfSl9LGluaXQ6ZnVuY3Rpb24oKXt2YXIgZSxuPVtdLG89dGhpcy5maW5kKCJhW2hyZWZePScjJ10iKS5lYWNoKGZ1bmN0aW9uKCl7IiMiIT09dGhpcy5nZXRBdHRyaWJ1dGUoImhyZWYiKS50cmltKCkmJm4ucHVzaCh0aGlzLmdldEF0dHJpYnV0ZSgiaHJlZiIpKX0pLGE9dC4kKG4uam9pbigiLCIpKSxyPXRoaXMub3B0aW9ucy5jbHMsbD10aGlzLm9wdGlvbnMuY2xvc2VzdHx8dGhpcy5vcHRpb25zLmNsb3Nlc3QsYz10aGlzLHU9ZnVuY3Rpb24oKXtlPVtdO2Zvcih2YXIgbj0wO248YS5sZW5ndGg7bisrKXQuVXRpbHMuaXNJblZpZXcoYS5lcShuKSxjLm9wdGlvbnMpJiZlLnB1c2goYS5lcShuKSk7aWYoZS5sZW5ndGgpe3ZhciBzLHU9aS5zY3JvbGxUb3AoKSxoPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspaWYoZVt0XS5vZmZzZXQoKS50b3A+PXUpcmV0dXJuIGVbdF19KCk7aWYoIWgpcmV0dXJuO2Mub3B0aW9ucy5jbG9zZXN0PyhvLmJsdXIoKS5jbG9zZXN0KGwpLnJlbW92ZUNsYXNzKHIpLHM9by5maWx0ZXIoImFbaHJlZj0nIyIraC5hdHRyKCJpZCIpKyInXSIpLmNsb3Nlc3QobCkuYWRkQ2xhc3MocikpOnM9by5yZW1vdmVDbGFzcyhyKS5maWx0ZXIoImFbaHJlZj0nIyIraC5hdHRyKCJpZCIpKyInXSIpLmFkZENsYXNzKHIpLGMuZWxlbWVudC50cmlnZ2VyKCJpbnZpZXcudWsuc2Nyb2xsc3B5bmF2IixbaCxzXSl9fTt0aGlzLm9wdGlvbnMuc21vb3Roc2Nyb2xsJiZ0LnNtb290aFNjcm9sbCYmby5lYWNoKGZ1bmN0aW9uKCl7dC5zbW9vdGhTY3JvbGwodGhpcyxjLm9wdGlvbnMuc21vb3Roc2Nyb2xsKX0pLHUoKSx0aGlzLmVsZW1lbnQuZGF0YSgic2Nyb2xsc3B5bmF2Iix0aGlzKSx0aGlzLmNoZWNrPXUscy5wdXNoKHRoaXMpfX0pfShVSWtpdCksZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBpPVtdO3QuY29tcG9uZW50KCJ0b2dnbGUiLHtkZWZhdWx0czp7dGFyZ2V0OiExLGNsczoidWstaGlkZGVuIixhbmltYXRpb246ITEsZHVyYXRpb246MjAwfSxib290OmZ1bmN0aW9uKCl7dC5yZWFkeShmdW5jdGlvbihlKXt0LiQoIltkYXRhLXVrLXRvZ2dsZV0iLGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10LiQodGhpcyk7aWYoIWkuZGF0YSgidG9nZ2xlIikpe3QudG9nZ2xlKGksdC5VdGlscy5vcHRpb25zKGkuYXR0cigiZGF0YS11ay10b2dnbGUiKSkpfX0pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLmZvckVhY2goZnVuY3Rpb24odCl7dC5nZXRUb2dnbGVzKCl9KX0sMCl9KX0saW5pdDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5hcmlhPS0xIT09dGhpcy5vcHRpb25zLmNscy5pbmRleE9mKCJ1ay1oaWRkZW4iKSx0aGlzLmdldFRvZ2dsZXMoKSx0aGlzLm9uKCJjbGljayIsZnVuY3Rpb24oaSl7dC5lbGVtZW50LmlzKCdhW2hyZWY9IiMiXScpJiZpLnByZXZlbnREZWZhdWx0KCksdC50b2dnbGUoKX0pLGkucHVzaCh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKCl7aWYodGhpcy50b3RvZ2dsZS5sZW5ndGgpe2lmKHRoaXMub3B0aW9ucy5hbmltYXRpb24mJnQuc3VwcG9ydC5hbmltYXRpb24pe3ZhciBpPXRoaXMsZT10aGlzLm9wdGlvbnMuYW5pbWF0aW9uLnNwbGl0KCIsIik7MT09ZS5sZW5ndGgmJihlWzFdPWVbMF0pLGVbMF09ZVswXS50cmltKCksZVsxXT1lWzFdLnRyaW0oKSx0aGlzLnRvdG9nZ2xlLmNzcygiYW5pbWF0aW9uLWR1cmF0aW9uIix0aGlzLm9wdGlvbnMuZHVyYXRpb24rIm1zIiksdGhpcy50b3RvZ2dsZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dC4kKHRoaXMpO24uaGFzQ2xhc3MoaS5vcHRpb25zLmNscyk/KG4udG9nZ2xlQ2xhc3MoaS5vcHRpb25zLmNscyksdC5VdGlscy5hbmltYXRlKG4sZVswXSkudGhlbihmdW5jdGlvbigpe24uY3NzKCJhbmltYXRpb24tZHVyYXRpb24iLCIiKSx0LlV0aWxzLmNoZWNrRGlzcGxheShuKX0pKTp0LlV0aWxzLmFuaW1hdGUodGhpcyxlWzFdKyIgdWstYW5pbWF0aW9uLXJldmVyc2UiKS50aGVuKGZ1bmN0aW9uKCl7bi50b2dnbGVDbGFzcyhpLm9wdGlvbnMuY2xzKS5jc3MoImFuaW1hdGlvbi1kdXJhdGlvbiIsIiIpLHQuVXRpbHMuY2hlY2tEaXNwbGF5KG4pfSl9KX1lbHNlIHRoaXMudG90b2dnbGUudG9nZ2xlQ2xhc3ModGhpcy5vcHRpb25zLmNscyksdC5VdGlscy5jaGVja0Rpc3BsYXkodGhpcy50b3RvZ2dsZSk7dGhpcy51cGRhdGVBcmlhKCl9fSxnZXRUb2dnbGVzOmZ1bmN0aW9uKCl7dGhpcy50b3RvZ2dsZT10aGlzLm9wdGlvbnMudGFyZ2V0P3QuJCh0aGlzLm9wdGlvbnMudGFyZ2V0KTpbXSx0aGlzLnVwZGF0ZUFyaWEoKX0sdXBkYXRlQXJpYTpmdW5jdGlvbigpe3RoaXMuYXJpYSYmdGhpcy50b3RvZ2dsZS5sZW5ndGgmJnRoaXMudG90b2dnbGUuZWFjaChmdW5jdGlvbigpe3QuJCh0aGlzKS5hdHRyKCJhcmlhLWhpZGRlbiIsdC4kKHRoaXMpLmhhc0NsYXNzKCJ1ay1oaWRkZW4iKSl9KX19KX0oVUlraXQpLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt0LmNvbXBvbmVudCgiYWxlcnQiLHtkZWZhdWx0czp7ZmFkZTohMCxkdXJhdGlvbjoyMDAsdHJpZ2dlcjoiLnVrLWFsZXJ0LWNsb3NlIn0sYm9vdDpmdW5jdGlvbigpe3QuJGh0bWwub24oImNsaWNrLmFsZXJ0LnVpa2l0IiwiW2RhdGEtdWstYWxlcnRdIixmdW5jdGlvbihpKXt2YXIgZT10LiQodGhpcyk7aWYoIWUuZGF0YSgiYWxlcnQiKSl7dmFyIG49dC5hbGVydChlLHQuVXRpbHMub3B0aW9ucyhlLmF0dHIoImRhdGEtdWstYWxlcnQiKSkpO3QuJChpLnRhcmdldCkuaXMobi5vcHRpb25zLnRyaWdnZXIpJiYoaS5wcmV2ZW50RGVmYXVsdCgpLG4uY2xvc2UoKSl9fSl9LGluaXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMub24oImNsaWNrIix0aGlzLm9wdGlvbnMudHJpZ2dlcixmdW5jdGlvbihpKXtpLnByZXZlbnREZWZhdWx0KCksdC5jbG9zZSgpfSl9LGNsb3NlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmlnZ2VyKCJjbG9zZS51ay5hbGVydCIpLGk9ZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoImNsb3NlZC51ay5hbGVydCIpLnJlbW92ZSgpfS5iaW5kKHRoaXMpO3RoaXMub3B0aW9ucy5mYWRlP3QuY3NzKCJvdmVyZmxvdyIsImhpZGRlbiIpLmNzcygibWF4LWhlaWdodCIsdC5oZWlnaHQoKSkuYW5pbWF0ZSh7aGVpZ2h0OjAsb3BhY2l0eTowLCJwYWRkaW5nLXRvcCI6MCwicGFkZGluZy1ib3R0b20iOjAsIm1hcmdpbi10b3AiOjAsIm1hcmdpbi1ib3R0b20iOjB9LHRoaXMub3B0aW9ucy5kdXJhdGlvbixpKTppKCl9fSl9KFVJa2l0KSxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dC5jb21wb25lbnQoImJ1dHRvblJhZGlvIix7ZGVmYXVsdHM6e2FjdGl2ZUNsYXNzOiJ1ay1hY3RpdmUiLHRhcmdldDoiLnVrLWJ1dHRvbiJ9LGJvb3Q6ZnVuY3Rpb24oKXt0LiRodG1sLm9uKCJjbGljay5idXR0b25yYWRpby51aWtpdCIsIltkYXRhLXVrLWJ1dHRvbi1yYWRpb10iLGZ1bmN0aW9uKGkpe3ZhciBlPXQuJCh0aGlzKTtpZighZS5kYXRhKCJidXR0b25SYWRpbyIpKXt2YXIgbj10LmJ1dHRvblJhZGlvKGUsdC5VdGlscy5vcHRpb25zKGUuYXR0cigiZGF0YS11ay1idXR0b24tcmFkaW8iKSkpLG89dC4kKGkudGFyZ2V0KTtvLmlzKG4ub3B0aW9ucy50YXJnZXQpJiZvLnRyaWdnZXIoImNsaWNrIil9fSl9LGluaXQ6ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3RoaXMuZmluZChpLm9wdGlvbnMudGFyZ2V0KS5hdHRyKCJhcmlhLWNoZWNrZWQiLCJmYWxzZSIpLmZpbHRlcigiLiIraS5vcHRpb25zLmFjdGl2ZUNsYXNzKS5hdHRyKCJhcmlhLWNoZWNrZWQiLCJ0cnVlIiksdGhpcy5vbigiY2xpY2siLHRoaXMub3B0aW9ucy50YXJnZXQsZnVuY3Rpb24oZSl7dmFyIG49dC4kKHRoaXMpO24uaXMoJ2FbaHJlZj0iIyJdJykmJmUucHJldmVudERlZmF1bHQoKSxpLmZpbmQoaS5vcHRpb25zLnRhcmdldCkubm90KG4pLnJlbW92ZUNsYXNzKGkub3B0aW9ucy5hY3RpdmVDbGFzcykuYmx1cigpLG4uYWRkQ2xhc3MoaS5vcHRpb25zLmFjdGl2ZUNsYXNzKSxpLmZpbmQoaS5vcHRpb25zLnRhcmdldCkubm90KG4pLmF0dHIoImFyaWEtY2hlY2tlZCIsImZhbHNlIiksbi5hdHRyKCJhcmlhLWNoZWNrZWQiLCJ0cnVlIiksaS50cmlnZ2VyKCJjaGFuZ2UudWsuYnV0dG9uIixbbl0pfSl9LGdldFNlbGVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmluZCgiLiIrdGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKX19KSx0LmNvbXBvbmVudCgiYnV0dG9uQ2hlY2tib3giLHtkZWZhdWx0czp7YWN0aXZlQ2xhc3M6InVrLWFjdGl2ZSIsdGFyZ2V0OiIudWstYnV0dG9uIn0sYm9vdDpmdW5jdGlvbigpe3QuJGh0bWwub24oImNsaWNrLmJ1dHRvbmNoZWNrYm94LnVpa2l0IiwiW2RhdGEtdWstYnV0dG9uLWNoZWNrYm94XSIsZnVuY3Rpb24oaSl7dmFyIGU9dC4kKHRoaXMpO2lmKCFlLmRhdGEoImJ1dHRvbkNoZWNrYm94Iikpe3ZhciBuPXQuYnV0dG9uQ2hlY2tib3goZSx0LlV0aWxzLm9wdGlvbnMoZS5hdHRyKCJkYXRhLXVrLWJ1dHRvbi1jaGVja2JveCIpKSksbz10LiQoaS50YXJnZXQpO28uaXMobi5vcHRpb25zLnRhcmdldCkmJm8udHJpZ2dlcigiY2xpY2siKX19KX0saW5pdDpmdW5jdGlvbigpe3ZhciBpPXRoaXM7dGhpcy5maW5kKGkub3B0aW9ucy50YXJnZXQpLmF0dHIoImFyaWEtY2hlY2tlZCIsImZhbHNlIikuZmlsdGVyKCIuIitpLm9wdGlvbnMuYWN0aXZlQ2xhc3MpLmF0dHIoImFyaWEtY2hlY2tlZCIsInRydWUiKSx0aGlzLm9uKCJjbGljayIsdGhpcy5vcHRpb25zLnRhcmdldCxmdW5jdGlvbihlKXt2YXIgbj10LiQodGhpcyk7bi5pcygnYVtocmVmPSIjIl0nKSYmZS5wcmV2ZW50RGVmYXVsdCgpLG4udG9nZ2xlQ2xhc3MoaS5vcHRpb25zLmFjdGl2ZUNsYXNzKS5ibHVyKCksbi5hdHRyKCJhcmlhLWNoZWNrZWQiLG4uaGFzQ2xhc3MoaS5vcHRpb25zLmFjdGl2ZUNsYXNzKSksaS50cmlnZ2VyKCJjaGFuZ2UudWsuYnV0dG9uIixbbl0pfSl9LGdldFNlbGVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmluZCgiLiIrdGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKX19KSx0LmNvbXBvbmVudCgiYnV0dG9uIix7ZGVmYXVsdHM6e30sYm9vdDpmdW5jdGlvbigpe3QuJGh0bWwub24oImNsaWNrLmJ1dHRvbi51aWtpdCIsIltkYXRhLXVrLWJ1dHRvbl0iLGZ1bmN0aW9uKCl7dmFyIGk9dC4kKHRoaXMpO2lmKCFpLmRhdGEoImJ1dHRvbiIpKXt7dC5idXR0b24oaSx0LlV0aWxzLm9wdGlvbnMoaS5hdHRyKCJkYXRhLXVrLWJ1dHRvbiIpKSl9aS50cmlnZ2VyKCJjbGljayIpfX0pfSxpbml0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmVsZW1lbnQuYXR0cigiYXJpYS1wcmVzc2VkIix0aGlzLmVsZW1lbnQuaGFzQ2xhc3MoInVrLWFjdGl2ZSIpKSx0aGlzLm9uKCJjbGljayIsZnVuY3Rpb24oaSl7dC5lbGVtZW50LmlzKCdhW2hyZWY9IiMiXScpJiZpLnByZXZlbnREZWZhdWx0KCksdC50b2dnbGUoKSx0LnRyaWdnZXIoImNoYW5nZS51ay5idXR0b24iLFt0LmVsZW1lbnQuYmx1cigpLmhhc0NsYXNzKCJ1ay1hY3RpdmUiKV0pfSl9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWstYWN0aXZlIiksdGhpcy5lbGVtZW50LmF0dHIoImFyaWEtcHJlc3NlZCIsdGhpcy5lbGVtZW50Lmhhc0NsYXNzKCJ1ay1hY3RpdmUiKSl9fSl9KFVJa2l0KSxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaShpLGUsbixvKXtpZihpPXQuJChpKSxlPXQuJChlKSxuPW58fHdpbmRvdy5pbm5lcldpZHRoLG89b3x8aS5vZmZzZXQoKSxlLmxlbmd0aCl7dmFyIHM9ZS5vdXRlcldpZHRoKCk7aWYoaS5jc3MoIm1pbi13aWR0aCIscyksInJpZ2h0Ij09dC5sYW5nZGlyZWN0aW9uKXt2YXIgYT1uLShlLm9mZnNldCgpLmxlZnQrcykscj1uLShpLm9mZnNldCgpLmxlZnQraS5vdXRlcldpZHRoKCkpO2kuY3NzKCJtYXJnaW4tcmlnaHQiLGEtcil9ZWxzZSBpLmNzcygibWFyZ2luLWxlZnQiLGUub2Zmc2V0KCkubGVmdC1vLmxlZnQpfX12YXIgZSxuPSExLG89e3g6eyJib3R0b20tbGVmdCI6ImJvdHRvbS1yaWdodCIsImJvdHRvbS1yaWdodCI6ImJvdHRvbS1sZWZ0IiwiYm90dG9tLWNlbnRlciI6ImJvdHRvbS1yaWdodCIsInRvcC1sZWZ0IjoidG9wLXJpZ2h0IiwidG9wLXJpZ2h0IjoidG9wLWxlZnQiLCJ0b3AtY2VudGVyIjoidG9wLXJpZ2h0IiwibGVmdC10b3AiOiJyaWdodCIsImxlZnQtYm90dG9tIjoicmlnaHQtYm90dG9tIiwibGVmdC1jZW50ZXIiOiJyaWdodC1jZW50ZXIiLCJyaWdodC10b3AiOiJsZWZ0IiwicmlnaHQtYm90dG9tIjoibGVmdC1ib3R0b20iLCJyaWdodC1jZW50ZXIiOiJsZWZ0LWNlbnRlciJ9LHk6eyJib3R0b20tbGVmdCI6InRvcC1sZWZ0IiwiYm90dG9tLXJpZ2h0IjoidG9wLXJpZ2h0IiwiYm90dG9tLWNlbnRlciI6InRvcC1jZW50ZXIiLCJ0b3AtbGVmdCI6ImJvdHRvbS1sZWZ0IiwidG9wLXJpZ2h0IjoiYm90dG9tLXJpZ2h0IiwidG9wLWNlbnRlciI6ImJvdHRvbS1jZW50ZXIiLCJsZWZ0LXRvcCI6InRvcC1sZWZ0IiwibGVmdC1ib3R0b20iOiJsZWZ0LWJvdHRvbSIsImxlZnQtY2VudGVyIjoidG9wLWxlZnQiLCJyaWdodC10b3AiOiJ0b3AtbGVmdCIsInJpZ2h0LWJvdHRvbSI6ImJvdHRvbS1sZWZ0IiwicmlnaHQtY2VudGVyIjoidG9wLWxlZnQifSx4eTp7fX07dC5jb21wb25lbnQoImRyb3Bkb3duIix7ZGVmYXVsdHM6e21vZGU6ImhvdmVyIixwb3M6ImJvdHRvbS1sZWZ0IixvZmZzZXQ6MCxyZW1haW50aW1lOjgwMCxqdXN0aWZ5OiExLGJvdW5kYXJ5OnQuJHdpbixkZWxheTowLGRyb3Bkb3duU2VsZWN0b3I6Ii51ay1kcm9wZG93biwudWstZHJvcGRvd24tYmxhbmsiLGhvdmVyRGVsYXlJZGxlOjI1MCxwcmV2ZW50ZmxpcDohMX0scmVtYWluSWRsZTohMSxib290OmZ1bmN0aW9uKCl7dmFyIGk9dC5zdXBwb3J0LnRvdWNoPyJjbGljayI6Im1vdXNlZW50ZXIiO3QuJGh0bWwub24oaSsiLmRyb3Bkb3duLnVpa2l0IiwiW2RhdGEtdWstZHJvcGRvd25dIixmdW5jdGlvbihlKXt2YXIgbj10LiQodGhpcyk7aWYoIW4uZGF0YSgiZHJvcGRvd24iKSl7dmFyIG89dC5kcm9wZG93bihuLHQuVXRpbHMub3B0aW9ucyhuLmF0dHIoImRhdGEtdWstZHJvcGRvd24iKSkpOygiY2xpY2siPT1pfHwibW91c2VlbnRlciI9PWkmJiJob3ZlciI9PW8ub3B0aW9ucy5tb2RlKSYmby5lbGVtZW50LnRyaWdnZXIoaSksby5lbGVtZW50LmZpbmQoby5vcHRpb25zLmRyb3Bkb3duU2VsZWN0b3IpLmxlbmd0aCYmZS5wcmV2ZW50RGVmYXVsdCgpfX0pfSxpbml0OmZ1bmN0aW9uKCl7dmFyIGk9dGhpczt0aGlzLmRyb3Bkb3duPXRoaXMuZmluZCh0aGlzLm9wdGlvbnMuZHJvcGRvd25TZWxlY3RvciksdGhpcy5vZmZzZXRQYXJlbnQ9dGhpcy5kcm9wZG93bi5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuLTEhPT10LiQuaW5BcnJheSh0LiQodGhpcykuY3NzKCJwb3NpdGlvbiIpLFsicmVsYXRpdmUiLCJmaXhlZCIsImFic29sdXRlIl0pfSkuc2xpY2UoMCwxKSx0aGlzLmNlbnRlcmVkPXRoaXMuZHJvcGRvd24uaGFzQ2xhc3MoInVrLWRyb3Bkb3duLWNlbnRlciIpLHRoaXMuanVzdGlmaWVkPXRoaXMub3B0aW9ucy5qdXN0aWZ5P3QuJCh0aGlzLm9wdGlvbnMuanVzdGlmeSk6ITEsdGhpcy5ib3VuZGFyeT10LiQodGhpcy5vcHRpb25zLmJvdW5kYXJ5KSx0aGlzLmJvdW5kYXJ5Lmxlbmd0aHx8KHRoaXMuYm91bmRhcnk9dC4kd2luKSx0aGlzLmRyb3Bkb3duLmhhc0NsYXNzKCJ1ay1kcm9wZG93bi11cCIpJiYodGhpcy5vcHRpb25zLnBvcz0idG9wLWxlZnQiKSx0aGlzLmRyb3Bkb3duLmhhc0NsYXNzKCJ1ay1kcm9wZG93bi1mbGlwIikmJih0aGlzLm9wdGlvbnMucG9zPXRoaXMub3B0aW9ucy5wb3MucmVwbGFjZSgibGVmdCIsInJpZ2h0IikpLHRoaXMuZHJvcGRvd24uaGFzQ2xhc3MoInVrLWRyb3Bkb3duLWNlbnRlciIpJiYodGhpcy5vcHRpb25zLnBvcz10aGlzLm9wdGlvbnMucG9zLnJlcGxhY2UoLyhsZWZ0fHJpZ2h0KS8sImNlbnRlciIpKSx0aGlzLmVsZW1lbnQuYXR0cigiYXJpYS1oYXNwb3B1cCIsInRydWUiKSx0aGlzLmVsZW1lbnQuYXR0cigiYXJpYS1leHBhbmRlZCIsdGhpcy5lbGVtZW50Lmhhc0NsYXNzKCJ1ay1vcGVuIikpLCJjbGljayI9PXRoaXMub3B0aW9ucy5tb2RlfHx0LnN1cHBvcnQudG91Y2g/dGhpcy5vbigiY2xpY2sudWlraXQuZHJvcGRvd24iLGZ1bmN0aW9uKGUpe3ZhciBuPXQuJChlLnRhcmdldCk7bi5wYXJlbnRzKGkub3B0aW9ucy5kcm9wZG93blNlbGVjdG9yKS5sZW5ndGh8fCgobi5pcygiYVtocmVmPScjJ10iKXx8bi5wYXJlbnQoKS5pcygiYVtocmVmPScjJ10iKXx8aS5kcm9wZG93bi5sZW5ndGgmJiFpLmRyb3Bkb3duLmlzKCI6dmlzaWJsZSIpKSYmZS5wcmV2ZW50RGVmYXVsdCgpLG4uYmx1cigpKSxpLmVsZW1lbnQuaGFzQ2xhc3MoInVrLW9wZW4iKT8oIWkuZHJvcGRvd24uZmluZChlLnRhcmdldCkubGVuZ3RofHxuLmlzKCIudWstZHJvcGRvd24tY2xvc2UiKXx8bi5wYXJlbnRzKCIudWstZHJvcGRvd24tY2xvc2UiKS5sZW5ndGgpJiZpLmhpZGUoKTppLnNob3coKX0pOnRoaXMub24oIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7aS50cmlnZ2VyKCJwb2ludGVyZW50ZXIudWsuZHJvcGRvd24iLFtpXSksaS5yZW1haW5JZGxlJiZjbGVhclRpbWVvdXQoaS5yZW1haW5JZGxlKSxlJiZjbGVhclRpbWVvdXQoZSksbiYmbj09aXx8KGU9biYmbiE9aT9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZT1zZXRUaW1lb3V0KGkuc2hvdy5iaW5kKGkpLGkub3B0aW9ucy5kZWxheSl9LGkub3B0aW9ucy5ob3ZlckRlbGF5SWRsZSk6c2V0VGltZW91dChpLnNob3cuYmluZChpKSxpLm9wdGlvbnMuZGVsYXkpKX0pLm9uKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe2UmJmNsZWFyVGltZW91dChlKSxpLnJlbWFpbklkbGU9c2V0VGltZW91dChmdW5jdGlvbigpe24mJm49PWkmJmkuaGlkZSgpfSxpLm9wdGlvbnMucmVtYWludGltZSksaS50cmlnZ2VyKCJwb2ludGVybGVhdmUudWsuZHJvcGRvd24iLFtpXSl9KS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpe3ZhciBvPXQuJChlLnRhcmdldCk7cmV0dXJuIGkucmVtYWluSWRsZSYmY2xlYXJUaW1lb3V0KGkucmVtYWluSWRsZSksbiYmbj09aT8oKCFpLmRyb3Bkb3duLmZpbmQoZS50YXJnZXQpLmxlbmd0aHx8by5pcygiLnVrLWRyb3Bkb3duLWNsb3NlIil8fG8ucGFyZW50cygiLnVrLWRyb3Bkb3duLWNsb3NlIikubGVuZ3RoKSYmaS5oaWRlKCksdm9pZCAwKTooKG8uaXMoImFbaHJlZj0nIyddIil8fG8ucGFyZW50KCkuaXMoImFbaHJlZj0nIyddIikpJiZlLnByZXZlbnREZWZhdWx0KCksaS5zaG93KCksdm9pZCAwKX0pfSxzaG93OmZ1bmN0aW9uKCl7dC4kaHRtbC5vZmYoImNsaWNrLm91dGVyLmRyb3Bkb3duIiksbiYmbiE9dGhpcyYmbi5oaWRlKCEwKSxlJiZjbGVhclRpbWVvdXQoZSksdGhpcy50cmlnZ2VyKCJiZWZvcmVzaG93LnVrLmRyb3Bkb3duIixbdGhpc10pLHRoaXMuY2hlY2tEaW1lbnNpb25zKCksdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1ay1vcGVuIiksdGhpcy5lbGVtZW50LmF0dHIoImFyaWEtZXhwYW5kZWQiLCJ0cnVlIiksdGhpcy50cmlnZ2VyKCJzaG93LnVrLmRyb3Bkb3duIixbdGhpc10pLHQuVXRpbHMuY2hlY2tEaXNwbGF5KHRoaXMuZHJvcGRvd24sITApLG49dGhpcyx0aGlzLnJlZ2lzdGVyT3V0ZXJDbGljaygpfSxoaWRlOmZ1bmN0aW9uKHQpe3RoaXMudHJpZ2dlcigiYmVmb3JlaGlkZS51ay5kcm9wZG93biIsW3RoaXMsdF0pLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWstb3BlbiIpLHRoaXMucmVtYWluSWRsZSYmY2xlYXJUaW1lb3V0KHRoaXMucmVtYWluSWRsZSksdGhpcy5yZW1haW5JZGxlPSExLHRoaXMuZWxlbWVudC5hdHRyKCJhcmlhLWV4cGFuZGVkIiwiZmFsc2UiKSx0aGlzLnRyaWdnZXIoImhpZGUudWsuZHJvcGRvd24iLFt0aGlzLHRdKSxuPT10aGlzJiYobj0hMSl9LHJlZ2lzdGVyT3V0ZXJDbGljazpmdW5jdGlvbigpe3ZhciBpPXRoaXM7dC4kaHRtbC5vZmYoImNsaWNrLm91dGVyLmRyb3Bkb3duIiksc2V0VGltZW91dChmdW5jdGlvbigpe3QuJGh0bWwub24oImNsaWNrLm91dGVyLmRyb3Bkb3duIixmdW5jdGlvbihvKXtlJiZjbGVhclRpbWVvdXQoZSk7dC4kKG8udGFyZ2V0KTtuIT1pfHxpLmVsZW1lbnQuZmluZChvLnRhcmdldCkubGVuZ3RofHwoaS5oaWRlKCEwKSx0LiRodG1sLm9mZigiY2xpY2sub3V0ZXIuZHJvcGRvd24iKSl9KX0sMTApfSxjaGVja0RpbWVuc2lvbnM6ZnVuY3Rpb24oKXtpZih0aGlzLmRyb3Bkb3duLmxlbmd0aCl7dGhpcy5kcm9wZG93bi5yZW1vdmVDbGFzcygidWstZHJvcGRvd24tdG9wIHVrLWRyb3Bkb3duLWJvdHRvbSB1ay1kcm9wZG93bi1sZWZ0IHVrLWRyb3Bkb3duLXJpZ2h0IHVrLWRyb3Bkb3duLXN0YWNrIikuY3NzKHsidG9wLWxlZnQiOiIiLGxlZnQ6IiIsIm1hcmdpbi1sZWZ0IjoiIiwibWFyZ2luLXJpZ2h0IjoiIn0pLHRoaXMuanVzdGlmaWVkJiZ0aGlzLmp1c3RpZmllZC5sZW5ndGgmJnRoaXMuZHJvcGRvd24uY3NzKCJtaW4td2lkdGgiLCIiKTt2YXIgZSxuPXQuJC5leHRlbmQoe30sdGhpcy5vZmZzZXRQYXJlbnQub2Zmc2V0KCkse3dpZHRoOnRoaXMub2Zmc2V0UGFyZW50WzBdLm9mZnNldFdpZHRoLGhlaWdodDp0aGlzLm9mZnNldFBhcmVudFswXS5vZmZzZXRIZWlnaHR9KSxzPXRoaXMub3B0aW9ucy5vZmZzZXQsYT10aGlzLmRyb3Bkb3duLHI9KGEuc2hvdygpLm9mZnNldCgpfHx7bGVmdDowLHRvcDowfSxhLm91dGVyV2lkdGgoKSksbD1hLm91dGVySGVpZ2h0KCksYz10aGlzLmJvdW5kYXJ5LndpZHRoKCksdT0odGhpcy5ib3VuZGFyeVswXSE9PXdpbmRvdyYmdGhpcy5ib3VuZGFyeS5vZmZzZXQoKT90aGlzLmJvdW5kYXJ5Lm9mZnNldCgpOnt0b3A6MCxsZWZ0OjB9LHRoaXMub3B0aW9ucy5wb3MpLGg9eyJib3R0b20tbGVmdCI6e3RvcDowK24uaGVpZ2h0K3MsbGVmdDowfSwiYm90dG9tLXJpZ2h0Ijp7dG9wOjArbi5oZWlnaHQrcyxsZWZ0OjArbi53aWR0aC1yfSwiYm90dG9tLWNlbnRlciI6e3RvcDowK24uaGVpZ2h0K3MsbGVmdDowK24ud2lkdGgvMi1yLzJ9LCJ0b3AtbGVmdCI6e3RvcDowLWwtcyxsZWZ0OjB9LCJ0b3AtcmlnaHQiOnt0b3A6MC1sLXMsbGVmdDowK24ud2lkdGgtcn0sInRvcC1jZW50ZXIiOnt0b3A6MC1sLXMsbGVmdDowK24ud2lkdGgvMi1yLzJ9LCJsZWZ0LXRvcCI6e3RvcDowLGxlZnQ6MC1yLXN9LCJsZWZ0LWJvdHRvbSI6e3RvcDowK24uaGVpZ2h0LWwsbGVmdDowLXItc30sImxlZnQtY2VudGVyIjp7dG9wOjArbi5oZWlnaHQvMi1sLzIsbGVmdDowLXItc30sInJpZ2h0LXRvcCI6e3RvcDowLGxlZnQ6MCtuLndpZHRoK3N9LCJyaWdodC1ib3R0b20iOnt0b3A6MCtuLmhlaWdodC1sLGxlZnQ6MCtuLndpZHRoK3N9LCJyaWdodC1jZW50ZXIiOnt0b3A6MCtuLmhlaWdodC8yLWwvMixsZWZ0OjArbi53aWR0aCtzfX0sZD17fTtpZihlPXUuc3BsaXQoIi0iKSxkPWhbdV0/aFt1XTpoWyJib3R0b20tbGVmdCJdLHRoaXMuanVzdGlmaWVkJiZ0aGlzLmp1c3RpZmllZC5sZW5ndGgpaShhLmNzcyh7bGVmdDowfSksdGhpcy5qdXN0aWZpZWQsYyk7ZWxzZSBpZih0aGlzLm9wdGlvbnMucHJldmVudGZsaXAhPT0hMCl7dmFyIHA7c3dpdGNoKHRoaXMuY2hlY2tCb3VuZGFyeShuLmxlZnQrZC5sZWZ0LG4udG9wK2QudG9wLHIsbCxjKSl7Y2FzZSJ4IjoieCIhPT10aGlzLm9wdGlvbnMucHJldmVudGZsaXAmJihwPW8ueFt1XXx8InJpZ2h0LXRvcCIpO2JyZWFrO2Nhc2UieSI6InkiIT09dGhpcy5vcHRpb25zLnByZXZlbnRmbGlwJiYocD1vLnlbdV18fCJ0b3AtbGVmdCIpO2JyZWFrO2Nhc2UieHkiOnRoaXMub3B0aW9ucy5wcmV2ZW50ZmxpcHx8KHA9by54eVt1XXx8InJpZ2h0LWJvdHRvbSIpfXAmJihlPXAuc3BsaXQoIi0iKSxkPWhbcF0/aFtwXTpoWyJib3R0b20tbGVmdCJdLHRoaXMuY2hlY2tCb3VuZGFyeShuLmxlZnQrZC5sZWZ0LG4udG9wK2QudG9wLHIsbCxjKSYmKGU9dS5zcGxpdCgiLSIpLGQ9aFt1XT9oW3VdOmhbImJvdHRvbS1sZWZ0Il0pKX1yPmMmJihhLmFkZENsYXNzKCJ1ay1kcm9wZG93bi1zdGFjayIpLHRoaXMudHJpZ2dlcigic3RhY2sudWsuZHJvcGRvd24iLFt0aGlzXSkpLGEuY3NzKGQpLmNzcygiZGlzcGxheSIsIiIpLmFkZENsYXNzKCJ1ay1kcm9wZG93bi0iK2VbMF0pfX0sY2hlY2tCb3VuZGFyeTpmdW5jdGlvbihpLGUsbixvLHMpe3ZhciBhPSIiO3JldHVybigwPml8fGktdC4kd2luLnNjcm9sbExlZnQoKStuPnMpJiYoYSs9IngiKSwoZS10LiR3aW4uc2Nyb2xsVG9wKCk8MHx8ZS10LiR3aW4uc2Nyb2xsVG9wKCkrbz53aW5kb3cuaW5uZXJIZWlnaHQpJiYoYSs9InkiKSxhfX0pLHQuY29tcG9uZW50KCJkcm9wZG93bk92ZXJsYXkiLHtkZWZhdWx0czp7anVzdGlmeTohMSxjbHM6IiIsZHVyYXRpb246MjAwfSxib290OmZ1bmN0aW9uKCl7dC5yZWFkeShmdW5jdGlvbihpKXt0LiQoIltkYXRhLXVrLWRyb3Bkb3duLW92ZXJsYXldIixpKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dC4kKHRoaXMpO2kuZGF0YSgiZHJvcGRvd25PdmVybGF5Iil8fHQuZHJvcGRvd25PdmVybGF5KGksdC5VdGlscy5vcHRpb25zKGkuYXR0cigiZGF0YS11ay1kcm9wZG93bi1vdmVybGF5IikpKX0pfSl9LGluaXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuanVzdGlmaWVkPXRoaXMub3B0aW9ucy5qdXN0aWZ5P3QuJCh0aGlzLm9wdGlvbnMuanVzdGlmeSk6ITEsdGhpcy5vdmVybGF5PXRoaXMuZWxlbWVudC5maW5kKCJ1ay1kcm9wZG93bi1vdmVybGF5IiksdGhpcy5vdmVybGF5Lmxlbmd0aHx8KHRoaXMub3ZlcmxheT10LiQoJzxkaXYgY2xhc3M9InVrLWRyb3Bkb3duLW92ZXJsYXkiPjwvZGl2PicpLmFwcGVuZFRvKHRoaXMuZWxlbWVudCkpLHRoaXMub3ZlcmxheS5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuY2xzKSx0aGlzLm9uKHsiYmVmb3Jlc2hvdy51ay5kcm9wZG93biI6ZnVuY3Rpb24odCxuKXtlLmRyb3Bkb3duPW4sZS5qdXN0aWZpZWQmJmUuanVzdGlmaWVkLmxlbmd0aCYmaShlLm92ZXJsYXkuY3NzKHtkaXNwbGF5OiJibG9jayIsIm1hcmdpbi1sZWZ0IjoiIiwibWFyZ2luLXJpZ2h0IjoiIn0pLGUuanVzdGlmaWVkLGUuanVzdGlmaWVkLm91dGVyV2lkdGgoKSl9LCJzaG93LnVrLmRyb3Bkb3duIjpmdW5jdGlvbigpe3ZhciBpPWUuZHJvcGRvd24uZHJvcGRvd24ub3V0ZXJIZWlnaHQoITApO2UuZHJvcGRvd24uZWxlbWVudC5yZW1vdmVDbGFzcygidWstb3BlbiIpLGUub3ZlcmxheS5zdG9wKCkuY3NzKCJkaXNwbGF5IiwiYmxvY2siKS5hbmltYXRlKHtoZWlnaHQ6aX0sZS5vcHRpb25zLmR1cmF0aW9uLGZ1bmN0aW9uKCl7ZS5kcm9wZG93bi5kcm9wZG93bi5jc3MoInZpc2liaWxpdHkiLCIiKSxlLmRyb3Bkb3duLmVsZW1lbnQuYWRkQ2xhc3MoInVrLW9wZW4iKSx0LlV0aWxzLmNoZWNrRGlzcGxheShlLmRyb3Bkb3duLmRyb3Bkb3duLCEwKQp9KSxlLnBvaW50ZXJsZWF2ZT0hMX0sImhpZGUudWsuZHJvcGRvd24iOmZ1bmN0aW9uKCl7ZS5vdmVybGF5LnN0b3AoKS5hbmltYXRlKHtoZWlnaHQ6MH0sZS5vcHRpb25zLmR1cmF0aW9uKX0sInBvaW50ZXJlbnRlci51ay5kcm9wZG93biI6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZS5yZW1haW5JZGxlKX0sInBvaW50ZXJsZWF2ZS51ay5kcm9wZG93biI6ZnVuY3Rpb24oKXtlLnBvaW50ZXJsZWF2ZT0hMH19KSx0aGlzLm92ZXJsYXkub24oe21vdXNlZW50ZXI6ZnVuY3Rpb24oKXtlLnJlbWFpbklkbGUmJihjbGVhclRpbWVvdXQoZS5kcm9wZG93bi5yZW1haW5JZGxlKSxjbGVhclRpbWVvdXQoZS5yZW1haW5JZGxlKSl9LG1vdXNlbGVhdmU6ZnVuY3Rpb24oKXtlLnBvaW50ZXJsZWF2ZSYmbiYmKGUucmVtYWluSWRsZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7biYmbi5oaWRlKCl9LG4ub3B0aW9ucy5yZW1haW50aW1lKSl9fSl9fSl9KFVJa2l0KSxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGk9W107dC5jb21wb25lbnQoImdyaWRNYXRjaEhlaWdodCIse2RlZmF1bHRzOnt0YXJnZXQ6ITEscm93OiEwLGlnbm9yZXN0YWNrZWQ6ITF9LGJvb3Q6ZnVuY3Rpb24oKXt0LnJlYWR5KGZ1bmN0aW9uKGkpe3QuJCgiW2RhdGEtdWstZ3JpZC1tYXRjaF0iLGkpLmVhY2goZnVuY3Rpb24oKXt2YXIgaSxlPXQuJCh0aGlzKTtlLmRhdGEoImdyaWRNYXRjaEhlaWdodCIpfHwoaT10LmdyaWRNYXRjaEhlaWdodChlLHQuVXRpbHMub3B0aW9ucyhlLmF0dHIoImRhdGEtdWstZ3JpZC1tYXRjaCIpKSkpfSl9KX0saW5pdDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5jb2x1bW5zPXRoaXMuZWxlbWVudC5jaGlsZHJlbigpLHRoaXMuZWxlbWVudHM9dGhpcy5vcHRpb25zLnRhcmdldD90aGlzLmZpbmQodGhpcy5vcHRpb25zLnRhcmdldCk6dGhpcy5jb2x1bW5zLHRoaXMuY29sdW1ucy5sZW5ndGgmJih0LiR3aW4ub24oImxvYWQgcmVzaXplIG9yaWVudGF0aW9uY2hhbmdlIixmdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKCl7ZS5tYXRjaCgpfTtyZXR1cm4gdC4kKGZ1bmN0aW9uKCl7aSgpfSksdC5VdGlscy5kZWJvdW5jZShpLDUwKX0oKSksdC4kaHRtbC5vbigiY2hhbmdlZC51ay5kb20iLGZ1bmN0aW9uKCl7ZS5jb2x1bW5zPWUuZWxlbWVudC5jaGlsZHJlbigpLGUuZWxlbWVudHM9ZS5vcHRpb25zLnRhcmdldD9lLmZpbmQoZS5vcHRpb25zLnRhcmdldCk6ZS5jb2x1bW5zLGUubWF0Y2goKX0pLHRoaXMub24oImRpc3BsYXkudWsuY2hlY2siLGZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmlzKCI6dmlzaWJsZSIpJiZ0aGlzLm1hdGNoKCl9LmJpbmQodGhpcykpLGkucHVzaCh0aGlzKSl9LG1hdGNoOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5jb2x1bW5zLmZpbHRlcigiOnZpc2libGU6Zmlyc3QiKTtpZihpLmxlbmd0aCl7dmFyIGU9TWF0aC5jZWlsKDEwMCpwYXJzZUZsb2F0KGkuY3NzKCJ3aWR0aCIpKS9wYXJzZUZsb2F0KGkucGFyZW50KCkuY3NzKCJ3aWR0aCIpKSk+PTEwMDtyZXR1cm4gZSYmIXRoaXMub3B0aW9ucy5pZ25vcmVzdGFja2VkP3RoaXMucmV2ZXJ0KCk6dC5VdGlscy5tYXRjaEhlaWdodHModGhpcy5lbGVtZW50cyx0aGlzLm9wdGlvbnMpLHRoaXN9fSxyZXZlcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5jc3MoIm1pbi1oZWlnaHQiLCIiKSx0aGlzfX0pLHQuY29tcG9uZW50KCJncmlkTWFyZ2luIix7ZGVmYXVsdHM6e2NsczoidWstZ3JpZC1tYXJnaW4ifSxib290OmZ1bmN0aW9uKCl7dC5yZWFkeShmdW5jdGlvbihpKXt0LiQoIltkYXRhLXVrLWdyaWQtbWFyZ2luXSIsaSkuZWFjaChmdW5jdGlvbigpe3ZhciBpLGU9dC4kKHRoaXMpO2UuZGF0YSgiZ3JpZE1hcmdpbiIpfHwoaT10LmdyaWRNYXJnaW4oZSx0LlV0aWxzLm9wdGlvbnMoZS5hdHRyKCJkYXRhLXVrLWdyaWQtbWFyZ2luIikpKSl9KX0pfSxpbml0OmZ1bmN0aW9uKCl7dC5zdGFja01hcmdpbih0aGlzLmVsZW1lbnQsdGhpcy5vcHRpb25zKX19KX0oVUlraXQpLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKGksZSl7cmV0dXJuIGU/KCJvYmplY3QiPT10eXBlb2YgaT8oaT1pIGluc3RhbmNlb2YgalF1ZXJ5P2k6dC4kKGkpLGkucGFyZW50KCkubGVuZ3RoJiYoZS5wZXJzaXN0PWksZS5wZXJzaXN0LmRhdGEoIm1vZGFsUGVyc2lzdFBhcmVudCIsaS5wYXJlbnQoKSkpKTppPSJzdHJpbmciPT10eXBlb2YgaXx8Im51bWJlciI9PXR5cGVvZiBpP3QuJCgiPGRpdj48L2Rpdj4iKS5odG1sKGkpOnQuJCgiPGRpdj48L2Rpdj4iKS5odG1sKCJVSWtpdC5tb2RhbCBFcnJvcjogVW5zdXBwb3J0ZWQgZGF0YSB0eXBlOiAiK3R5cGVvZiBpKSxpLmFwcGVuZFRvKGUuZWxlbWVudC5maW5kKCIudWstbW9kYWwtZGlhbG9nIikpLGUpOnZvaWQgMH12YXIgZSxuPSExLG89MCxzPXQuJGh0bWw7dC5jb21wb25lbnQoIm1vZGFsIix7ZGVmYXVsdHM6e2tleWJvYXJkOiEwLGJnY2xvc2U6ITAsbWluU2Nyb2xsSGVpZ2h0OjE1MCxjZW50ZXI6ITEsbW9kYWw6ITB9LHNjcm9sbGFibGU6ITEsdHJhbnNpdGlvbjohMSxoYXNUcmFuc2l0aW9uZWQ6ITAsaW5pdDpmdW5jdGlvbigpe2lmKGV8fChlPXQuJCgiYm9keSIpKSx0aGlzLmVsZW1lbnQubGVuZ3RoKXt2YXIgaT10aGlzO3RoaXMucGFkZGluZ2Rpcj0icGFkZGluZy0iKygibGVmdCI9PXQubGFuZ2RpcmVjdGlvbj8icmlnaHQiOiJsZWZ0IiksdGhpcy5kaWFsb2c9dGhpcy5maW5kKCIudWstbW9kYWwtZGlhbG9nIiksdGhpcy5hY3RpdmU9ITEsdGhpcy5lbGVtZW50LmF0dHIoImFyaWEtaGlkZGVuIix0aGlzLmVsZW1lbnQuaGFzQ2xhc3MoInVrLW9wZW4iKSksdGhpcy5vbigiY2xpY2siLCIudWstbW9kYWwtY2xvc2UiLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSxpLmhpZGUoKX0pLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7dmFyIG49dC4kKGUudGFyZ2V0KTtuWzBdPT1pLmVsZW1lbnRbMF0mJmkub3B0aW9ucy5iZ2Nsb3NlJiZpLmhpZGUoKX0pfX0sdG9nZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdGhpcy5pc0FjdGl2ZSgpPyJoaWRlIjoic2hvdyJdKCl9LHNob3c6ZnVuY3Rpb24oKXtpZih0aGlzLmVsZW1lbnQubGVuZ3RoKXt2YXIgaT10aGlzO2lmKCF0aGlzLmlzQWN0aXZlKCkpcmV0dXJuIHRoaXMub3B0aW9ucy5tb2RhbCYmbiYmbi5oaWRlKCEwKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVrLW9wZW4iKS5zaG93KCksdGhpcy5yZXNpemUoKSx0aGlzLm9wdGlvbnMubW9kYWwmJihuPXRoaXMpLHRoaXMuYWN0aXZlPSEwLG8rKyx0LnN1cHBvcnQudHJhbnNpdGlvbj8odGhpcy5oYXNUcmFuc2l0aW9uZWQ9ITEsdGhpcy5lbGVtZW50Lm9uZSh0LnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXtpLmhhc1RyYW5zaXRpb25lZD0hMH0pLmFkZENsYXNzKCJ1ay1vcGVuIikpOnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWstb3BlbiIpLHMuYWRkQ2xhc3MoInVrLW1vZGFsLXBhZ2UiKS5oZWlnaHQoKSx0aGlzLmVsZW1lbnQuYXR0cigiYXJpYS1oaWRkZW4iLCJmYWxzZSIpLHRoaXMuZWxlbWVudC50cmlnZ2VyKCJzaG93LnVrLm1vZGFsIiksdC5VdGlscy5jaGVja0Rpc3BsYXkodGhpcy5kaWFsb2csITApLHRoaXN9fSxoaWRlOmZ1bmN0aW9uKGkpe2lmKCFpJiZ0LnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy5oYXNUcmFuc2l0aW9uZWQpe3ZhciBlPXRoaXM7dGhpcy5vbmUodC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGZ1bmN0aW9uKCl7ZS5faGlkZSgpfSkucmVtb3ZlQ2xhc3MoInVrLW9wZW4iKX1lbHNlIHRoaXMuX2hpZGUoKTtyZXR1cm4gdGhpc30scmVzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9ZS53aWR0aCgpO2lmKHRoaXMuc2Nyb2xsYmFyd2lkdGg9d2luZG93LmlubmVyV2lkdGgtdCxlLmNzcyh0aGlzLnBhZGRpbmdkaXIsdGhpcy5zY3JvbGxiYXJ3aWR0aCksdGhpcy5lbGVtZW50LmNzcygib3ZlcmZsb3cteSIsdGhpcy5zY3JvbGxiYXJ3aWR0aD8ic2Nyb2xsIjoiYXV0byIpLCF0aGlzLnVwZGF0ZVNjcm9sbGFibGUoKSYmdGhpcy5vcHRpb25zLmNlbnRlcil7dmFyIGk9dGhpcy5kaWFsb2cub3V0ZXJIZWlnaHQoKSxuPXBhcnNlSW50KHRoaXMuZGlhbG9nLmNzcygibWFyZ2luLXRvcCIpLDEwKStwYXJzZUludCh0aGlzLmRpYWxvZy5jc3MoIm1hcmdpbi1ib3R0b20iKSwxMCk7aStuPHdpbmRvdy5pbm5lckhlaWdodD90aGlzLmRpYWxvZy5jc3Moe3RvcDp3aW5kb3cuaW5uZXJIZWlnaHQvMi1pLzItbn0pOnRoaXMuZGlhbG9nLmNzcyh7dG9wOiIifSl9fSx1cGRhdGVTY3JvbGxhYmxlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kaWFsb2cuZmluZCgiLnVrLW92ZXJmbG93LWNvbnRhaW5lcjp2aXNpYmxlOmZpcnN0Iik7aWYodC5sZW5ndGgpe3QuY3NzKCJoZWlnaHQiLDApO3ZhciBpPU1hdGguYWJzKHBhcnNlSW50KHRoaXMuZGlhbG9nLmNzcygibWFyZ2luLXRvcCIpLDEwKSksZT10aGlzLmRpYWxvZy5vdXRlckhlaWdodCgpLG49d2luZG93LmlubmVySGVpZ2h0LG89bi0yKigyMD5pPzIwOmkpLWU7cmV0dXJuIHQuY3NzKHsibWF4LWhlaWdodCI6bzx0aGlzLm9wdGlvbnMubWluU2Nyb2xsSGVpZ2h0PyIiOm8saGVpZ2h0OiIifSksITB9cmV0dXJuITF9LF9oaWRlOmZ1bmN0aW9uKCl7dGhpcy5hY3RpdmU9ITEsbz4wP28tLTpvPTAsdGhpcy5lbGVtZW50LmhpZGUoKS5yZW1vdmVDbGFzcygidWstb3BlbiIpLHRoaXMuZWxlbWVudC5hdHRyKCJhcmlhLWhpZGRlbiIsInRydWUiKSxvfHwocy5yZW1vdmVDbGFzcygidWstbW9kYWwtcGFnZSIpLGUuY3NzKHRoaXMucGFkZGluZ2RpciwiIikpLG49PT10aGlzJiYobj0hMSksdGhpcy50cmlnZ2VyKCJoaWRlLnVrLm1vZGFsIil9LGlzQWN0aXZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlfX0pLHQuY29tcG9uZW50KCJtb2RhbFRyaWdnZXIiLHtib290OmZ1bmN0aW9uKCl7dC4kaHRtbC5vbigiY2xpY2subW9kYWwudWlraXQiLCJbZGF0YS11ay1tb2RhbF0iLGZ1bmN0aW9uKGkpe3ZhciBlPXQuJCh0aGlzKTtpZihlLmlzKCJhIikmJmkucHJldmVudERlZmF1bHQoKSwhZS5kYXRhKCJtb2RhbFRyaWdnZXIiKSl7dmFyIG49dC5tb2RhbFRyaWdnZXIoZSx0LlV0aWxzLm9wdGlvbnMoZS5hdHRyKCJkYXRhLXVrLW1vZGFsIikpKTtuLnNob3coKX19KSx0LiRodG1sLm9uKCJrZXlkb3duLm1vZGFsLnVpa2l0IixmdW5jdGlvbih0KXtuJiYyNz09PXQua2V5Q29kZSYmbi5vcHRpb25zLmtleWJvYXJkJiYodC5wcmV2ZW50RGVmYXVsdCgpLG4uaGlkZSgpKX0pLHQuJHdpbi5vbigicmVzaXplIG9yaWVudGF0aW9uY2hhbmdlIix0LlV0aWxzLmRlYm91bmNlKGZ1bmN0aW9uKCl7biYmbi5yZXNpemUoKX0sMTUwKSl9LGluaXQ6ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3RoaXMub3B0aW9ucz10LiQuZXh0ZW5kKHt0YXJnZXQ6aS5lbGVtZW50LmlzKCJhIik/aS5lbGVtZW50LmF0dHIoImhyZWYiKTohMX0sdGhpcy5vcHRpb25zKSx0aGlzLm1vZGFsPXQubW9kYWwodGhpcy5vcHRpb25zLnRhcmdldCx0aGlzLm9wdGlvbnMpLHRoaXMub24oImNsaWNrIixmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksaS5zaG93KCl9KSx0aGlzLnByb3h5KHRoaXMubW9kYWwsInNob3cgaGlkZSBpc0FjdGl2ZSIpfX0pLHQubW9kYWwuZGlhbG9nPWZ1bmN0aW9uKGUsbil7dmFyIG89dC5tb2RhbCh0LiQodC5tb2RhbC5kaWFsb2cudGVtcGxhdGUpLmFwcGVuZFRvKCJib2R5Iiksbik7cmV0dXJuIG8ub24oImhpZGUudWsubW9kYWwiLGZ1bmN0aW9uKCl7by5wZXJzaXN0JiYoby5wZXJzaXN0LmFwcGVuZFRvKG8ucGVyc2lzdC5kYXRhKCJtb2RhbFBlcnNpc3RQYXJlbnQiKSksby5wZXJzaXN0PSExKSxvLmVsZW1lbnQucmVtb3ZlKCl9KSxpKGUsbyksb30sdC5tb2RhbC5kaWFsb2cudGVtcGxhdGU9JzxkaXYgY2xhc3M9InVrLW1vZGFsIj48ZGl2IGNsYXNzPSJ1ay1tb2RhbC1kaWFsb2ciIHN0eWxlPSJtaW4taGVpZ2h0OjA7Ij48L2Rpdj48L2Rpdj4nLHQubW9kYWwuYWxlcnQ9ZnVuY3Rpb24oaSxlKXtlPXQuJC5leHRlbmQoITAse2JnY2xvc2U6ITEsa2V5Ym9hcmQ6ITEsbW9kYWw6ITEsbGFiZWxzOnQubW9kYWwubGFiZWxzfSxlKTt2YXIgbj10Lm1vZGFsLmRpYWxvZyhbJzxkaXYgY2xhc3M9InVrLW1hcmdpbiB1ay1tb2RhbC1jb250ZW50Ij4nK1N0cmluZyhpKSsiPC9kaXY+IiwnPGRpdiBjbGFzcz0idWstbW9kYWwtZm9vdGVyIHVrLXRleHQtcmlnaHQiPjxidXR0b24gY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tcHJpbWFyeSB1ay1tb2RhbC1jbG9zZSI+JytlLmxhYmVscy5PaysiPC9idXR0b24+PC9kaXY+Il0uam9pbigiIiksZSk7cmV0dXJuIG4ub24oInNob3cudWsubW9kYWwiLGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe24uZWxlbWVudC5maW5kKCJidXR0b246Zmlyc3QiKS5mb2N1cygpfSw1MCl9KSxuLnNob3coKX0sdC5tb2RhbC5jb25maXJtPWZ1bmN0aW9uKGksZSxuKXtlPXQuJC5pc0Z1bmN0aW9uKGUpP2U6ZnVuY3Rpb24oKXt9LG49dC4kLmV4dGVuZCghMCx7YmdjbG9zZTohMSxrZXlib2FyZDohMSxtb2RhbDohMSxsYWJlbHM6dC5tb2RhbC5sYWJlbHN9LG4pO3ZhciBvPXQubW9kYWwuZGlhbG9nKFsnPGRpdiBjbGFzcz0idWstbWFyZ2luIHVrLW1vZGFsLWNvbnRlbnQiPicrU3RyaW5nKGkpKyI8L2Rpdj4iLCc8ZGl2IGNsYXNzPSJ1ay1tb2RhbC1mb290ZXIgdWstdGV4dC1yaWdodCI+PGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIHVrLW1vZGFsLWNsb3NlIj4nK24ubGFiZWxzLkNhbmNlbCsnPC9idXR0b24+IDxidXR0b24gY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tcHJpbWFyeSBqcy1tb2RhbC1jb25maXJtIj4nK24ubGFiZWxzLk9rKyI8L2J1dHRvbj48L2Rpdj4iXS5qb2luKCIiKSxuKTtyZXR1cm4gby5lbGVtZW50LmZpbmQoIi5qcy1tb2RhbC1jb25maXJtIikub24oImNsaWNrIixmdW5jdGlvbigpe2UoKSxvLmhpZGUoKX0pLG8ub24oInNob3cudWsubW9kYWwiLGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe28uZWxlbWVudC5maW5kKCIuanMtbW9kYWwtY29uZmlybSIpLmZvY3VzKCl9LDUwKX0pLG8uc2hvdygpfSx0Lm1vZGFsLnByb21wdD1mdW5jdGlvbihpLGUsbixvKXtuPXQuJC5pc0Z1bmN0aW9uKG4pP246ZnVuY3Rpb24oKXt9LG89dC4kLmV4dGVuZCghMCx7YmdjbG9zZTohMSxrZXlib2FyZDohMSxtb2RhbDohMSxsYWJlbHM6dC5tb2RhbC5sYWJlbHN9LG8pO3ZhciBzPXQubW9kYWwuZGlhbG9nKFtpPyc8ZGl2IGNsYXNzPSJ1ay1tb2RhbC1jb250ZW50IHVrLWZvcm0iPicrU3RyaW5nKGkpKyI8L2Rpdj4iOiIiLCc8ZGl2IGNsYXNzPSJ1ay1tYXJnaW4tc21hbGwtdG9wIHVrLW1vZGFsLWNvbnRlbnQgdWstZm9ybSI+PHA+PGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJ1ay13aWR0aC0xLTEiPjwvcD48L2Rpdj4nLCc8ZGl2IGNsYXNzPSJ1ay1tb2RhbC1mb290ZXIgdWstdGV4dC1yaWdodCI+PGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIHVrLW1vZGFsLWNsb3NlIj4nK28ubGFiZWxzLkNhbmNlbCsnPC9idXR0b24+IDxidXR0b24gY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tcHJpbWFyeSBqcy1tb2RhbC1vayI+JytvLmxhYmVscy5PaysiPC9idXR0b24+PC9kaXY+Il0uam9pbigiIiksbyksYT1zLmVsZW1lbnQuZmluZCgiaW5wdXRbdHlwZT0ndGV4dCddIikudmFsKGV8fCIiKS5vbigia2V5dXAiLGZ1bmN0aW9uKHQpezEzPT10LmtleUNvZGUmJnMuZWxlbWVudC5maW5kKCIuanMtbW9kYWwtb2siKS50cmlnZ2VyKCJjbGljayIpfSk7cmV0dXJuIHMuZWxlbWVudC5maW5kKCIuanMtbW9kYWwtb2siKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7bihhLnZhbCgpKSE9PSExJiZzLmhpZGUoKX0pLHMub24oInNob3cudWsubW9kYWwiLGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe2EuZm9jdXMoKX0sNTApfSkscy5zaG93KCl9LHQubW9kYWwuYmxvY2tVST1mdW5jdGlvbihpLGUpe3ZhciBuPXQubW9kYWwuZGlhbG9nKFsnPGRpdiBjbGFzcz0idWstbWFyZ2luIHVrLW1vZGFsLWNvbnRlbnQiPicrU3RyaW5nKGl8fCc8ZGl2IGNsYXNzPSJ1ay10ZXh0LWNlbnRlciI+Li4uPC9kaXY+JykrIjwvZGl2PiJdLmpvaW4oIiIpLHQuJC5leHRlbmQoe2JnY2xvc2U6ITEsa2V5Ym9hcmQ6ITEsbW9kYWw6ITF9LGUpKTtyZXR1cm4gbi5jb250ZW50PW4uZWxlbWVudC5maW5kKCIudWstbW9kYWwtY29udGVudDpmaXJzdCIpLG4uc2hvdygpfSx0Lm1vZGFsLmxhYmVscz17T2s6Ik9rIixDYW5jZWw6IkNhbmNlbCJ9fShVSWtpdCksZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkoaSl7dmFyIGU9dC4kKGkpLG49ImF1dG8iO2lmKGUuaXMoIjp2aXNpYmxlIikpbj1lLm91dGVySGVpZ2h0KCk7ZWxzZXt2YXIgbz17cG9zaXRpb246ZS5jc3MoInBvc2l0aW9uIiksdmlzaWJpbGl0eTplLmNzcygidmlzaWJpbGl0eSIpLGRpc3BsYXk6ZS5jc3MoImRpc3BsYXkiKX07bj1lLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0pLm91dGVySGVpZ2h0KCksZS5jc3Mobyl9cmV0dXJuIG59dC5jb21wb25lbnQoIm5hdiIse2RlZmF1bHRzOnt0b2dnbGU6Ij5saS51ay1wYXJlbnQgPiBhW2hyZWY9JyMnXSIsbGlzdHM6Ij5saS51ay1wYXJlbnQgPiB1bCIsbXVsdGlwbGU6ITF9LGJvb3Q6ZnVuY3Rpb24oKXt0LnJlYWR5KGZ1bmN0aW9uKGkpe3QuJCgiW2RhdGEtdWstbmF2XSIsaSkuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQuJCh0aGlzKTtpZighaS5kYXRhKCJuYXYiKSl7dC5uYXYoaSx0LlV0aWxzLm9wdGlvbnMoaS5hdHRyKCJkYXRhLXVrLW5hdiIpKSl9fSl9KX0saW5pdDpmdW5jdGlvbigpe3ZhciBpPXRoaXM7dGhpcy5vbigiY2xpY2sudWlraXQubmF2Iix0aGlzLm9wdGlvbnMudG9nZ2xlLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTt2YXIgbj10LiQodGhpcyk7aS5vcGVuKG4ucGFyZW50KClbMF09PWkuZWxlbWVudFswXT9uOm4ucGFyZW50KCJsaSIpKX0pLHRoaXMuZmluZCh0aGlzLm9wdGlvbnMubGlzdHMpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10LiQodGhpcyksbj1lLnBhcmVudCgpLG89bi5oYXNDbGFzcygidWstYWN0aXZlIik7ZS53cmFwKCc8ZGl2IHN0eWxlPSJvdmVyZmxvdzpoaWRkZW47aGVpZ2h0OjA7cG9zaXRpb246cmVsYXRpdmU7Ij48L2Rpdj4nKSxuLmRhdGEoImxpc3QtY29udGFpbmVyIixlLnBhcmVudCgpW28/InJlbW92ZUNsYXNzIjoiYWRkQ2xhc3MiXSgidWstaGlkZGVuIikpLG4uYXR0cigiYXJpYS1leHBhbmRlZCIsbi5oYXNDbGFzcygidWstb3BlbiIpKSxvJiZpLm9wZW4obiwhMCl9KX0sb3BlbjpmdW5jdGlvbihlLG4pe3ZhciBvPXRoaXMscz10aGlzLmVsZW1lbnQsYT10LiQoZSkscj1hLmRhdGEoImxpc3QtY29udGFpbmVyIik7dGhpcy5vcHRpb25zLm11bHRpcGxlfHxzLmNoaWxkcmVuKCIudWstb3BlbiIpLm5vdChlKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dC4kKHRoaXMpO2kuZGF0YSgibGlzdC1jb250YWluZXIiKSYmaS5kYXRhKCJsaXN0LWNvbnRhaW5lciIpLnN0b3AoKS5hbmltYXRlKHtoZWlnaHQ6MH0sZnVuY3Rpb24oKXt0LiQodGhpcykucGFyZW50KCkucmVtb3ZlQ2xhc3MoInVrLW9wZW4iKS5lbmQoKS5hZGRDbGFzcygidWstaGlkZGVuIil9KX0pLGEudG9nZ2xlQ2xhc3MoInVrLW9wZW4iKSxhLmF0dHIoImFyaWEtZXhwYW5kZWQiLGEuaGFzQ2xhc3MoInVrLW9wZW4iKSksciYmKGEuaGFzQ2xhc3MoInVrLW9wZW4iKSYmci5yZW1vdmVDbGFzcygidWstaGlkZGVuIiksbj8oci5zdG9wKCkuaGVpZ2h0KGEuaGFzQ2xhc3MoInVrLW9wZW4iKT8iYXV0byI6MCksYS5oYXNDbGFzcygidWstb3BlbiIpfHxyLmFkZENsYXNzKCJ1ay1oaWRkZW4iKSx0aGlzLnRyaWdnZXIoImRpc3BsYXkudWsuY2hlY2siKSk6ci5zdG9wKCkuYW5pbWF0ZSh7aGVpZ2h0OmEuaGFzQ2xhc3MoInVrLW9wZW4iKT9pKHIuZmluZCgidWw6Zmlyc3QiKSk6MH0sZnVuY3Rpb24oKXthLmhhc0NsYXNzKCJ1ay1vcGVuIik/ci5jc3MoImhlaWdodCIsIiIpOnIuYWRkQ2xhc3MoInVrLWhpZGRlbiIpLG8udHJpZ2dlcigiZGlzcGxheS51ay5jaGVjayIpfSkpfX0pfShVSWtpdCksZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBpPXt4OndpbmRvdy5zY3JvbGxYLHk6d2luZG93LnNjcm9sbFl9LGU9KHQuJHdpbix0LiRkb2MsdC4kaHRtbCksbj17c2hvdzpmdW5jdGlvbihuKXtpZihuPXQuJChuKSxuLmxlbmd0aCl7dmFyIG89dC4kKCJib2R5Iikscz1uLmZpbmQoIi51ay1vZmZjYW52YXMtYmFyOmZpcnN0IiksYT0icmlnaHQiPT10LmxhbmdkaXJlY3Rpb24scj1zLmhhc0NsYXNzKCJ1ay1vZmZjYW52YXMtYmFyLWZsaXAiKT8tMToxLGw9ciooYT8tMToxKSxjPXdpbmRvdy5pbm5lcldpZHRoLW8ud2lkdGgoKTtpPXt4OndpbmRvdy5wYWdlWE9mZnNldCx5OndpbmRvdy5wYWdlWU9mZnNldH0sbi5hZGRDbGFzcygidWstYWN0aXZlIiksby5jc3Moe3dpZHRoOndpbmRvdy5pbm5lcldpZHRoLWMsaGVpZ2h0OndpbmRvdy5pbm5lckhlaWdodH0pLmFkZENsYXNzKCJ1ay1vZmZjYW52YXMtcGFnZSIpLG8uY3NzKGE/Im1hcmdpbi1yaWdodCI6Im1hcmdpbi1sZWZ0IiwoYT8tMToxKSpzLm91dGVyV2lkdGgoKSpsKS53aWR0aCgpLGUuY3NzKCJtYXJnaW4tdG9wIiwtMSppLnkpLHMuYWRkQ2xhc3MoInVrLW9mZmNhbnZhcy1iYXItc2hvdyIpLHRoaXMuX2luaXRFbGVtZW50KG4pLHMudHJpZ2dlcigic2hvdy51ay5vZmZjYW52YXMiLFtuLHNdKSxuLmF0dHIoImFyaWEtaGlkZGVuIiwiZmFsc2UiKX19LGhpZGU6ZnVuY3Rpb24obil7dmFyIG89dC4kKCJib2R5Iikscz10LiQoIi51ay1vZmZjYW52YXMudWstYWN0aXZlIiksYT0icmlnaHQiPT10LmxhbmdkaXJlY3Rpb24scj1zLmZpbmQoIi51ay1vZmZjYW52YXMtYmFyOmZpcnN0IiksbD1mdW5jdGlvbigpe28ucmVtb3ZlQ2xhc3MoInVrLW9mZmNhbnZhcy1wYWdlIikuY3NzKHt3aWR0aDoiIixoZWlnaHQ6IiIsIm1hcmdpbi1sZWZ0IjoiIiwibWFyZ2luLXJpZ2h0IjoiIn0pLHMucmVtb3ZlQ2xhc3MoInVrLWFjdGl2ZSIpLHIucmVtb3ZlQ2xhc3MoInVrLW9mZmNhbnZhcy1iYXItc2hvdyIpLGUuY3NzKCJtYXJnaW4tdG9wIiwiIiksd2luZG93LnNjcm9sbFRvKGkueCxpLnkpLHIudHJpZ2dlcigiaGlkZS51ay5vZmZjYW52YXMiLFtzLHJdKSxzLmF0dHIoImFyaWEtaGlkZGVuIiwidHJ1ZSIpfTtzLmxlbmd0aCYmKHQuc3VwcG9ydC50cmFuc2l0aW9uJiYhbj8oby5vbmUodC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGZ1bmN0aW9uKCl7bCgpfSkuY3NzKGE/Im1hcmdpbi1yaWdodCI6Im1hcmdpbi1sZWZ0IiwiIiksc2V0VGltZW91dChmdW5jdGlvbigpe3IucmVtb3ZlQ2xhc3MoInVrLW9mZmNhbnZhcy1iYXItc2hvdyIpfSwwKSk6bCgpKX0sX2luaXRFbGVtZW50OmZ1bmN0aW9uKGkpe2kuZGF0YSgiT2ZmY2FudmFzSW5pdCIpfHwoaS5vbigiY2xpY2sudWsub2ZmY2FudmFzIHN3aXBlUmlnaHQudWsub2ZmY2FudmFzIHN3aXBlTGVmdC51ay5vZmZjYW52YXMiLGZ1bmN0aW9uKGkpe3ZhciBlPXQuJChpLnRhcmdldCk7aWYoIWkudHlwZS5tYXRjaCgvc3dpcGUvKSYmIWUuaGFzQ2xhc3MoInVrLW9mZmNhbnZhcy1jbG9zZSIpKXtpZihlLmhhc0NsYXNzKCJ1ay1vZmZjYW52YXMtYmFyIikpcmV0dXJuO2lmKGUucGFyZW50cygiLnVrLW9mZmNhbnZhcy1iYXI6Zmlyc3QiKS5sZW5ndGgpcmV0dXJufWkuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksbi5oaWRlKCl9KSxpLm9uKCJjbGljayIsImFbaHJlZl49JyMnXSIsZnVuY3Rpb24oKXt2YXIgaT10LiQodGhpcyksZT1pLmF0dHIoImhyZWYiKTsiIyIhPWUmJih0LiRkb2Mub25lKCJoaWRlLnVrLm9mZmNhbnZhcyIsZnVuY3Rpb24oKXt2YXIgbjt0cnl7bj10LiQoZSl9Y2F0Y2gobyl7bj0iIn1uLmxlbmd0aHx8KG49dC4kKCdbbmFtZT0iJytlLnJlcGxhY2UoIiMiLCIiKSsnIl0nKSksbi5sZW5ndGgmJmkuYXR0cigiZGF0YS11ay1zbW9vdGgtc2Nyb2xsIikmJnQuVXRpbHMuc2Nyb2xsVG9FbGVtZW50P3QuVXRpbHMuc2Nyb2xsVG9FbGVtZW50KG4sdC5VdGlscy5vcHRpb25zKGkuYXR0cigiZGF0YS11ay1zbW9vdGgtc2Nyb2xsIil8fCJ7fSIpKTp3aW5kb3cubG9jYXRpb24uaHJlZj1lfSksbi5oaWRlKCkpfSksaS5kYXRhKCJPZmZjYW52YXNJbml0IiwhMCkpfX07dC5jb21wb25lbnQoIm9mZmNhbnZhc1RyaWdnZXIiLHtib290OmZ1bmN0aW9uKCl7ZS5vbigiY2xpY2sub2ZmY2FudmFzLnVpa2l0IiwiW2RhdGEtdWstb2ZmY2FudmFzXSIsZnVuY3Rpb24oaSl7aS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBlPXQuJCh0aGlzKTtpZighZS5kYXRhKCJvZmZjYW52YXNUcmlnZ2VyIikpe3t0Lm9mZmNhbnZhc1RyaWdnZXIoZSx0LlV0aWxzLm9wdGlvbnMoZS5hdHRyKCJkYXRhLXVrLW9mZmNhbnZhcyIpKSl9ZS50cmlnZ2VyKCJjbGljayIpfX0pLGUub24oImtleWRvd24udWsub2ZmY2FudmFzIixmdW5jdGlvbih0KXsyNz09PXQua2V5Q29kZSYmbi5oaWRlKCl9KX0saW5pdDpmdW5jdGlvbigpe3ZhciBpPXRoaXM7dGhpcy5vcHRpb25zPXQuJC5leHRlbmQoe3RhcmdldDppLmVsZW1lbnQuaXMoImEiKT9pLmVsZW1lbnQuYXR0cigiaHJlZiIpOiExfSx0aGlzLm9wdGlvbnMpLHRoaXMub24oImNsaWNrIixmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksbi5zaG93KGkub3B0aW9ucy50YXJnZXQpfSl9fSksdC5vZmZjYW52YXM9bn0oVUlraXQpLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKGksZSxuKXt2YXIgbyxzPXQuJC5EZWZlcnJlZCgpLGE9aSxyPWk7cmV0dXJuIG5bMF09PT1lWzBdPyhzLnJlc29sdmUoKSxzLnByb21pc2UoKSk6KCJvYmplY3QiPT10eXBlb2YgaSYmKGE9aVswXSxyPWlbMV18fGlbMF0pLHQuJGJvZHkuY3NzKCJvdmVyZmxvdy14IiwiaGlkZGVuIiksbz1mdW5jdGlvbigpe2UmJmUuaGlkZSgpLnJlbW92ZUNsYXNzKCJ1ay1hY3RpdmUgIityKyIgdWstYW5pbWF0aW9uLXJldmVyc2UiKSxuLmFkZENsYXNzKGEpLm9uZSh0LnN1cHBvcnQuYW5pbWF0aW9uLmVuZCxmdW5jdGlvbigpe24ucmVtb3ZlQ2xhc3MoIiIrYSkuY3NzKHtvcGFjaXR5OiIiLGRpc3BsYXk6IiJ9KSxzLnJlc29sdmUoKSx0LiRib2R5LmNzcygib3ZlcmZsb3cteCIsIiIpLGUmJmUuY3NzKHtvcGFjaXR5OiIiLGRpc3BsYXk6IiJ9KX0uYmluZCh0aGlzKSkuc2hvdygpfSxuLmNzcygiYW5pbWF0aW9uLWR1cmF0aW9uIix0aGlzLm9wdGlvbnMuZHVyYXRpb24rIm1zIiksZSYmZS5sZW5ndGg/KGUuY3NzKCJhbmltYXRpb24tZHVyYXRpb24iLHRoaXMub3B0aW9ucy5kdXJhdGlvbisibXMiKSxlLmNzcygiZGlzcGxheSIsIm5vbmUiKS5hZGRDbGFzcyhyKyIgdWstYW5pbWF0aW9uLXJldmVyc2UiKS5vbmUodC5zdXBwb3J0LmFuaW1hdGlvbi5lbmQsZnVuY3Rpb24oKXtvKCl9LmJpbmQodGhpcykpLmNzcygiZGlzcGxheSIsIiIpKToobi5hZGRDbGFzcygidWstYWN0aXZlIiksbygpKSxzLnByb21pc2UoKSl9dmFyIGU7dC5jb21wb25lbnQoInN3aXRjaGVyIix7ZGVmYXVsdHM6e2Nvbm5lY3Q6ITEsdG9nZ2xlOiI+KiIsYWN0aXZlOjAsYW5pbWF0aW9uOiExLGR1cmF0aW9uOjIwMCxzd2lwaW5nOiEwfSxhbmltYXRpbmc6ITEsYm9vdDpmdW5jdGlvbigpe3QucmVhZHkoZnVuY3Rpb24oaSl7dC4kKCJbZGF0YS11ay1zd2l0Y2hlcl0iLGkpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10LiQodGhpcyk7aWYoIWkuZGF0YSgic3dpdGNoZXIiKSl7dC5zd2l0Y2hlcihpLHQuVXRpbHMub3B0aW9ucyhpLmF0dHIoImRhdGEtdWstc3dpdGNoZXIiKSkpfX0pfSl9LGluaXQ6ZnVuY3Rpb24oKXt2YXIgaT10aGlzO2lmKHRoaXMub24oImNsaWNrLnVpa2l0LnN3aXRjaGVyIix0aGlzLm9wdGlvbnMudG9nZ2xlLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSxpLnNob3codGhpcyl9KSx0aGlzLm9wdGlvbnMuY29ubmVjdCl7dGhpcy5jb25uZWN0PXQuJCh0aGlzLm9wdGlvbnMuY29ubmVjdCksdGhpcy5jb25uZWN0LmZpbmQoIi51ay1hY3RpdmUiKS5yZW1vdmVDbGFzcygiLnVrLWFjdGl2ZSIpLHRoaXMuY29ubmVjdC5sZW5ndGgmJih0aGlzLmNvbm5lY3QuY2hpbGRyZW4oKS5hdHRyKCJhcmlhLWhpZGRlbiIsInRydWUiKSx0aGlzLmNvbm5lY3Qub24oImNsaWNrIiwiW2RhdGEtdWstc3dpdGNoZXItaXRlbV0iLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTt2YXIgbj10LiQodGhpcykuYXR0cigiZGF0YS11ay1zd2l0Y2hlci1pdGVtIik7aWYoaS5pbmRleCE9bilzd2l0Y2gobil7Y2FzZSJuZXh0IjpjYXNlInByZXZpb3VzIjppLnNob3coaS5pbmRleCsoIm5leHQiPT1uPzE6LTEpKTticmVhaztkZWZhdWx0Omkuc2hvdyhwYXJzZUludChuLDEwKSl9fSksdGhpcy5vcHRpb25zLnN3aXBpbmcmJnRoaXMuY29ubmVjdC5vbigic3dpcGVSaWdodCBzd2lwZUxlZnQiLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKXx8aS5zaG93KGkuaW5kZXgrKCJzd2lwZUxlZnQiPT10LnR5cGU/MTotMSkpfSkpO3ZhciBlPXRoaXMuZmluZCh0aGlzLm9wdGlvbnMudG9nZ2xlKSxuPWUuZmlsdGVyKCIudWstYWN0aXZlIik7aWYobi5sZW5ndGgpdGhpcy5zaG93KG4sITEpO2Vsc2V7aWYodGhpcy5vcHRpb25zLmFjdGl2ZT09PSExKXJldHVybjtuPWUuZXEodGhpcy5vcHRpb25zLmFjdGl2ZSksdGhpcy5zaG93KG4ubGVuZ3RoP246ZS5lcSgwKSwhMSl9ZS5ub3QobikuYXR0cigiYXJpYS1leHBhbmRlZCIsImZhbHNlIiksbi5hdHRyKCJhcmlhLWV4cGFuZGVkIiwidHJ1ZSIpLHRoaXMub24oImNoYW5nZWQudWsuZG9tIixmdW5jdGlvbigpe2kuY29ubmVjdD10LiQoaS5vcHRpb25zLmNvbm5lY3QpfSl9fSxzaG93OmZ1bmN0aW9uKG4sbyl7aWYoIXRoaXMuYW5pbWF0aW5nKXtpZihpc05hTihuKSluPXQuJChuKTtlbHNle3ZhciBzPXRoaXMuZmluZCh0aGlzLm9wdGlvbnMudG9nZ2xlKTtuPTA+bj9zLmxlbmd0aC0xOm4sbj1zLmVxKHNbbl0/bjowKX12YXIgYT10aGlzLHM9dGhpcy5maW5kKHRoaXMub3B0aW9ucy50b2dnbGUpLHI9dC4kKG4pLGw9ZVt0aGlzLm9wdGlvbnMuYW5pbWF0aW9uXXx8ZnVuY3Rpb24odCxuKXtpZighYS5vcHRpb25zLmFuaW1hdGlvbilyZXR1cm4gZS5ub25lLmFwcGx5KGEpO3ZhciBvPWEub3B0aW9ucy5hbmltYXRpb24uc3BsaXQoIiwiKTtyZXR1cm4gMT09by5sZW5ndGgmJihvWzFdPW9bMF0pLG9bMF09b1swXS50cmltKCksb1sxXT1vWzFdLnRyaW0oKSxpLmFwcGx5KGEsW28sdCxuXSl9O28hPT0hMSYmdC5zdXBwb3J0LmFuaW1hdGlvbnx8KGw9ZS5ub25lKSxyLmhhc0NsYXNzKCJ1ay1kaXNhYmxlZCIpfHwocy5hdHRyKCJhcmlhLWV4cGFuZGVkIiwiZmFsc2UiKSxyLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJ0cnVlIikscy5maWx0ZXIoIi51ay1hY3RpdmUiKS5yZW1vdmVDbGFzcygidWstYWN0aXZlIiksci5hZGRDbGFzcygidWstYWN0aXZlIiksdGhpcy5vcHRpb25zLmNvbm5lY3QmJnRoaXMuY29ubmVjdC5sZW5ndGgmJih0aGlzLmluZGV4PXRoaXMuZmluZCh0aGlzLm9wdGlvbnMudG9nZ2xlKS5pbmRleChyKSwtMT09dGhpcy5pbmRleCYmKHRoaXMuaW5kZXg9MCksdGhpcy5jb25uZWN0LmVhY2goZnVuY3Rpb24oKXt2YXIgaT10LiQodGhpcyksZT10LiQoaS5jaGlsZHJlbigpKSxuPXQuJChlLmZpbHRlcigiLnVrLWFjdGl2ZSIpKSxvPXQuJChlLmVxKGEuaW5kZXgpKTthLmFuaW1hdGluZz0hMCxsLmFwcGx5KGEsW24sb10pLnRoZW4oZnVuY3Rpb24oKXtuLnJlbW92ZUNsYXNzKCJ1ay1hY3RpdmUiKSxvLmFkZENsYXNzKCJ1ay1hY3RpdmUiKSxuLmF0dHIoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLG8uYXR0cigiYXJpYS1oaWRkZW4iLCJmYWxzZSIpLHQuVXRpbHMuY2hlY2tEaXNwbGF5KG8sITApLGEuYW5pbWF0aW5nPSExfSl9KSksdGhpcy50cmlnZ2VyKCJzaG93LnVrLnN3aXRjaGVyIixbcl0pKX19fSksZT17bm9uZTpmdW5jdGlvbigpe3ZhciBpPXQuJC5EZWZlcnJlZCgpO3JldHVybiBpLnJlc29sdmUoKSxpLnByb21pc2UoKX0sZmFkZTpmdW5jdGlvbih0LGUpe3JldHVybiBpLmFwcGx5KHRoaXMsWyJ1ay1hbmltYXRpb24tZmFkZSIsdCxlXSl9LCJzbGlkZS1ib3R0b20iOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuYXBwbHkodGhpcyxbInVrLWFuaW1hdGlvbi1zbGlkZS1ib3R0b20iLHQsZV0pfSwic2xpZGUtdG9wIjpmdW5jdGlvbih0LGUpe3JldHVybiBpLmFwcGx5KHRoaXMsWyJ1ay1hbmltYXRpb24tc2xpZGUtdG9wIix0LGVdKX0sInNsaWRlLXZlcnRpY2FsIjpmdW5jdGlvbih0LGUpe3ZhciBuPVsidWstYW5pbWF0aW9uLXNsaWRlLXRvcCIsInVrLWFuaW1hdGlvbi1zbGlkZS1ib3R0b20iXTtyZXR1cm4gdCYmdC5pbmRleCgpPmUuaW5kZXgoKSYmbi5yZXZlcnNlKCksaS5hcHBseSh0aGlzLFtuLHQsZV0pfSwic2xpZGUtbGVmdCI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gaS5hcHBseSh0aGlzLFsidWstYW5pbWF0aW9uLXNsaWRlLWxlZnQiLHQsZV0pfSwic2xpZGUtcmlnaHQiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuYXBwbHkodGhpcyxbInVrLWFuaW1hdGlvbi1zbGlkZS1yaWdodCIsdCxlXSl9LCJzbGlkZS1ob3Jpem9udGFsIjpmdW5jdGlvbih0LGUpe3ZhciBuPVsidWstYW5pbWF0aW9uLXNsaWRlLXJpZ2h0IiwidWstYW5pbWF0aW9uLXNsaWRlLWxlZnQiXTtyZXR1cm4gdCYmdC5pbmRleCgpPmUuaW5kZXgoKSYmbi5yZXZlcnNlKCksaS5hcHBseSh0aGlzLFtuLHQsZV0pfSxzY2FsZTpmdW5jdGlvbih0LGUpe3JldHVybiBpLmFwcGx5KHRoaXMsWyJ1ay1hbmltYXRpb24tc2NhbGUtdXAiLHQsZV0pfX0sdC5zd2l0Y2hlci5hbmltYXRpb25zPWV9KFVJa2l0KSxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dC5jb21wb25lbnQoInRhYiIse2RlZmF1bHRzOnt0YXJnZXQ6Ij5saTpub3QoLnVrLXRhYi1yZXNwb25zaXZlLCAudWstZGlzYWJsZWQpIixjb25uZWN0OiExLGFjdGl2ZTowLGFuaW1hdGlvbjohMSxkdXJhdGlvbjoyMDAsc3dpcGluZzohMH0sYm9vdDpmdW5jdGlvbigpe3QucmVhZHkoZnVuY3Rpb24oaSl7dC4kKCJbZGF0YS11ay10YWJdIixpKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dC4kKHRoaXMpO2lmKCFpLmRhdGEoInRhYiIpKXt0LnRhYihpLHQuVXRpbHMub3B0aW9ucyhpLmF0dHIoImRhdGEtdWstdGFiIikpKX19KX0pfSxpbml0OmZ1bmN0aW9uKCl7dmFyIGk9dGhpczt0aGlzLmN1cnJlbnQ9ITEsdGhpcy5vbigiY2xpY2sudWlraXQudGFiIix0aGlzLm9wdGlvbnMudGFyZ2V0LGZ1bmN0aW9uKGUpe2lmKGUucHJldmVudERlZmF1bHQoKSwhaS5zd2l0Y2hlcnx8IWkuc3dpdGNoZXIuYW5pbWF0aW5nKXt2YXIgbj1pLmZpbmQoaS5vcHRpb25zLnRhcmdldCkubm90KHRoaXMpO24ucmVtb3ZlQ2xhc3MoInVrLWFjdGl2ZSIpLmJsdXIoKSxpLnRyaWdnZXIoImNoYW5nZS51ay50YWIiLFt0LiQodGhpcykuYWRkQ2xhc3MoInVrLWFjdGl2ZSIpLGkuY3VycmVudF0pLGkuY3VycmVudD10LiQodGhpcyksaS5vcHRpb25zLmNvbm5lY3R8fChuLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJmYWxzZSIpLHQuJCh0aGlzKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwidHJ1ZSIpKX19KSx0aGlzLm9wdGlvbnMuY29ubmVjdCYmKHRoaXMuY29ubmVjdD10LiQodGhpcy5vcHRpb25zLmNvbm5lY3QpKSx0aGlzLnJlc3BvbnNpdmV0YWI9dC4kKCc8bGkgY2xhc3M9InVrLXRhYi1yZXNwb25zaXZlIHVrLWFjdGl2ZSI+PGE+PC9hPjwvbGk+JykuYXBwZW5kKCc8ZGl2IGNsYXNzPSJ1ay1kcm9wZG93biB1ay1kcm9wZG93bi1zbWFsbCI+PHVsIGNsYXNzPSJ1ay1uYXYgdWstbmF2LWRyb3Bkb3duIj48L3VsPjxkaXY+JyksdGhpcy5yZXNwb25zaXZldGFiLmRyb3Bkb3duPXRoaXMucmVzcG9uc2l2ZXRhYi5maW5kKCIudWstZHJvcGRvd24iKSx0aGlzLnJlc3BvbnNpdmV0YWIubHN0PXRoaXMucmVzcG9uc2l2ZXRhYi5kcm9wZG93bi5maW5kKCJ1bCIpLHRoaXMucmVzcG9uc2l2ZXRhYi5jYXB0aW9uPXRoaXMucmVzcG9uc2l2ZXRhYi5maW5kKCJhOmZpcnN0IiksdGhpcy5lbGVtZW50Lmhhc0NsYXNzKCJ1ay10YWItYm90dG9tIikmJnRoaXMucmVzcG9uc2l2ZXRhYi5kcm9wZG93bi5hZGRDbGFzcygidWstZHJvcGRvd24tdXAiKSx0aGlzLnJlc3BvbnNpdmV0YWIubHN0Lm9uKCJjbGljay51aWtpdC50YWIiLCJhIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKTt2YXIgbj10LiQodGhpcyk7aS5lbGVtZW50LmNoaWxkcmVuKCJsaTpub3QoLnVrLXRhYi1yZXNwb25zaXZlKSIpLmVxKG4uZGF0YSgiaW5kZXgiKSkudHJpZ2dlcigiY2xpY2siKX0pLHRoaXMub24oInNob3cudWsuc3dpdGNoZXIgY2hhbmdlLnVrLnRhYiIsZnVuY3Rpb24odCxlKXtpLnJlc3BvbnNpdmV0YWIuY2FwdGlvbi5odG1sKGUudGV4dCgpKX0pLHRoaXMuZWxlbWVudC5hcHBlbmQodGhpcy5yZXNwb25zaXZldGFiKSx0aGlzLm9wdGlvbnMuY29ubmVjdCYmKHRoaXMuc3dpdGNoZXI9dC5zd2l0Y2hlcih0aGlzLmVsZW1lbnQse3RvZ2dsZToiPmxpOm5vdCgudWstdGFiLXJlc3BvbnNpdmUpIixjb25uZWN0OnRoaXMub3B0aW9ucy5jb25uZWN0LGFjdGl2ZTp0aGlzLm9wdGlvbnMuYWN0aXZlLGFuaW1hdGlvbjp0aGlzLm9wdGlvbnMuYW5pbWF0aW9uLGR1cmF0aW9uOnRoaXMub3B0aW9ucy5kdXJhdGlvbixzd2lwaW5nOnRoaXMub3B0aW9ucy5zd2lwaW5nfSkpLHQuZHJvcGRvd24odGhpcy5yZXNwb25zaXZldGFiLHttb2RlOiJjbGljayJ9KSxpLnRyaWdnZXIoImNoYW5nZS51ay50YWIiLFt0aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMudGFyZ2V0KS5ub3QoIi51ay10YWItcmVzcG9uc2l2ZSIpLmZpbHRlcigiLnVrLWFjdGl2ZSIpXSksdGhpcy5jaGVjaygpLHQuJHdpbi5vbigicmVzaXplIG9yaWVudGF0aW9uY2hhbmdlIix0LlV0aWxzLmRlYm91bmNlKGZ1bmN0aW9uKCl7aS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpJiZpLmNoZWNrKCl9LDEwMCkpLHRoaXMub24oImRpc3BsYXkudWsuY2hlY2siLGZ1bmN0aW9uKCl7aS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpJiZpLmNoZWNrKCl9KX0sY2hlY2s6ZnVuY3Rpb24oKXt2YXIgaT10aGlzLmVsZW1lbnQuY2hpbGRyZW4oImxpOm5vdCgudWstdGFiLXJlc3BvbnNpdmUpIikucmVtb3ZlQ2xhc3MoInVrLWhpZGRlbiIpO2lmKCFpLmxlbmd0aClyZXR1cm4gdGhpcy5yZXNwb25zaXZldGFiLmFkZENsYXNzKCJ1ay1oaWRkZW4iKSx2b2lkIDA7dmFyIGUsbixvLHM9aS5lcSgwKS5vZmZzZXQoKS50b3ArTWF0aC5jZWlsKGkuZXEoMCkuaGVpZ2h0KCkvMiksYT0hMTtpZih0aGlzLnJlc3BvbnNpdmV0YWIubHN0LmVtcHR5KCksaS5lYWNoKGZ1bmN0aW9uKCl7dC4kKHRoaXMpLm9mZnNldCgpLnRvcD5zJiYoYT0hMCl9KSxhKWZvcih2YXIgcj0wO3I8aS5sZW5ndGg7cisrKWU9dC4kKGkuZXEocikpLG49ZS5maW5kKCJhIiksIm5vbmUiPT1lLmNzcygiZmxvYXQiKXx8ZS5hdHRyKCJ1ay1kcm9wZG93biIpfHwoZS5oYXNDbGFzcygidWstZGlzYWJsZWQiKXx8KG89ZVswXS5vdXRlckhUTUwucmVwbGFjZSgiPGEgIiwnPGEgZGF0YS1pbmRleD0iJytyKyciICcpLHRoaXMucmVzcG9uc2l2ZXRhYi5sc3QuYXBwZW5kKG8pKSxlLmFkZENsYXNzKCJ1ay1oaWRkZW4iKSk7dGhpcy5yZXNwb25zaXZldGFiW3RoaXMucmVzcG9uc2l2ZXRhYi5sc3QuY2hpbGRyZW4oImxpIikubGVuZ3RoPyJyZW1vdmVDbGFzcyI6ImFkZENsYXNzIl0oInVrLWhpZGRlbiIpfX0pfShVSWtpdCksZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3QuY29tcG9uZW50KCJjb3ZlciIse2RlZmF1bHRzOnthdXRvbXV0ZTohMH0sYm9vdDpmdW5jdGlvbigpe3QucmVhZHkoZnVuY3Rpb24oaSl7dC4kKCJbZGF0YS11ay1jb3Zlcl0iLGkpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10LiQodGhpcyk7aWYoIWkuZGF0YSgiY292ZXIiKSl7dC5jb3ZlcihpLHQuVXRpbHMub3B0aW9ucyhpLmF0dHIoImRhdGEtdWstY292ZXIiKSkpfX0pfSl9LGluaXQ6ZnVuY3Rpb24oKXtpZih0aGlzLnBhcmVudD10aGlzLmVsZW1lbnQucGFyZW50KCksdC4kd2luLm9uKCJsb2FkIHJlc2l6ZSBvcmllbnRhdGlvbmNoYW5nZSIsdC5VdGlscy5kZWJvdW5jZShmdW5jdGlvbigpe3RoaXMuY2hlY2soKX0uYmluZCh0aGlzKSwxMDApKSx0aGlzLm9uKCJkaXNwbGF5LnVrLmNoZWNrIixmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5pcygiOnZpc2libGUiKSYmdGhpcy5jaGVjaygpfS5iaW5kKHRoaXMpKSx0aGlzLmNoZWNrKCksdGhpcy5lbGVtZW50LmlzKCJpZnJhbWUiKSYmdGhpcy5vcHRpb25zLmF1dG9tdXRlKXt2YXIgaT10aGlzLmVsZW1lbnQuYXR0cigic3JjIik7dGhpcy5lbGVtZW50LmF0dHIoInNyYyIsIiIpLm9uKCJsb2FkIixmdW5jdGlvbigpe3RoaXMuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSgneyAiZXZlbnQiOiAiY29tbWFuZCIsICJmdW5jIjogIm11dGUiLCAibWV0aG9kIjoic2V0Vm9sdW1lIiwgInZhbHVlIjowfScsIioiKX0pLmF0dHIoInNyYyIsW2ksaS5pbmRleE9mKCI/Iik+LTE/IiYiOiI/IiwiZW5hYmxlanNhcGk9MSZhcGk9MSJdLmpvaW4oIiIpKX19LGNoZWNrOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmNzcyh7d2lkdGg6IiIsaGVpZ2h0OiIifSksdGhpcy5kaW1lbnNpb249e3c6dGhpcy5lbGVtZW50LndpZHRoKCksaDp0aGlzLmVsZW1lbnQuaGVpZ2h0KCl9LHRoaXMuZWxlbWVudC5hdHRyKCJ3aWR0aCIpJiYhaXNOYU4odGhpcy5lbGVtZW50LmF0dHIoIndpZHRoIikpJiYodGhpcy5kaW1lbnNpb24udz10aGlzLmVsZW1lbnQuYXR0cigid2lkdGgiKSksdGhpcy5lbGVtZW50LmF0dHIoImhlaWdodCIpJiYhaXNOYU4odGhpcy5lbGVtZW50LmF0dHIoImhlaWdodCIpKSYmKHRoaXMuZGltZW5zaW9uLmg9dGhpcy5lbGVtZW50LmF0dHIoImhlaWdodCIpKSx0aGlzLnJhdGlvPXRoaXMuZGltZW5zaW9uLncvdGhpcy5kaW1lbnNpb24uaDt2YXIgdCxpLGU9dGhpcy5wYXJlbnQud2lkdGgoKSxuPXRoaXMucGFyZW50LmhlaWdodCgpO2UvdGhpcy5yYXRpbzxuPyh0PU1hdGguY2VpbChuKnRoaXMucmF0aW8pLGk9bik6KHQ9ZSxpPU1hdGguY2VpbChlL3RoaXMucmF0aW8pKSx0aGlzLmVsZW1lbnQuY3NzKHt3aWR0aDp0LGhlaWdodDppfSl9fSl9KFVJa2l0KTs=]]></data>
	</file>
	<file>
	  <filename>/lib/js/xml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnMKLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHA6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFCgooZnVuY3Rpb24obW9kKSB7CiAgaWYgKHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIpIC8vIENvbW1vbkpTCiAgICBtb2QocmVxdWlyZSgiLi4vLi4vbGliL2NvZGVtaXJyb3IiKSk7CiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQpIC8vIEFNRAogICAgZGVmaW5lKFsiLi4vLi4vbGliL2NvZGVtaXJyb3IiXSwgbW9kKTsKICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52CiAgICBtb2QoQ29kZU1pcnJvcik7Cn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHsKInVzZSBzdHJpY3QiOwoKQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJ4bWwiLCBmdW5jdGlvbihjb25maWcsIG1hcmtkb3duQ29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDsKICB2YXIgbXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yID0gbWFya2Rvd25Db25maWcubXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yIHx8IDE7CiAgdmFyIG11bHRpbGluZVRhZ0luZGVudFBhc3RUYWcgPSBtYXJrZG93bkNvbmZpZy5tdWx0aWxpbmVUYWdJbmRlbnRQYXN0VGFnOwogIGlmIChtdWx0aWxpbmVUYWdJbmRlbnRQYXN0VGFnID09IG51bGwpIG11bHRpbGluZVRhZ0luZGVudFBhc3RUYWcgPSB0cnVlOwoKICB2YXIgS2x1ZGdlcyA9IG1hcmtkb3duQ29uZmlnLmh0bWxNb2RlID8gewogICAgYXV0b1NlbGZDbG9zZXJzOiB7J2FyZWEnOiB0cnVlLCAnYmFzZSc6IHRydWUsICdicic6IHRydWUsICdjb2wnOiB0cnVlLCAnY29tbWFuZCc6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAnZW1iZWQnOiB0cnVlLCAnZnJhbWUnOiB0cnVlLCAnaHInOiB0cnVlLCAnaW1nJzogdHJ1ZSwgJ2lucHV0JzogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICdrZXlnZW4nOiB0cnVlLCAnbGluayc6IHRydWUsICdtZXRhJzogdHJ1ZSwgJ3BhcmFtJzogdHJ1ZSwgJ3NvdXJjZSc6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAndHJhY2snOiB0cnVlLCAnd2JyJzogdHJ1ZSwgJ21lbnVpdGVtJzogdHJ1ZX0sCiAgICBpbXBsaWNpdGx5Q2xvc2VkOiB7J2RkJzogdHJ1ZSwgJ2xpJzogdHJ1ZSwgJ29wdGdyb3VwJzogdHJ1ZSwgJ29wdGlvbic6IHRydWUsICdwJzogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAncnAnOiB0cnVlLCAncnQnOiB0cnVlLCAndGJvZHknOiB0cnVlLCAndGQnOiB0cnVlLCAndGZvb3QnOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICd0aCc6IHRydWUsICd0cic6IHRydWV9LAogICAgY29udGV4dEdyYWJiZXJzOiB7CiAgICAgICdkZCc6IHsnZGQnOiB0cnVlLCAnZHQnOiB0cnVlfSwKICAgICAgJ2R0JzogeydkZCc6IHRydWUsICdkdCc6IHRydWV9LAogICAgICAnbGknOiB7J2xpJzogdHJ1ZX0sCiAgICAgICdvcHRpb24nOiB7J29wdGlvbic6IHRydWUsICdvcHRncm91cCc6IHRydWV9LAogICAgICAnb3B0Z3JvdXAnOiB7J29wdGdyb3VwJzogdHJ1ZX0sCiAgICAgICdwJzogeydhZGRyZXNzJzogdHJ1ZSwgJ2FydGljbGUnOiB0cnVlLCAnYXNpZGUnOiB0cnVlLCAnYmxvY2txdW90ZSc6IHRydWUsICdkaXInOiB0cnVlLAogICAgICAgICAgICAnZGl2JzogdHJ1ZSwgJ2RsJzogdHJ1ZSwgJ2ZpZWxkc2V0JzogdHJ1ZSwgJ2Zvb3Rlcic6IHRydWUsICdmb3JtJzogdHJ1ZSwKICAgICAgICAgICAgJ2gxJzogdHJ1ZSwgJ2gyJzogdHJ1ZSwgJ2gzJzogdHJ1ZSwgJ2g0JzogdHJ1ZSwgJ2g1JzogdHJ1ZSwgJ2g2JzogdHJ1ZSwKICAgICAgICAgICAgJ2hlYWRlcic6IHRydWUsICdoZ3JvdXAnOiB0cnVlLCAnaHInOiB0cnVlLCAnbWVudSc6IHRydWUsICduYXYnOiB0cnVlLCAnb2wnOiB0cnVlLAogICAgICAgICAgICAncCc6IHRydWUsICdwcmUnOiB0cnVlLCAnc2VjdGlvbic6IHRydWUsICd0YWJsZSc6IHRydWUsICd1bCc6IHRydWV9LAogICAgICAncnAnOiB7J3JwJzogdHJ1ZSwgJ3J0JzogdHJ1ZX0sCiAgICAgICdydCc6IHsncnAnOiB0cnVlLCAncnQnOiB0cnVlfSwKICAgICAgJ3Rib2R5Jzogeyd0Ym9keSc6IHRydWUsICd0Zm9vdCc6IHRydWV9LAogICAgICAndGQnOiB7J3RkJzogdHJ1ZSwgJ3RoJzogdHJ1ZX0sCiAgICAgICd0Zm9vdCc6IHsndGJvZHknOiB0cnVlfSwKICAgICAgJ3RoJzogeyd0ZCc6IHRydWUsICd0aCc6IHRydWV9LAogICAgICAndGhlYWQnOiB7J3Rib2R5JzogdHJ1ZSwgJ3Rmb290JzogdHJ1ZX0sCiAgICAgICd0cic6IHsndHInOiB0cnVlfQogICAgfSwKICAgIGRvTm90SW5kZW50OiB7InByZSI6IHRydWV9LAogICAgYWxsb3dVbnF1b3RlZDogdHJ1ZSwKICAgIGFsbG93TWlzc2luZzogdHJ1ZSwKICAgIGNhc2VGb2xkOiB0cnVlCiAgfSA6IHsKICAgIGF1dG9TZWxmQ2xvc2Vyczoge30sCiAgICBpbXBsaWNpdGx5Q2xvc2VkOiB7fSwKICAgIGNvbnRleHRHcmFiYmVyczoge30sCiAgICBkb05vdEluZGVudDoge30sCiAgICBhbGxvd1VucXVvdGVkOiBmYWxzZSwKICAgIGFsbG93TWlzc2luZzogZmFsc2UsCiAgICBjYXNlRm9sZDogZmFsc2UKICB9OwogIHZhciBhbGlnbkNEQVRBID0gbWFya2Rvd25Db25maWcuYWxpZ25DREFUQTsKCiAgLy8gUmV0dXJuIHZhcmlhYmxlcyBmb3IgdG9rZW5pemVycwogIHZhciB0eXBlLCBzZXRTdHlsZTsKCiAgZnVuY3Rpb24gaW5UZXh0KHN0cmVhbSwgc3RhdGUpIHsKICAgIGZ1bmN0aW9uIGNoYWluKG1hcmtkb3duKSB7CiAgICAgIHN0YXRlLnRva2VuaXplID0gbWFya2Rvd247CiAgICAgIHJldHVybiBtYXJrZG93bihzdHJlYW0sIHN0YXRlKTsKICAgIH0KCiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICI8IikgewogICAgICBpZiAoc3RyZWFtLmVhdCgiISIpKSB7CiAgICAgICAgaWYgKHN0cmVhbS5lYXQoIlsiKSkgewogICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgiQ0RBVEFbIikpIHJldHVybiBjaGFpbihpbkJsb2NrKCJhdG9tIiwgIl1dPiIpKTsKICAgICAgICAgIGVsc2UgcmV0dXJuIG51bGw7CiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goIi0tIikpIHsKICAgICAgICAgIHJldHVybiBjaGFpbihpbkJsb2NrKCJjb21tZW50IiwgIi0tPiIpKTsKICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgiRE9DVFlQRSIsIHRydWUsIHRydWUpKSB7CiAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuX1wtXS8pOwogICAgICAgICAgcmV0dXJuIGNoYWluKGRvY3R5cGUoMSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdCgiPyIpKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcLl9cLV0vKTsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluQmxvY2soIm1ldGEiLCAiPz4iKTsKICAgICAgICByZXR1cm4gIm1ldGEiOwogICAgICB9IGVsc2UgewogICAgICAgIHR5cGUgPSBzdHJlYW0uZWF0KCIvIikgPyAiY2xvc2VUYWciIDogIm9wZW5UYWciOwogICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UYWc7CiAgICAgICAgcmV0dXJuICJ0YWcgYnJhY2tldCI7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY2ggPT0gIiYiKSB7CiAgICAgIHZhciBvazsKICAgICAgaWYgKHN0cmVhbS5lYXQoIiMiKSkgewogICAgICAgIGlmIChzdHJlYW0uZWF0KCJ4IikpIHsKICAgICAgICAgIG9rID0gc3RyZWFtLmVhdFdoaWxlKC9bYS1mQS1GXGRdLykgJiYgc3RyZWFtLmVhdCgiOyIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvayA9IHN0cmVhbS5lYXRXaGlsZSgvW1xkXS8pICYmIHN0cmVhbS5lYXQoIjsiKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb2sgPSBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXC06XS8pICYmIHN0cmVhbS5lYXQoIjsiKTsKICAgICAgfQogICAgICByZXR1cm4gb2sgPyAiYXRvbSIgOiAiZXJyb3IiOwogICAgfSBlbHNlIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXiY8XS8pOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CiAgaW5UZXh0LmlzSW5UZXh0ID0gdHJ1ZTsKCiAgZnVuY3Rpb24gaW5UYWcoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAiPiIgfHwgKGNoID09ICIvIiAmJiBzdHJlYW0uZWF0KCI+IikpKSB7CiAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UZXh0OwogICAgICB0eXBlID0gY2ggPT0gIj4iID8gImVuZFRhZyIgOiAic2VsZmNsb3NlVGFnIjsKICAgICAgcmV0dXJuICJ0YWcgYnJhY2tldCI7CiAgICB9IGVsc2UgaWYgKGNoID09ICI9IikgewogICAgICB0eXBlID0gImVxdWFscyI7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIGlmIChjaCA9PSAiPCIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRleHQ7CiAgICAgIHN0YXRlLnN0YXRlID0gYmFzZVN0YXRlOwogICAgICBzdGF0ZS50YWdOYW1lID0gc3RhdGUudGFnU3RhcnQgPSBudWxsOwogICAgICB2YXIgbmV4dCA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICByZXR1cm4gbmV4dCA/IG5leHQgKyAiIHRhZyBlcnJvciIgOiAidGFnIGVycm9yIjsKICAgIH0gZWxzZSBpZiAoL1tcJ1wiXS8udGVzdChjaCkpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSBpbkF0dHJpYnV0ZShjaCk7CiAgICAgIHN0YXRlLnN0cmluZ1N0YXJ0Q29sID0gc3RyZWFtLmNvbHVtbigpOwogICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICB9IGVsc2UgewogICAgICBzdHJlYW0ubWF0Y2goL15bXlxzXHUwMGEwPTw+XCJcJ10qW15cc1x1MDBhMD08PlwiXCdcL10vKTsKICAgICAgcmV0dXJuICJ3b3JkIjsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGluQXR0cmlidXRlKHF1b3RlKSB7CiAgICB2YXIgY2xvc3VyZSA9IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICBpZiAoc3RyZWFtLm5leHQoKSA9PSBxdW90ZSkgewogICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRhZzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9OwogICAgY2xvc3VyZS5pc0luQXR0cmlidXRlID0gdHJ1ZTsKICAgIHJldHVybiBjbG9zdXJlOwogIH0KCiAgZnVuY3Rpb24gaW5CbG9jayhzdHlsZSwgdGVybWluYXRvcikgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHRlcm1pbmF0b3IpKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICB9CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIGRvY3R5cGUoZGVwdGgpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBjaDsKICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICBpZiAoY2ggPT0gIjwiKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGRvY3R5cGUoZGVwdGggKyAxKTsKICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9IGVsc2UgaWYgKGNoID09ICI+IikgewogICAgICAgICAgaWYgKGRlcHRoID09IDEpIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRleHQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBkb2N0eXBlKGRlcHRoIC0gMSk7CiAgICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuICJtZXRhIjsKICAgIH07CiAgfQoKICBmdW5jdGlvbiBDb250ZXh0KHN0YXRlLCB0YWdOYW1lLCBzdGFydE9mTGluZSkgewogICAgdGhpcy5wcmV2ID0gc3RhdGUuY29udGV4dDsKICAgIHRoaXMudGFnTmFtZSA9IHRhZ05hbWU7CiAgICB0aGlzLmluZGVudCA9IHN0YXRlLmluZGVudGVkOwogICAgdGhpcy5zdGFydE9mTGluZSA9IHN0YXJ0T2ZMaW5lOwogICAgaWYgKEtsdWRnZXMuZG9Ob3RJbmRlbnQuaGFzT3duUHJvcGVydHkodGFnTmFtZSkgfHwgKHN0YXRlLmNvbnRleHQgJiYgc3RhdGUuY29udGV4dC5ub0luZGVudCkpCiAgICAgIHRoaXMubm9JbmRlbnQgPSB0cnVlOwogIH0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7CiAgICBpZiAoc3RhdGUuY29udGV4dCkgc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjsKICB9CiAgZnVuY3Rpb24gbWF5YmVQb3BDb250ZXh0KHN0YXRlLCBuZXh0VGFnTmFtZSkgewogICAgdmFyIHBhcmVudFRhZ05hbWU7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoIXN0YXRlLmNvbnRleHQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgcGFyZW50VGFnTmFtZSA9IHN0YXRlLmNvbnRleHQudGFnTmFtZTsKICAgICAgaWYgKCFLbHVkZ2VzLmNvbnRleHRHcmFiYmVycy5oYXNPd25Qcm9wZXJ0eShwYXJlbnRUYWdOYW1lKSB8fAogICAgICAgICAgIUtsdWRnZXMuY29udGV4dEdyYWJiZXJzW3BhcmVudFRhZ05hbWVdLmhhc093blByb3BlcnR5KG5leHRUYWdOYW1lKSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBwb3BDb250ZXh0KHN0YXRlKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGJhc2VTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAodHlwZSA9PSAib3BlblRhZyIpIHsKICAgICAgc3RhdGUudGFnU3RhcnQgPSBzdHJlYW0uY29sdW1uKCk7CiAgICAgIHJldHVybiB0YWdOYW1lU3RhdGU7CiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gImNsb3NlVGFnIikgewogICAgICByZXR1cm4gY2xvc2VUYWdOYW1lU3RhdGU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gYmFzZVN0YXRlOwogICAgfQogIH0KICBmdW5jdGlvbiB0YWdOYW1lU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKHR5cGUgPT0gIndvcmQiKSB7CiAgICAgIHN0YXRlLnRhZ05hbWUgPSBzdHJlYW0uY3VycmVudCgpOwogICAgICBzZXRTdHlsZSA9ICJ0YWciOwogICAgICByZXR1cm4gYXR0clN0YXRlOwogICAgfSBlbHNlIHsKICAgICAgc2V0U3R5bGUgPSAiZXJyb3IiOwogICAgICByZXR1cm4gdGFnTmFtZVN0YXRlOwogICAgfQogIH0KICBmdW5jdGlvbiBjbG9zZVRhZ05hbWVTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAodHlwZSA9PSAid29yZCIpIHsKICAgICAgdmFyIHRhZ05hbWUgPSBzdHJlYW0uY3VycmVudCgpOwogICAgICBpZiAoc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnRhZ05hbWUgIT0gdGFnTmFtZSAmJgogICAgICAgICAgS2x1ZGdlcy5pbXBsaWNpdGx5Q2xvc2VkLmhhc093blByb3BlcnR5KHN0YXRlLmNvbnRleHQudGFnTmFtZSkpCiAgICAgICAgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgIGlmIChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQudGFnTmFtZSA9PSB0YWdOYW1lKSB7CiAgICAgICAgc2V0U3R5bGUgPSAidGFnIjsKICAgICAgICByZXR1cm4gY2xvc2VTdGF0ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzZXRTdHlsZSA9ICJ0YWcgZXJyb3IiOwogICAgICAgIHJldHVybiBjbG9zZVN0YXRlRXJyOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBzZXRTdHlsZSA9ICJlcnJvciI7CiAgICAgIHJldHVybiBjbG9zZVN0YXRlRXJyOwogICAgfQogIH0KCiAgZnVuY3Rpb24gY2xvc2VTdGF0ZSh0eXBlLCBfc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKHR5cGUgIT0gImVuZFRhZyIpIHsKICAgICAgc2V0U3R5bGUgPSAiZXJyb3IiOwogICAgICByZXR1cm4gY2xvc2VTdGF0ZTsKICAgIH0KICAgIHBvcENvbnRleHQoc3RhdGUpOwogICAgcmV0dXJuIGJhc2VTdGF0ZTsKICB9CiAgZnVuY3Rpb24gY2xvc2VTdGF0ZUVycih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CiAgICBzZXRTdHlsZSA9ICJlcnJvciI7CiAgICByZXR1cm4gY2xvc2VTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKICB9CgogIGZ1bmN0aW9uIGF0dHJTdGF0ZSh0eXBlLCBfc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKHR5cGUgPT0gIndvcmQiKSB7CiAgICAgIHNldFN0eWxlID0gImF0dHJpYnV0ZSI7CiAgICAgIHJldHVybiBhdHRyRXFTdGF0ZTsKICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiZW5kVGFnIiB8fCB0eXBlID09ICJzZWxmY2xvc2VUYWciKSB7CiAgICAgIHZhciB0YWdOYW1lID0gc3RhdGUudGFnTmFtZSwgdGFnU3RhcnQgPSBzdGF0ZS50YWdTdGFydDsKICAgICAgc3RhdGUudGFnTmFtZSA9IHN0YXRlLnRhZ1N0YXJ0ID0gbnVsbDsKICAgICAgaWYgKHR5cGUgPT0gInNlbGZjbG9zZVRhZyIgfHwKICAgICAgICAgIEtsdWRnZXMuYXV0b1NlbGZDbG9zZXJzLmhhc093blByb3BlcnR5KHRhZ05hbWUpKSB7CiAgICAgICAgbWF5YmVQb3BDb250ZXh0KHN0YXRlLCB0YWdOYW1lKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtYXliZVBvcENvbnRleHQoc3RhdGUsIHRhZ05hbWUpOwogICAgICAgIHN0YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dChzdGF0ZSwgdGFnTmFtZSwgdGFnU3RhcnQgPT0gc3RhdGUuaW5kZW50ZWQpOwogICAgICB9CiAgICAgIHJldHVybiBiYXNlU3RhdGU7CiAgICB9CiAgICBzZXRTdHlsZSA9ICJlcnJvciI7CiAgICByZXR1cm4gYXR0clN0YXRlOwogIH0KICBmdW5jdGlvbiBhdHRyRXFTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAodHlwZSA9PSAiZXF1YWxzIikgcmV0dXJuIGF0dHJWYWx1ZVN0YXRlOwogICAgaWYgKCFLbHVkZ2VzLmFsbG93TWlzc2luZykgc2V0U3R5bGUgPSAiZXJyb3IiOwogICAgcmV0dXJuIGF0dHJTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKICB9CiAgZnVuY3Rpb24gYXR0clZhbHVlU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKHR5cGUgPT0gInN0cmluZyIpIHJldHVybiBhdHRyQ29udGludWVkU3RhdGU7CiAgICBpZiAodHlwZSA9PSAid29yZCIgJiYgS2x1ZGdlcy5hbGxvd1VucXVvdGVkKSB7c2V0U3R5bGUgPSAic3RyaW5nIjsgcmV0dXJuIGF0dHJTdGF0ZTt9CiAgICBzZXRTdHlsZSA9ICJlcnJvciI7CiAgICByZXR1cm4gYXR0clN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpOwogIH0KICBmdW5jdGlvbiBhdHRyQ29udGludWVkU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKHR5cGUgPT0gInN0cmluZyIpIHJldHVybiBhdHRyQ29udGludWVkU3RhdGU7CiAgICByZXR1cm4gYXR0clN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpOwogIH0KCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4ge3Rva2VuaXplOiBpblRleHQsCiAgICAgICAgICAgICAgc3RhdGU6IGJhc2VTdGF0ZSwKICAgICAgICAgICAgICBpbmRlbnRlZDogMCwKICAgICAgICAgICAgICB0YWdOYW1lOiBudWxsLCB0YWdTdGFydDogbnVsbCwKICAgICAgICAgICAgICBjb250ZXh0OiBudWxsfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKCFzdGF0ZS50YWdOYW1lICYmIHN0cmVhbS5zb2woKSkKICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwoKICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdHlwZSA9IG51bGw7CiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICBpZiAoKHN0eWxlIHx8IHR5cGUpICYmIHN0eWxlICE9ICJjb21tZW50IikgewogICAgICAgIHNldFN0eWxlID0gbnVsbDsKICAgICAgICBzdGF0ZS5zdGF0ZSA9IHN0YXRlLnN0YXRlKHR5cGUgfHwgc3R5bGUsIHN0cmVhbSwgc3RhdGUpOwogICAgICAgIGlmIChzZXRTdHlsZSkKICAgICAgICAgIHN0eWxlID0gc2V0U3R5bGUgPT0gImVycm9yIiA/IHN0eWxlICsgIiBlcnJvciIgOiBzZXRTdHlsZTsKICAgICAgfQogICAgICByZXR1cm4gc3R5bGU7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlciwgZnVsbExpbmUpIHsKICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jb250ZXh0OwogICAgICAvLyBJbmRlbnQgbXVsdGktbGluZSBzdHJpbmdzIChlLmcuIGNzcykuCiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZS5pc0luQXR0cmlidXRlKSB7CiAgICAgICAgaWYgKHN0YXRlLnRhZ1N0YXJ0ID09IHN0YXRlLmluZGVudGVkKQogICAgICAgICAgcmV0dXJuIHN0YXRlLnN0cmluZ1N0YXJ0Q29sICsgMTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gc3RhdGUuaW5kZW50ZWQgKyBpbmRlbnRVbml0OwogICAgICB9CiAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQubm9JbmRlbnQpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7CiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSBpblRhZyAmJiBzdGF0ZS50b2tlbml6ZSAhPSBpblRleHQpCiAgICAgICAgcmV0dXJuIGZ1bGxMaW5lID8gZnVsbExpbmUubWF0Y2goL14oXHMqKS8pWzBdLmxlbmd0aCA6IDA7CiAgICAgIC8vIEluZGVudCB0aGUgc3RhcnRzIG9mIGF0dHJpYnV0ZSBuYW1lcy4KICAgICAgaWYgKHN0YXRlLnRhZ05hbWUpIHsKICAgICAgICBpZiAobXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZykKICAgICAgICAgIHJldHVybiBzdGF0ZS50YWdTdGFydCArIHN0YXRlLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gc3RhdGUudGFnU3RhcnQgKyBpbmRlbnRVbml0ICogbXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yOwogICAgICB9CiAgICAgIGlmIChhbGlnbkNEQVRBICYmIC88IVxbQ0RBVEFcWy8udGVzdCh0ZXh0QWZ0ZXIpKSByZXR1cm4gMDsKICAgICAgdmFyIHRhZ0FmdGVyID0gdGV4dEFmdGVyICYmIC9ePChcLyk/KFtcd186XC4tXSopLy5leGVjKHRleHRBZnRlcik7CiAgICAgIGlmICh0YWdBZnRlciAmJiB0YWdBZnRlclsxXSkgeyAvLyBDbG9zaW5nIHRhZyBzcG90dGVkCiAgICAgICAgd2hpbGUgKGNvbnRleHQpIHsKICAgICAgICAgIGlmIChjb250ZXh0LnRhZ05hbWUgPT0gdGFnQWZ0ZXJbMl0pIHsKICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQucHJldjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9IGVsc2UgaWYgKEtsdWRnZXMuaW1wbGljaXRseUNsb3NlZC5oYXNPd25Qcm9wZXJ0eShjb250ZXh0LnRhZ05hbWUpKSB7CiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodGFnQWZ0ZXIpIHsgLy8gT3BlbmluZyB0YWcgc3BvdHRlZAogICAgICAgIHdoaWxlIChjb250ZXh0KSB7CiAgICAgICAgICB2YXIgZ3JhYmJlcnMgPSBLbHVkZ2VzLmNvbnRleHRHcmFiYmVyc1tjb250ZXh0LnRhZ05hbWVdOwogICAgICAgICAgaWYgKGdyYWJiZXJzICYmIGdyYWJiZXJzLmhhc093blByb3BlcnR5KHRhZ0FmdGVyWzJdKSkKICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQucHJldjsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIHdoaWxlIChjb250ZXh0ICYmICFjb250ZXh0LnN0YXJ0T2ZMaW5lKQogICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7CiAgICAgIGlmIChjb250ZXh0KSByZXR1cm4gY29udGV4dC5pbmRlbnQgKyBpbmRlbnRVbml0OwogICAgICBlbHNlIHJldHVybiAwOwogICAgfSwKCiAgICBlbGVjdHJpY0lucHV0OiAvPFwvW1xzXHc6XSs+JC8sCiAgICBibG9ja0NvbW1lbnRTdGFydDogIjwhLS0iLAogICAgYmxvY2tDb21tZW50RW5kOiAiLS0+IiwKCiAgICBjb25maWd1cmF0aW9uOiBtYXJrZG93bkNvbmZpZy5odG1sTW9kZSA/ICJodG1sIiA6ICJ4bWwiLAogICAgaGVscGVyVHlwZTogbWFya2Rvd25Db25maWcuaHRtbE1vZGUgPyAiaHRtbCIgOiAieG1sIgogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3htbCIsICJ4bWwiKTsKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94bWwiLCAieG1sIik7CmlmICghQ29kZU1pcnJvci5taW1lTW9kZXMuaGFzT3duUHJvcGVydHkoInRleHQvaHRtbCIpKQogIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9odG1sIiwge25hbWU6ICJ4bWwiLCBodG1sTW9kZTogdHJ1ZX0pOwoKfSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/Markdown.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgpjbGFzcyBNYXJrZG93biBleHRlbmRzIENNU01vZHVsZQp7ICAgCglwcm90ZWN0ZWQgJF9sb2FkZWQ7CgoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCk7CiAgICAgICAgJHRoaXMtPl9sb2FkZWQgPSBmYWxzZTsKCiAgICAgICAgJHNtYXJ0eSA9IENtc0FwcDo6Z2V0X2luc3RhbmNlKCktPkdldFNtYXJ0eSgpOwogICAgICAgIGlmKCAhJHNtYXJ0eSApIHJldHVybjsKICAgICAgICAKICAgICAgICAkc21hcnR5LT5yZWdpc3Rlcl9tb2RpZmllcignbWFya2Rvd24nLCBhcnJheSgkdGhpcywgJ3BhcnNlJykpOwogICAgfQoJZnVuY3Rpb24gR2V0TmFtZSgpIHtyZXR1cm4gJ01hcmtkb3duJzt9CglmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKSB7cmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTt9CglmdW5jdGlvbiBHZXRWZXJzaW9uKCkge3JldHVybiAnMS4wJzt9CglmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKSB7cmV0dXJuIGFycmF5KCk7fQoJZnVuY3Rpb24gR2V0SGVscCgpIHtyZXR1cm4gJHRoaXMtPkxhbmcoJ2hlbHAnKS5NYXJrZG93bjo6ZXhlY19tYXJrZG93bihmaWxlX2dldF9jb250ZW50cyhfX0RJUl9fLiIvUkVBRE1FLm1kIikpO30KCWZ1bmN0aW9uIEdldEF1dGhvcigpIHtyZXR1cm4gJ0plZmYgQm9zY2ggKGFqcHJvZykgZm9ya2VkIGZyb20gS2V2aW4gRGFuZXppcyAoYWthMkJlc3MpJzt9CglmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpIHtyZXR1cm4gJ2plZmYgYXQgYWpwcm9ncmFtbWluZyBkb3QgY29tJzt9CglmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKSB7cmV0dXJuICR0aGlzLT5MYW5nKCdjaGFuZ2Vsb2cnKTt9CglmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkge3JldHVybiAkdGhpcy0+TGFuZygnbW9kZGVzY3JpcHRpb24nKTt9CglmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpIHtyZXR1cm4gIjEuMTEuMTMiO30KCWZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkge3JldHVybiBmYWxzZTt9CglmdW5jdGlvbiBIYXNBZG1pbigpIHtyZXR1cm4gdHJ1ZTt9CglmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKSB7cmV0dXJuICdleHRlbnNpb25zJzt9CglmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKSB7cmV0dXJuIHRydWU7fQoJZnVuY3Rpb24gSW5pdGlhbGl6ZUZyb250ZW5kKCkge30KCWZ1bmN0aW9uIEluaXRpYWxpemVBZG1pbigpIHt9CglmdW5jdGlvbiBBbGxvd1NtYXJ0eUNhY2hpbmcoKSB7cmV0dXJuIHRydWU7fQoJZnVuY3Rpb24gTGF6eUxvYWRGcm9udGVuZCgpIHtyZXR1cm4gZmFsc2U7fQoJZnVuY3Rpb24gTGF6eUxvYWRBZG1pbigpIHtyZXR1cm4gZmFsc2U7fQoJZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkge3JldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTt9CglmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpIHtyZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3R1bmluc3RhbGwnKTt9CglmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkge3JldHVybiAkdGhpcy0+TGFuZygncmVhbGx5X3VuaW5zdGFsbCcpO30KCWZ1bmN0aW9uIERpc3BsYXlFcnJvclBhZ2UoJG1zZykge2VjaG8gIjxoMz4iLiRtc2cuIjwvaDM+Ijt9ICAKCWZ1bmN0aW9uIENyZWF0ZVN0YXRpY1JvdXRlcygpIHt9CglmdW5jdGlvbiBHZXRNYXJrZG93bkluc3RhbmNlKCRlbmdpbmVUeXBlID0gbnVsbCl7CgkJaWYoZW1wdHkoJGVuZ2luZVR5cGUpKXsKCQkJJGVuZ2luZVR5cGUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdF9lbmdpbmUnLEVuZ2luZTo6JFBBUlNET1dOKTsKCQl9CgkJcmV0dXJuIEVuZ2luZTo6aW5pdEluc3RhbmNlKCRlbmdpbmVUeXBlKTsKCX0KCQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZSgkdGV4dCwkZW5naW5lVHlwZSA9IG51bGwpewoJCXJldHVybiBjbXNtcygpLT5HZXRNb2R1bGVJbnN0YW5jZSgnTWFya2Rvd24nKS0+R2V0TWFya2Rvd25JbnN0YW5jZSgkZW5naW5lVHlwZSktPnByb2Nlc3MoJHRleHQpOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gSGFzQ2FwYWJpbGl0eSgkY2FwYWJpbGl0eSwgJHBhcmFtcyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgaWYoICRjYXBhYmlsaXR5ID09IENtc0NvcmVDYXBhYmlsaXRpZXM6OldZU0lXWUdfTU9EVUxFICkgcmV0dXJuIFRSVUU7CiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQogCiAgICBwdWJsaWMgZnVuY3Rpb24gV1lTSVdZR0dlbmVyYXRlSGVhZGVyKCRzZWxlY3RvciA9IG51bGwsJGNzc25hbWUgPSBudWxsKQogICAgewogICAgICAgIGlmKCR0aGlzLT5fbG9hZGVkKSByZXR1cm47CiAgICAgICAgCiAgICAgICAgaWYoICEkc2VsZWN0b3IgKSAkc2VsZWN0b3IgPSAndGV4dGFyZWEuTWFya2Rvd24nOwoKCQkkY29uZmlnID0gY21zX2NvbmZpZzo6Z2V0X2luc3RhbmNlKCk7CgkJJGRpcmxpc3QgPSBhcnJheSgpOwoJCSRkaXJsaXN0W10gPSAkY29uZmlnWydyb290X3BhdGgnXS4iL21vZHVsZV9jdXN0b20vIi4kdGhpcy0+R2V0TmFtZSgpLicvdGVtcGxhdGVzJzsKCQkkZGlybGlzdFtdID0gX19ESVJfXy4nL3RlbXBsYXRlcyc7CgkJJGZuID0gJyc7CgkJZm9yZWFjaCggJGRpcmxpc3QgYXMgJGRpciApIHsKCQkJJGZuID0gIiRkaXIvd3lzaXd5Zy50cGwiOwoJCQlpZiggaXNfZmlsZSgkZm4pICkgYnJlYWs7CgkJfQoJCSRvdXQgPSBzdHJfcmVwbGFjZSgne3Jvb3RfdXJsfScsICRjb25maWdbJ3Jvb3RfdXJsJ10sIGZpbGVfZ2V0X2NvbnRlbnRzKCRmbikpOwoJCQoJCSR0aGlzLT5fbG9hZGVkID0gdHJ1ZTsKCQlyZXR1cm4gJG91dDsKICAgIH0KfSAKPz4K]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwoKCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZhdWx0X2VuZ2luZScsRW5naW5lOjokUEFSU0RPV04pOwovLyR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwcm9jZXNzX3NtYXJ0eV9zZWN1cml0eScsdHJ1ZSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwcm9jZXNzX3F1b3RlJyx0cnVlKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3Byb2Nlc3NfaW1nJyx0cnVlKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3Byb2Nlc3Nfc2VjdXJpdHknLHRydWUpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgncHJvY2Vzc19jb2RlcHJlJyx0cnVlKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3Byb2Nlc3NfY29udGVudCcsdHJ1ZSk7CgoKLy9SZWdpc3RlciBTbWFydHkgUGx1Z2luCi8vJHRoaXMtPlJlZ2lzdGVyTW9kdWxlUGx1Z2luKFRSVUUpOwoKLy8gRGlzYWJsaW5nIHRoaXMgYmVjYXVzZSBpdCBkb2Vzbid0IHdvcmsgaW4gMi54IHNlcmllcywgcmVnaXN0ZXJpbmcgaXQgb24gbW9kdWxlIGxvYWQgaW5zdGVhZC4KLy8kdGhpcy0+UmVnaXN0ZXJTbWFydHlQbHVnaW4oJ21hcmtkb3duJywnbW9kaWZpZXInLCdleGVjX21hcmtkb3duJywgdHJ1ZSwgMCk7CgovLyBhZGQgYSBDb250ZW50UHJlQ29tcGlsZSBldmVudAokdGhpcy0+QWRkRXZlbnRIYW5kbGVyKCdDb3JlJywnQ29udGVudFByZUNvbXBpbGUnLGZhbHNlKTsKCgoKLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCiR0aGlzLT5BdWRpdCggMCwgCgkgICAgICAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksIAoJICAgICAgJHRoaXMtPkxhbmcoJ2luc3RhbGxlZCcsICR0aGlzLT5HZXRWZXJzaW9uKCkpICk7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwoKCiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCk7CgokdGhpcy0+UmVtb3ZlU21hcnR5UGx1Z2luKCdtYXJrZG93bicpOwokdGhpcy0+UmVtb3ZlRXZlbnRIYW5kbGVyKCdDb3JlJywnQ29udGVudFByZUNvbXBpbGUnKTsKCgovLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1bmluc3RhbGxlZCcpKTsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwoKc3dpdGNoICgkb2xkdmVyc2lvbikgewogICAgY2FzZSAnMS4wLjAnOgogICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwcm9jZXNzX2NvbnRlbnQnLHRydWUpOwogICAgICAgICR0aGlzLT5BZGRFdmVudEhhbmRsZXIoJ0NvcmUnLCdDb250ZW50UHJlQ29tcGlsZScsZmFsc2UpOwoKICAgIGRlZmF1bHQ6CiAgICAgICAgLy8gY29kZS4uLgogICAgICAgIGJyZWFrOwp9Ci8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwokdGhpcy0+QXVkaXQoIDAsICAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICAkdGhpcy0+TGFuZygndXBncmFkZWQnLCAkdGhpcy0+R2V0VmVyc2lvbigpKSk7CgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9IE1hcmtkb3duCnZlcnNpb24gPSAxLjAKZGVzY3JpcHRpb24gPSAKYXV0aG9yID0gSmVmZiBCb3NjaCAoYWpwcm9nKSBmb3JrZWQgZnJvbSBLZXZpbiBEYW5lemlzIChha2EyQmVzcykKYXV0aG9yZW1haWwgPSBqZWZmIGF0IGFqcHJvZ3JhbW1pbmcgZG90IGNvbQptaW5jbXN2ZXJzaW9uID0gMS4xMS4xMwoxMQ==]]></data>
	</file>
	<file>
	  <filename>/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TWFya2Rvd24gTWFya2Rvd24KPT09PT09PT09PT09PT09CgpBIHdyYXBwZXIgZm9yIE1BUktET1dOJ3MgZW5naW5lcyBmb3IgQ21zTWFkZVNpbXBsZSB3aXRoIGRpZmZlcmVudHMgcmVuZGVyaW5nIGVuZ2luZXMuCgoKSWYgaXQncyB0aGUgZmlyc3QgdGltZSB5b3UgcGxheSB3aXRoIE1hcmtkb3duLCBwbGVhc2UgdGFrZSBhIGZldyBtb21lbnQgW3RvIHJlYWQgdGhpc10oaHR0cDovL2RhcmluZ2ZpcmViYWxsLm5ldC9wcm9qZWN0cy9tYXJrZG93bi9zeW50YXgpLgoKCk1hcmtkb3duIE1hcmtkb3duIGlzIGluY2x1ZGUgd2l0aCBhIFdZU0lXWUcgZWRpdG9yLCB0aGlzIGlzIGZvciByZWFsdGltZSBkaXNwbGF5IG9mIHRoZSBtYXJrZG93biB0ZXh0LiBJdCBkb2Vzbid0IHJlbmRlciBvciBjb252ZXJ0IHRvIEhUTUwsIHlvdSB3aWxsIG5lZWQgdHVybiBvbiBBdXRvbWF0aWMgUHJvY2Vzc2luZyBvZiBDb250ZW50IEJsb2NrcyAob24gdGhlIE1hcmtkb3duIE1hcmtkb3duIGFkbWluIHBhZ2UpIG9yIHBhcnNlIHRoZSB0ZXh0IHdpdGggdGhlIFNtYXJ0eSBtYXJrZG93biBtb2RpZmllcihzZWUgYmVsb3cpLgoKCllvdSBjYW4gY2FsbCB0aGUgbWFya2Rvd24gaW4gZGlmZmVyZW50cyB3YXkKCmBgYHBocCAKPD9waHAgCiAgTWFya2Rvd246OmV4ZWNfbWFya2Rvd24oJHRleHQpOwo/PiAKYGBgCm9yIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgTWFya2Rvd24gTWFya2Rvd24gRW5naW5lCgpgYGBwaHAgCjw/cGhwIAogIE1hcmtkb3duOjpleGVjX21hcmtkb3duKCR0ZXh0LEVuZ2luZTo6JE1JQ0hFTEZfRVhUUkEpOwo/PiAKYGBgCm9yIGluIHlvdXIgU21hcnR5IHRlbXBsYXRlcyA6IAoKYGBgc21hcnR5CnskdW50cnVzdGVkVGV4dHxtYXJrZG93bn0KYGBgCgpUaGVyZSBpcyBhbHNvIG1vcmUgb3B0aW9ucyBhdmFpbGFibGUgOiAKYGBgcGhwIAo8P3BocCAKICBlY2hvIEVuZ2luZTo6aW5pdEluc3RhbmNlKEVuZ2luZTo6JFBBUlNET1dOKS0+cHJvY2VzcygkdGV4dCwgdHJ1ZSk7IAogIC8vIHdpbGwgdXNlIFBBUlNET1dOIGFuZCB3aWxsIHByb2R1Y2Ugc29tZSBkZWJ1ZyB0cmFjZS4KPz4gCmBgYApXZSBwcm9wb3NlIDMgZGlmZmVyZW50cyBlbmdpbmUgZm9yIE1hcmtEb3duIDogCgoqICBbRW5naW5lOjokTUlDSEVMRiAodjEuNS4wKV0oaHR0cHM6Ly9naXRodWIuY29tL21pY2hlbGYvcGhwLW1hcmtkb3duKQoqICBbRW5naW5lOjokTUlDSEVMRl9FWFRSQSAodjEuNS4wKV0oaHR0cHM6Ly9naXRodWIuY29tL21pY2hlbGYvcGhwLW1hcmtkb3duKQoqICBbRW5naW5lOjokUEFSU0RPV04gKHYxLjQpXShodHRwczovL2dpdGh1Yi5jb20vZXJ1c2V2L3BhcnNlZG93bi1leHRyYSkKClRoYW5rIHlvdSBlcnVzZXYgYW5kIG1pY2hlbGYgZm9yIHlvdXIgd29yay4=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHN0eWxlPgoKLmJveHsKCWJvcmRlcjoxcHggc29saWQgIzAwMDsKCWJhY2tncm91bmQtY29sb3I6ICNDQ0M7CglwYWRkaW5nOiAxMHB4OwoJYm9yZGVyLXJhZGl1czogNXB4OwoJbWFyZ2luLWJvdHRvbTogNXB4OyAKfQoKLmJveFd7CglwYWRkaW5nOiAxMHB4OwoJbWFyZ2luLWJvdHRvbTogNXB4OyAKfQoKLmJveCBoMnsKCW1hcmdpbi10b3A6IDA7Cn0KCi5ib3ggcHsKCW1hcmdpbjogMTBweCAwOwp9CgouY2hvaWNlewoJY29sb3I6ICM2NjY7CgltYXJnaW4tbGVmdDogMjBweDsKfQouY2hvaWNlOmJlZm9yZXsKCn0KCjwvc3R5bGU+Cgp7JGZvcm1fc2F2ZX0KCjxkaXYgY2xhc3M9J2JveCc+Cgk8aDI+U2VsZWN0IHRoZSBkZWZhdWx0IEVuZ2luZTwvaDI+Cgk8bGFiZWwgZm9yPSd7JGFjdGlvbmlkfWRlZmF1bHRfZW5naW5lJz5EZWZhdWx0IEVuZ2luZTwvbGFiZWw+Cgl7JGl0ZW1zRW5naW5lfQoJPHA+U2VsZWN0IHRoZSBkZWZhdWx0IEVuZ2luZS4gSXQgd2lsbCBoYXZlIHR3byBtYWpvciBjb25zZXF1ZW5jZSA6IHNvbWUgb2YgdGhlbSBhcmUgbW9yZSBjb21wbGV0ZSBhbmQgc29tZSBvZiB0aGVtIGFyZSBtb3JlIGZhc3QgdG8gcHJvY2VzcyB5b3VyIHRleHQuIEhlcmUgbXkgYWR2aWNlPC9wPgoJPHVsPgoJPGxpPjxiPk1JQ0hFTEYgOjwvYj4gQSBub3Qtc28tZmFzdCBlbmdpbmUgKDMuNTE8ZXhwPlsqXTwvZXhwPikgd2hpY2ggaGFzIGxlc3MgcG9zc2liaWxpdGllcyB0aGFuIHRoZSBvdGhlcnM8L2xpPgoJPGxpPjxiPk1JQ0hFTEYgRVhUUkE6PC9iPiBBIHNsb3cgZW5naW5lICg0LjgxPGV4cD5bKl08L2V4cD4pIHdoaWNoIHN1cHBvcnQgYWxsIHRoZSBNYXJrZG93biBsYW5ndWFnZSArIHRoZSBHaXRodWIgZXh0ZW5zaW9uPC9saT4KCTxsaT48Yj5QQVJTRE9XTiA6PC9iPiBBIGZhc3QgZW5naW5lICgwLjkzPGV4cD5bKl08L2V4cD4pIHdoaWNoIHN1cHBvcnQgYWxsIHRoZSBNYXJrZG93biBsYW5ndWFnZSArIHRoZSBHaXRodWIgZXh0ZW5zaW9uPC9saT4KCTwvdWw+Cgk8cD48ZXhwPlsqXTwvZXhwPiA6IHNlY29uZGUocykgZm9yIHByb2Nlc3NpbmcgYSAySyBjYXJhY3RlcnMgc3RyaW5nIDEwMDAgdGltZXMuPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0nYm94Jz4KCTxoMj5BdXRvbWF0aWMgUHJvY2Vzc2luZyBvZiBDb250ZW50IEJsb2NrczwvaDI+Cgk8bGFiZWwgZm9yPSd7JGFjdGlvbmlkfXByb2Nlc3NfY29udGVudDEnPlByb2Nlc3MgQ29udGVudCBCbG9ja3Mgd2l0aCBNYXJrZG93bjwvbGFiZWw+Cgk8aW5wdXQgdHlwZT0ncmFkaW8nIG5hbWU9J3skYWN0aW9uaWR9cHJvY2Vzc19jb250ZW50JyBpZD0neyRhY3Rpb25pZH1wcm9jZXNzX2NvbnRlbnQxJyB2YWx1ZT0nMScge2lmICRwcm9jZXNzX2NvbnRlbnR9Y2hlY2tlZHsvaWZ9PgoJPGxhYmVsIGZvcj0neyRhY3Rpb25pZH1wcm9jZXNzX3NlY3VyaXR5MCc+Tm88L2xhYmVsPgoJPGlucHV0IHR5cGU9J3JhZGlvJyBuYW1lPSd7JGFjdGlvbmlkfXByb2Nlc3NfY29udGVudCcgaWQ9J3skYWN0aW9uaWR9cHJvY2Vzc19jb250ZW50MCcgdmFsdWU9JzAnIHtpZiAhJHByb2Nlc3NfY29udGVudH1jaGVja2Vkey9pZn0+Cgl7bGl0ZXJhbH0KCQk8cD5TZWxlY3RpbmcgdGhpcyB3aWxsIGhhdmUgYWxsIHRoZSB7Y29udGVudH0gd2l0aCB0aGUgdHlwZSBvZiAiQ29udGVudCIgcHJvY2VzcyB3aXRoIE1hcmtkb3duIGJlZm9yZSBwcm9jZXNzIHRocnUgU21hcnR5LjwvcD4KCQk8cD5JZiB5b3Ugc2VsZWN0ICJubyIgd2lsbCBuZWVkIHRvIHVzZSB0aGUgTWFya2Rvd24gbW9kaWZpZXIgdG8gcHJvY2VzcyBpdCB3aGljaCB3aWxsIGJlIGFmdGVyIGl0IGlzIHByb2Nlc3Mgd2l0aCBTbWFydHkgLS0geyRtYWluX2NvbnRlbnR8bWFya2Rvd259LjwvcD4KCXsvbGl0ZXJhbH0KPC9kaXY+CjxkaXYgY2xhc3M9J2JveCc+Cgk8aDI+U2VsZWN0IGEgU2VjdXJpdHkgUG9saWN5IGFnYWluc3QgTWFya2Rvd24ncyB2dWxuZXJhYmlsaXRpZXM8L2gyPgoJPHA+PGI+Rm9yIFNlY3VyaXR5IHJlYXNvbjwvYj4sIHlvdSBjYW4ndCB0cnVzdCB5b3VyIHZpc2l0b3JzIHNvIHlvdSBzaG91bGRuJ3QgcHJvY2VzcyBkYXRhIGJsaW5kbHkgd2l0aCB0aGlzIG1vZHVsZS4gSWYgeW91IGRvbid0IHRydXN0IHRoZSBlZGl0b3JzLCB5b3UgY2FuIGFjdGl2YXRlIHRoaXMgb3B0aW9uIHdoaWNoIHdpbGwgdHJ5IHRvIGltcHJvdmUgdGhlIHNlY3VyaXR5IG9mIHRoZSBtYXJrZG93bnMuIEl0IHdpbGwgZGVzYWN0aXZhdGUgSmF2YXNjcmlwdCwgSWZyYW1lIGFuZCBvdGhlciBpbiB0aGUgTWFya2Rvd24gdGV4dC4gSWYgeW91IGFjdGl2YXRlIHRoaXMgb3B0aW9uLCB5b3Ugc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBuZXh0IG9wdGlvbnM8L3A+CgkKCTxkaXYgY2xhc3M9J2Nob2ljZSc+Cgk8bGFiZWwgZm9yPSd7JGFjdGlvbmlkfXByb2Nlc3Nfc2VjdXJpdHkxJz5BY3RpdmUgdGhlIHNlY3VyaXR5PC9sYWJlbD4KCTxpbnB1dCB0eXBlPSdyYWRpbycgbmFtZT0neyRhY3Rpb25pZH1wcm9jZXNzX3NlY3VyaXR5JyBpZD0neyRhY3Rpb25pZH1wcm9jZXNzX3NlY3VyaXR5MScgdmFsdWU9JzEnIHtpZiAkcHJvY2Vzc19zZWN1cml0eX1jaGVja2Vkey9pZn0+Cgk8bGFiZWwgZm9yPSd7JGFjdGlvbmlkfXByb2Nlc3Nfc2VjdXJpdHkwJz5Ob3BlPC9sYWJlbD4KCTxpbnB1dCB0eXBlPSdyYWRpbycgbmFtZT0neyRhY3Rpb25pZH1wcm9jZXNzX3NlY3VyaXR5JyBpZD0neyRhY3Rpb25pZH1wcm9jZXNzX3NlY3VyaXR5MCcgdmFsdWU9JzAnIHtpZiAhJHByb2Nlc3Nfc2VjdXJpdHl9Y2hlY2tlZHsvaWZ9PgoJPC9kaXY+Cgk8cD5JZiB5b3UndmUgYWN0aXZhdGVkIHRoZSBTZWN1cml0eSBPcHRpb24sIGl0IHdpbGwgYnJlYWsgc29tZSBzdHVmZiwgYnV0IGRvbid0IHBhbmljLCBpZiB5b3UgY2hlY2tlZCB0aGVzZSBvcHRpb25zLCBldmVyeXRoaW5nIHdpbGwgYmUgYWxyaWdodC4gPC9wPgoKCTxibG9ja3F1b3RlPgoJPHA+PGI+IzE8L2I+IDogaXQgd2lsbCBmaXggdGhlICZsdDtxdW90ZS8mZ3Q7IHRhZyBpbiBNYXJrZG93bjwvcD4KCQoJPGRpdiBjbGFzcz0nY2hvaWNlJz4KCTxsYWJlbCBmb3I9J3skYWN0aW9uaWR9cHJvY2Vzc19xdW90ZTEnPlBhdGNoIG1lICE8L2xhYmVsPgoJPGlucHV0IHR5cGU9J3JhZGlvJyBuYW1lPSd7JGFjdGlvbmlkfXByb2Nlc3NfcXVvdGUnIGlkPSd7JGFjdGlvbmlkfXByb2Nlc3NfcXVvdGUxJyB2YWx1ZT0nMScge2lmICRwcm9jZXNzX3F1b3RlfWNoZWNrZWR7L2lmfT4KCTxsYWJlbCBmb3I9J3skYWN0aW9uaWR9cHJvY2Vzc19xdW90ZTAnPk5vcGU8L2xhYmVsPgoJPGlucHV0IHR5cGU9J3JhZGlvJyBuYW1lPSd7JGFjdGlvbmlkfXByb2Nlc3NfcXVvdGUnIGlkPSd7JGFjdGlvbmlkfXByb2Nlc3NfcXVvdGUwJyB2YWx1ZT0nMCcge2lmICEkcHJvY2Vzc19xdW90ZX1jaGVja2Vkey9pZn0+Cgk8L2Rpdj4KCgoJPHA+PGI+IzI8L2I+IDogaXQgd2lsbCBmaXggdGhlICZsdDtpbWcgLyZndDsgKyAmbHQ7YSAvJmd0OyB0YWcgaW4gTWFya2Rvd248L3A+CgoJPGRpdiBjbGFzcz0nY2hvaWNlJz4KCTxsYWJlbCBmb3I9J3skYWN0aW9uaWR9cHJvY2Vzc19pbWcxJz5QYXRjaCBtZSAhPC9sYWJlbD4KCTxpbnB1dCB0eXBlPSdyYWRpbycgbmFtZT0neyRhY3Rpb25pZH1wcm9jZXNzX2ltZycgaWQ9J3skYWN0aW9uaWR9cHJvY2Vzc19pbWcxJyB2YWx1ZT0nMScge2lmICRwcm9jZXNzX2ltZ31jaGVja2Vkey9pZn0+Cgk8bGFiZWwgZm9yPSd7JGFjdGlvbmlkfXByb2Nlc3NfaW1nMCc+Tm9wZTwvbGFiZWw+Cgk8aW5wdXQgdHlwZT0ncmFkaW8nIG5hbWU9J3skYWN0aW9uaWR9cHJvY2Vzc19pbWcnIGlkPSd7JGFjdGlvbmlkfXByb2Nlc3NfaW1nMCcgdmFsdWU9JzAnIHtpZiAhJHByb2Nlc3NfaW1nfWNoZWNrZWR7L2lmfT4KCTwvZGl2PgoKCgk8cD48Yj4jMzwvYj4gOiBpdCB3aWxsIGZpeCB0aGUgJmx0O2NvZGUgLyZndDsgKyAmbHQ7cHJlIC8mZ3Q7IHRhZyBhbmQgdGhlaXIgY29udGVudCBpbiBNYXJrZG93bjwvcD4KCgk8ZGl2IGNsYXNzPSdjaG9pY2UnPgoJPGxhYmVsIGZvcj0neyRhY3Rpb25pZH1wcm9jZXNzX2NvZGVwcmUxJz5QYXRjaCBtZSAhPC9sYWJlbD4KCTxpbnB1dCB0eXBlPSdyYWRpbycgbmFtZT0neyRhY3Rpb25pZH1wcm9jZXNzX2NvZGVwcmUnIGlkPSd7JGFjdGlvbmlkfXByb2Nlc3NfY29kZXByZTEnIHZhbHVlPScxJyB7aWYgJHByb2Nlc3NfY29kZXByZX1jaGVja2Vkey9pZn0+Cgk8bGFiZWwgZm9yPSd7JGFjdGlvbmlkfXByb2Nlc3NfY29kZXByZTAnPk5vcGU8L2xhYmVsPgoJPGlucHV0IHR5cGU9J3JhZGlvJyBuYW1lPSd7JGFjdGlvbmlkfXByb2Nlc3NfY29kZXByZScgaWQ9J3skYWN0aW9uaWR9cHJvY2Vzc19jb2RlcHJlMCcgdmFsdWU9JzAnIHtpZiAhJHByb2Nlc3NfY29kZXByZX1jaGVja2Vkey9pZn0+Cgk8L2Rpdj4KPC9ibG9ja3F1b3RlPgo8L2Rpdj4KeyoKPGRpdiBjbGFzcz0nYm94Jz4KCTxoMj5TZWxlY3QgYSBTZWN1cml0eSBQb2xpY3kgYWdhaW5zdCBTbWFydHkncyB2dWxuZXJhYmlsaXRpZXM8L2gyPgoJPHA+QW5vdGhlciBvcHRpb24gPGI+Zm9yIFNlY3VyaXR5IDogPC9iPnRydXN0IG1lIHlvdSB3b3VsZG4ndCB3YW50IGxldCB1bnRydXN0ZWQgcGVvcGxlIHVzaW5nIFNtYXJ0eSB0YWdzIGluIHlvdXIgd2Vic2l0ZS4uLiBCdXQganVzdCBpbiBjYXNlLCBpZiB5b3UgdHJ1c3QgdGhlIGVkaXRvcnMgKGkgd29uJ3QgaWYgaSB3ZXJlIHlvdSkgeW91IGNhbiBkaXNhYmxlIHRoaXMgb3B0aW9uPC9wPgoJCgk8ZGl2IGNsYXNzPSdjaG9pY2UnPgoJPGxhYmVsIGZvcj0neyRhY3Rpb25pZH1wcm9jZXNzX3NtYXJ0eTEnPkFjdGl2ZSB0aGUgc2VjdXJpdHk8L2xhYmVsPgoJPGlucHV0IHR5cGU9J3JhZGlvJyBuYW1lPSd7JGFjdGlvbmlkfXByb2Nlc3Nfc21hcnR5X3NlY3VyaXR5JyBpZD0neyRhY3Rpb25pZH1wcm9jZXNzX3NtYXJ0eV9zZWN1cml0eTEnIHZhbHVlPScxJyB7aWYgJHByb2Nlc3Nfc21hcnR5X3NlY3VyaXR5fWNoZWNrZWR7L2lmfT4KCTxsYWJlbCBmb3I9J3skYWN0aW9uaWR9cHJvY2Vzc19zbWFydHkwJz5Ob3BlLCBsZXQgbWUgdXNlIFNtYXJ0eSBUYWdzIGluc2lkZSB0aGUgTWFya2Rvd24gc3R1ZmY8L2xhYmVsPgoJPGlucHV0IHR5cGU9J3JhZGlvJyBuYW1lPSd7JGFjdGlvbmlkfXByb2Nlc3Nfc21hcnR5X3NlY3VyaXR5JyBpZD0neyRhY3Rpb25pZH1wcm9jZXNzX3NtYXJ0eV9zZWN1cml0eTAnIHZhbHVlPScwJyB7aWYgISRwcm9jZXNzX3NtYXJ0eV9zZWN1cml0eX1jaGVja2Vkey9pZn0+Cgk8L2Rpdj4KPC9kaXY+Cip9CgoKPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9J1NhdmUnLz4KCjwvZm9ybT4KCjxkaXYgY2xhc3M9J2JveFcnPgp7JHRleHR9CjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/wysiwyg.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7cm9vdF91cmx9L21vZHVsZXMvTWFya2Rvd24vbGliL2Nzcy9jb2RlbWlycm9yLmNzcyIgLz4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7cm9vdF91cmx9L21vZHVsZXMvTWFya2Rvd24vbGliL2Nzcy91aWtpdC5taW4uY3NzIiAvPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Intyb290X3VybH0vbW9kdWxlcy9NYXJrZG93bi9saWIvY3NzL2h0bWxlZGl0b3IuZ3JhZGllbnQubWluLmNzcyIgLz4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ie3Jvb3RfdXJsfS9tb2R1bGVzL01hcmtkb3duL2xpYi9qcy91aWtpdC5taW4uanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7cm9vdF91cmx9L21vZHVsZXMvTWFya2Rvd24vbGliL2pzL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7cm9vdF91cmx9L21vZHVsZXMvTWFya2Rvd24vbGliL2pzL21hcmtkb3duLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ie3Jvb3RfdXJsfS9tb2R1bGVzL01hcmtkb3duL2xpYi9qcy9vdmVybGF5LmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ie3Jvb3RfdXJsfS9tb2R1bGVzL01hcmtkb3duL2xpYi9qcy9nZm0uanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7cm9vdF91cmx9L21vZHVsZXMvTWFya2Rvd24vbGliL2pzL3htbC5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Intyb290X3VybH0vbW9kdWxlcy9NYXJrZG93bi9saWIvanMvbWFya2VkLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ie3Jvb3RfdXJsfS9tb2R1bGVzL01hcmtkb3duL2xpYi9qcy9odG1sZWRpdG9yLm1pbi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKCSQoJ3RleHRhcmVhLk1hcmtkb3duJykuZWFjaChmdW5jdGlvbigpe1VJa2l0Lmh0bWxlZGl0b3IodGhpcywgeyBtYXJrZG93bjondHJ1ZSd9KX0pCn0pOwo8L3NjcmlwdD4KPHN0eWxlPiNvZV9wYWdlbWVudXtwYWRkaW5nLWxlZnQ6MH0jb2VfbWFpbmFyZWEgdWwudWstaHRtbGVkaXRvci1uYXZiYXItbmF2e2xpc3Qtc3R5bGU6IG91dHNpZGUgbm9uZSBub25lOyBtYXJnaW46MH0uQ29kZU1pcnJvci13cmFwIHByZXtkaXNwbGF5OiBibG9jazt9PC9zdHlsZT4K]]></data>
	</file>
</module>
